Raspberry Pi - Ultraschallsensor

Dieses Tutorial zeigt Ihnen, wie Sie Raspberry Pi und Ultraschallsensor verwenden, um die Entfernung zu Hindernissen oder Objekten zu messen. Im Detail lernen wir:

Benötigte Hardware

1×Raspberry Pi 5
1×Ultraschallsensor
1×Jumper-Kabel
1×(Empfohlen) Schraubklemmenblock-Shield für Raspberry Pi
1×(Empfohlen) Raspberry Pi Prototyping-Grundplatte & Breadboard-Kit
1×(Empfohlen) HDMI-Touchscreen-Monitor für Raspberry Pi

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über den Ultraschallsensor

Der HC-SR04 Ultraschallsensor wird verwendet, um die Entfernung zu einem Objekt durch die Nutzung von Ultraschallwellen zu berechnen.

Die Pinbelegung des Ultraschallsensors

Der HC-SR04 Ultraschallsensor hat vier Pins:

  • VCC-Pin: muss mit VCC (5V) verbunden werden
  • GND-Pin: muss mit GND (0V) verbunden werden
  • TRIG-Pin: dieser Pin empfängt ein Steuersignal (Puls) vom Raspberry Pi
  • ECHO-Pin: dieser Pin sendet ein Signal (Puls) an den Raspberry Pi. Der Raspberry Pi misst die Länge des Pulses, um die Entfernung zu berechnen.
Ultraschallsensor Pinbelegung

Wie es funktioniert

Dieser Abschnitt widmet sich vertieftem Wissen. Machen Sie sich KEINE Sorgen, wenn Sie es nicht verstehen. Überspringen Sie diesen Abschnitt, wenn er Sie überfordert, und kommen Sie an einem anderen Tag zurück. Lesen Sie weiter mit den folgenden Abschnitten.
  1. Der Mikrocontroller erzeugt einen 10-Mikrosekunden-Puls am TRIG-Pin, wodurch der Ultraschallsensor automatisch Ultraschallwellen aussendet.
  2. Wenn die Wellen auf ein Hindernis treffen, werden sie zum Sensor zurückreflektiert.
  3. Der Ultraschallsensor erkennt dann die reflektierte Welle und misst ihre Laufzeit.
  4. Als Ergebnis erzeugt der Ultraschallsensor einen Puls am ECHO-Pin, wobei die Dauer des Pulses gleich der Laufzeit der Ultraschallwelle ist.
  5. Der Mikrocontroller misst die Pulsdauer am ECHO-Pin und berechnet die Entfernung zwischen Sensor und Hindernis.

Wie man die Entfernung vom Ultraschallsensor erhält

  1. Um die Entfernung vom Ultraschallsensor zu berechnen, müssen zwei Schritte unternommen werden, wie im Abschnitt "Wie es funktioniert" beschrieben (Schritte 1 und 6):
  2. Erzeugung eines 10-Mikrosekunden-Pulses am TRIG-Pin.
  3. Messung der Pulsdauer am ECHO-Pin.
  4. Verwendung der gemessenen Pulsdauer zur Berechnung der Entfernung zwischen Sensor und Hindernis.

Entfernungsberechnung

Wir haben:

  • Die Laufzeit der Ultraschallwelle (µs): travel_time = pulse_duration
  • Die Geschwindigkeit der Ultraschallwelle: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs

Also:

  • Die Laufstrecke der Ultraschallwelle (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
  • Die Entfernung zwischen Sensor und Hindernis (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

Raspberry Pi - Ultraschallsensor

Die Pins eines Raspberry Pi können einen 10-Mikrosekunden-Puls erzeugen und die Länge des Pulses messen. Dies ermöglicht es uns, die Entfernung vom Ultraschallsensor zu berechnen, indem wir zwei Raspberry Pi Pins verwenden. Also müssen wir nur zwei Pins des Raspberry Pi verwenden:

  • Ein Pin wird mit dem TRIG-Pin des Ultraschallsensors verbunden, um einen 10µs Puls zu erzeugen.
  • Der andere Pin wird mit dem ECHO-Pin des Ultraschallsensors verbunden, um den Puls vom Sensor zu messen

Schaltplan

Raspberry Pi Ultraschallsensor Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Raspberry Pi Schraubklemmenblock-Shield

Programmierung für den Ultraschallsensor

  • Erzeugen Sie einen 10-Mikrosekunden-Puls am Pin 9 des Raspberry Pi durch Nutzung der GPIO.output() und time.sleep() Funktionen.
  • Zum Beispiel:
  • Setzen Sie Pin 9 auf HIGH mit digitalWrite() und verzögern Sie dann um 10 Mikrosekunden mit delayMicroseconds().
GPIO.output(TRIG_PIN, GPIO.HIGH) time.sleep(0.00001) GPIO.output(TRIG_PIN, GPIO.LOW)
  • Bestimmen Sie die Pulsdauer (µs) am Pin 8 des Raspberry Pi durch Verwendung der pulseIn() Funktion. Zum Beispiel:
while GPIO.input(ECHO_PIN) == 0: pulse_start = time.time() while GPIO.input(ECHO_PIN) == 1: pulse_end = time.time() pulse_duration = pulse_end - pulse_start
  • Bestimmen Sie die Entfernung (cm):
distance = pulse_duration * 34300 / 2

Raspberry Pi Code

Schnelle Schritte

  • Stellen Sie sicher, dass Sie Raspbian oder ein anderes Raspberry Pi-kompatibles Betriebssystem auf Ihrem Pi installiert haben.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit dem gleichen lokalen Netzwerk wie Ihr PC verbunden ist.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, wenn Sie Bibliotheken installieren müssen.
  • Falls Sie den Raspberry Pi zum ersten Mal verwenden, siehe Raspberry Pi einrichten
  • Verbinden Sie Ihren PC mit dem Raspberry Pi über SSH mit dem integrierten SSH-Client auf Linux und macOS oder PuTTY auf Windows. Siehe PC mit Raspberry Pi über SSH verbinden.
  • Stellen Sie sicher, dass die RPi.GPIO Bibliothek installiert ist. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Erstellen Sie eine Python-Skriptdatei ultrasonic_sensor.py und fügen Sie den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-ultrasonic-sensor import RPi.GPIO as GPIO import time # Set the GPIO mode (BCM or BOARD) GPIO.setmode(GPIO.BCM) # Define GPIO pins for the ultrasonic sensor TRIG_PIN = 23 ECHO_PIN = 24 # Set the trigger and echo pins GPIO.setup(TRIG_PIN, GPIO.OUT) GPIO.setup(ECHO_PIN, GPIO.IN) def get_distance(): # Send a short pulse to the trigger pin GPIO.output(TRIG_PIN, GPIO.HIGH) time.sleep(0.00001) GPIO.output(TRIG_PIN, GPIO.LOW) # Measure the duration for the echo pulse while GPIO.input(ECHO_PIN) == 0: pulse_start = time.time() while GPIO.input(ECHO_PIN) == 1: pulse_end = time.time() pulse_duration = pulse_end - pulse_start # Calculate the distance based on the speed of sound (34300 cm/s) distance = pulse_duration * 34300 / 2 return distance try: while True: distance = get_distance() print(f"Distance: {distance:.2f} cm") time.sleep(1) except KeyboardInterrupt: # If the user presses Ctrl+C, clean up the GPIO configuration GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:
python3 ultrasonic_sensor.py
  • Platzieren Sie Ihre Hand vor dem Ultraschallsensor
  • Überprüfen Sie die Entfernung zwischen dem Sensor und Ihrer Hand, die im Terminal angezeigt wird
PuTTY - Raspberry Pi
distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm

Das Skript läuft in einer Endlosschleife kontinuierlich, bis Sie Ctrl + C im Terminal drücken.

Code-Erklärung

Schauen Sie sich die zeilenweise Erklärung in den Kommentaren des Quellcodes an!

Rauschen aus Entfernungsmessungen des Ultraschallsensors filtern

Das Messergebnis eines Ultraschallsensors kann Rauschen enthalten, was in einigen Anwendungen zu unerwünschten Vorgängen führen kann. Um dieses Rauschen zu entfernen, kann der folgende Algorithmus verwendet werden:

  1. Mehrere Messungen durchführen und in einem Array speichern
  2. Das Array in aufsteigender Reihenfolge sortieren
  3. Das Rauschen herausfiltern durch:
    • Die kleinsten Proben werden als Rauschen betrachtet und sollten ignoriert werden
    • Die größten Proben werden als Rauschen betrachtet und sollten ignoriert werden
    • Der Durchschnitt der mittleren Proben sollte als Messwert genommen werden

    Der folgende Beispielcode nimmt 20 Messungen vor:

    • Ignoriert die fünf kleinsten Proben, die als Rauschen betrachtet werden.
    • Ignoriert die fünf größten Proben, die ebenfalls als Rauschen betrachtet werden.
    • Ermittelt den Durchschnitt der 10 mittleren Proben (von der 5. bis zur 14.).
    # Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-ultrasonic-sensor import RPi.GPIO as GPIO import time TRIG_PIN = 23 # Raspberry Pi GPIO pin connected to TRIG pin of ultrasonic sensor ECHO_PIN = 24 # Raspberry Pi GPIO pin connected to ECHO pin of ultrasonic sensor GPIO.setmode(GPIO.BCM) GPIO.setup(TRIG_PIN, GPIO.OUT) GPIO.setup(ECHO_PIN, GPIO.IN) def get_distance(): filter_array = [] num_samples = 20 # Taking multiple measurements and store in an array for _ in range(num_samples): filter_array.append(ultrasonic_measure()) time.sleep(0.03) # To avoid ultrasonic interference (30 milliseconds delay) # Sorting the array in ascending order filter_array.sort() # Filtering noise # Discard the five smallest and five largest samples filtered_samples = filter_array[5:-5] # Calculate the average of the remaining samples distance = sum(filtered_samples) / len(filtered_samples) return distance def ultrasonic_measure(): GPIO.output(TRIG_PIN, True) time.sleep(0.00001) GPIO.output(TRIG_PIN, False) while GPIO.input(ECHO_PIN) == 0: pulse_start = time.time() while GPIO.input(ECHO_PIN) == 1: pulse_end = time.time() pulse_duration = pulse_end - pulse_start distance_cm = 0.017 * pulse_duration return distance_cm try: while True: distance = get_distance() print("Distance: {:.2f} cm".format(distance)) time.sleep(1) # Wait for 1 second before taking the next measurement except KeyboardInterrupt: print("Measurement stopped by the user.") finally: GPIO.cleanup()

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Fordern Sie sich selbst heraus

Verwenden Sie einen Ultraschallsensor, um eines der folgenden Projekte zu realisieren:

  • Bauen Sie ein Kollisionsvermeidungssystem für ein ferngesteuertes Auto.
  • Messen Sie die Materialmenge in einem Mülleimer.
  • Überwachen Sie den Füllstand des Mülleimmers.
  • Öffnen und schließen Sie den Mülleimer automatisch. Hinweis: Siehe Raspberry Pi - Servo Motor.

Anwendungen des Ultraschallsensors

  • Kollisionsvermeidung
  • Füllstandserkennung
  • Pegelmessung
  • Näherungserkennung

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!