Raspberry Pi - Ultrasonic Sensor

Deze handleiding leert u hoe u met een Raspberry Pi en een ultrasonic sensor afstanden kunt meten tot obstakels of objecten. In detail behandelen we:

Hardware Benodigd

1×Raspberry Pi 5
1×Ultrasone Sensor
1×Jumper Wires (jumperdraden)
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over Ultrasonic Sensor

De HC-SR04 ultrasonic sensor wordt gebruikt om de afstand tot een object te berekenen door gebruik te maken van ultrasone golven.

Pinout van de Ultrasonic Sensor

De HC-SR04 ultrasonic sensor heeft vier pinnen:

  • VCC pin: moet worden aangesloten op VCC (5V)
  • GND pin: moet worden aangesloten op GND (0V)
  • TRIG pin: deze pin ontvangt een stuursignaal (puls) van de Raspberry Pi
  • ECHO pin: deze pin verstuurt een signaal (puls) terug naar de Raspberry Pi. De Raspberry Pi meet de lengte van deze puls om de afstand te berekenen.
Ultrasonic Sensor pinout

Hoe Het Werkt

Deze sectie is gewijd aan diepgaande kennis. Maak u GEEN zorgen als u het niet begrijpt. Sla deze sectie over als deze u overweldigt en kom op een andere dag terug. Lees verder met de volgende secties.
  1. De microcontroller genereert een puls van 10 microseconden op de TRIG pin, waardoor de ultrasonic sensor automatisch ultrasone golven uitzendt.
  2. Wanneer de golven een obstakel raken, worden ze teruggekaatst naar de sensor.
  3. De ultrasonic sensor detecteert vervolgens de gereflecteerde golf en meet de reistijd hiervan.
  4. Hierdoor genereert de ultrasonic sensor een puls op de ECHO pin, waarbij de duur van de puls gelijk is aan de reistijd van de ultrasone golf.
  5. De microcontroller meet de pulsduur op de ECHO pin en berekent de afstand tussen sensor en obstakel.

Hoe De Afstand Te Bepalen Met Ultrasonic Sensor

  1. Voor het berekenen van de afstand met de ultrasonic sensor moeten twee stappen worden doorlopen, zoals beschreven in de sectie "Hoe Het Werkt" (stappen 1 en 6):
  2. Genereer een puls van 10 microseconden op de TRIG pin.
  3. Meet de pulsduur op de ECHO pin.
  4. Gebruik de gemeten pulsduur om de afstand tussen sensor en obstakel te berekenen.

Afstandsberekening

We hebben:

  • De reistijd van de ultrasone golf (μs): travel_time = pulse_duration
  • De snelheid van de ultrasone golf: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/μs

Dus:

  • De reisafstand van de ultrasone golf (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
  • De afstand tussen sensor en obstakel (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

Raspberry Pi - Ultrasonic Sensor

De pinnen van een Raspberry Pi kunnen een puls van 10 microseconden genereren en de lengte van een puls meten. Hierdoor kunnen we de afstand bepalen van de ultrasonic sensor door twee Raspberry Pi pinnen te gebruiken. We hebben dus slechts twee Raspberry Pi pinnen nodig:

  • Eén pin is verbonden met de TRIG pin van de ultrasonic sensor om een puls van 10 μs te genereren.
  • De andere pin is verbonden met de ECHO pin van de ultrasonic sensor om de puls van de sensor te meten.

Bedradingsschema

Raspberry Pi Ultrasonic Sensor bedrading schema

This image is created using Fritzing. Click to enlarge image

Hoe Te Programmeren Voor Ultrasonic Sensor

  • Maak een puls van 10 microseconden op pin 9 van de Raspberry Pi met gebruik van de functies GPIO.output() en time.sleep().
  • Bijvoorbeeld:
  • Zet pin 9 op HIGH via digitalWrite() en wacht dan 10 microseconden met delayMicroseconds().
GPIO.output(TRIG_PIN, GPIO.HIGH) time.sleep(0.00001) GPIO.output(TRIG_PIN, GPIO.LOW)
  • Bepaal de pulsduur (μs) op pin 8 van de Raspberry Pi met de pulseIn() functie. Bijvoorbeeld:
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
  • Bereken de afstand (cm):
distance = pulse_duration * 34300 / 2

Raspberry Pi Code

Snelle Stappen

  • Zorg dat u Raspbian of een ander door Raspberry Pi ondersteund besturingssysteem op uw Pi geïnstalleerd hebt.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw PC.
  • Zorg dat uw Raspberry Pi met internet verbonden is als u libraries moet installeren.
  • Als dit de eerste keer is dat u de Raspberry Pi gebruikt, bekijk dan hoe u de Raspberry Pi instelt.
  • Verbind uw PC via SSH met de Raspberry Pi met de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows. Zie hoe u uw PC via SSH verbindt met de Raspberry Pi.
  • Zorg dat de RPi.GPIO library geïnstalleerd is. Zo niet, installeer deze met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python scriptbestand aan met de naam ultrasonic_sensor.py en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/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()
  • Sla het bestand op en voer het Python script uit via het volgende commando in de terminal:
python3 ultrasonic_sensor.py
  • Houd uw hand voor de ultrasonic sensor
  • Bekijk de afstand tussen sensor en hand die in de terminal wordt weergegeven
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

Het script draait in een oneindige lus totdat u Ctrl + C drukt in de terminal.

Code Uitleg

Bekijk de regel-voor-regel uitleg die verwerkt is in de commentaren van de broncode!

Hoe Ruis Uit Afstandsmetingen Van Ultrasonic Sensor Te Filteren

De meetresultaten van een ultrasonic sensor kunnen ruis bevatten, wat in sommige toepassingen ongewenste effecten kan geven. Om deze ruis te verwijderen kan het volgende algoritme gebruikt worden:

  1. Neem meerdere metingen en sla deze op in een array.
  2. Sorteer de array oplopend.
  3. Filter de ruis door:
    • De kleinste waarden als ruis te beschouwen en te negeren.
    • De grootste waarden als ruis te beschouwen en te negeren.
    • Het gemiddelde te nemen van de middelste waarden als de gemeten waarde.

    Het voorbeeld hieronder neemt 20 metingen:

    • Negeer de vijf kleinste waarden, omdat deze ruis worden genoemd.
    • Negeer de vijf grootste waarden, omdat ook deze als ruis gelden.
    • Neem het gemiddelde van de 10 middelste waarden (5e tot en met 14e).
    # Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/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

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Daag Uzelf Uit

Gebruik een ultrasonic sensor om een van de volgende projecten te maken:

  • Bouw een botsingsmeldingssysteem voor een op afstand bestuurbare auto.
  • Meet de hoeveelheid materiaal in een vuilnisbak.
  • Monitor het vulniveau van de vuilnisbak.
  • Open en sluit de vuilnisbak automatisch. Tip: Bekijk Raspberry Pi - Servo Motor.

Toepassingen Van Ultrasonic Sensor

  • Botsingen vermijden
  • Volle bak detecteren
  • Niveau meten
  • Nabijheid detecteren

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!