Die H-Brücke wird auf ein Board gelötet. Die Elektronik wird etwas erweitert und unterstützt jetzt auch eine einfache Hinderniserkennung. Durch diesen Sensor kann der Roboter bereits auf seine Umgebung reagieren.
Die beiden Pulldown-Widerstände R1 und R2 sorgen dafür, dass der Roboter nicht während der Initialisierungsphase unkontrolliert davonfährt. Ausserdem wurden die beiden mit Transistoren realisierten Inverter durch NOT-Gates aus einem 74HC04 - Chip ersetzt.
Neu ist die Hinderniserkennung mit S1. Das ist nur eine einfache Demonstration. Da mit einem einfachen Schalter das Hindernis erst bei der Kollision erkannt wird, bleibt diese Lösung nicht bestehen.
An Pin 2 (hindernisPin) ist ein Taster angeschlossen, der geschlossen wird, sobald der Roboter auf ein Hindernis trifft.
Dann wird digitalRead(hindernisPin) LOW und der Roboter stoppt. Nach einer Sekunde fährt er ein Stück zurück und hält dann definitiv an.
Damit bei offenem Schalter ein eindeutige Eingangspegel an Pin 2 anliegt, wird mit pinMode(hindernisPin,INPUT_PULLUP) ein interner Pullup - Widerstand aktiviert, der den Eingang auf HIGH zieht.
In den nächsten Videos werden wir uns etwas detaillierter mit der Arduino - Programmierung befassen.
const int geschwindigkeit1Pin = 9; const int richtung1Pin = 8; const int geschwindigkeit2Pin = 10; const int richtung2Pin = 7; const int hindernisPin = 2; const int VOR = HIGH; const int ZURUECK = LOW; void setup() { // Richtungspins initialisieren pinMode(richtung1Pin,OUTPUT); pinMode(richtung2Pin,OUTPUT); pinMode(hindernisPin,INPUT_PULLUP); analogWrite(geschwindigkeit1Pin,0); // Motor anhalten analogWrite(geschwindigkeit2Pin,0); // Motor anhalten delay(5000); // 5 Sekunden warten // vorwärts, halbe Geschwindigkeit digitalWrite(richtung1Pin,VOR); // vorwärts digitalWrite(richtung2Pin,VOR); // vorwärts analogWrite(geschwindigkeit1Pin,127); // halbe Geschwindigkeit analogWrite(geschwindigkeit2Pin,127); // halbe Geschwindigkeit } void loop() { if (digitalRead(hindernisPin) == LOW) { // anhalten analogWrite(geschwindigkeit1Pin,0); // Motor anhalten analogWrite(geschwindigkeit2Pin,0); // Motor anhalten delay(1000); // 1 Sekunden warten // Rückwärts, halbe Geschwindigkeit digitalWrite(richtung1Pin,ZURUECK); // zurück digitalWrite(richtung2Pin,ZURUECK); // zurück analogWrite(geschwindigkeit1Pin,127); // halbe Geschwindigkeit analogWrite(geschwindigkeit2Pin,127); // halbe Geschwindigkeit delay(1000); // 1 Sekunden fahren // anhalten analogWrite(geschwindigkeit1Pin,0); // anhalten analogWrite(geschwindigkeit2Pin,0); // anhalten } }