Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Den Erfassungsbereich von IR-Detektoren verändern

Wir wissen, dass man mit helleren Scheinwerfern oder einer heller leuchtenden Taschenlampe noch Objekte in der Dunkelheit erkennen kann, die sehr weit weg sind.

Wenn man nun die IR LEDs des BoE Shield-Bot Arduino ebenfalls heller leuchten lässt, wird sein Erfassungsbereich vergrößert.

Mit Hilfe eines kleineren Widerstandes im IR-LED Schaltkreis kann der Durchlasstrom durch die Diode erhöht und damit ihre Leuchtstärke erhöht werden (die wir mit unseren Augen allerdings nicht wahrnehmen können). In dieser Übung untersuchen wir den Effekt, den Widerstände mit unterschiedlichen Werten auf eine rote LED und eine IR-LED haben.

Material

2x  Widerstand, 470 Ohm (gelb-violett-braun)

2x  Widerstand, 220 Ohm (rot-rot-braun)

2x  Widerstand, 1kOhm (braun-schwarz-rot)

2x  Widerstand, 4,7kOhm (gelb-violett-rot)

Aufgaben
  • Übertrage das Programm IR_LEDlinks.ino in den Editor und speichere es ab.
  • Starte das Programm und überzeuge dich, dass die LED an P8 mit dem Vorwiderstand von 220Ohm  leuchtet.
  • Tausche nacheinander den Vorwiderstand durch die Widerstandswerte 470Ohm, 1kOhm und 4,7kOhm aus und beschreibe, ob sich die Helligkeit der LED verändert hat und wenn ja, ob sie heller oder dunkler geworden ist.

Das Programm IR_LEDlinks.ino

2 - Den IR Erfassungsbereich ausmessen

Wir haben eben herausgefunden, dass ein kleinerer Vorwiderstand zu einer stärker leuchtenden LED und damit zu einer besseren Ausleuchtung der Umgebung führt. Als Analogieschluss sollte dann auch eine IR LED heller leuchten und die Umgebung stärker ausleuchten. Damit würde sich auch die Reichweite der LED erhöhen.

Aufgaben
  • Lade über Datei - Öffnen aus dem Hauptmenü des Editors die Datei IR_Feldtest.ino und starte es.
  • Überzeuge dich davon, dass beide LED-Schaltkreise fehlerfrei arbeiten bevor du weiter liest.

 

 

 

 

 

 

 

 

 

 

Abbildung 1

BoE Shield-Bot Arduino mit zwei IR-Sendern, zwei IR-Empfängern, zwei Indikator-LEDs und einem Piezo-Lautsprecher als Signalgeber.

Aufgaben
  • Messe mit Hilfe eines Lineals den größtmöglichen Abstand aus, bis zu dem eine IR LED ein Stück Papier (DIN A4) noch erkennt. Trage den Wert in die unten stehende Tabelle ein.
  • Tausche die 2 kOhm Vorwiderstände an P2 und P9 gegen 4,7 kOhm Widerstände aus.
  • Bestimme auch hierfür den maximalen Abstand, bis zu dem das Papier von den Detektoren noch erkannt wird. Trage den Wert in die Tabelle ein.
  • Wiederhole die Messungen mit Widerständen der Werte 1 kOhm, 470 Ohm und 220 Ohm. Sollte der Detektor bei den kleineren Widerstandswerten die Tischoberfläche als Hindernis erkennen, stelle den Roboter so an die Tischkante, dass die IR Detektoren von ihr wegzeigen und bestimme dann den größtmöglichen Abstand zwischen Papier und Detektor. Trage die Werte in die Tabelle ein.

Meine Messwerte

Aufgaben
  • Am Ende dieser Übung ersetze in den beiden IR Detektor Schaltkreisen die Vorwiderstände der IR LEDs durch 2 kOhm Widerstände.
  • Bevor die nächste Übung begonnen wird, teste mit dem Programm IR_Feldtest.ino, ob die beiden Detektoren fehlerfrei arbeiten.

3 - Objekterkennung und Kollisionsvermeidung

