Der HC-SR04 ist ein Ultraschall-Abstandssensor der sehr einfach anzusteuern ist und Preisgünstig zu bekommen ist. Das Arbeitsprinzip ist recht einfach: Ähnlich wie bei einem Sonar, sendet der Sensor einen Schallpuls aus der vom Sensor ausgeht und eventuell von einem Objekt reflektiert wird. Dabei wandert der Schall vom Sensor zum Objekt, wird dort reflektiert und kommt als Echo wieder zurück zum Sensor. Der Sensor hat eine eingebaute Signalverabeitung, die ein evtl Echo sofort anzeigt. Die Zeit, die bis zum Empfang des Echos vergeht, nennt man auch die Laufzeit. Wenn man diese Zeit mit dem Arduino misst, kann man mit Hilfe der Schallgeschwindigkeit den Abstand messen.
Angesteuert wird der Sensor folgendermaßen: Bei einer fallenden Flanke am Triggereingang des Sensors, die länger als 10µs dauern muss, wird das Senden eines Ultraschallsignals vorbereitet. Sobald dieses gesendet wurde, wechselt der Echo Pin von LOW auf HIGH. Wenn das Echo des Ultraschallimpulses empfangen wurde, wechselt der Echo Pin wieder auf Low. Für eine Abstandsmessung muss also lediglich die Zeit gemessen werden, für die der Echo Pin auf HIGH steht und die Zeit muss dann in eine Streck umgewandelt werden.
Hier ist die Beschaltung:
Der Code gestaltet sich, dank der Standardlibraries, die mit dem Arduino mitgeliefert werden, auch sehr einfach.
//******************* // Distance HC-SR04 // Madgyver.de //******************* #define echopin 12 #define triggerpin 13 #define speedfactor 29.41/2 //half of the time for Microseconds needed for one centimeter void setup() { Serial.begin(9600); pinMode(triggerpin, OUTPUT); pinMode(echopin, INPUT); } void loop() { Serial.println(measure() / speedfactor); delay (10); } int measure() { int duration = 0; //sending start condition digitalWrite(triggerpin, HIGH); delayMicroseconds(10); digitalWrite(triggerpin, LOW); //measure time of flight in microseconds duration = pulseIn(echopin, HIGH, 10000); //10ms timeout return duration; }
Der Code tut genau das, was weiter oben beschrieben wurde, daher werde ich nur auf die Umrechnung eingehen. Die Funktion measure gibt uns eine Zahl, die der Zeit entspricht bis das Echo empfangen wurde. Der Wert wird in Mikrosekunden angegeben. Der Umrechungsfaktor ergibt sich wie folgt:
- Schall hat bei normalen Raumtemperaturen eine Geschwindigkeit von etwa 340m/s
- der Kehrwert davon ist 0.00294117647s/m, dies ist die Zeit der Schall für das zurücklegen von einem meter braucht.
- Mal 1000000 ergibt diese selbe Zeit in Mikrosekunden gemessen: 2941.17647µs/m
- in Zentimetern ergibt das etwa 29.41µs/cm
- Da das Signal einmal hin und wieder zurück wandert, müssen wir dies natürlich auch noch berücksichtigen