Šajā rakstā es parādīšu, kā ar HC-SR04 ultraskaņas sensoru izmērīt attālumu starp sensoru un objektu savā veidā, izmantojot Raspberry Pi. Sāksim.
Nepieciešamie komponenti:
Lai veiksmīgi izmērītu attālumu ar Raspberry Pi un HC-SR04 sensoru, jums tas ir nepieciešams,
- Raspberry Pi 2 vai 3 viena borta dators ar instalētu Raspbian.
- HC-SR04 ultraskaņas sensoru modulis.
- 3x10kΩ rezistori.
- Maizes dēlis.
- Daži vīriešu un sieviešu savienotāji.
- Daži vīriešu un vīriešu savienotāji.
Esmu uzrakstījis īpašu rakstu par Raspbian instalēšanu Raspberry Pi, kuru varat pārbaudīt vietnē https: // linuxhint.lv / install_raspbian_raspberry_pi / ja nepieciešams.
HC-SR04 tapas:
HC-SR04 ir 4 tapas. VCC, TRIGGER, ECHO, GRUD.
1. attēls: HC-SR04 pinouts (https: // www.peles.com / ds / 2/813 / HCSR04-1022824.pdf)
VCC tapai jābūt savienotai ar Raspberry Pi + 5V tapu, kas ir 2. tapa. ZEME zemei jāpieslēdz Raspberry Pi GND tapai, kas ir 4. tapa.
TRIGGER un ECHO tapām jābūt savienotām ar Raspberry Pi GPIO tapām. Kaut arī TRIGGER tapu var tieši savienot ar vienu no Raspberry Pi GPIO tapām, ECHO tapai ir nepieciešama sprieguma dalītāja ķēde.
Ķēdes shēma:
Pievienojiet ultraskaņas sensoru HC-SR04 savam Raspberry Pi šādi:
2. attēls: HC-SR04 ultraskaņas sensors, kas savienots ar Raspberry Pi.
Kad viss ir savienots, tas izskatās šādi:
3. attēls: ultraskaņas sensors HC-SR04, kas savienots ar Raspberry Pi uz maizes dēļa.
4. attēls: HC-SR04 ultraskaņas sensors, kas savienots ar Raspberry Pi uz maizes dēļa.
Python programmas rakstīšana attāluma mērīšanai ar HC-SR04:
Vispirms izveidojiet savienojumu ar savu Raspberry Pi, izmantojot VNC vai SSH. Pēc tam atveriet jaunu failu (pieņemsim, ka attālums.py) un ierakstiet šādas kodu rindas:
Šeit 1. rinda importē aveņu pi GPIO bibliotēku.
2. rindā tiek importēta laika bibliotēka.
Iekšpusē mēģiniet bloks, tiek uzrakstīts faktiski kods attāluma mērīšanai, izmantojot HC-SR04.
The beidzot bloks tiek izmantots, lai notīrītu GPIO tapas ar GPIO.satīrīt() metodi, kad programma iziet.
Iekšpusē mēģiniet bloks, 5. līnijā, GPIO.iestatītais režīms (GPIO.PADOME) tiek izmantots, lai atvieglotu tapu definēšanu. Tagad jūs varat atsaukties tapas pēc fiziskiem skaitļiem, kā tas ir uz Raspberry Pi dēļa.
7. un 8. līnijā, pinTrigger ir iestatīts uz 7 un pinEcho ir iestatīts uz 11. The TRIGGER HC-SR04 tapa ir savienota ar tapu 7 un ECHO HC-SR04 tapa ir savienota ar Rapsberry Pi tapu 11. Abi šie ir GPIO tapas.
10. līnijā, pinTrigger ir iestatīta funkcijai OUTPUT, izmantojot GPIO.uzstādīt() metodi.
11. līnijā, pinEcho ir iestatīts INPUT, izmantojot GPIO.uzstādīt() metodi.
13-17. Rindas tiek izmantotas atiestatīšanai pinTrigger (iestatot to uz loģiku 0) un pinTrigger uz loģiku 1 uz 10 ms un pēc tam uz loģiku 0. Pēc 10 ms HC-SR04 sensors sūta 8 40KHz impulsu.
19. – 24. Līniju izmanto, lai izmērītu laiku, kas vajadzīgs, lai 40 KHz impulsi tiktu atspoguļoti objektā un atpakaļ uz sensoru HC-SR04.
25. līnijā attālumu mēra, izmantojot formulu,
Attālums = delta laiks * ātrums (340M / S) / 2
=> Attālums = delta laiks * (170M / S)
Aprēķināju attālumu centimetros, nevis metros, lai būtu precīzi. Es aprēķināju, ka attālums ir noapaļots līdz 2 zīmēm aiz komata.
Visbeidzot, 27. rindiņā rezultāts tiek izdrukāts. Tas tā, ļoti vienkārši.
Tagad palaidiet Python skriptu ar šādu komandu:
$ python3 attālums.pyKā redzat, izmērītais attālums ir 8.40 cm.
5. attēls: objekts, kas novietots apmēram 8.40 cm attālumā no sensora.
Pārcēlos uz objektu mazliet tālāk, izmērītais attālums ir 21.81 cm. Tātad, tas darbojas kā paredzēts.
6. attēls: objekts, kas novietots apmēram 21.81 cm attālumā no sensora.
Tātad, kā jūs mērot attālumu ar Raspberry Pi, izmantojot ultraskaņas sensoru HC-SR04. Skatiet attāluma kodu.py zemāk:
importa RPi.GPIO kā GPIOimporta laiks
mēģiniet:
GPIO.iestatītais režīms (GPIO.PADOME)
pinTrigger = 7
pinEcho = 11
GPIO.iestatīšana (pinTrigger, GPIO.OUT)
GPIO.iestatīšana (pinEcho, GPIO.IN)
GPIO.izvade (pinTrigger, GPIO.ZEMS)
GPIO.izvade (pinTrigger, GPIO.AUGSTS)
laiks.gulēt (0.00001)
GPIO.izvade (pinTrigger, GPIO.ZEMS)
kamēr GPIO.ievade (pinEcho) == 0:
pulseStartTime = laiks.laiks()
kamēr GPIO.ievade (pinEcho) == 1:
pulseEndTime = laiks.laiks()
pulseDuration = pulseEndTime - pulseStartTime
attālums = apaļš (impulsa ilgums * 17150, 2)
drukāt ("Attālums:%.2f cm "% (attālums))
visbeidzot:
GPIO.satīrīt()