- Nepieciešamie materiāli:
- Ķēdes shēma:
- Kā faktiski darbojas HC-SR04 modulis:
- Attāluma mērīšana starp diviem ultraskaņas sensoriem (HC-SR04):
- Raidītāja sensora programma:
- Uztvērēja sensora programma:
- Darbs:
- Improvizēta ideja - sensora kalibrēšana, izmantojot zināmu attālumu:
Ultraskaņas sensoru (HC-SR04) parasti izmanto, lai atrastu objekta attālumu no viena konkrēta punkta. To ir bijis diezgan viegli izdarīt ar Arduino, un kods ir arī diezgan vienkāršs. Bet šajā rakstā mēs izmēģināsim kaut ko citu ar šiem populārajiem HC-SR04 sensoriem. Mēs mēģināsim aprēķināt attālumu starp diviem ultraskaņas sensoriem, tas ir, mēs padarīsim vienu sensoru darboties kā raidītāju, bet otru sensoru - kā uztvērēju. To darot, mēs varam izsekot viena raidītāja atrašanās vietai, izmantojot daudzus ultraskaņas uztvērējus, šo izsekošanu sauc par triangulāciju, un to var izmantot automātiskiem robotu bagāžas sekotāju piestiprināšanas robotiem un citām līdzīgām lietojumprogrammām. Attāluma atrašana starp diviem ASV sensoriem var šķist diezgan vienkāršs uzdevums, bet man nācās saskarties ar dažām problēmām, kas tiek apspriestas šajā projektā.
Šajā rakstā aplūkotā tehnika nav diezgan precīza un var nebūt noderīga nevienā reālā sistēmā bez modifikācijām. Šīs dokumentācijas laikā es neatradu nevienu, kas gūtu tikpat tuvu kā manis rezultātus, tāpēc es tikko dalījos ar savu viedokli par to, kā es to darbojos, lai cilvēkiem, kuri to mēģina, nevajadzētu atkārtoti izdomāt riteni.
Nepieciešamie materiāli:
- Arduino (2Nos) - jebkurš modelis
- HCSR04 modulis (2Nos)
Ķēdes shēma:
Pat ja mēs gatavojamies, lai viens ASV (ultraskaņas) sensors darbotos kā raidītājs, bet otrs - kā uztvērējs, obligāti savienojiet visas četras sensoru tapas ar Arduino. Kāpēc mums vajadzētu? Vairāk par to tiks apspriests vēlāk, bet tagad shēma būs šāda
Kā redzat, gan raidītāja, gan uztvērēja shēma ir identiska. Pārbaudiet arī: Arduino ultraskaņas sensora saskarne
Kā faktiski darbojas HC-SR04 modulis:
Pirms turpināt darbu, ļaujiet mums saprast, kā darbojas HC-SR04 sensors. Zemāk redzamā laika shēma palīdzēs mums saprast darbu.
Sensoram ir divas tapas Trigger un Echo, ko izmanto attāluma mērīšanai, kā parādīts laika shēmā. Vispirms, lai sāktu mērīšanu, mums no raidītāja jānosūta ultraskaņas vilnis, to var izdarīt, nosakot sprūda tapu augstu 10uS. Tiklīdz tas ir izdarīts, raidītāja tapa nosūtīs 8 skaņas ASV viļņu pārrāvumus. Šis ASV vilnis atsitīs objektu, un tas tiks uztverts uztvērējā.
Laika diagramma rāda, ka, uztvērējam saņemot viļņu, Echo tapa piesprauž augstu uz laiku, kas ir vienāds ar laiku, kas vajadzīgs, lai vilnis virzītos no ASV sensora un nonāktu atpakaļ pie sensora. Šķiet, ka šī laika shēma nav patiesa.
Es aptvēru sava sensora Tx (raidītāja) daļu un pārbaudīju, vai Echo impulss ir augsts, un jā, tas tiešām iet augstu. Tas nozīmē, ka atbalss impulss negaida, kad tas saņems ASV (ultraskaņas) vilni. Kad tas pārraida ASV vilni, tas iet augstu un paliek augsts, līdz vilnis atgriežas. Tātad pareizajai laika shēmai jābūt kaut kam līdzīgam, kas parādīts zemāk (atvainojiet par manām sliktajām rakstīšanas prasmēm)
Lai HC-SR04 darbotos tikai kā raidītājs:
Diezgan vienkārši ir panākt, lai HC-SR04 darbotos tikai kā raidītājs. Kā parādīts laika diagrammā, jums ir jāpaziņo sprūda tapa par izvades tapu un jāpalielina tā augstums 10 mikrosekundes. Tas izraisīs ultraskaņas viļņu eksploziju. Tāpēc vienmēr, kad mēs vēlamies pārraidīt vilni, mums vienkārši jākontrolē raidītāja sensora sprūda tapa, kurai kods ir norādīts zemāk.
Lai HC-SR04 darbotos tikai kā uztvērējs:
Kā parādīts laika diagrammā, mēs nevaram kontrolēt atbalss tapas pieaugumu, jo tas ir saistīts ar sprūda tapu. Tāpēc mēs nekādā gadījumā nevaram panākt, lai HC-SR04 darbotos tikai kā uztvērējs. Bet mēs varam izmantot uzlaušanu, vienkārši nosedzot sensora raidītāja daļu ar lenti (kā parādīts zemāk redzamajā attēlā) vai vāciņu, ASV vilnis nevar izkļūt ārpus raidītāja korpusa, un šis ASV vilnis neietekmēs Echo tapu.
Tagad, lai atbalss tapa būtu augsta, mums vienkārši jāvelk šī manekena sprūda tapa 10 mikrosekundes. Kad šis uztvērēja sensors saņem ASV signālu, ko pārraida raidītāja sensors, atbalss tapa samazināsies.
Attāluma mērīšana starp diviem ultraskaņas sensoriem (HC-SR04):
Līdz šim mēs esam sapratuši, kā panākt, lai viens sensors darbotos kā raidītājs, bet otrs - kā uztvērējs. Tagad mums ir jāpārraida ultraskaņas vilnis no raidītāja sensora un jāsaņem tas ar uztvērēja sensoru un jāpārbauda laiks, kas vajadzīgs, lai vilnis virzītos no raidītāja uz uztvērēju, vai ne? Bet diemžēl !, mums šeit ir problēma, un tas nedarbosies.
Raidītāja modulis un uztvērēja modulis atrodas tālu viens no otra, un, kad uztvērēja modulis saņem no raidītāja moduļa ASV vilni, tas nezinās, kad raidītājs nosūtīja šo konkrēto vilni. Nezinot sākuma laiku, mēs nevaram aprēķināt uzņemto laiku un līdz ar to arī attālumu. Lai atrisinātu šo problēmu, uztvērēja moduļa atbalss impulss ir jāpadara augsts tieši tad, kad raidītāja modulis ir pārraidījis ASV vilni. Citiem vārdiem sakot, raidītāja modulim un uztvērēja modulim vajadzētu darboties vienlaicīgi. To var panākt ar šādu metodi.
Iepriekš minētajā diagrammā Tx apzīmē raidītāja sensoru un Rx uztvērēja sensoru. Kā parādīts, raidītāja sensors tiks likts uz ASV viļņu pārraidi ar periodisku zināmu kavēšanos, tas ir viss, kas tam jādara.
Uztvērēja sensorā mums kaut kā jāpadara sprūda tapa tieši tad, kad raidītāja tapa ir augsta. Tātad sākotnēji mēs nejauši liekam uztvērēju aktivizētājam iet uz augšu, kas paliks un paliks augsts, līdz atbalss tapa būs zema. Šī atbalss tapa samazināsies tikai tad, kad tā no raidītāja saņems ASV vilni. Tātad, tiklīdz tas kļūst zems, mēs varam pieņemt, ka raidītāja sensors tikko tika iedarbināts. Tagad, pieņemot šo pieņēmumu, tiklīdz atbalss samazinās, mēs varam gaidīt zināmo kavēšanos un pēc tam izraisīt uztvērēju iedarbināšanu. Tas daļēji sinhronizētu gan raidītāja, gan uztvērēja sprūdu, un tādējādi jūs varat nolasīt tūlītēja atbalss impulsa ilgumu, izmantojot pulseIn (), un aprēķināt attālumu.
Raidītāja sensora programma:
Pilnīga raidītāja moduļa programma ir atrodama lapas apakšdaļā. Tas nedara neko citu, kā vien periodiski iedarbina raidītāja sensoru.
digitalWrite (trigPin, HIGH); kavēšanāsMikrosekundes (10); digitalWrite (trigPin, LOW);
Lai iedarbinātu sensoru, mums ir jāpadara sprūda tapa, lai tā būtu augsta 10uS. Kods, lai izdarītu to pašu, ir parādīts iepriekš
Uztvērēja sensora programma:
Uztvērēja sensorā mums ir jāpārklāj sensora raidītāja acs, lai padarītu to par manekenu, kā tika apspriests iepriekš. Tagad mēs varam izmantot iepriekš minēto paņēmienu, lai izmērītu attālumu starp diviem sensoriem. Pilna programma ir dota šīs lapas apakšdaļā. Tālāk ir paskaidrotas dažas svarīgas līnijas
Aktivizētājs_US (); kamēr (digitalRead (echoPin) == AUGSTS); kavēšanāsMikrosekundes (10); Aktivizētājs_US (); ilgums = pulseIn (echoPin, HIGH);
Sākotnēji mēs aktivizējam ASV sensoru, izmantojot funkciju Trigger_US (), un pēc tam pagaidiet, kamēr atbalss tapa paliek augsts, izmantojot brīdi. Kad tas kļūst mazs, mēs gaidām iepriekš noteiktu ilgumu, šim ilgumam jābūt apmēram no 10 līdz 30 mikrosekundēm, ko var noteikt, izmantojot izmēģinājumus un kļūdas (vai arī varat izmantot improvizētu ideju, kas sniegta zemāk). Pēc šīs kavēšanās atkal aktivizējiet ASV, izmantojot to pašu funkciju, un pēc tam izmantojiet pulseIn () funkciju, lai aprēķinātu viļņa ilgumu.
Tagad, izmantojot tās pašas vecās formulas, mēs varam aprēķināt attālumu, kā norādīts zemāk
attālums = ilgums * 0,034;
Darbs:
Veiciet savienojumus, kā paskaidrots programmā. Nosedziet uztvērēja sensora Tx daļu, kā parādīts attēlā. Pēc tam augšupielādējiet raidītāja kodu un uztvērēja kodu, kas attiecīgi norādīti raidītājā un uztvērējā Arduino. Atveriet uztvērēja moduļa sērijveida monitoru, un jums vajadzētu pamanīt attālumu starp diviem parādītajiem moduļiem, kā parādīts zemāk esošajā video.
Piezīme. Šī metode ir tikai ideoloģija, un tā var nebūt precīza vai apmierinoša. Tomēr, lai iegūtu labākus rezultātus, varat izmēģināt tālāk minēto improvizēto ideju.
Improvizēta ideja - sensora kalibrēšana, izmantojot zināmu attālumu:
Līdz šim dīvainā kārtā izskaidrotā metode, šķiet, ir apmierinoša, tomēr ar to bija pietiekami manam projektam. Tomēr es vēlētos arī dalīties ar šīs metodes trūkumiem un veidu, kā tos pārvarēt. Viens no galvenajiem šīs metodes trūkumiem ir tas, ka mēs pieņemam, ka uztvērēja atbalss tapa zemu nokrītas uzreiz pēc tam, kad raidītāja sensors ir pārraidījis ASV vilni, kas nav taisnība, jo vilnis prasīs kādu laiku, lai pārvietotos no raidītāja uz uztvērēju. Tādējādi raidītāja trigeris un uztvērēja sprūda nebūs ideālā sinhronizācijā.
Lai to novērstu, mēs sākotnēji varam kalibrēt sensoru, izmantojot zināmo attālumu. Ja attālums ir zināms, mēs zināsim laiku, kas vajadzīgs, lai ASV vilnis nokļūtu uztvērējā no raidītāja. Turēsim šo laiku kā Del (D), kā parādīts zemāk.
Tagad mēs precīzi zināsim, pēc cik laika mums vajadzētu paaugstināt uztvērēja sprūda tapu, lai iegūtu sinhronizāciju ar raidītāja sprūdu. Šo ilgumu var aprēķināt ar zināmo kavēšanos (t) - Del (D). Laika ierobežojumu dēļ es nevarēju pārbaudīt šo ideju, tāpēc neesmu pārliecināts, cik precīzi tā darbosies. Tātad, ja jums gadās to izmēģināt, dariet man zināmu rezultātus, izmantojot komentāru sadaļu.