Objekterkennung mit Ultraschall mit Matlab/Simulink und EV3

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen

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
Abbildung 1: Sensor Vorderansicht [2]
Abbildung 2: Sensor Rückansicht [3]


Auf der Abbildung 1 ist in der Vorderansicht links der Sender und rechts der Empfänger 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 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, als auch zum Empfangen von Signalen. Es ist weiter anzunehmen, dass der Ultraschallsensor mit dem piezoelektrischen Effekt arbeitet, jedoch konnte dies nicht von dem Sensor – Hersteller bestätigt werden. Insgesamt besitzt der Ultraschallsensor wie in Abb. zu sehen vier Anschlüsse. Neben der Spannungsversorgung (5V) 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. Diese Schallwelle hat eine Frequenz von 40kHz und acht Perioden. 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 25ms betragen.

Abbildung 3: SRF05 Zeitverlauf [4]
















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 40kHz 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() Pin (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.


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 zulässig.

Abbildung 4: Zeitverlauf ohne Verzögerung















Signalvorverarbeitung

Auf der folgenden Abbildung 5 ist die Verbindung zwischen Arduino und dem Ultraschallsensor SRF05.

Anschluss Sensor an den Arduino UNO

Abbildung 5: Verbindung Ardunino-SRF05[5]


















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 geteilt. Die nachfolgende Berechnung zeigt, wie der Umrechnungsfaktor (siehe Datenblatt) 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. 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.

















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 sind der Literatur entnommen (Quelle: Formeln und Tabellen Maschinenbau). 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.

Realisierung Diese Kapitel beschreibt welche Hard- und Software zur Bewältigung dieser Aufgabe zum Einsatz kamen. Zusätzlich 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

Verbindung / Bussystem Anzeige der Abstandswerte auf EV3 Display Bei dem Aufbau wurde in mehreren Etappen vorgegangen, um die Aufgabe schrittweise zu lösen. Zunächst konnte mit Hilfe dem HSHL Wiki - Eintrag „Projekt 32: Komplexer Sensor für Lego Mindstorms EV3“ 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. Zusätzlich 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.


Quellen

!!!Für SVN Ordner sind die entsprechenden Zugriffsrechte erforderlich!!!

→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2017