I denne artikkelen vil jeg vise deg hvordan du bruker en HC-SR04 ultralydssensor for å måle avstanden mellom sensoren din og et objekt på sin måte ved hjelp av Raspberry Pi. La oss komme i gang.
Komponenter du trenger:
For å kunne måle avstand med Raspberry Pi og HC-SR04-sensor, trenger du,
- En Raspberry Pi 2 eller 3 enkeltbordcomputer med Raspbian installert.
- En HC-SR04 ultralydsensormodul.
- 3x10kΩ motstander.
- Et brødbrett.
- Noen mannlige til kvinnelige kontakter.
- Noen mannlige til mannlige kontakter.
Jeg har skrevet en dedikert artikkel om installering av Raspbian på Raspberry Pi, som du kan sjekke på https: // linuxhint.com / install_raspbian_raspberry_pi / hvis du trenger det.
HC-SR04 Pinouts:
HC-SR04 har 4 pinner. VCC, TRIGGER, ECHO, GROUD.
Fig1: HC-SR04 pinouts (https: // www.mouser.com / ds / 2/813 / HCSR04-1022824.pdf)
VCC-pinnen skal kobles til + 5V-pinnen på Raspberry Pi, som er pinne 2. GROUND-pinnen skal kobles til GND-pinnen på Raspberry Pi, som er pin 4.
TRIGGER- og ECHO-pinnene skal kobles til GPIO-pinnene på Raspberry Pi. Mens TRIGGER-pinnen kan kobles direkte til en av GPIO-pinnene på Raspberry Pi, trenger ECHO-pinnen en spenningsdelerkrets.
Kretsdiagram:
Koble HC-SR04 ultralydssensoren til Raspberry Pi på følgende måte:
Fig2: HC-SR04 ultralydssensor koblet til Raspberry Pi.
Når alt er koblet sammen, ser det slik ut:
Fig3: HC-SR04 ultralydssensor koblet til Raspberry Pi på brødbrett.
Fig4: HC-SR04 ultralydssensor koblet til Raspberry Pi på brødbrett.
Skrive et Python-program for måling av avstand med HC-SR04:
Først kobler du til Raspberry Pi ved hjelp av VNC eller SSH. Åpne deretter en ny fil (la oss si avstand.py) og skriv inn følgende kodelinjer:
Her importerer linje 1 raspberry pi GPIO-biblioteket.
Linje 2 importerer tidsbiblioteket.
Inne i prøve blokk, blir den faktiske koden for måling av avstanden ved hjelp av HC-SR04 skrevet.
De endelig blokk brukes til å rydde opp i GPIO-pinnene med GPIO.rydde opp() metode når programmet avsluttes.
Inne i prøve blokk, på linje 5, GPIO.setmode (GPIO.BORDE) brukes til å gjøre definering av pinner enklere. Nå kan du referere til pinner med fysiske tall slik det er på Raspberry Pi-kortet.
På linje 7 og 8, pinTrigger er satt til 7 og pinEcho er satt til 11. De AVTREKKER pin av HC-SR04 er koblet til pin 7, og EKKO pin av HC-SR04 er koblet til pin 11 på Rapsberry Pi. Begge disse er GPIO-pinner.
På linje 10, pinTrigger er satt opp for OUTPUT ved hjelp GPIO.oppsett () metode.
På linje 11, pinEcho er satt opp for INNGANG å bruke GPIO.oppsett () metode.
Linjene 13-17 brukes til tilbakestilling pinTrigger (ved å sette den til logikk 0) og stille inn pinTrigger til logikk 1 i 10 ms og deretter til logikk 0. På 10 ms sender HC-SR04-sensoren 8 40 KHz-puls.
Linjene 19-24 brukes til å måle tiden det tar før 40KHz-pulser reflekteres til et objekt og tilbake til HC-SR04-sensoren.
På linje 25 måles avstanden ved hjelp av formelen,
Avstand = deltatid * hastighet (340M / S) / 2
=> Avstand = deltatid * (170M / S)
Jeg beregnet avstanden i centimeter i stedet for meter, bare for å være presis. Jeg beregnet avstanden er også avrundet til 2 desimaler.
Til slutt, på linje 27, blir resultatet skrevet ut. Det er det, veldig enkelt.
Kjør nå Python-skriptet med følgende kommando:
$ python3 avstand.pySom du ser er avstanden målt 8.40 cm.
Fig5: objekt plassert ca 8.40 cm fra sensoren.
Jeg flyttet for å innvende litt lenger, avstanden som er målt er 21.81cm. Så det fungerer som forventet.
Fig6: objekt plassert omtrent 21.81 cm fra sensoren.
Så det er slik du måler avstand med Raspberry Pi ved hjelp av HC-SR04 ultralydsensor. Se koden for avstand.py under:
importer RPi.GPIO som GPIOimporttid
prøve:
GPIO.setmode (GPIO.BORDE)
pinTrigger = 7
pinEcho = 11
GPIO.oppsett (pinTrigger, GPIO.UTE)
GPIO.oppsett (pinEcho, GPIO.I)
GPIO.utgang (pinTrigger, GPIO.LAV)
GPIO.utgang (pinTrigger, GPIO.HØY)
tid.sove (0.00001)
GPIO.utgang (pinTrigger, GPIO.LAV)
mens GPIO.inngang (pinEcho) == 0:
pulseStartTime = tid.tid()
mens GPIO.inngang (pinEcho) == 1:
pulseEndTime = tid.tid()
pulseDuration = pulseEndTime - pulseStartTime
avstand = rund (pulsvarighet * 17150, 2)
utskrift ("Avstand:%.2f cm "% (avstand))
endelig:
GPIO.rydde opp()