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.

Stacks Image 61448

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
  }
}