Es geht weiter mit der Entfernungsmessung. Dein HC-SR04 misst hierbei den Abstand zu einem Objekt vor ihm – z.B. deiner Hand. In deinem Seriellen Monitor erscheint dann die Entfernung in Zentimetern.
Zunächst legst du zwei Konstanten fest – die Pins des Arduinos, an denen du die Pins TRIG und ECHO des HC-SR04 angeschlossen hast. Eine Konstante definierst du mit const, zusätzlich zum Typ. Im Gegensatz zu einer Variablen kann der Wert, der in ihr gespeichert ist, nicht mehr an einer anderen Stelle im Code verändert werden.
___STEADY_PAYWALL___
const int trig = 7;
const int echo = 6;
Als nächstes benötigst du zwei Variablen. Eine für die Dauer zwischen Aussenden und Empfangen des Ultraschall-Signals. Dein HC-SR04 sendet ein Signal aus, dieses wird von einem Objekt vor ihm zurückgeworfen und vom Sensor wieder empfangen – die hierbei vergangene Zeit speicherst du in der Variablen duration.
Die zweite Variable distance benötigst du später, um aus der vergangenen Zeit die Entfernung zum Objekt zu berechnen – dazu gleich mehr.
int duration = 0;
int distance = 0;
Die Setup-Funktion
Das Setup im Sketch dürfte für dich keine Überraschungen bergen. Hier startest du lediglich den Seriellen Monitor und legst den jeweiligen pinMode von trig und echo fest. Über den Pin trig sendest du das Ultraschall-Signal aus (also OUTPUT) – der Pin echo empfängt dieses dann wieder (also INPUT).
void setup() {
Serial.begin (9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
Der Loop
Hier wird es nun spannend. Zunächst sendest du ein Signal vom HC-SR04 aus, indem du den Pin trig für 10ms auf HIGH setzt und anschließend wieder auf LOW.
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
Danach misst du die Zeit, die es dauert bis das Signal wieder am Pin echo eintrifft. Das machst du mit der Funktion pulseIn(). Die vergangene Zeit speicherst du in der Variablen duration.
duration = pulseIn(echo, HIGH);
Nun ist es so, dass du ja nicht die Zeit wissen willst, sondern den Abstand des Objekts zum Sensor. Hierfür benötigst du eine kleine Rechnung. Das Signal (oder die Ultraschallwelle) des Sensors bewegt sich mit Schallgeschwindigkeit durch die Luft. Diese Geschwindigkeit beträgt bei Raumtemperatur 343,2 m/s.
Für den Sensor benötigen wir diesen Wert jedoch in Zentimeter pro Mikrosekunde. Umgerechnet sind das 0.03432 cm/µs.
Ein Aspekt fehlt jedoch noch: Nicht die gesamte Zeitspanne interessiert uns, sondern nur jene bis zum Eintreffen des Signals am Objekt. Teile deshalb den Wert in der Variablen duration einfach durch 2.
Die Strecke distance ergibt sich nun also aus der Hälfte der duration * die Schallgeschwindigkeit in cm/µs.
distance = (duration / 2) * 0.03432;
Zuletzt gibst du die Entfernung noch im Seriellen Monitor aus und wartest mit einem kleinen Delay bis zur nächsten Messung:
Serial.print(distance);
Serial.println(" cm");
delay(500);
Und das war es auch schon. Lade den Sketch aus den Downloads dieser Lektion auf deinen Arduino und probiere deinen neuen Entfernungsmesser gleich aus!
In der nächsten Lektion installierst du neben dem Sensor einen Piezo und machst daraus mit ein wenig Code ein Theremin mit Ultraschall.