Abstandsanzeiger mit Ultraschall Sensor und einem Servo Motor bauen

Wie bei einer Einparkhilfe mit einem akustischen Signalgeber, hier mit einem Arduino, einem Ultraschall Sensor und einem Servo Motor einen Abstandsanzeiger erstellen.

Das erste Bauteil ist der HC-SR04. Er ist ein einfacher Sensor, der Ultraschallwellen verwendet, um die Entfernung zu einem Objekt zu messen.
Es gibt jedoch auch andere Ultraschallsensoren auf dem Markt, die eine höhere Genauigkeit, einen größeren Messbereich oder zusätzliche Funktionen bieten.

Unser Sensor kann maximal 4 Meter messen. Wenn man näher als 10 cm rangeht, wird es ungenauer.
Hauptkomponenten auf dem Modul ist ein Ultraschall Transmitter und ein Receiver.

Der Transmitter sendet einen Ultraschallimpuls mit einer Frequenz von 40 kHz aus, der von einem Objekt reflektiert wird und der Receiver-Sensor empfängt den reflektierten Impuls (Echo).
Der Sensor misst dann, wie lange es gedauert, die der Ultraschallimpuls für die Hin- und Rückfahrt an Zeit benötigt hat und kann damit die Entfernung zum Objekt berechnen.
Die Schallgeschwindigkeit in der Luft beträgt ca. 343 m/s

Der Servo SG90 übernimmt dieser Lösung die Rolle als Zeiger, der uns den Abstand anzeigen soll.

Und wie so oft ein Arduino Uno um diese Bauteile zu steuern.

Hardware:
Board: Elegoo UNO R3

Servo: SG90 Micro Servo Motor 9G
Braun: Ground
Rot: 5 Volt
Gelb: Pin 9

Ultraschall Abstand Sensor: HC-SR04
VCC: 5Volt
Trigger: Pin 12
Echo: Pin 11
GND: Ground

Quellcode:

// Pin-Definitionen
const int trigPin = 11; // Trig-Pin des HC-SR04
const int echoPin = 12; // Echo-Pin des HC-SR04
const int servoPin = 9; // Pin für den SG90 Servomotor

void setup() {
  // Setze die Pin-Modi
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(servoPin, OUTPUT);
}

void loop() {
  // Sende Ultraschallimpuls
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Messe die Zeit für den Echo-Puls
  unsigned long duration = pulseIn(echoPin, HIGH);

  // Berechne die Entfernung in Zentimetern
  float distance = duration * 0.034 / 2;

  // Bewege den Servomotor basierend auf der Entfernung
  int angle = map(distance, 2, 200, 0, 180); // Winkel zwischen 0 und 180 Grad
  digitalWrite(servoPin, HIGH);
  delayMicroseconds(500 + angle * 10); // Wartezeit für den Servomotor
  digitalWrite(servoPin, LOW);
  delay(1000); // Wartezeit zwischen den Messungen
}

Video:

, ,