Die Rückmeldungen der IR Detektoren sind vergleichbar mit denen der Whiskers. Wird kein Objekt detektiert, dann wird eine 1 zurückgegeben, wird ein Objekt erkannt eine 0. In der folgenden Übung wird das Programm Whiskers_felderkundung.ino so verändert, dass es mit den IR Detektoren arbeitet.

Dazu sind ein paar Veränderungen und Ergänzungen notwendig. Füge die Funktion irDetect hinzu.

Ersetze die Zuweisung digitalRead

durch die Zuweisung irDetect

und ersetze alle Instanzen von wLinks und wRechts durch irLinks und irRechts.

Aufgaben
  • Lade das Programm Whiskers_felderkundung.ino und speichere es unter dem neuen Namen IR_felderkundung.ino ab.
  • Verändere das Programm so wie unten abgebildet.
  • Speichere das fertige Programm erneut ab und lade es in den Arduino.
  • Löse den BoE Shield-Bot vom USB-Kabel.
  • Verbinde den Roboter mit den Batterien und bewege den Power-Schalter in Position 2.
  • Platziere den BoE Shield-Bot Arduino so, dass er den Raum erkunden kann und Hindernisse umfährt.
  • Überprüfe, ob er sich ähnlich wie der Robot mit Whiskers verhält, mit dem Unterschied, dass er die Hindernisse nicht berührt, sondern ihnen schon vorher ausweicht.

Das Programm IR_felderkundung.ino

4 - IR Hochleistungsnavigation

Die vordefinierten Fahrmanöver aus dem Programm IR_felderkundung.ino haben sich für den Robboter beim Einsatz der Whiskers ganz gut gemacht, sind aber viel zu langsam bei IR Sensoren. Das liegt u.a. daran, dass die Fühler erst nach dem Kontakt mit einem Objekt den Befehl zum Rücksetzen auslösen und dann das Objekt umfahren. Mit den IR Detektoren erkennt der BoE-Shield-Bot Arduino bereits vorher ein Objekt und sucht sich dann einen passenden Weg um das Objekt herum.

 

Erhöhung der Abtastrate zur Vermeidung von Zusammenstößen

Die Dauer aller Fahrmanövers lässt sich auf 20ms reduzieren, oder mit anderen Worten, ca. 40 mal pro Sekunde überprüft das Programm über die IR-Detektoren die Umgebung des Roboters auf vor ihm befindliche Objekte. Während der BoE Shield Bot sich durch das Gelände/den Parcours bewegt, führt er eine Reihe von Bewegungen aus, um Hindernissen auszuweichen und nicht mit ihnen zu kollidieren. Mit diesem Ansatz nähert er sich einem Objekt so nah wie nötig und findet dadurch frühzeitig einen Weg um das Hindernis. Die ausgeführte Bewegung ist jetzt wesentlich komplexer als in den vorherigen Programmbeispielen. Probiere es mit dem folgenden Programm IR_SchnelleBewegung.ino aus.

Programm IR_SchnelleBewegung

Wie arbeitet das Programm IR_SchnelleBewegung.ino

In diesem Programm benutzen wir die Funktion bewegung aus dem Programm Licht_Navigation.ino. Die Funktion enthält drei Übergabeparameter: speedLinks, speedRechts und msZeit. Beide speed Parameter liegen bei 200 für volle Vorwärtsbewegung beziehungsweise -200 für volle Rückwärtsbewegung und mit der Einstellung von msZeit auf einen Wert von 20, wird jede Bewegung in der Schleifenmethode loop() für 20ms ausgeführt.

 

Jetzt kommst du!

Aufgaben
  • Speichere das Programm IR_SchnelleBewegung.ino unter dem neuen Namen IR_SchnelleBewegungMeins.ino.
  • Füge Programmzeilen hinzu, die die LEDs blinken lassen, sobald ein Objekt erkannt wurde.
  • Versuche die Werte von speedLinks und speedRechts so zu verändern, dass der BoE Shield Bot Arduino alle Bewegungen nur noch mit halber Geschwindigkeit ausführt. Die bisherige Einstellung von 200 und -200 bedeuten für die Servos einen Overkill, den es auf Dauer zu vermeiden gilt.

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf