Bei­spiel­pro­gramm Ultraschallsensor

Ultraschallsensor HC-SR04

Der Ultra­schall­sen­sor HC-SR04 arbei­tet nach einem ein­fa­chen Prinzip:

„Der Ultra­schall­sen­sor strahlt zyklisch einen kur­zen, hoch­fre­quen­ten Schall­im­puls aus. Die­ser pflanzt sich mit Schall­ge­schwin­dig­keit in der Luft fort.
Trifft er auf ein Objekt, wird er dort reflek­tiert und gelangt als Echo zurück zum Ultra­schall­sen­sor. Aus der Zeit­span­ne zwi­schen dem Aus­sen­den des Schall­im­pul­ses und dem Emp­fang des Echo­si­gnals berech­net der Ultra­schall­sen­sor intern die Ent­fer­nung zum Objekt.“

Quel­le: 🔗https://​www​.micro​so​nic​.de/​d​e​/​s​e​r​v​i​c​e​/​u​l​t​r​a​s​c​h​a​l​l​s​e​n​s​o​r​e​n​/​p​r​i​n​z​i​p​.​htm (abge­ru­fen am 23.02.23]

Im Pro­gramm sen­det der Befehl pul­seIn() ein HIGH-Signal, star­tet einen Timer und war­tet anschlie­ßend dar­auf, dass das Signal wie­der zurück­kommt (den Wert LOW hat). Dar­auf­hin wird der Timer gestoppt und die Zeit­span­ne zwi­schen dem Sen­den des Signal (Trig­ger) und sei­ner Rück­kehr (Echo) wird in Mikro­se­kun­den ermittelt.

Die Geschwin­dig­keit des Schalls in der Luft beträgt 343,20 m/s. Die­ser Wert muss in cm/µs (cm/Mikro­se­kun­de) umgerech­net werden.

Umrech­nung in cm343,2 m • 100 = 34.320 cm
Stre­cke pro ms (Mil­li­se­kun­de)34.320 : 1.000 = 34,32 cm/ms
Stre­cke pro µs (Mikro­se­kun­de)34,32 : 1.000 = 0,03432 cm/µs

Damit der Ultra­schall­sen­sor ord­nungs­ge­mäß arbei­ten kann, musst du ihn so ein­ste­cken, dass Sen­der und Emp­fän­ger nach vorn zei­gen, damit das Signal unge­hin­dert gesen­det und emp­fan­gen wer­den kann. Die Lei­tungs­dräh­te wer­den auf der Rück­sei­te eingesteckt.

Das Pro­gramm:

// 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: 29. Feb 2024 @ 21:36