raspberrytips.nl

Afstanden meten met een HC-SR04 ultrasone sensor

De HC-SR04 is een ultrasone sensor die gebruikt kan worden om de afstand te bepalen tot een object. De sensor is voorzien van een ultrasone zender en ontvanger die zeer nauwkeurige metingen geeft in een bereik van 2cm tot 4 meter. Dit alles maakt de sensor uitermate geschikt om afstanden te meten op bijvoorbeeld een robot-auto of de nabijheid van een object te controleren.

Met behulp van het onderstaande aansluitschema en Python voorbeeldscript kun je de sensor aansluiten op een Raspberry Pi.

Gebruikte componenten

• HC-SR04 sensor (link)
• 10K Weerstand (link)
• 4.7K Weerstand (link)
• Dupont verbindingskabels (link)

Raspberry Pi Zero, Raspberry Pi 2, Raspberry Pi 3
Raspbian Jessie (2016-11-25 kernel 4.4)

Aansluitschema

Raspberry Pi RPI Pin HC-SR04
VCC 5V #2 VCC
GND #6 GND
GPIO 23 #16 TRIG
GPIO 24 #18 ECHO

De output van de ECHO pin is 5v, wat te hoog is voor de GPIO 3.3v van de Raspberry Pi. Om beschadigingen te voorkomen gebruiken we twee weerstanden van 4.7K en 10K om het ECHO signaal terug te brengen naar 3.3v. Zie onderstaande schema:

HC-SR04 demoscript

Nadat de sensor is aangesloten kunnen we met behulp van het onderstaande script metingen gaan uitvoeren.

Allereerst wordt er een trigger gegenereerd op de TRIG input, hierdoor worden er 8 ultrasonische (40Khz) signalen verstuurd. Als er zich obstakels bevinden voor de sensor dan zullen de ultrasonische signalen reflecteren. Wanneer het signaal terugkomt wordt de ECHO output module bepaalde tijd actief en wordt op basis van terug ontvangen pulse signalen (150μS tot 25mS) de afstand berekent.

#!/usr/bin/env python
# Control HC-SR04 ultrasone sensor from Raspberry Pi
# https://raspberrytips.nl/hc-sr04-ultrasone-sensor/
import RPi.GPIO as GPIO #Import GPIO library
import time #Import time library
GPIO.setmode(GPIO.BCM) #Set GPIO pin numbering
TRIG = 23 #Associate pin 23 to TRIG
ECHO = 24 #Associate pin 24 to ECHO
print "Distance measurement in progress"
GPIO.setup(TRIG,GPIO.OUT) #Set pin as GPIO out
GPIO.setup(ECHO,GPIO.IN) #Set pin as GPIO in
while True:
GPIO.output(TRIG, False) #Set TRIG as LOW
print "Waiting Sensor To Settle"
time.sleep(2) #Delay of 2 seconds
GPIO.output(TRIG, True) #Set TRIG as HIGH
time.sleep(0.00001) #Delay of 0.00001 seconds
GPIO.output(TRIG, False) #Set TRIG as LOW
while GPIO.input(ECHO)==0: #Check whether the ECHO is LOW
pulse_start = time.time() #Saves the last known time of LOW pulse
while GPIO.input(ECHO)==1: #Check whether the ECHO is HIGH
pulse_end = time.time() #Saves the last known time of HIGH pulse
pulse_duration = pulse_end - pulse_start #Get pulse duration to a variable
distance = pulse_duration * 17150 #Multiply pulse duration by 17150 to get distance
distance = round(distance, 2) #Round to two decimal points
if distance > 2 and distance < 400: #Check whether the distance is within range
print "Distance:",distance - 0.5,"cm" #Print distance with 0.5 cm calibration
else:
print "Out Of Range" #display out of range
view raw afstand.py hosted with ❤ by GitHub

Plaats het bovenstaande script op je Raspberry Pi met behulp van een editor, of download deze met:

wget https://raspberrytips.nl/afstand.py

Start het script met:

python afstand.py

Na enkele seconden zullen de eerste meetresultaten verschijnen. Is de afstand grote dan 4 meter dan verschijnt de melding ‘Out Of Range’.

Meeting kalibreren

Mochten de meetresultaten niet 100% kloppen dan kun je deze kalibreren, in het script wordt rekening gehouden met een afwijking van -0,5 cm. Deze waarde kun je eventueel aanpassen, meet hiervoor een afstand van 15cm en controleer dit met een meetlat. De afwijking kun je in de onderstaande regel van het Python script aanpassen:

    print "Afstand:",distance - 0.5,"cm"