ArduMower: Umfeldsensorik: Unterschied zwischen den Versionen
Zeile 110: | Zeile 110: | ||
} | } | ||
</source> | </source> | ||
Dieser Quelltext ist eine Umsetzung der Abläufe für eine Distanzmessung, welche nur mit der eigenen Arduino Bibliothek generiert werden kann, sodass man unabhängig von fertigen Libraries ist. | |||
=== Auf gegenseitige Störung prüfen === | === Auf gegenseitige Störung prüfen === |
Version vom 6. Juli 2017, 20:35 Uhr
Autoren: Phillip Blunck, Simon Kohfeld, Marius Schaffer
Betreuer: Prof. Schneider, Prof. Göbel
Aufgabe
Einleitung
Ultraschall
Technische Daten des Moduls
Messbereich | Messintervall | Messungen pro Sekunde | Versorgunsspannung | Pinbelegung | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
2cm - 300cm | 0,3cm | maximal 50 | VCC +5V +-10%, GND 0V |
|
Funktionsweise des Moduls
Durch eine fallende Flanke am Triggereingang für mindestens 10µs wir der Messzyklus gestartet. Anschließend wird nach ca. 250µs ein 40kHz Burst-Signal für 200µs gesendet und der Ausgang (Echo) wechselt auf ein H-Pegel. Daraufhin wartet das Modul auf dem Empfang des Echos. Falls es detektiert wird, fällt der Ausgang auf einen L-Pegel. 20ms nach der Triggerung kann eine neue Messung druchgeführt werden. Wird jedoch kein Echo detektiert bleibt der Ausgang für 200ms auf dem H-Pegel und eine erfolglose Messung ist eingetreten. Danach reagiert das Modul auf die nächste fallende Flanke am Triggereinang und die Messung beginnt neu.
Verbauen der Ultraschallsensoren
In der Frontplatte des Ardumowers sind sechs Bohrungen enthalten, welche für die Montage der drei Ultraschallsensoren vorgesehen sind. Diese liegen zentral, links und rechts, damit ein möglichst großer Bereich erfasst werden kann.
Die Ultraschall Sensoren werden auf der Hauptplatine an den vorgesehenen Pins angeschlossen. Dabei haben diese eine feste Pin-Belegung am Arduino Mega:
- Sensor Mitte: PIN22 = Echo, PIN24 = Trigger
- Sensor Links: PIN34 = Trigger, PIN36 = Echo
- Sensor Rechts: PIN30 = Trigger, PIN32 = Echo
Außerdem ist darauf zu achten wie die Sensoren an der Hauptplatine verkabelt werden. Damit keine Fehler auftauchen sind die Pins nummeriert und haben dieselbe Reihenfolge:
- 1 = VCC +5V
- 2 = GND
- 3 = Trigger
- 4 = Echo.
-
Abb.4: Pinlayout Arduino Mega
-
Abb.5: Pinlayout auf der Hauptplatine
-
Abb.6: HC-SR04 am Mini
-
Abb.7: HC-SR04 am Ardumower
-
Abb.8: Pins auf der Hauptplatine
Basistest mit MATLAB und Arduino
Mit Hilfe von MATLAB und der Arduino IDE wurden Basistests durchgeführt, um die Funktion des Sensors zu testen und zu beobachten. Dabei wird eine Library für MATLAB verwenden, welche auch für Arduino eingesetzt werden kann. Jedoch kann diese Bibliothek nur für MATLAB Skripts/Arduino verwendet werden und eine eigene umsetzung in Simulink stellt deshalb ein Problem dar. Eine Lösung für Simulink wäre, den Arduino "C-Code" als S-Fuction umzuwandeln, um damit einen Simulink-Block zu generieren. Dabei könnten alle kompatiblen Bibliotheken für den HC-SR04 eingebunden werden oder man setzt folgenden Funktion als S-Function um.
#define TRIGGER 3
#define ECHO 2
int getEntfernung()
{
long d=0;
long t=0;
digitalWrite(TRIGGER, LOW);
delayMicroseconds(3);
noInterrupts();
digitalWrite(TRIGGER, HIGH); //Trigger Impuls für 10 us
delayMicroseconds(10);
digitalWrite(TRIGGER, LOW);
t = pulseIn(ECHO, HIGH); // Echo-Zeit messen
interrupts();
t = (t/2); // Zeit halbieren da doppelte Strecke zurückgelegt wird
d = t / 29.1; // Zeit in cm umrechnen
return(d);
}
Dieser Quelltext ist eine Umsetzung der Abläufe für eine Distanzmessung, welche nur mit der eigenen Arduino Bibliothek generiert werden kann, sodass man unabhängig von fertigen Libraries ist.
Auf gegenseitige Störung prüfen
- Bei Distanzen unter 1m kann der Winkel zum Objekt 45° Betragen
- Bei einer Distanz von 3m muss das Objekt genau positioniert sein und im Sendekegel von 15° liegen.
- Sensoren werden nacheinander ausgelesen, sodass keine Überschneidungen vorliegen