ArduMower: Umfeldsensorik: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 181: Zeile 181:
=== Umsetzung in Simulink ===
=== Umsetzung in Simulink ===
[[Datei:Ultraschall hauptprogramm.PNG|500px|mini|links|Abb.10: Simulink Modell Ultraschall]]
[[Datei:Ultraschall hauptprogramm.PNG|500px|mini|links|Abb.10: Simulink Modell Ultraschall]]





Version vom 13. November 2017, 18:40 Uhr


Autoren: Phillip Blunck, Simon Kohfeld, Marius Schaffer

Betreuer: Prof. Schneider, Prof. Göbel

Hauptartikel: Projekt: Ardumower

Aufgabe

Mit Hilfe der Ultraschallsensoren (Abb. 1) sollen Hindernisse erkannt werden. Dabei müssen die Sensoren an die Hauptplatine angeschlossen und softwareseitig in MATLAB für das Hauptprogramm bereitgestellt werden.

Einleitung

Dieser Artikel stellt alle Arbeitsmeilensteine dar, die während des Semesters von der Gruppe erarbeitet wurden oder noch zu erledigen sind.

Ultraschall

Technische Daten des Moduls

Abb.1: Frontansicht
Messbereich Messintervall Messungen pro Sekunde Versorgunsspannung Pinbelegung
2cm - 300cm 0,3cm maximal 50 VCC +5V +-10%, GND 0V
Pin 1: Pin 2: Pin 3: Pin 4:
VCC 5V Triggereingang Echo GND 0V




Funktionsweise des Moduls

Abb.2: Timing-Diagramm

Durch eine fallende Flanke am Triggereingang für mindestens 10µs wird 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 durchgefü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. (Siehe Abb.2)












Verbauen der Ultraschallsensoren

Abb.3: Frontplatte

In der Frontplatte (Abb.3) des Ardumowers sind sechs Bohrungen enthalten, welche für die Montage der drei Ultraschallsensoren (Abb.1) 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 (Abb.5) an den vorgesehenen Pins angeschlossen. Dabei haben diese eine feste Pin-Belegung (Abb.4) 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 (Abb.8) verkabelt werden. Damit keine Fehler auftauchen sind die Pins nummeriert und haben dieselbe Reihenfolge:

  • 1 = VCC +5V
  • 2 = GND
  • 3 = Trigger
  • 4 = Echo.

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 verwendet, welche auch für Arduino eingesetzt werden kann, da sie für beide Software-Umgebungen eine fertige Funktion (Ausgabe der Distanz in Zentimeter) bereitstellt. 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 eigenen 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. Die Funktion gibt die Entfernung in Zentimeter aus und kann bspw. wie bereits gennant, als S-Funktion implementiert werden.

Auf gegenseitige Störung prüfen

Abb.9: Erfassungsbereich
  • 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








Messfehler feststellen

Bei Verwendung des Ultraschallmoduls können folgende Messfehler auftreten:

  • Auflösung: Die Auflösung beträgt ca. 3mm und erklärt sich durch die interne Abtastrate des Moduls
  • Objekte: Die Geometrie eines zu messenden Objektes beeinflusst maßgeblich die Qualität der Messung
  • Temperatur: Da die Schallgeschwindigkeit in der Luft temperaturabhängig ist, ergeben sich andere Messergebnisse bei unterschiedlichen Temperaturen. Bei einer Temperaturdifferenz von 20°C ergibt sich ein Messfehler von 3,4%.

Eine Lösung für die auftretenden Messfehler wäre eine Temperaturkompensation in die Messung zu integrieren. Da die Schallgeschwindigkeit im Temperaturbereich näherungsweise mit folgender Formel berechnet werden kann:

,

könnte man mit Hilfe eines Temperatursensors im Ardumower den tatsächlichen Temperaturwert in die Berechnung der Distanz integrieren und die getätigten Messungen werden somit mit der richtigen Schallgeschwindigkeit durchgeführt.

Filtern der Messwerte

Die Rohmessungen werden mit Hilfe eines gewichteten gleitenden Mittelwertes gefiltert, um große Messausreißer zu mindern:

. Dabei ist die Gewichtung der Datenpunkte. Folglich ist die Umsetzung in C-Code dargestellt.

//Gleitender Durchschnitt Gewichtet
int alt=0;
int mittel;
int entf;
int i;

delay(10);
alt=dis;
delay(10);
for (i=0; i<10; i++)
{
    entf=dis;
    mittel=(0.8*alt) + (0.2*entf);
    alt=mittel;
    delay(10);
}
      
d[0] = mittel; //Gefiltertes Ergebnis als OUTPUT

Umsetzung in Simulink

Abb.10: Simulink Modell Ultraschall











.

Zusammenfassung & Ausblick

Zusammenfassend lässt sich festhalten, dass die festgelegten Ziele im Pflichtenheft zu den jeweiligen Meilensteinen umgesetzt worden sind. Die Ultraschallsensoren konnten erfolgreich in MATLAB und Arduino in Betrieb genommen, die Sensoren im Ardumower verbaut und auch am Ardumower-Mini getestet werden. Jedoch die Einbindung in das Simulink-Modell stellte sich als schwierig dar, weil es keinen Simulink-Block für den Ultraschallsensor gibt.

Für das nächste Semester soll nun eine S-Function generiert werden, welche dann als Simulink-Block eingesetzt wird. Wenn dieser Schritt erfolgreich umgesetzt wurde, können die Absprachen mit der Gruppe Mähstrategie durchgeführt werden. Damit verbunden müssen bspw. die Objektbildung und Koordinatentransformationen in das Fahrzeugkoordinatensystem, die Filterung der Rohmessungen und die Fehlerkompensation umgesetzt werden.