Objekterkennung mit Ultraschall mit Matlab/Simulink und EV3: Unterschied zwischen den Versionen
(20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 68: | Zeile 68: | ||
pulseIn() | pulseIn() | ||
Mit dem “pulse” Befehl können sowohl “high” als auch “low” Signale an einem Pin eingelesen werden. Mit dem Trigger Impuls von 10 μs wird die Entfernungsmessung gestartet. Nach der Aussendung der Ultraschallwelle wird der pulseIn | Mit dem “pulse” Befehl können sowohl “high” als auch “low” Signale an einem Pin eingelesen werden. Mit dem Trigger Impuls von 10 μs wird die Entfernungsmessung gestartet. Nach der Aussendung der Ultraschallwelle wird der pulseIn(Echo_Pin) auf High gesetzt. Die Zeitmessung startet und dauert solange an, bis der Sensor ein reflektiertes Echo erkennt. Der pulseIn() wird wieder auf low gesetzt und die Zeitmessung stoppt. Die Ausgabe der Zeitmessung erfolgt in Mikrosekunden.<ref>https://www.arduino.cc/en/Reference/PulseIn, Abgerufen am 17.06.2017</ref> | ||
Zeile 122: | Zeile 122: | ||
=='''Umrechnung Zeit in Abstandswert'''== | =='''Umrechnung Zeit in Abstandswert'''== | ||
In dem Arduino Programm muss der gemessene Zeitwert zwischen dem ausgesendeten und empfangenen Ultraschallsignal zur weiteren Verarbeitung in einen Abstandswert umgerechnet werden. In dem Arduino Quellcode wird dazu die Impulsdauer am Ausgang (Echo) durch den Umrechnungsfaktor 29 µs/cm und 2 | In dem Arduino Programm muss der gemessene Zeitwert zwischen dem ausgesendeten und empfangenen Ultraschallsignal zur weiteren Verarbeitung in einen Abstandswert umgerechnet werden. In dem Arduino Quellcode wird dazu die Impulsdauer am Ausgang (Echo) durch den Umrechnungsfaktor 29,1 µs/cm und 2 dividiert. Die nachfolgende Berechnung zeigt, wie der Umrechnungsfaktor (siehe Sensordatenblatt) aus der Geschwindigkeit für Ultraschall (343 m/s bei 20 °C) berechnet wird. Der Entfernungswert ist zusätzlich noch zu halbieren, da nur eine Distanz für die Entfernungsmessung bzw. Abstandskontrolle des EV3 Roboters benötigt wird. Ohne die Division durch 2 würde zur Berechnung der Entfernung, der Zeitwert für den Hin- und Rückweg des Ultraschallsignals in einen Entfernungswert umgerechnet. Der unten berechnete Umrechnungsfaktor gilt aber nur für 20 °C bei trockener Luft. Bei abweichender Temperatur ändert sich der Wert für die Schallgeschwindigkeit und dementsprechend auch der Umrechnungsfaktor. | ||
<br/> | |||
Auszug des Quellcodes für das Arduino Programm zur Umrechnung der Zeit in entsprechende Abstandswerte: distanceCm = duration / 29,1 / 2 ; | |||
<math>v=343 \frac{ m }{ s }</math> | <math>v=343 \frac{ m }{ s }</math> | ||
Zeile 151: | Zeile 153: | ||
=='''Berücksichtigung der Temperatur'''== | =='''Berücksichtigung der Temperatur'''== | ||
Für die Berechnung des Umrechnungsfaktors (siehe „Umrechnung Zeit in Abstandswert“) ist die Temperatur zur Bestimmung der Schallgeschwindigkeit von Bedeutung. Schall bzw. Ultraschall hat ausschließlich bei 20 °C eine Ausbreitungsgeschwindigkeit von 343 m/s. Daher muss zu Beginn jeder Abstandsmessung mit dem EV3 die Temperatur aufgenommen werden, um so die aktuelle Schallgeschwindigkeit zu berechnen. Die nachfolgenden Testläufe zur Bestimmung der Genauigkeit des Sensors fanden bei 20 °C statt. Es folgt die Berechnung für die Schallgeschwindigkeit bei 20 °C. Die Werte für die spezifische Gaskonstante und dem Isentropenexponent für Luft sind der Literatur entnommen. <ref> Alfred | Für die Berechnung des Umrechnungsfaktors (siehe „Umrechnung Zeit in Abstandswert“) ist die Temperatur zur Bestimmung der Schallgeschwindigkeit von Bedeutung. Schall bzw. Ultraschall hat ausschließlich bei 20 °C eine Ausbreitungsgeschwindigkeit von 343 m/s. Daher muss zu Beginn jeder Abstandsmessung mit dem EV3 die Temperatur aufgenommen werden, um so die aktuelle Schallgeschwindigkeit zu berechnen. Die nachfolgenden Testläufe zur Bestimmung der Genauigkeit des Sensors fanden bei 20 °C statt. Es folgt die Berechnung für die Schallgeschwindigkeit bei 20 °C. Die Werte für die spezifische Gaskonstante und dem Isentropenexponent für Luft sind der Literatur entnommen. <ref> Böge, Alfred (Hrsg.): Formeln und Tabellen Maschinenbau, Wiesbaden: Springer Vieweg, 3. korrigierte Aufl. 2012, S.176, DOI 10.1007/978-3-8348-2313-7</ref> Aus der Schallgeschwindigkeit muss im Anschluss der Umrechnungsfaktor (Zeit – Abstandswert) gebildet werden. | ||
κ = Isentropenexponent | κ = Isentropenexponent | ||
Zeile 211: | Zeile 213: | ||
<br/> | <br/> | ||
==='''Programme'''=== | ==='''Programme'''=== | ||
Link für das Arduino Programm zum SVN Projektordner:<ref> | Link für das Arduino Programm zum SVN Projektordner:<ref>http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Anzeige%20der%20Abstandswerte%20auf%20EV3%20Display/Arduino_EV3_Ultrasonic/Arduino_EV3_Ultrasonic.ino | ||
</ref> | |||
Link für das Lego Mindstorms Programm zum SVN Projektordner: <ref> | Link für das Lego Mindstorms Programm zum SVN Projektordner: <ref>http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Anzeige%20der%20Abstandswerte%20auf%20EV3%20Display/EV3_Projekt_I2C.ev3 | ||
</ref> | |||
[[Datei:Aufbau_Version_1.jpg|300px|thumb|links|Abbildung 6: Aufbau EV3 Arduino I2C]] | [[Datei:Aufbau_Version_1.jpg|300px|thumb|links|Abbildung 6: Aufbau EV3 Arduino I2C]] | ||
Zeile 236: | Zeile 240: | ||
Die I2C Verbindung zu dem Arduino wird über den Analogen Pin 5 und Pin 6 realisiert. Die beiden Signalleitungen SCL - Signal Clock (Pin 5) und SDA - Signal Data (Pin 6) sind zusätzlich über zwei Pull-up Widerstände (47 kOhm) an die externe Versorgungsspannung vom EV3 Brick angeschlossen. Diese ziehen den I2C Bus auf 4,7 V. Der Arduino benötigt keine zusätzliche Spannungsquelle, da dieser über VIN und GND (Abb.7) mit dem EV3 verbunden ist. | Die I2C Verbindung zu dem Arduino wird über den Analogen Pin 5 und Pin 6 realisiert. Die beiden Signalleitungen SCL - Signal Clock (Pin 5) und SDA - Signal Data (Pin 6) sind zusätzlich über zwei Pull-up Widerstände (47 kOhm) an die externe Versorgungsspannung vom EV3 Brick angeschlossen. Diese ziehen den I2C Bus auf 4,7 V. Der Arduino benötigt keine zusätzliche Spannungsquelle, da dieser über VIN und GND (Abb.7) mit dem EV3 verbunden ist. | ||
Nachdem kompilieren der Programme, sowohl auf dem Arduino, als auch auf dem EV3, werden die Werte der Abstandsmessung auf dem Display des EV3 ausgegeben. Eine gleichzeitige Verarbeitung der Messdaten zur Ansteuerung des EV3 ließ sich nicht realisieren. | Nachdem kompilieren der Programme, sowohl auf dem Arduino, als auch auf dem EV3, werden die Werte der Abstandsmessung auf dem Display des EV3 ausgegeben. Eine gleichzeitige Verarbeitung der Messdaten zur Ansteuerung des EV3 ließ sich nicht realisieren. Der nachfolgende Abschnitt "Abstandskontrolle des EV3" stellt die Lösung für die Aufgabe. | ||
<br/> | <br/> | ||
=='''Abstandskontrolle des EV3'''== | =='''Abstandskontrolle des EV3'''== | ||
Der zweite Ansatz verfolgt eine andere Herangehensweise zur Umsetzung der Aufgabenstellung. Auch hier werden die zuvor ausgelesenen bzw. berechneten Abstandswerte vom Arduino für die Abstandskontrolle des fahrbaren EV3 Roboters verarbeitet. Die Herangehensweise unterscheidet sich jedoch dahingehend, da nun anstelle der Mindstorms Software Matlab verwendet wird. Zusätzlich findet keine Kommunikation mehr über I2C statt. Bei diesem System sendet der Arduino die Abstandswerte über die USB Schnittstelle an den PC. Mit dem Programm in Matlab können die Abstandswerte ausgelesen und bezüglich der Abstandskontrolle verarbeitet werden. Die Fahr- und Stoppbefehle werden über das Programm Matlab per Bluetooth an den EV3 Brick gesendet (Abb.7). | |||
Der Ultraschallsensor, ist wie bereits beschrieben, mit dem Arduino verkabelt. Mit der seriellen Verbindung per USB, kann eine Verknüpfung zwischen dem Arduino UNO und dem Matlab Programm auf dem Laptop hergestellt werden. Entsprechend der Verbindung ist in das Matlab Skript (Ansteuern_Motor_Arduino.m) der richtige COM-Port einzutragen, damit das Matlab Skript die Daten vom Arduino empfangen kann. Die Abstandswerte werden | Der Ultraschallsensor, ist wie bereits beschrieben, mit dem Arduino verkabelt. Mit der seriellen Verbindung per USB, kann eine Verknüpfung zwischen dem Arduino UNO und dem Matlab Programm auf dem Laptop hergestellt werden. Entsprechend der Verbindung ist in das Matlab Skript (Ansteuern_Motor_Arduino.m) der richtige COM-Port einzutragen, damit das Matlab Skript die Daten vom Arduino empfangen kann. Die Abstandswerte werden als Zeichenkette an Matlab gesendet. Das Programm wandelt die Zeichenkette mit dem string2num Befehl zurück auf die ursprünglichen numerischen Abstandswerte. Das Matlab Skript stellt zusätzlich eine Verbindung mit dem EV3 per Bluetooth her. Auf das RJ12 Kabel kann an dieser Stelle verzichtet werden. Mit dieser Signalverarbeitungskette konnte die Aufgabe gelöst werden (Abb.7). | ||
<br/> | |||
Hinweise: | <br/> | ||
Der serielle Monitor vom Arduino, zum Anzeigen der Abstandswerte, darf nicht parallel zum laufenden Matlab Skript (Ansteuern_Motor_Arduino.m) geöffnet sein. | Hinweise: | ||
Die Bluetooth Verbindung auf dem EV3 Brick muss eingeschaltet sein. Die Bluetooth zu einem Apple Gerät muss deaktiviert werden. | <br/> | ||
Kein Verbindungsaufbau zwischen dem EV3 und Matlab möglich - Aktivieren / Deaktivieren der entsprechenden COM-Ports. | *Der serielle Monitor vom Arduino, zum Anzeigen der Abstandswerte, darf nicht parallel zum laufenden Matlab Skript (Ansteuern_Motor_Arduino.m) geöffnet sein. | ||
*Die Bluetooth Verbindung auf dem EV3 Brick muss eingeschaltet sein. Die Bluetooth zu einem Apple Gerät muss deaktiviert werden. | |||
*Kein Verbindungsaufbau zwischen dem EV3 und Matlab möglich - Aktivieren / Deaktivieren der entsprechenden COM-Ports. | |||
[[Datei:Aufbau_Version_2.png|400px|thumb|links|Abbildung 7: Aufbau EV3 Arduino SRF05]] | [[Datei:Aufbau_Version_2.png|400px|thumb|links|Abbildung 7: Aufbau EV3 Arduino SRF05]] | ||
Zeile 259: | Zeile 265: | ||
<br/> | <br/> | ||
==='''Programme'''=== | ==='''Programme'''=== | ||
Das zugehörige Arduino Programm zur Verarbeitung der Sensorsignale befindet sich im SVN Projektordner:<ref> | Das zugehörige Arduino Programm zur Verarbeitung der Sensorsignale befindet sich im SVN Projektordner:<ref>http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Abstandskontrolle%20des%20EV3/Arduino_Ultrasonic/Arduino_Ultrasonic.ino</ref> | ||
Das Matlab Programm zum Auslesen der Abstandswerte vom Arduino zur weiteren Verarbeitung und Ansteuerung des EV3 befindet sich ebenfalls im SVN Projektordner. Damit eine Signalübertragung an den EV3 per Bluetooth garantiert werden kann müssen alle Dokumente aus diesem Ordner geladen bzw. kopiert werden. Der alleinige Aufruf des Hauptprogramms "Ansteuern_Motor_Arduino" reicht nicht aus:<ref>https://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Abstandskontrolle%20des%20EV3/EV3_matlab%20toolkit/</ref> | Das Matlab Programm zum Auslesen der Abstandswerte vom Arduino zur weiteren Verarbeitung und Ansteuerung des EV3 befindet sich ebenfalls im SVN Projektordner. Damit eine Signalübertragung an den EV3 per Bluetooth garantiert werden kann müssen alle Dokumente aus diesem Ordner geladen bzw. kopiert werden. Der alleinige Aufruf des Hauptprogramms "Ansteuern_Motor_Arduino" reicht nicht aus:<ref>https://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Abstandskontrolle%20des%20EV3/EV3_matlab%20toolkit/</ref> | ||
Zeile 413: | Zeile 419: | ||
*Rauhe Oberflächenstrukturen reflektieren das Ultraschallsignal unregelmäßig zurück (z.B. Schüttgüter). | *Rauhe Oberflächenstrukturen reflektieren das Ultraschallsignal unregelmäßig zurück (z.B. Schüttgüter). | ||
<br/> | <br/> | ||
*Weiche Materialien wie z.B. Filz, Watte, grobe Gewebe, Schaumstoffe | *Weiche Materialien, wie z.B. Filz, Watte, grobe Gewebe, Schaumstoffe absorbieren fast die gesamte Impulsenergie der Ultraschallwellen. | ||
<br/> | <br/> | ||
*Flüssigkeiten werden durch Ultraschall meist immer erkannt. | *Flüssigkeiten werden durch Ultraschall meist immer erkannt. | ||
Zeile 421: | Zeile 427: | ||
=='''Umwelteinflüsse auf den Ultraschallsensor'''== | =='''Umwelteinflüsse auf den Ultraschallsensor'''== | ||
*Umwelteinflüsse, wie Feuchte, Staub und Rauch beeinträchtigen die Messgenauigkeit. Die übliche Umgebung zur Abstandsmessung sollte daher in atmosphärischer Luft sein. Von Ultraschallmessungen in Gasen sollte Abstand genommen werden, | *Umwelteinflüsse, wie Feuchte, Staub und Rauch beeinträchtigen die Messgenauigkeit. Die übliche Umgebung zur Abstandsmessung sollte daher in atmosphärischer Luft sein. Von Ultraschallmessungen in Gasen sollte Abstand genommen werden da, je nach Art des Gases, die Schallgeschwindigkeit abnehmen kann. Dämpfe von speziellen Flüssigkeiten beinträchtigen ebenfalls die Sensorfunktion. | ||
<br/> | <br/> | ||
*Luftbewegungen und Turbulenzen nehmen bis zu einigen m/s keinen Einfluss auf die Ultraschallmessung. | *Luftbewegungen und Turbulenzen nehmen bis zu einigen m/s keinen Einfluss auf die Ultraschallmessung. | ||
Zeile 437: | Zeile 443: | ||
'''Systematischer Fehler''' | '''Systematischer Fehler''' | ||
<br/> | <br/> | ||
Vernachlässigte Einflüsse, wie die Temperatur. Die Berücksichtigung der Temperatur hat einem maßgeblichen Einfluss auf die Messung. Ohne die Aufnahme der aktuellen Messumgebungstemperatur und der Umrechnung der Schallgeschwindigkeit | Vernachlässigte Einflüsse, wie die Temperatur. Die Berücksichtigung der Temperatur hat einem maßgeblichen Einfluss auf die Messung. Ohne die Aufnahme der aktuellen Messumgebungstemperatur und der Umrechnung der Schallgeschwindigkeit ergeben sich systematisch falsche Abstandswerte. | ||
<br/> | <br/> | ||
Aktuelle Version vom 5. Juli 2017, 08:03 Uhr
Autor: Mike Westhoff
Betreuer: Prof. Schneider
→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017
Aufgabenstellung
Im Fach Signalverarbeitende Systeme soll als semesterbegleitende Aufgabe ein Lego Mindstorms Roboter konstruiert werden, der bei Objekterkennung innerhalb eines kritischen Bereichs eine Vollbremsung vollzieht. Bei dem Roboter handelt es sich um einen Lego Mindstorms EV3. Die Objekterkennung wird mittels eines Ultraschallsensors (SRF 05) umgesetzt. Der EV3-Roboter soll solange geradeaus fahren, bis dieser ein Objekt erkennt und vor diesem im Abstand von 5 cm anhalten (Vollbremsung). Als Software darf Matlab oder Simulink verwendet werden. Die Dokumentation der Vorgehensweise und Ergebnisse erfolgt im vorliegenden Wiki-Artikel. Zusätzlich ist ein Video zu erstellen, welches die Funktionsweise darstellt.
Primärsensor
Vorstellung des Sensors
Technische Daten
Tabelle 1: Technische Daten SRF05 [1]
Betriebsspannung | 5 V |
Betriebsmode | Auslöse-Pin und Echo-Pin |
Stromaufnahme | nur 4 mA |
Ultraschallfrequenz | 40 kHz |
Maximale Reichweite | 4 m |
Minimale Reichweite | 1 cm |
Größe | 43 mm x 20 mm x 17 mm |
Auf der Abbildung 1 ist in der Vorderansicht links der Empfänger und rechts der Sender des SRF05 zu sehen. Die Abbildung 2 zeigt die möglichen Anschlüsse bzw. Pins zur Kontaktierung.
Funktionsweise Sensor
Der Ultraschallsensor ist so konzipiert, dass dieser die Entfernung zu einem Objekt mittels Schall misst. Der ausgesendete Schall benötigt zwischen dem Aussenden und der Reflexion des Signals eine bestimmte Zeit. Aus der Zeitdifferenz wird mittels einer Umrechnung ein Distanzwert in cm berechnet (Digitale Vorverarbeitung). Der Distanzwert gibt die Entfernung zwischen dem Sensor und dem Objekt an. Der Ultraschallsensor SRF05 von Devantech besteht aus zwei Grundbausteinen, dem Sender und dem Empfänger. Der Sender arbeitet dabei vergleichsweise wie ein Lautsprecher und der Empfänger wie ein Mikrophon. Dementsprechend besitzen beide Bauteile jeweils eine Membran zum Senden und eine zum Empfangen von Signalen. Es ist weiter anzunehmen, dass der Ultraschallsensor mit dem piezoelektrischen Effekt arbeitet, jedoch konnte dies nicht von dem Sensorhersteller bestätigt werden. Insgesamt besitzt der Ultraschallsensor, wie in Abb.2 zu sehen, vier Anschlüsse. Neben der Spannungsversorgung (5 V) und dem Masseanschluss (GND), gibt es einen Trigger-Pin und einen Echo-Pin. Zu Beginn sorgt ein Auslöseimpuls dafür, dass der Trigger-Pin auf „high“ gesetzt wird. Der Ultraschallsensor generiert nach dem Auslösesignal eine Ultraschallwelle, die eine Frequenz von 40 kHz und acht Perioden hat. Nach der Aussendung des Signals wird der Echo-Pin solange auf „high“ gesetzt bis der erste reflektierte Ultraschallimpuls empfangen wird. Das Echo-Signal gibt demnach an, wie viel Zeit der Ultraschall benötigt, um das vor ihm liegende Objekt zu erreichen und durch Reflexion wieder zum Sensor zurück zu gelangen. Der Echo-Pin wird nach dem Empfang wieder auf „low“ gesetzt. Die Dauer zwischen dem Aussenden und Empfangen kann bei Objekterkennung zwischen 100 µs und 25 ms betragen. Das Zeitdiagramm zur Beschreibung der Funktionsweise des Sensors findet sich in Abbildung 3. Ein Schematic konnte der Hersteller auch auf Anfrage nicht liefern.
Das Datenblatt zum Sensor kann unter folgenden Links abgerufen werden:[4] [5]
Warum wird eine Ultraschallfrequenz mit 40kHz verwendet?
Hersteller: „40 khz is an optimum point of range and sensitivity, the receiver is 40khz resonant so other frequencies won't pass into the circuit, so no need for band pass filtering.”
Die Ultraschallfrequenz mit 40 kHz ist ein optimaler Punkt bzgl. Reichweite und Empfindlichkeit. Bei dieser Resonanzfrequenz hat der Empfänger ebenfalls kein Problem mit Hintergrundgeräuschen bzw. anderen Frequenzen, die zu Störungen führen könnten. Somit gibt es keine Notwendigkeit für entsprechende Filter.
Wie wird mit dem Arduino die Zeit gemessen?
pulseIn() Mit dem “pulse” Befehl können sowohl “high” als auch “low” Signale an einem Pin eingelesen werden. Mit dem Trigger Impuls von 10 μs wird die Entfernungsmessung gestartet. Nach der Aussendung der Ultraschallwelle wird der pulseIn(Echo_Pin) auf High gesetzt. Die Zeitmessung startet und dauert solange an, bis der Sensor ein reflektiertes Echo erkennt. Der pulseIn() wird wieder auf low gesetzt und die Zeitmessung stoppt. Die Ausgabe der Zeitmessung erfolgt in Mikrosekunden.[7]
Warum sind auf dem SRF05 Zeit Diagramm Leerlaufzeiten eingezeichnet?
Hersteller: „[…] there is also a slight delay for slower controllers (from some years back) to start there timing following the trigger pulse.”
Nach heutigen Standards (bzw. leistungsfähigen Mikrocontrollern) ist daher auch die nachfolgende Darstellung in Abbildung 4 zulässig.
Ein Ausschnitt aus dem Kommunikationsprotokoll mit dem Hersteller befindet sich im SVN Projektordner.[8]
Signalvorverarbeitung
Auf der folgenden Abbildung 5 ist die Verkabelung zwischen dem Arduino und dem Ultraschallsensor SRF05 zu sehen. Mit der Verbindung zwischen Ultraschallsensor und dem Arduino lassen sich die Abstandswerte mit der nachfolgenden Berechnung bestimmen.
Anschluss Sensor an den Arduino UNO
Umrechnung Zeit in Abstandswert
In dem Arduino Programm muss der gemessene Zeitwert zwischen dem ausgesendeten und empfangenen Ultraschallsignal zur weiteren Verarbeitung in einen Abstandswert umgerechnet werden. In dem Arduino Quellcode wird dazu die Impulsdauer am Ausgang (Echo) durch den Umrechnungsfaktor 29,1 µs/cm und 2 dividiert. Die nachfolgende Berechnung zeigt, wie der Umrechnungsfaktor (siehe Sensordatenblatt) aus der Geschwindigkeit für Ultraschall (343 m/s bei 20 °C) berechnet wird. Der Entfernungswert ist zusätzlich noch zu halbieren, da nur eine Distanz für die Entfernungsmessung bzw. Abstandskontrolle des EV3 Roboters benötigt wird. Ohne die Division durch 2 würde zur Berechnung der Entfernung, der Zeitwert für den Hin- und Rückweg des Ultraschallsignals in einen Entfernungswert umgerechnet. Der unten berechnete Umrechnungsfaktor gilt aber nur für 20 °C bei trockener Luft. Bei abweichender Temperatur ändert sich der Wert für die Schallgeschwindigkeit und dementsprechend auch der Umrechnungsfaktor.
Auszug des Quellcodes für das Arduino Programm zur Umrechnung der Zeit in entsprechende Abstandswerte: distanceCm = duration / 29,1 / 2 ;
Berücksichtigung der Temperatur
Für die Berechnung des Umrechnungsfaktors (siehe „Umrechnung Zeit in Abstandswert“) ist die Temperatur zur Bestimmung der Schallgeschwindigkeit von Bedeutung. Schall bzw. Ultraschall hat ausschließlich bei 20 °C eine Ausbreitungsgeschwindigkeit von 343 m/s. Daher muss zu Beginn jeder Abstandsmessung mit dem EV3 die Temperatur aufgenommen werden, um so die aktuelle Schallgeschwindigkeit zu berechnen. Die nachfolgenden Testläufe zur Bestimmung der Genauigkeit des Sensors fanden bei 20 °C statt. Es folgt die Berechnung für die Schallgeschwindigkeit bei 20 °C. Die Werte für die spezifische Gaskonstante und dem Isentropenexponent für Luft sind der Literatur entnommen. [10] Aus der Schallgeschwindigkeit muss im Anschluss der Umrechnungsfaktor (Zeit – Abstandswert) gebildet werden.
κ = Isentropenexponent
R = Spezifische Gaskonstante von Luft
T = Temperatur in Kelvin
Berechnung der Schallgeschwindigkeit
Analog-Digital Umsetzer
Für die Messung der Zeitdifferenz zwischen dem gesendeten und empfangenen Schall wird kein Analog-Digital Umwandler benötigt.
Verbindung / Bussystem
Realisierung
Zur Lösung der Aufgabe konnten verschiedene Ansätze verfolgt werden. In der ersten Variante (Anzeige der Abstandswerte auf EV3 Display) wurde versucht, die gesendeten Abstandswerte an den Display des EV3 zur Abstandskontrolle weiter zu verarbeiten. Im zweiten Schritt (Schnittstelle: EV3 – Arduino – Ultraschallsensor) erfolgte eine andere Herangehensweise an die Aufgabe, bei der die serielle Schnittstelle zur Verarbeitung der Distanzwerte in Matlab genutzt werden konnte. Dieses Kapitel beschreibt die Hard- und Software, die zur Bewältigung dieser Aufgabe benötigt werden. Des Weiteren werden die verschiedenen Aufbauten näher beschrieben, die für die Umsetzung von Bedeutung sind.
Verwendete Hardware
• Lego Mindstorms EV3 Brick
• Arduino UNO
• Ultraschallsensor SRF 05 (Devantech)
• Laptop ASUS X70IO (4 GB RAM, Intel Core 2)
• USB Adapter ASUS Bluetooth 4.0
Verwendete Software
• Microsoft Windows 7
• Matlab R2017a
• QUT toolkit: https://wiki.qut.edu.au/display/cyphy/QUT+EV3+MATLAB+toolkit
• MATLAB Support Package for LEGO MINDSTORMS EV3
• Arduino Software (IDE) Version 1.8.3
Anzeige der Abstandswerte auf EV3 Display
Zunächst konnte mit Hilfe des HSHL Wiki - Eintrags „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“[11] eine Verbindung zwischen Ultraschallsensor, dem Arduino und EV3 hergestellt werden. Nachfolgend soll aber nur auf die Unterschiede zu dem „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“ eingegangen werden, da lediglich der SHARP Infrarotsensor vom Typ GP2Y0D21YK0F gegen den Ultraschallsensor SRF05 ausgetauscht werden muss. Außerdem ist die Arduino Software zu ändern, damit eine Kommunikation zwischen Sensor und Arduino stattfinden kann. Für die Programmierung des EV3 wird die Lego Mindstorms Software verwendet. Die Kommunikation zwischen EV3 und Arduino findet über das I2C Protokoll statt. Hierbei dient der EV3 Brick als Master und der Arduino als Slave. Der Ultraschallsensor (SRF05) wird über den Arduino angesteuert.
Programme
Link für das Arduino Programm zum SVN Projektordner:[12]
Link für das Lego Mindstorms Programm zum SVN Projektordner: [13]
Schnittstelle: EV3 – Arduino – Ultraschallsensor
Die Verbindung zwischen dem Ultraschallsensor und dem Arduino kann über die Pins mittels Drahtbrücken erfolgen. Für die Verbindung zwischen EV3 und Arduino wird ein sechsadriges RJ12 Verbindungskabel verwendet, welches standardmäßig mit dem Lego Mindstorms EV3 und dem Lego Mindstorms NXT für sämtliche Motoren und Sensoren mitgeliefert wird. Dieses ist zu den Anschlüssen am EV3 kompatibel. Das andere Ende (Abb.7) muss entsprechend den Anschlüssen am Arduino angepasst werden. In dem dargestellten Aufbau (Abb.6) wird zusätzlich ein Breadboard eingesetzt, um die einzelnen Kabel besser mit dem Arduino verbinden zu können. Die einzelnen Kabel vom RJ12 sind dazu mit Drahtbrücken verlötet worden. Die I2C Verbindung zu dem Arduino wird über den Analogen Pin 5 und Pin 6 realisiert. Die beiden Signalleitungen SCL - Signal Clock (Pin 5) und SDA - Signal Data (Pin 6) sind zusätzlich über zwei Pull-up Widerstände (47 kOhm) an die externe Versorgungsspannung vom EV3 Brick angeschlossen. Diese ziehen den I2C Bus auf 4,7 V. Der Arduino benötigt keine zusätzliche Spannungsquelle, da dieser über VIN und GND (Abb.7) mit dem EV3 verbunden ist.
Nachdem kompilieren der Programme, sowohl auf dem Arduino, als auch auf dem EV3, werden die Werte der Abstandsmessung auf dem Display des EV3 ausgegeben. Eine gleichzeitige Verarbeitung der Messdaten zur Ansteuerung des EV3 ließ sich nicht realisieren. Der nachfolgende Abschnitt "Abstandskontrolle des EV3" stellt die Lösung für die Aufgabe.
Abstandskontrolle des EV3
Der zweite Ansatz verfolgt eine andere Herangehensweise zur Umsetzung der Aufgabenstellung. Auch hier werden die zuvor ausgelesenen bzw. berechneten Abstandswerte vom Arduino für die Abstandskontrolle des fahrbaren EV3 Roboters verarbeitet. Die Herangehensweise unterscheidet sich jedoch dahingehend, da nun anstelle der Mindstorms Software Matlab verwendet wird. Zusätzlich findet keine Kommunikation mehr über I2C statt. Bei diesem System sendet der Arduino die Abstandswerte über die USB Schnittstelle an den PC. Mit dem Programm in Matlab können die Abstandswerte ausgelesen und bezüglich der Abstandskontrolle verarbeitet werden. Die Fahr- und Stoppbefehle werden über das Programm Matlab per Bluetooth an den EV3 Brick gesendet (Abb.7).
Der Ultraschallsensor, ist wie bereits beschrieben, mit dem Arduino verkabelt. Mit der seriellen Verbindung per USB, kann eine Verknüpfung zwischen dem Arduino UNO und dem Matlab Programm auf dem Laptop hergestellt werden. Entsprechend der Verbindung ist in das Matlab Skript (Ansteuern_Motor_Arduino.m) der richtige COM-Port einzutragen, damit das Matlab Skript die Daten vom Arduino empfangen kann. Die Abstandswerte werden als Zeichenkette an Matlab gesendet. Das Programm wandelt die Zeichenkette mit dem string2num Befehl zurück auf die ursprünglichen numerischen Abstandswerte. Das Matlab Skript stellt zusätzlich eine Verbindung mit dem EV3 per Bluetooth her. Auf das RJ12 Kabel kann an dieser Stelle verzichtet werden. Mit dieser Signalverarbeitungskette konnte die Aufgabe gelöst werden (Abb.7).
Hinweise:
- Der serielle Monitor vom Arduino, zum Anzeigen der Abstandswerte, darf nicht parallel zum laufenden Matlab Skript (Ansteuern_Motor_Arduino.m) geöffnet sein.
- Die Bluetooth Verbindung auf dem EV3 Brick muss eingeschaltet sein. Die Bluetooth zu einem Apple Gerät muss deaktiviert werden.
- Kein Verbindungsaufbau zwischen dem EV3 und Matlab möglich - Aktivieren / Deaktivieren der entsprechenden COM-Ports.
Programme
Das zugehörige Arduino Programm zur Verarbeitung der Sensorsignale befindet sich im SVN Projektordner:[14]
Das Matlab Programm zum Auslesen der Abstandswerte vom Arduino zur weiteren Verarbeitung und Ansteuerung des EV3 befindet sich ebenfalls im SVN Projektordner. Damit eine Signalübertragung an den EV3 per Bluetooth garantiert werden kann müssen alle Dokumente aus diesem Ordner geladen bzw. kopiert werden. Der alleinige Aufruf des Hauptprogramms "Ansteuern_Motor_Arduino" reicht nicht aus:[15]
Es folgt der Programmablaufplan zur besseren Übersicht über die Programmstruktur. In das EV3 – Matlab Programm wurde zusätzlich noch ein gleitender Mittelwertfilter „eingebaut“, damit der EV3 Roboter nicht durch zufällige starke Messabweichungen vorzeitig stoppt.
Darstellung der Ergebnisse
Bestimmung der Messunsicherheit für die Stoppfunktion des EV3
Bestimmung der Messunsicherheit nach GUM. Die GUM nach DIN V ENV 13005 ist ein „Leitfaden zur Angabe der Unsicherheit beim Messen.“ Hierfür ist die Standardabweichung des Mittelwertes zu bestimmen. Die Standardabweichung bzw. Standardunsicherheit steht für die Unsicherheit des Messergebnisses. Für das Messergebnis wird der Mittelwert angegeben. Dieses mathematisch statistische Verfahren nach Ermittlungsmethode A kann unabhängig von der Verteilung der Messwerte angewendet werden.
Die empirische Standardabweichung steht für die Messunsicherheit bzw. handelt es sich hierbei um die Streuung des Mittelwertwertes einer Messreihe. Nähere Informationen zum Verfahren finden sich unter folgendem Link. [16]
Messumgebung:
Die Messung fand bei 20 °C Raumtemperatur statt.
Der Messvorgang startet immer von derselben Startposition bei einem Abstand von 1,20 m.
Das Hindernis ist eine Holzplatte bzw. Holzverkleidung.
Tabelle 2: Bestimmung Messunsicherheit für die Abstandskontrolle
Messwert | Abstand in cm | Messwert | Abstand in cm |
1 | 6,1 | 16 | 4,9 |
2 | 5,4 | 17 | 5,2 |
3 | 5,0 | 18 | 5,0 |
4 | 7,7 | 19 | 5,0 |
5 | 5,0 | 20 | 5,0 |
6 | 4,8 | 21 | 5,0 |
7 | 5,1 | 22 | 5,3 |
8 | 4,7 | 23 | 5,2 |
9 | 4,9 | 24 | 5,5 |
10 | 5,0 | 25 | 4,8 |
11 | 5,2 | 26 | 6,2 |
12 | 5,4 | 27 | 4,8 |
13 | 5,4 | 28 | 5,0 |
14 | 5,2 | 29 | 5,3 |
15 | 5,1 | 30 | 5,0 |
Die Angabe eines vollständigen Messergebnisses setzt sich aus dem Mittelwert und der Messunsicherheit zusammen. Für die Stoppfunktion des EV3 vor einem Hindernis im Abstand von 5 cm ergeben sich die nachfolgenden Werte für den Mittelwert, die Standardabweichung und die Messunsicherheit. Der wahre Wert für die Messgröße der Stoppfunktion des Roboters ist im Intervall von 5,2 cm ± 0,1 cm zu erwarten.
Bestimmung der Messabweichung des Ultraschallsensors über die Entfernung
Nach der Bestimmung der Messunsicherheit für die Positionsbestimmung am Haltepunkt von 5 cm vor dem Hindernis, erfolgt nun die Bestimmung der Messabweichung des Ultraschallsensors für verschiedene Abstände.
Die Messung fand bei 25 °C Raumtemperatur statt.
Der Sensor ist auf einer Messvorrichtung in einer Höhe von 7 cm montiert.
Das Hindernis ist eine Holzplatte bzw. Holzverkleidung.
Die Abstände für die gemessenen Entfernungen sind von einem Maßband abgelesen worden.
Tabelle 2: Messabweichung über die Entfernung SRF05
Wahre Entfernung in cm |
Gemessenen Entfernung in cm |
Messabweichung in cm |
Relative Messabweichung |
0 | 0,0 | 0,0 | - |
5 | 4,7 | -0,3 | -6,0% |
10 | 10,1 | 0,1 | 1,0% |
15 | 14,3 | -0,7 | -4,7% |
20 | 19,7 | -0,3 | -1,5% |
25 | 24,4 | -0,6 | -2,4% |
30 | 29,4 | -0,6 | -2,0% |
35 | 35,0 | 0,0 | 0,0% |
40 | 39,3 | -0,7 | -1,8% |
45 | 44,6 | -0,4 | -0,9% |
50 | 49,6 | -0,4 | -0,8% |
55 | 54,7 | -0,3 | -0,5% |
60 | 59,9 | -0,1 | 0,1% |
65 | 64,7 | -0,3 | -0,5% |
70 | 70,1 | 0,1 | 0,1% |
75 | 75,1 | 0,1 | 0,1% |
80 | 80,1 | 0,1 | 0,1% |
85 | 85,0 | 0,0 | 0,0% |
90 | 89,9 | -0,1 | -0,1% |
95 | 95,0 | 0,0 | 0,0% |
100 | 100,2 | 0,2 | 0,2% |
Beide Verfahren zur Bestimmung der „Genauigkeit“ des Ultraschallsensors haben gezeigt, dass der Sensor bei der Stoppfunktion vor einem Hindernis eine geringe Messunsicherheit aufweist. Bei der Abstandsmessung aus verschiedenen Entfernungen liegt die Messabweichung zum wahren Abstandswert im Millimeterbereich. Die relative Messabweichung nimmt mit zunehmendem Abstand ab. Die Vermutung liegt nahe, dass sich während der Messung (Beginn bei 100 cm absteigend) die Temperatur geändert haben könnte, was die etwas höheren Abweichungen zwischen 5 cm bis 65 cm erklären würde. Jedoch wurde bei der Messaufnahme auf eine konstante Raumtemperatur für eine konstante Schallgeschwindigkeit geachtet. Der Ultraschallsensor SRF05 eignet sich nach der vorangegangenen Analyse unter Berücksichtigung der Temperaturänderungen sehr gut zur Abstandmessung.
Objekteinflüsse auf den Ultraschallsensor
- Bei zylindrischen oder kugelförmigen Oberflächen hat jedes Flächenelement einen anderen Winkel zur Sendeachse des Ultraschallsignals. Das reflektierte Signal weicht dadurch ab, sodass der Anteil der zum Empfänger reflektierten Schalls verkleinert wird.
- Rauhe Oberflächenstrukturen reflektieren das Ultraschallsignal unregelmäßig zurück (z.B. Schüttgüter).
- Weiche Materialien, wie z.B. Filz, Watte, grobe Gewebe, Schaumstoffe absorbieren fast die gesamte Impulsenergie der Ultraschallwellen.
- Flüssigkeiten werden durch Ultraschall meist immer erkannt.
- Heiße Messobjekte führen ebenfalls zu einer Erhöhung der Umgebungstemperatur in der Luft. Die Temperatur der Luft beeinflusst wiederum die Änderung der Schallgeschwindigkeit, wodurch sich der Schall unterschiedlich schnell ausbreitet.
Umwelteinflüsse auf den Ultraschallsensor
- Umwelteinflüsse, wie Feuchte, Staub und Rauch beeinträchtigen die Messgenauigkeit. Die übliche Umgebung zur Abstandsmessung sollte daher in atmosphärischer Luft sein. Von Ultraschallmessungen in Gasen sollte Abstand genommen werden da, je nach Art des Gases, die Schallgeschwindigkeit abnehmen kann. Dämpfe von speziellen Flüssigkeiten beinträchtigen ebenfalls die Sensorfunktion.
- Luftbewegungen und Turbulenzen nehmen bis zu einigen m/s keinen Einfluss auf die Ultraschallmessung.
- Regen oder Schnee führt in „normaler Dichte“ zu keiner Beeinträchtigung der Messung.
Quelle zu Objekt- und Umwelteinflüssen: [17]
Zufällige Fehler
Spannungsschwankungen und zwischenzeitliche Temperaturschwankungen
Systematischer Fehler
Vernachlässigte Einflüsse, wie die Temperatur. Die Berücksichtigung der Temperatur hat einem maßgeblichen Einfluss auf die Messung. Ohne die Aufnahme der aktuellen Messumgebungstemperatur und der Umrechnung der Schallgeschwindigkeit ergeben sich systematisch falsche Abstandswerte.
YouTube - Video
Die Funktionsweise des EV3 Roboters wurde zusätzlich in einem Video dokumentiert.
https://www.youtube.com/watch?v=baZJapeVKio
Projektplan
Für die zeitliche Planung des Projekts wurde ein Gantt Chart erstellt.
Einzelnachweise
!!!Für SVN Ordner sind die entsprechenden Zugriffsrechte erforderlich!!!
- ↑ http://www.embedded.arch.ethz.ch/uploads/Examples/ExampleSensorboardSupersonic2/SRF05Datasheet.pdf, Abgerufen am 15.06.2017
- ↑ http://cdn.active-robots.com/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/s/r/srf05.jpg, Abgerufen am 09.05.2017
- ↑ https://www.robot-electronics.co.uk/images/srf05p2.jpg, Abgerufen am 17.06.2017
- ↑ https://www.robot-electronics.co.uk/htm/srf05tech.htm, Abgerufen am 16.06.2017
- ↑ http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/SRF05Datasheet.pdf
- ↑ https://www.robot-electronics.co.uk/htm/srf05tech.htm ,Abgerufen am 17.06.2017
- ↑ https://www.arduino.cc/en/Reference/PulseIn, Abgerufen am 17.06.2017
- ↑ https://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Ultrasonic%20SRF05%20-%20Question.pdf
- ↑ https://creativecoding.uni-bayreuth.de/assets/Bauteile/srf05arduino.png, Abgerufen am 10.05.2017
- ↑ Böge, Alfred (Hrsg.): Formeln und Tabellen Maschinenbau, Wiesbaden: Springer Vieweg, 3. korrigierte Aufl. 2012, S.176, DOI 10.1007/978-3-8348-2313-7
- ↑ http://193.175.248.52/wiki/index.php/Projekt_32:_Komplexer_Sensor_f%C3%BCr_Lego_Mindstorms_EV3, Abgerufen am 10.05.2017
- ↑ http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Anzeige%20der%20Abstandswerte%20auf%20EV3%20Display/Arduino_EV3_Ultrasonic/Arduino_EV3_Ultrasonic.ino
- ↑ http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Anzeige%20der%20Abstandswerte%20auf%20EV3%20Display/EV3_Projekt_I2C.ev3
- ↑ http://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Abstandskontrolle%20des%20EV3/Arduino_Ultrasonic/Arduino_Ultrasonic.ino
- ↑ https://svn.hshl.de/svn/BSE_SigSys/trunk/User/Kohorte_04_SoSe17/Mike_Westhoff/Abstandskontrolle%20des%20EV3/EV3_matlab%20toolkit/
- ↑ Parthier, Rainer: Messtechnik. Grundlagen und Anwendungen der elektrischen Messtechnik, Wiesbaden: Springer Vieweg, 8. Aufl. 2016, S.94 - 95, DOI 10.1007/978-3-658-13598-0
- ↑ http://www.waycon.de/produkte/ultraschallsensoren/messprinzip-ultraschallsensoren/, Abgerufen am 17.06.2017
→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017