Ultrasonic Distance

Wie misst man kurze Distanzen schnell, einfach und günstig? Ultraschall ist hier sicherlich eine richtige Antwort. In diesem Beitrag möchte ich zeigen, wie man das mit dem HC-SR04 Ultraschallmodul schaffen kann. Warum habe ich gerade dieses Modul gewählt? Nun zum einen ist es in der Community sehr weit verbreitet, und zweitens ist es günstig. Ich habe es für 1,05€ bei eBay erstanden – neu.

HC-SR04

Die Ultraschall-Distanzmessung funktioniert mit der Schallgeschwindigkeit (343.2m/s in trockener Luft). Hierzu muss man sich nur überlegen, dass der Schall bei trockener Luft 343.2 Meter in einer Sekunde zurück legt. Misst man also die Zeit zwischen dem Aussenden einer Schallwelle und dem Ankommen der selben Welle, so kann man damit auf die Distanz schließen. Dies funktioniert so natürlich nur in Luft, denn die Schallgeschwindigkeit ist Stoffabhängig. Zusätzlich ist die Schallgeschwindigkeit Temperaturabhängig, weshalb in Industriesensoren die Temperatur ebenfalls aufgezeichnet wird. Für unsere Zwecke kann dies allerdings entfallen.

Beim zu messenden Objekt muss darauf geachtet werden, dass es mindestens eine quadratische Fläche von 0,5 m² hat, damit es sicher erkannt werden kann.

Der Aufbau

Der Aufbau ist sehr einfach, und man benötigt folgende Komponenten:

  • Arduino UNO Rev3 oder Arduino Nano v3.x
  • HC-SR04
  • 0,96″ OLED Display
  • Breadboard
  • Jumper-Kabel
Das Ultraschallmodul habe ich so angeschlossen, dass Echo auf Pin 2 und Trig auf Pin 3 liegt. Die Versorgung Vcc benötigt 5V, und GND kommt natürlich auf Ground.
,
Pins
,
Der kleine Display wird hier erklärt. Natürlich muss man keinen Display verwenden, doch ich finde es nett, wenn man die Distanz gleich neben dem Modul angezeigt bekommt.
,
Display
,

Der Code

Wie immer liegt der Programmcode auf GitHub.

Die getDistance()-Funktion gibt die Distanz zwischen dem Sensor und dem ihm nächsten Objekt in Zentimeter zurück. Um den Vorgang in der Funktion verstehen zu können, muss man auch die Funktionsweise des Sensors verstehen.

Legt man an dem Trig-Pin für mindestens 10 Mikrosekunden 5V an, dann beginnt das Modul 8 Zyklen von 40kHz-Wellen zu senden. Erst wenn das Modul die ankommenden Schallwellen erkennt, legt es den Echo-Pin auf HIGH (es gibt also 5V zurück).

Pulse

Und genau das nutzt man, um die Distanz zu messen. Hierzu nutze ich die pulseIn()-Funktion von Arduino. Diese Funktion gibt die Zeit in Mikrosekunden zurück, welche zwischen dem Wechsel von LOW zu HIGH verstreicht.

Nun muss nur noch eine Umrechnung erfolgen, welche die Zeit in die Distanz umlegt. Dies funktioniert, wie oben bereits erwähnt mit der Schallgeschwindigkeit. Diese beträgt 343.2 m/s, also 2.9138 μs/mm. Hierbei muss man darauf achten, dass sich Sensor und Empfänger nebeneinander befinden, was den Weg für den Schall verdoppelt → 5.8275 μs/mm.

Dividiert man letztlich die Dauer zwischen dem Pulswechsel durch diese oben errechnete Konstante, dann erhält man die Distanz in Millimeter zurück.

Das Delay von 250 Millisekunden in der loop() wird lediglich für das Display benötigt, es kann für zeitkritische Anwendungen also entfernt werden.

Der Mindestabstand zwischen Sensor und zu detektierenden Element resultiert aus dem nötigen Abstand zwischen gesendeter und ankommender Schallwelle. Würden sich die Schallwellen überlagern (zu wenig Abstand zwischen Sensor & Objekt) so kann man nicht mehr eindeutig bestimmen was die gesendete und was die empfangene Schallwelle ist.

Erweiterung

Möchte man zum Beispiel zwei HC-SR04 Module benutzen, so braucht man 2 Trig-Pins und 2 Echo-Pins. Man kann im Anschluss 2 verschiedene Funktionen ( getDistance1() & getDistance2() ) schreiben, welche einfach auf die unterschiedlichen Pins zugreifen.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s