Ein Ultraschallsensor strahlt hochfrequente Schallimpulse aus. Treffen diese auf ein Objekt, werden sie reflektiert und gelangen als Echo zurück zum Sensor.
Aus der Zeitspanne zwischen dem Aussenden des Schallimpulses und dem Empfang des Echosignals kann die Entfernung zum Objekt bestimmt werden.
Wir verwenden das Ultraschallmodul HC-SR04. Es verfügt neben der Schaltelektronik über zwei identische piezo-elektrische Wandler, wobei der eine als Schallgeber (Sender) und der andere als Empfänger fungiert.
Das Modul kann über den Arduino mit Strom versorgt werden. Dazu verbindet man Vcc mit 5V, Gnd mit GND. Für die Zeitmessung müssen der Ausgang (Trig) und der Eingang (Echo) mit je einem digitalen Pin verbunden sein. Hier der Verdrahtungsplan:
Mit einer entsprechenden Programmierung kann der Arduino den zeitlichen Abstand zwischen dem gesendeten Ultraschallimpuls und dem empfangenen Echo messen und mit Hilfe der Schallgeschwindigkeit (343 m/s) die Entfernung zum Objekt berechnen.
Hier ein einfaches Programmierbeispiel, das die Laufzeiten des Ultraschallsignals misst und die Werte im seriellen Monitor (Aufrufen mit: Shift + Strg + M) ausgibt.
Das Programm ist auch geeignet als Funktionstest für den HC-SR04 (Näheres weiter unten).
#define trigPin 12
#define echoPin 11
#define led 13
void setup(){
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop(){
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/2*34300/1000000; //Maßeinheiten: cm, µs
Serial.print("Distanz: ");
Serial.print(distance);
Serial.print("cm");
Serial.println();
Serial.print("Zeit: ");
Serial.print(duration);
Serial.print("us");
Serial.println();
delay(1000);
if(distance<12){
digitalWrite(led, LOW);
delay(200);
}
else{
digitalWrite(led, HIGH);
}
}
Erklärungen
Bei Raumtemperatur beträgt die Schallgeschwindigkeit in der Luft rund 343 m/s oder 0,0343 cm/µs.
Die Entfernung (s) entspricht der halben Zeitspanne (das Signal läuft hin und zurück) zwischen dem Aussenden des Schallimpulses und dem Empfang des Echos (t/2) multipliziert mit der Geschwindigkeit des Schalls in der Luft (c).
s = t/2 * c
Diese Beziehung findet sich auch in der Programmierung:
distance = duration/2*34300/1000000;
Die Schallgeschwindigkeit ist in Zentimeter pro Mikrosekunde (34300/1000000) angegeben. Die „12“ in der folgenden Programmzeile meint also12 cm.
if(distance<12){
Dementsprechend führt man für einen Funktionstest die Hand bis auf 12 cm oder dichter an den Ultraschallsensor heran und achtet darauf, ob die eingebaute LED neben Pin 13 (siehe Abbildung oben) erlischt. Zieht man die Hand zurück, muss die LED wieder aufleuchten.
Hier eine entsprechende Programmierung mit Ardublock:
Das Ultraschallmodul kann preisgünstig bei Funduino erworben werden.