Wir haben jetzt Erfahrungen gesammelt mit dem Einsatz von Whiskers, die dazu beitragen, dass der BoE-Shield Bot Arduino ein Objekt erkennt, indem er es rammt. Etwas eleganter und schöner sähe es aus, wenn der Roboter das Objekt vorher erkennt und dann entscheidet, was er weiterhin tun wird. Mit IR-Scheinwerfern gelingt dieses Vorhaben.
In jedem der beiden offenen Zylinder in Abb. 1 befindet sich eine IR-Diode, die ihr Licht wie eine Taschenlampe nach vorne abstrahlt. Als Augen werden zwei IR Empfänger eingesetzt, die dem Arduino HIGH/LOW Signale zurückliefern, je nachdem, ob sie ein Reflexionssignal der Sendediode erhalten oder nicht.
Mit Infrarot (abgekürzt: IR) wird ein für das menschliche Auge nicht sichtbares Licht bezeichnet. Die in dieser Einheit benutzten IR LEDs emittieren infrarotes Licht in einem bestimmten Wellenlängenbereich, ähnlich wie man es im sichtbaren Bereich bei den roten LEDs beobachten kann.
Mit den in dieser Einheit eingesetzten IR Empfängern wird das IR Licht der LEDs nachgewiesen; es funktioniert ähnlich wie wir es schon von den Fototransistoren aus der Einheit Fototransistor kennen. Mit einem Unterschied - die IR Empfänger sind nicht empfindlich für das allgemeine Umgebungslicht, sondern ausschließlich für infrarotes Licht.
Die beim BoE Shield Bot Arduino eingesetzten IR Scheinwerfer ähneln denen, die in Fernbedienungen für Audiogeräte eingebaut sind. In einer Fernbedienung für Fernseher blinkt eine IR LED und überträgt damit eine Nachricht an den Fernsehempfänger. Der dort eingebaute Mikrocontroller wertet die Nachricht in gleicher Weise aus, wie wir es mit dem BoE-Shield Bot Arduino gleich zeigen werden.
Die Lichtsensoren in den meisten Digitalkameras und Mobilephones und Webcams sind in der Lage IR Licht nachzuweisen. Über den Sucher einer Digitalkamera kann man "sehen", ob eine IR LED blinkt oder nicht. Sie erscheint im Sucher als helles weißes Licht.
An den beiden Ecken des Steckbrettes auf dem BoE-Shield Arduino, direkt vorn an der Kante, wird je ein IR Objektdetektor - bestehend aus einer IR LED und einem IR Empfänger - aufgebaut.
Aufgaben |
|
Schaltskizzen und Schaltungsaufbau
Anschlussbelegung von Anode und Kathode bei einer IR LED
Eine Anode hat den längeren Anschlussdraht, der Kathodenanschluss ist kürzer und geht an der abgeflachten Seite in den Plastikkörper über.
Die IR-Empfänger des BoE-Shield Bots sind für IR-Licht von 980nm Wellenlänge und 38kHz ausgelegt. Damit eine IR-LED diese Frequenz erreicht, nutzen wir die Funktion tone().
Der Empfang von IR-Licht erfordert drei Schritte
Die IR-LED blinkt mit einer Frequenz vno 38kHz.
Pause von 1ms oder mehr für den IR-Empfänger, damit er ein LOW-Signal als Antwort auf das 38kHz Signal absetzen kann.
Überprüfe den Status des IR Empfängers auf HIGH- (kein IR Signal) oder LOW-Signal (IR Signal erkannt).
Die drei Schritte für die IR LED an P9 (links) und IR Empfänger an P10 sehen im Programmcode wie folgt aus:
tone(9, 38000, 8); delay(1); int ir = digitalRead(10);
Die Funktion tone arbeitet im Hintergrund und erzeugt eine Rechteckschwingung. Meine eigenen Messungen haben ergeben, dass das Signal bei eingegebenen 8ms tatsächlich nur 1.1ms - 1.2ms dauert. Da der IR Empfänger in zehntel Millisekunden auf das 38kHz Signal antwortet, verhindert ein delay von 1ms, dass der Befehl ir = digitalRead(10) mehrfach ausgeführt wird.
Im folgenden Programm gibt es eine neue Funktion irDetect mit den drei Parametern: ir_LedPin vom Typ int, IR_EmpfaengerPin vom Typ int und frequenz vom Typ long.
int irDetect(int irLedPin, int irEmpfaengerPin, long frequenz)
In der Methode loop() taucht dann die Programmzeile auf
int irLinks = irDetect(9, 10, 38000);
Der Paramter irLedPin wird auf 9 gesetzt, irEmpfaengerPin auf 10 und die Frequenz auf 38000 eingestellt. Die Funktion führt die o.g. drei Schritte zur Objekterkennung aus und gibt eine 1 zurück, falls kein Objekt erkannt wurde und eine 0, wenn kein Objekt erfasst wurde. Der Rückgabewert wird der Variablen irLinks zugewiesen.
Um die Fehleranfälligkeit beim Aufbau der IR Detektoren so gering wie möglich zu halten, konzentrieren wir uns jetzt nur auf den linken Detektor und bringen erst einmal ihn zum Laufen. Wenn alles richtig verdrahtet ist, sollten im Terminalfenster Nullen und Einsen auftauchen. Die 1, wenn kein Objekt erkannt worden ist, die 0, wenn doch.
Aufgaben |
|
Aufgaben |
|
Jetzt kommst du! - Test des rechten IR Detektors
Aufgaben |
|
Das komplette Programm für den Test des rechten IR Detektors habe ich sicherheitshalber noch einmal abgedruckt.
Für einen Feldtest, bei dem man i.d.R. keinen Laptop und damit auch keine Terminalausgabe zur Verfügung hat, kann man auf dem BoE Shield Arduino zusätzlich zwei LED-Schaltkreise aufbauen. Die LEDs müssen dann über das Programm so angesprochen werden, dass sie leuchten, sobald ein Gegenstand von den IR-Detektoren erkannt wird. Sie sind jetzt die Indikatoren, dass die Detektor-Schaltkreise ihre Funktion erfüllen.
Schaltskizzen und kompletter Schaltungsaufbau
Test des Schaltungsaufbaus
Wie man jetzt unschwer erkennen kann, ist die Verdrahtung auf dem Steckbrett schon recht umfangreich und das erhöht die Fehleranfälligkeit. Es ist deshalb immer vorteilhaft, über Testprogramme eine Bauteilegruppen vorher auszutesten, bevor man sich an die nächste Baugruppe heranmacht und sie auf dem Steckbrett aufbaut.
Überzeuge dich mit Hilfe des Programms IR_Feldtest.ino, dass alle Schaltkreise korrekt arbeiten und löse erst ganz zum Schluss das USB-Kabel vom Arduino. Jetzt kann der Feldtest unabhängig vom Laptop und einer Terminalausgabe beginnen. Die LEDs und der Lautsprecher sind dabei die Indikatoren dafür, dass die Detektoren richtig arbeiten.