Objekterkennung mit Infrarotsensor mit Matlab/Simulink und EV3
Autor: Christopher Brömse Betreuer: Prof. Schneider
Aufgabenstellung
In dem Fach Signalverarbeitende Systeme ist den Studierenden jeweils eine Aufgabe zugeteilt. Diese besteht darin, einen Lego EV3 Roboter mittels eines Sensors ca. 5 cm vor einen Karton stoppen zu lassen. Die Programmierung ist mit Matlab/ Simulink durchzuführen. In dieser Aufgabe ist ein Sharp GP2 Distanzsensor zu verwenden.
Sensor
Bei dem Sensor handelt es sich um einen Distanzsensor von Sharp, der aus drei Hauptelementen besteht. Zum einen aus einem optischen Positionssensor, einer Infrarotdiode und einer Signalverarbeitungsschaltung.
Dabei hat der Sensor folgende Spezifikationen:
- Erkennungsbereich von 10 bis 80 cm
- Analoges Ausgangssignal
- Stromaufnahme von 30 mA
- Versorgungsspannung von 4,5 bis 5,5 V
Einer der Vorteile des Sharp GP2 ist, dass dieser gut mit unterschiedlichen Oberflächen funktioniert, unempfindlich gegen Temperaturänderungen sowie für den Dauereinsatz geeignet ist. Der Grund liegt in der Messmethode der Triangulation.
Funktionsweise
Wie bereits beschrieben verwendet der Sharp GP2 das Triangulationsprinzip zur Distanzmessung. Dazu wird ein schmaler Infrarot-Lichtstrahl ausgesendet. Dieser wird mittels einer Infrarotdiode und einer davor platzierten Linse erzeugt. Befindet sich nun ein Objekt in Reichweite, so wird das Licht von diesem reflektiert. Eine zweite Linse fängt dieses Licht ein und leitet es zu einem optischen Positionssensor (engl. PSD) weiter. Der optische Positionssensor gibt nun je nach Position des Lichtstrahls eine unterschiedlich hohe Spannung aus. Das Messprinzip ist gut in Abbildung 2 zu erkennen.[1]
Ausgangssignal
Das Ausgangssignal des Sharp GP2 ist analog. Das heißt, es wird je nach gemessener Distanz eine unterschiedlich hohe Spannung ausgegeben. Des Weiteren ist das Signal anti-proportional. Darunter versteht man, dass die Spannung abnimmt desto weiter die gemessene Distanz ist. Die Kennlinie der Ausgangsspannung des GP2 ist in Abbildung 3 zu erkennen. Diese verdeutlicht auch, dass das Ausgangssignal unabhängig von der Farbe der gemessenen Oberfläche ist. Die Kurve für eine weiße Oberfläche ist deckungsgleich mit der einer grauen.
Die Taktung des Ausgangssignales ist in Abbildung 4 zu finden. Gemessen wird immer in Abständen von 38,3 ms ± 9,6 ms. Durch die Verarbeitung kann eine maximale Verspätung von 5 ms zwischen Messung und Ausgangssignal entstehen.[2]
Signalverarbeitung
Im folgenden wird die Signalverarbeitung vorgestellt. Dabei wird der Signalfluss vom Sensor bis zum EV3 erläutert.
Verbindung Arduino mit Sensor
Wie in der Abbildung 6 zu erkennen ist, wird der Sharp GP2 mittels drei Verbindungen an den Arduino UNO angeschlossen. Dabei handelt es sich um die Stromversorgung (VCC), die Masse (GND) und das Ausgangssignal (Vout). Da es sich bei dem Ausgangssignal um ein analoges und antiproportionales Signal handelt wird dieses mit dem Arduino verarbeitet. Eingelesen wird das analoge Signal des Sensors mit einem 10 Bit analog digital Konverter. Dabei handelt es sich um einen Wandler der die sukzessive Approximation zur Realisierung anwendet. Hierdurch werden analoge Eingangssignale mit den Werten zwischen 0 und 5 V in integer Werte von 0 und 1023 abgebildet. Hierdrüber lässt sich auch die Auflösung bestimmen. 5 Volt dividiert durch 1024 Einheiten ergibt eine Auflösung von 4,9 mV pro Einheit. Abgetastet wird hierbei jeweils 10.000-mal die Sekunde.[3]
Nach dem Einlesen des Signales muss dieses noch in einen Abstand umgerechnet werden. Auch dieses wird mit dem Arduino und dem darauf befindlichen Programm durchgeführt. Dazu wird eine Funktion verwendet die aus dem Graphen in Abbildung 3 erstellt wurde. Diese ist wie folgt definiert:
Abstand = ( 6787 / (analoger Wert - 3)) – 3.
Verbindung Arduino PC/ PC EV3
Zunächst wurde versucht eine Verbindung zwischen Arduino und EV3 direkt über I2C zu realisieren. Hierzu wurde mittels des Arduino eine I2C-Schnittstelle aufgebaut und die Abstandsdaten an den EV3 übermittelt. Hierbei konnte allerdings nur mit der Lego EV3 Software ein geeigneter Baustein zum Auslesen der I2C Schnittstelle implementiert werden. Hilfreich war hierfür der Wiki-Eintrag „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“[4]. Die Abstandswerte konnten somit auf dem EV3 ausgegeben werden. Allerdings ist eine Vorgabe dieses Projekts, dass die Abstandswerte nicht mit der Lego EV3 Software verarbeitet werden sollen sondern mit Matlab/ Simulink. Die Schwierigkeit hierbei besteht darin, dass es zwar ein Support Package für Matlab/ Simulink und den EV3 gibt, aber keine Bausteine für eine I2C Verbindung.
Trotz intensiver Recherchen und Programmieransätzen ist es allerdings nicht möglich eine I2C Schnittstelle mit Matlab/ Simulink für den EV3 zu programmieren.
Aus diesem Grund wird eine Verbindung mittels USB zwischen Arduino, PC und EV3 verwendet (Abbildung 5). Dabei werden mit dem PC und dem drauf laufenden Matlab Programm die Abstandswerte von dem Arduino ausgelesen und mit Vorgabewerten verglichen. Auch das Ansteuern des EV3 wird mit dem Programm durchgeführt. Ein Programmablaufplan ist in nachfolgender Abbildung zu erkennen.
Analog-Digital-Umsetzer
Wie bereits bei der Signalverarbeitung beschrieben, verwendet der Arduino einen sukzessiven approximator als Analog-Digital-Wandler. Dabei basiert dieser auf dem Vergleich der analogen Eingangsspannung mit einer Referenzspannung und kann auch als Wägeverfahren bezeichnet werden. Der Vergleich erfolgt hierbei schrittweise und sich immer wiederholend. Dabei wird die Referenzspannung so geändert, dass sie sich immer näher an die Eingangsspannung annähert. Dabei ist der sukzessive approximator wie folgt aufgebaut:
![](/wiki/images/thumb/1/17/Blockschaltbild.png/200px-Blockschaltbild.png)
Ist der erste Vergleich durch den Komparator durchgeführt, wird die Referenzspannung in einem größeren Digitalschritt an die Spannung des Analogsignals angepasst. Im zweiten Schritt wird dann die Referenzspannung verringert. In dem darauf folgenden Vergleich wird wiederum die Referenzspannung verringert usw. Für jeden Vergleich ist demnach ein Taktzyklus erforderlich. Im Falle des Arduino mit 10 Bit, sind somit 10 Taktzyklen erforderlich.
![](/wiki/images/thumb/2/29/Prinzip.png/200px-Prinzip.png)
Im Beispiel der Abbildung 9 ist die Eingangsspannung niedriger als die Vergleichsspannung des A/D-Wandlers und somit wird das Most Significat Bit (MSB) auf den Lo-Wert (0) gesetzt. Bei höherer Eingangsspannung dann auf den Hi-Wert (1). Im nächsten Schritt wird die Vergleichsspannung halbiert. Dadurch ist diese niedriger als die Eingangsspannung und das folgende Bit wird auf „1“ gesetzt. Daraufhin wird die Referenzspannung erneut halbiert und wiederum verglichen. Dies wird so lange durchgeführt, bis alle Bits gesetzt sind bis zum Least Significant Bit (LSB). Die Auflösung wird dabei durch die Anzahl der gesetzten Bits bestimmt[5].
Bussystem
Digitale Signalverarbeitung
Darstellung der Ergebnisse
Projektplan
Um eine möglichst strukturierte Vorgehensweise zu garantieren, ist nachfolgend ein Projektplan aufgeführt.
![](/wiki/images/thumb/2/29/Prinzip.png/200px-Prinzip.png)
Youtube-Video
Das Ergebnis ist in einem Youtube-Video festgehalten und unter folgenden Link zu finden[1]
Quellen
- ↑ Infrarot-Entfernungsmesser [Robotic & Microcontroller Educational Knowledgepage - Network of Excellence]. URL http://home.roboticlab.eu/de/examples/sensor/ir_distance. – Aktualisierungsdatum: 2013-03-26 – Überprüfungsdatum 2017-06-09
- ↑ Datenblatt Sharp GP2 Datei:DS GP2Y0A21YK0F.pdf
- ↑ Arduino - AnalogRead. URL https://www.arduino.cc/en/Reference/AnalogRead – Überprüfungsdatum 2017-06-21
- ↑ http://193.175.248.52/wiki/index.php/Projekt_32:_Komplexer_Sensor_f%C3%BCr_Lego_Mindstorms_EV3, Abgerufen am 5.05.2017
- ↑ SAR (successive approximation register) :: SAR-Verfahren :: ITWissen.info. URL http://www.itwissen.info/SAR-successive-approximation-register-SAR-Verfahren.html – Überprüfungsdatum 2017-06-26