Der Ultraschallsensor HC-SR04 arbeitet nach einem einfachen Prinzip:
„Der Ultraschallsensor strahlt zyklisch einen kurzen, hochfrequenten Schallimpuls aus. Dieser pflanzt sich mit Schallgeschwindigkeit in der Luft fort.
Trifft er auf ein Objekt, wird er dort reflektiert und gelangt als Echo zurück zum Ultraschallsensor. Aus der Zeitspanne zwischen dem Aussenden des Schallimpulses und dem Empfang des Echosignals berechnet der Ultraschallsensor intern die Entfernung zum Objekt.“
Quelle: 🔗https://www.microsonic.de/de/service/ultraschallsensoren/prinzip.htm (abgerufen am 03.10.24]
Im Programm sendet der Befehl pulseIn() ein HIGH-Signal, startet einen Timer und wartet anschließend darauf, dass das Signal wieder zurückkommt (den Wert LOW hat). Daraufhin wird der Timer gestoppt und die Zeitspanne zwischen dem Senden des Signal (Trigger) und seiner Rückkehr (Echo) wird in Mikrosekunden ermittelt.
Die Geschwindigkeit des Schalls in der Luft beträgt 343,20 m/s. Dieser Wert muss in cm/µs (cm/Mikrosekunde) umgerechnet werden.
Umrechnung in cm | 343,2 m • 100 = 34.320 cm |
Strecke pro ms (Millisekunde) | 34.320 : 1.000 = 34,32 cm/ms |
Strecke pro µs (Mikrosekunde) | 34,32 : 1.000 = 0,03432 cm/µs |
Damit der Ultraschallsensor ordnungsgemäß arbeiten kann, musst du ihn so einstecken, dass Sender und Empfänger nach vorn zeigen, damit das Signal ungehindert gesendet und empfangen werden kann. Die Leitungsdrähte werden auf der Rückseite eingesteckt.
Das Programm:
// Senden und Empfangen
# define SENDEN 9
# define ECHO 8
void setup()
{
pinMode(SENDEN, OUTPUT);
pinMode(ECHO, INPUT);
Serial.begin(9600);
}
void loop()
{
long Entfernung = 0;
// Sender kurz ausschalten um Störungen des Signal zu vermeiden
digitalWrite(SENDEN, LOW);
delay(5);
// Signal senden
digitalWrite(SENDEN, HIGH);
delayMicroseconds(10);
digitalWrite(SENDEN, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
long Zeit = pulseIn(ECHO, HIGH);
// Entfernung in cm berechnen
Entfernung = (Zeit / 2) * 0.03432;
// Entfernung anzeigen
Serial.print("Entfernung in cm: ");
Serial.println(Entfernung);
delay(1000);
}
Letzte Aktualisierung: