AlphaBot: Ultraschall Notbremse: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
|||
(16 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 6: | Zeile 6: | ||
* Wir haben Abstandswerte gemessen. | * Wir haben Abstandswerte gemessen. | ||
* Wir sind vorwärts gefahren und haben 20 cm eine Notbremsung gemacht. | * Wir sind vorwärts gefahren und haben 20 cm eine Notbremsung gemacht. | ||
[[Datei:Notbremse.jpg|right|200px|Abb. 1: Programmablaufplan]]<br/> | |||
== Quelltext == | == Quelltext == | ||
<div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088"> | <div style="width:1200px; height:300px; overflow:auto; border: 2px solid #088"> | ||
<pre> | <pre> | ||
// | // Bibliotheken einbinden | ||
#include "AlphaBot.h" | #include "AlphaBot.h" | ||
#include <Servo.h> | #include <Servo.h> | ||
// Instanzen erzeugen | |||
AlphaBot Alf = AlphaBot(); // Instanz des AlphaBot erzeugen | |||
Servo AlfServo; // Servo Instanz | |||
// KONSTANTEN deklarieren | // KONSTANTEN deklarieren | ||
const int TRIG = 11; // US Trigger an D11 | const int TRIG = 11; // US Trigger an D11 | ||
const int ECHO = 12; // US Echo an D12 | const int ECHO = 12; // US Echo an D12 | ||
const int nServoPort = 9; // Der Servo liegt auf D9 | const int nServoPort = 9; // Der Servo liegt auf D9 | ||
void initUltraschall() | void initUltraschall() | ||
{ | { | ||
pinMode( | pinMode(TRIG, OUTPUT); // Ultraschall Trigger als Ausgang deklarieren | ||
pinMode( | pinMode(ECHO, INPUT); // Ultraschall Echo als Eingang deklarieren | ||
} | } | ||
float messeUSAbstand() | float messeUSAbstand() // Abstand in cm | ||
{ | { | ||
float | float fUSAbstand = 0; // Rückgabewert initialisieren | ||
float fSignalLaufzeit=0; // Messwert der Signallaufzeit | |||
digitalWrite(TRIG, LOW); // setze Trigger auf LOW für 2μs | digitalWrite(TRIG, LOW); // setze Trigger auf LOW für 2μs | ||
delayMicroseconds(2); | delayMicroseconds(2); | ||
Zeile 40: | Zeile 42: | ||
delayMicroseconds(10); | delayMicroseconds(10); | ||
digitalWrite(TRIG, LOW); // setze Trigger auf LOW | digitalWrite(TRIG, LOW); // setze Trigger auf LOW | ||
fSignalLaufzeit = pulseIn(ECHO, HIGH); // Messung der Signallaufzeit des Impulses | |||
fUSAbstand = fSignalLaufzeit/58; // Umrechnung Laufzeit in s in Abstand in cm | |||
//Y m =(X s * 344)/ 2; | //Y m =(X s * 344)/ 2; | ||
//X s =( 2 * Y m)/ 344; | //X s =( 2 * Y m)/ 344; | ||
//X s = 0.0058 * Y m; | //X s = 0.0058 * Y m; | ||
//cm = us /58 | //cm = us /58 | ||
return | return fUSAbstand; // Rückgabewert | ||
} | } | ||
Zeile 56: | Zeile 58: | ||
Serial.begin(9600); // Serieller Monitor mit 9600 Baud | Serial.begin(9600); // Serieller Monitor mit 9600 Baud | ||
AlfServo.write(90); // Der Servo soll sich an die Mitte drehen | AlfServo.write(90); // Der Servo soll sich an die Mitte drehen | ||
delay(15); | delay(15); // Drehung abwarten | ||
Alf.MotorRun(80,80); // Alf fährt vorwärts; Leistung 100 | Alf.MotorRun(80,80); // Alf fährt vorwärts; Leistung 100 | ||
} | } | ||
Zeile 72: | Zeile 74: | ||
</pre> | </pre> | ||
</div> | </div> | ||
== Hausaufgaben bis zum 8. Termin == | == Hausaufgaben bis zum 8. Termin == |
Aktuelle Version vom 28. April 2022, 15:28 Uhr
Autor: Prof. Dr.-Ing. Schneider
Inhalt des siebten Termins
- Wir haben die Servoansteuerung wiederholt.
- Wir haben den Ultraschall-Sensor mittig ausgerichtet.
- Wir haben Abstandswerte gemessen.
- Wir sind vorwärts gefahren und haben 20 cm eine Notbremsung gemacht.
Quelltext
// Bibliotheken einbinden #include "AlphaBot.h" #include <Servo.h> // Instanzen erzeugen AlphaBot Alf = AlphaBot(); // Instanz des AlphaBot erzeugen Servo AlfServo; // Servo Instanz // KONSTANTEN deklarieren const int TRIG = 11; // US Trigger an D11 const int ECHO = 12; // US Echo an D12 const int nServoPort = 9; // Der Servo liegt auf D9 void initUltraschall() { pinMode(TRIG, OUTPUT); // Ultraschall Trigger als Ausgang deklarieren pinMode(ECHO, INPUT); // Ultraschall Echo als Eingang deklarieren } float messeUSAbstand() // Abstand in cm { float fUSAbstand = 0; // Rückgabewert initialisieren float fSignalLaufzeit=0; // Messwert der Signallaufzeit digitalWrite(TRIG, LOW); // setze Trigger auf LOW für 2μs delayMicroseconds(2); digitalWrite(TRIG, HIGH); // setze Trigger auf HIGH für mind. 10 us delayMicroseconds(10); digitalWrite(TRIG, LOW); // setze Trigger auf LOW fSignalLaufzeit = pulseIn(ECHO, HIGH); // Messung der Signallaufzeit des Impulses fUSAbstand = fSignalLaufzeit/58; // Umrechnung Laufzeit in s in Abstand in cm //Y m =(X s * 344)/ 2; //X s =( 2 * Y m)/ 344; //X s = 0.0058 * Y m; //cm = us /58 return fUSAbstand; // Rückgabewert } void setup() // Einmalige Systeminitialisierung { initUltraschall(); // US initialisieren AlfServo.attach(nServoPort); // Servo verbinden Serial.begin(9600); // Serieller Monitor mit 9600 Baud AlfServo.write(90); // Der Servo soll sich an die Mitte drehen delay(15); // Drehung abwarten Alf.MotorRun(80,80); // Alf fährt vorwärts; Leistung 100 } void loop() // Main Schleife { float USAbstand =0; USAbstand = messeUSAbstand(); // US Abstand messen Serial.println(USAbstand); if (USAbstand<20){ Serial.println("Notbremse"); Alf.Brake(); // Anhalten } }
Hausaufgaben bis zum 8. Termin
- Suche mit dem Ultraschall den Bereich 0°-180° vor dem AlphaBot ab.
- Fahre auf das nächstgelegene Ziel im Sichtbereich zu.
- Stoppe 10 cm vor dem Ziel.
Musterlösung
→ zurück zum Hauptartikel: Projekt Alf