Alternative Abstandsmessung per Ultraschall

Sie sind hier: WDF-Startseite

Der Arduino als moderner Meterstab

Ultraschall wird beispielsweise von Fledermäusen verwendet, um sich in ihrer Umwelt zu orientieren. Diese Tiere sind in der Lage, aus der Laufzeit eines ausgestoßenen Ultraschall-Tons auf die Entfernung eines Hindernisses zu schließen. Dieses Prinzip kann man sich mit entsprechendem Equipment auch in der Technik zunutze machen.

Ob Abstandssensoren am Auto, Füllstandsanzeige in der chemischen Industrie oder Fernbedienungen früherer Bauart – in allen diesen Anwendungen kommt beziehungsweise kam Ultraschall zum Einsatz, um Entfernungen zu bestimmen oder Geräte zu steuern. Besitzer eines Microcontrollers, etwa eines Arduinos, können dank eines großen Angebots sehr preiswerter Ultraschallsensoren problemlos eigene Lösungen umsetzen und so ganz nebenbei viel über die dahinterstehende Technik beziehungsweise Physik lernen.

Zum Eintauchen in die Welt des Ultraschalls eignet sich beispielsweise der Ultraschallsensor ›Hc-sr04‹, der vom einschlägigen Elektronikhandel für wenig Geld zu beziehen ist.

Unbedingt beachten!

Zu beachten ist, dass alternative Sensoren äußerlich dem Hcsr04 sehr ähnlich sind, jedoch mitunter eine andere Beschaltung ihrer Anschlüsse besitzen. Dieser Umstand kann sich bei einem irrtümlichen Vertauschen der Anschlüsse Vcc und GND fatal auf den Sensor auswirken. Ein Totalverlust des Sensors ist in diesem Fall nicht ausgeschlossen!

Der Hcsr04 besitzt folgende Beschaltung:

Die Zuordnung ist relativ einfach: Vcc (5V) und GND müssen mit den gleichnamigen Anschlüssen am Arduino verbunden werden, während die Anschlüsse ›Trig‹ und ›Echo‹ an einem der digitalen Pins des Arduino verbunden werden.

Für das nachfolgende Beispiel wurde für Trig der Pin 8 verwendet, während Pin 7 für Echo ausgewählt wurde. Werde andere Pins gewählt, so muss dies lediglich im Sketch berücksichtigt werden.

Das nachfolgende Programm zum Ansteuern des Ultraschallsensors wurde ausführlich kommentiert, sodass an dieser Stelle weitere Erläuterungen unterbleiben.

int trigger=8;                               // Pin für Trigger 
int echo=7;                                  // Pin für Echo 
long dauer=0;                                // Variable für die Laufzeit der Ultraschallwelle                                
long entfernung=0;                           // Variable für die Entfernung zum Hindernis 
void setup() 
  { 
    Serial.begin(9600);                      // Serielle Kommunikation starten 
    pinMode(trigger, OUTPUT);                // Trigger Pin als Ausgang definieren 
    pinMode(echo, INPUT);                    // Echo Pin als Eingang definieren 
}  
void loop() 
{ 
    digitalWrite(trigger, LOW);              // Zum rauschfreien Senden Trigger auf LOW setzen 
    delay(5);                                // 5 Millisekunden warten 
    digitalWrite(trigger, HIGH);             // Trigger auf HIGH sendet eine Ultraschallwelle 
    delay(10);                               // 10 Millisekunden warten 
    digitalWrite(trigger, LOW);              // Trigger auf LOW schliesst Senden ab 
    dauer = pulseIn(echo, HIGH);             // Zeit zwischen Senden und Empfang 
    entfernung = (dauer/2) / 29.1;           // Zeit in Weg in Zentimeter umrechnen 
        Serial.print(entfernung);            // Weg in Zentimeter auf Monitor ausgeben 
        Serial.println(" cm");               
    delay(500);                             // Nach 0,5 Sekunden erneuter Durchlauf 
}

Der Rechenweg zur Entfernungsbestimmung

Interessant ist, wie die Berechnung der Entfernung vorgenommen wird. Dabei ist festzuhalten, dass sich der Schall bei einer Umgebungstemperatur von 20 Grad Celsius mit 343 Metern pro Sekunde durch den Raum bewegt. Dies sind 34300 cm pro Sekunde. Um zu berechnen, wie viel Zeit vergeht, wenn der Schall die Wegstrecke von einem Zentimeter zurücklegt, muss der berühmte Dreisatz bemüht werden:

Wenn nun beispielsweise 290 Mikrosekunden vergehen, bis der rückkehrende Schall als Echo vom Sensor registriert wird, muss diese Zeit durch 2 dividiert werden, da ja nur der einfache Weg berücksichtigt werden darf, um die Entfernung zum Objekt errechnen zu können.

Die Schallwelle benötigte demnach 145 Mikrosekunden, um auf das Hindernis zu stoßen, von dem ein Teil der Schallwelle zum Sensor zurückreflektiert wurde. Wird die halbe Laufzeit nun durch die Zeit dividiert, die der Schall für das Zurücklegen von einem Zentimeter benötigt, so gilt folgendes Ergebnis:

Das Hindernis ist demnach rund 5 Zentimeter vom Ultraschallsensor entfernt. Nachfolgendes Schaubild verdeutlicht den Zusammenhang:

Die Ausgabe der Entfernung kann über den sogenannten Monitor erfolgen, der über Werkzeuge/Serieller Monitor aktiviert werden kann.

Die Ausgabe der Werte ist rein zweckmäßig, kann aber mit einer Erweiterung des Programms ausgebaut werden. Selbstverständlich wäre eine Ausgabe auf einer LCD-Anzeige ebenso möglich, wie eine Visualisierung per LED-Reihe oder via Bargraph-Anzeige, wenn das Programm entsprechend angepasst wird.

Es bietet sich zudem an, einen zweckmäßigen Aufbau vorzunehmen, um die Genauigkeit zu ermitteln, die eine Abstandsmessung via Ultraschall bietet. Dabei wird man feststellen, dass diese bei ungefähr ± 5 Millimeter liegt. Dies ist für viele Zwecke völlig ausreichend, für Anwendungen, die genauere Messungen benötigen, unter Umständen jedoch nicht.

Ein Testaufbau könnte wie folgt aussehen:

Es zeigt sich, dass dieser Aufbau zumindest einen schönen Einblick in die Arbeitsweise professioneller Geräte gewährt und Anregung geben soll, sinnvolle Projekte für den Einsatz von Ultraschall zu entdecken, die sich mit einem Arduino sinnvoll umsetzen lassen.


********