Medir la distancia con el sensor ultrasónico HC-SR04

FunduinoÚltima actualización el

Entfernung messen und daraus einen Rückfahrwarner bauen

Aufgabe: Miss mit dem Ultraschallsensor HC-SR04 eine Entfernung und lass sie dir im seriellen Monitor anzeigen. Das Projekt funktioniert mit dem Arduino UNO, dem Wemos D1 Mini, dem NodeMCU und dem ESP32-Wroom.

Elige un microcontrolador

Pins, Schaltplan und Sketch in den Arbeitsschritten ändern sich entsprechend deiner Auswahl. Sie bleibt gespeichert.

Wie funktioniert der Ultraschallsensor HC-SR04?

Der Sensor hat vier Anschlüsse: VCC (+), Trig (Signal senden), Echo (reflektiertes Signal empfangen) und GND (–).

Der Ultraschallsensor strahlt einen kurzen Schallimpuls aus, der sich mit Schallgeschwindigkeit in der Luft bewegt. Trifft er auf ein Objekt, wird er reflektiert und gelangt als Echo zurück. Aus der Zeitspanne zwischen Aussenden und Empfang berechnet der Sensor die Entfernung zum Objekt.

Im Programm sendet der Befehl pulseIn() ein HIGH-Signal, startet einen Timer und wartet darauf, dass das Signal wieder zurückkommt (den Wert LOW hat). Dann stoppt der Timer, und die Zeitspanne zwischen Senden (Trigger) und Rückkehr (Echo) steht in Mikrosekunden fest.

Schall legt in Luft 343,20 m/s zurück. Umgerechnet: 343,20 m = 34.320 cm, geteilt durch 1.000 sind 34,32 cm pro Millisekunde, noch einmal durch 1.000 sind 0,03432 cm pro Mikrosekunde.

Im Programm schreibst du die Zahl mit Punkt statt Komma: 0.03432

Ultraschallsensor HC-SR04 mit vier Anschlüssen
Der Ultraschallsensor HC-SR04
Prinzipskizze der Entfernungsmessung mit Ultraschall
Messprinzip: Schallimpuls, Reflexion, Echo (Bildquelle: microsonic.de)
1 / 2

Entfernung im seriellen Monitor anzeigen

Der Ultraschallsensor misst die Entfernung und zeigt das Ergebnis im seriellen Monitor an. Wähle unten dein Board – Schaltplan und Sketch passen sich an.

Serieller Monitor mit Entfernungswerten in Zentimetern
Die gemessene Entfernung im seriellen Monitor
HC-SR04 am Arduino UNO verkabelt
Schaltplan Arduino UNO
Arduino UNO
// Pin für den Sender
int SENDEN = 7;
// Pin für das vom Objekt reflektierte Signal
int ECHO = 6;
// Variable für die Speicherung der Entfernung
long Entfernung = 0;
void setup()
{
  pinMode(SENDEN, OUTPUT);
  pinMode(ECHO, INPUT);
  // Seriellen Monitor starten
  Serial.begin(9600);
}
void loop()
{
  // Sender kurz ausschalten, um Störungen des Signals zu vermeiden
  digitalWrite(SENDEN, LOW);
  delay(5);
  // Signal für 10 Mikrosekunden senden, danach wieder ausschalten
  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
  // Zeit/2 -> nur eine Strecke
  Entfernung = (Zeit / 2) * 0.03432;
  delay(500);
  // nur Entfernungen < 100 anzeigen
  if (Entfernung < 100)
  {
    // Messdaten anzeigen
    Serial.print("Entfernung in cm: ");
    Serial.println(Entfernung);
  }
}

Descargar: arduino-uno.ino

Placa en el IDE de ArduinoArduino Uno

Ein zusätzliches Board-Paket brauchst du dafür nicht. Der UNO ist in der Arduino IDE ab Werk dabei.

Rückfahrwarner

Zusätzlich schließt du eine LED und einen Piezo-Lautsprecher an. Je näher das Objekt kommt, desto schneller blinkt die LED und desto kürzer wird der Abstand zwischen den Tönen.

Statt einer if-Abfrage setzt der Programmcode einen switch-case-Block ein, der Wertebereiche abfragt. In der Klammer nach switch steht die Variable, die abgefragt wird; jeder case-Block legt einen Wertebereich fest.

Beim Schreiben der Wertebereiche gilt: vor und hinter den drei Punkten steht ein Leerzeichen, und die Bereiche dürfen sich nicht überlappen.

HC-SR04 mit LED und Piezo am Arduino UNO
Schaltplan Rückfahrwarner am Arduino UNO
Arduino UNO
int LED = 3;
int LAUTSPRECHER = 4;
int ECHO = 6;
int SENDEN = 7;
long Entfernung = 0;
void setup()
{
  pinMode(SENDEN, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(LAUTSPRECHER, OUTPUT);
  pinMode(LED, OUTPUT);
}
void loop()
{
  // Sender kurz ausschalten, um Störungen des Signals 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
  // Zeit/2 -> nur eine Strecke
  Entfernung = (Zeit / 2) * 0.03432;
  switch (Entfernung)
  {
    case 13 ... 15:
      tone(LAUTSPRECHER, 1000, 2);
      digitalWrite(LED, HIGH);
      delay(50);
      digitalWrite(LED, LOW);
      delay(500);
      break;
    case 11 ... 12:
      tone(LAUTSPRECHER, 1000, 2);
      digitalWrite(LED, HIGH);
      delay(50);
      digitalWrite(LED, LOW);
      delay(400);
      break;
    case 9 ... 10:
      tone(LAUTSPRECHER, 1000, 2);
      digitalWrite(LED, HIGH);
      delay(50);
      digitalWrite(LED, LOW);
      delay(300);
      break;
    case 7 ... 8:
      tone(LAUTSPRECHER, 1000, 2);
      digitalWrite(LED, HIGH);
      delay(50);
      digitalWrite(LED, LOW);
      delay(200);
      break;
    case 5 ... 6:
      tone(LAUTSPRECHER, 1000, 2);
      digitalWrite(LED, HIGH);
      delay(50);
      digitalWrite(LED, LOW);
      delay(100);
      break;
    case 2 ... 4:
      tone(LAUTSPRECHER, 1000);
      digitalWrite(LED, HIGH);
      break;
  }
}

Descargar: arduino-uno.ino

Placa en el IDE de ArduinoArduino Uno

Ein zusätzliches Board-Paket brauchst du dafür nicht. Der UNO ist in der Arduino IDE ab Werk dabei.

Calificar la guía

Comentarios

Haz una pregunta o comparte tu experiencia

Schreib uns, wenn etwas nicht funktioniert. Nenne dabei dein Board und die Fehlermeldung.

Revisamos cada comentario antes de publicarlo. Tu dirección de correo electrónico permanece con nosotros.