Ultrahangos távolságmérő Raspberry PI-hez + ajándék extrák
A HC-SR04 ultrahangos távolságmérő szenzor segítségével 2 cm-től 450 cm-ig mérhetünk nagy pontossággal távolságot. Egyszerűen illeszthetjük a Raspberry PI-hez 2 db ellenállás és néhány jumper kábel segítségével.
Az ellenállásokat ajándékba kapod, hogy azonnal összerakhasd Te is!
-
Működés:
1, A szenzor Trigger lábán egy 10us-os High (5V) jelet kell adni a mérés megkezdéséhez.
2, A modul automatikusan kiküld nyolc 40kHz-es négyszög alakú impulzust és automatikusan felismeri a visszaverődött jelet.
3, Az echo lábát HIGH-ba billenti, és addig marad HIGH-ban amíg érzékeli a hang visszaverődését. Amint veszi a visszaverődött jelet, LOW-ba kerül. Ezt az időtartamot kell megmérni (HIGH_LEVEL_time) a távolság meghatározásához.
Ez alapján a hang terjedési sebességének (~340 m/s) ismeretében kiszámolható azon objektum pontos távolsága, melyről a visszaverődés történt.
(Fontos: a mérés eredménye a mérendő távolság kétszeresének megtételéhez szükséges idő lesz, mert az ultrahang a modul adójától eljut a tárgyig, majd onnan visszaverődve tér vissza a modul vevő szenzoráig)
Azaz:
mért_távolság = (HIGH_LEVEL_time * hangsebesség ) / 2
Illesztés a Raspberry PI-hez:
A mellékelt kép szerint kössük a HC-SR04 ultrahangos távolságmérő szenzor lábait a Raspberry PI-hez. A tápfeszültséget (+5V) közvetlenül a Raspberry PI-ről (2-es láb) kapja. A szenzor GND lábát a Raspberry PI 6-os lábára kötjük. A bemeneti Trigger jelet a GPIO23 (16-os láb) lábról adjuk. Ehhez ezt a lábat OUT módba tesszük. A szenzor vezérléséhez megfelelő a 3.3V-os jelszint.
Mivel a HC-SR04 kimenetén (ECHO láb) 5V TTL jelet ad, ezért két ellenállás (R1=330 Ohm, R2=470 Ohm) segítségével állítjuk elő a 3.3V-os Raspberry PI-vel kompatibilis jelszintet.
Az R1 és R2 közötti pontot kötjük a Raspberry PI GPIO24 portjára (18-as láb). Ezt a lábat IN módba kell konfigurálni és ezen tudjuk érzékelni az ECHO láb jelszintváltozását (3.3V -> 0V).
Ötletek a felhasználáshoz:
- biztonsági megoldások (közelítés érzékelés)
- robotika
- a Te fantáziád bármit kitalál
Tulajdonságok:
- Tápfeszültség: 5V
- Áram felvétel: <2mA
- Érzékelési szög: 15fok
- Érzékelési távolság: 2cm-450cm
- Pontosság: 0.3 cm
- Bemeneti trigger jel: 10usec TTL
- Kimeneti jel: TTL PWL jel (5V->0V)
Csatlakozók:
- VCC
- trig(T)
- echo(R)
- GND
Python kód:
Az alábbi kódot mentsük el hcsr04.py névvel.
Futtatás:sudo python hcsr04.py Köszönet érte Matt Hawkins-nak
#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# hcsr04.py
# Measure distance using an ultrasonic module
# in a loop.
#
# Author : Matt Hawkins
# Date : 28/01/2013
# -----------------------
# Import required Python libraries
# -----------------------
import time
import RPi.GPIO as GPIO
# -----------------------
# Define some functions
# -----------------------
def measure():
# This function measures a distance
GPIO.output(GPIO_TRIGGER, True)
time.sleep(0.00001)
GPIO.output(GPIO_TRIGGER, False)
start = time.time()
while GPIO.input(GPIO_ECHO)==0:
start = time.time()
while GPIO.input(GPIO_ECHO)==1:
stop = time.time()
elapsed = stop-start
distance = (elapsed * 34300)/2
return distance
def measure_average():
# This function takes 3 measurements and
# returns the average.
distance1=measure()
time.sleep(0.1)
distance2=measure()
time.sleep(0.1)
distance3=measure()
distance = distance1 + distance2 + distance3
distance = distance / 3
return distance
# -----------------------
# Main Script
# -----------------------
# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)
# Define GPIO to use on Pi
GPIO_TRIGGER = 23
GPIO_ECHO = 24
print "Ultrasonic Measurement"
# Set pins as output and input
GPIO.setup(GPIO_TRIGGER,GPIO.OUT) # Trigger
GPIO.setup(GPIO_ECHO,GPIO.IN) # Echo
# Set trigger to False (Low)
GPIO.output(GPIO_TRIGGER, False)
# Wrap main content in a try block so we can
# catch the user pressing CTRL-C and run the
# GPIO cleanup function. This will also prevent
# the user seeing lots of unnecessary error
# messages.
try:
while True:
distance = measure_average()
print "Distance : %.1f" % distance
time.sleep(1)
except KeyboardInterrupt:
# User pressed CTRL-C
# Reset GPIO settings
GPIO.cleanup()
-
Raktárkészlet VANCikkszám RPI-885265