Kaip išmatuoti atstumą tarp dviejų taškų naudojant „Arduino“?

Elektronikoje dažniausiai ultragarso jutikliai naudojami atstumui nuo vieno konkretaus taško iki kito matuoti. Labai lengva parašyti kodą „Arduino“ lentoje ir integruoti ultragarso jutiklis atlikti šią užduotį. Tačiau šiame straipsnyje mes laikysimės kitokio požiūrio. Mes ketiname naudoti du atskirus ultragarso jutiklius, kurie bus integruoti su dviem atskirais „Arduino“. Šie du moduliai bus išdėstyti dviejuose skirtinguose taškuose, tarp kurių turi būti matuojamas atstumas. Vienas jutiklis bus imtuvas, o kitas - siųstuvas. Tai padarę, mes galėsime išmatuoti atstumą tarp jų, tik nustatydami siųstuvo padėtį naudodami daugybę ultragarso imtuvų. Vadinama technika, kurią čia naudojame Trikampis.



Atstumo matavimas naudojant „Arduino“

Čia naudojama technika yra tiesiog naudinga nedidelio masto sistemoms, kuriose reikia rasti nedidelį atstumą. Norint jį įgyvendinti plačiu mastu, tikrai reikia atlikti tam tikrus pakeitimus. Visi iššūkiai, su kuriais teko susidurti įgyvendinant šį projektą, aptariami toliau.



Kaip naudoti atstumą matuojant „Arduino“ ir ultragarso jutiklį?

Žinodami projekto santrauką, eikime pirmyn ir rinkime daugiau informacijos, kad pradėtume projektą.



1 veiksmas: komponentų (aparatinės įrangos) surinkimas

Jei norite išvengti nepatogumų bet kurio projekto viduryje, geriausias būdas yra sudaryti išsamų visų komponentų, kuriuos ketiname naudoti, sąrašą. Antras žingsnis, prieš pradedant kurti grandinę, yra trumpas visų šių komponentų tyrimas. Visų komponentų, kurių mums reikia šiame projekte, sąrašas pateikiamas žemiau.



  • Šuolių laidai
  • 5 V kintamosios srovės adapteris (x2)

2 žingsnis: komponentų (programinės įrangos) rinkimas

  • Proteus 8 Professional (galima atsisiųsti iš Čia )

Atsisiuntę „Proteus 8 Professional“, suprojektuokite jame grandinę. Čia įtraukiau programinės įrangos modeliavimą, kad pradedantiesiems būtų patogu suprojektuoti grandinę ir tinkamai prijungti aparatinę įrangą.

3 žingsnis: HCR-05 veikimas

Kadangi dabar žinome pagrindinį savo projekto santrauką, eikime į priekį ir trumpai išnagrinėkime HCR-05 . Pagrindinę šio jutiklio veikimą galite suprasti pagal šią schemą.

Šis jutiklis turi du kaiščius, paleidimo kaištis, ir ekologinis kaištis kurie naudojami matuojant atstumą tarp dviejų konkrečių taškų. Procesas pradedamas siunčiant ultragarso bangą iš jutiklio. Ši užduotis atliekama suaktyvinant trigerio kaištį 10us. Vos atlikus šią užduotį, iš siųstuvo siunčiamas 8 garsinis ultragarso bangų pliūpsnis. ši banga skris ore ir, vos tik atsitrenkdama į savo kelyje esantį daiktą, ji smogs atgal ir ją priims jutiklyje įmontuotas imtuvas.



Kai imtuvas, atspindėjęs jutiklį, priims ultragarso bangą, ji sukels ekologinis kaištis į aukštą valstybę. Šis kaištis išliks aukštoje būsenoje tiek laiko, kiek jis bus lygus ultragarso bangos sugaištamam laikui nuo siųstuvo ir atgal iki jutiklio imtuvo.

Norėdami pagaminti savo ultragarso jutiklį siųstuvas tik, tiesiog padarykite gaiduką kaip išvesties kaištį ir siųskite didelį impulsą šiam kaiščiui 10 us. Kai tai bus padaryta, bus inicijuojamas ultragarsinis sprogimas. Taigi, kai tik reikia perduoti bangą, reikia valdyti tik ultragarso jutiklio paleidimo kaištį.

Jokiu būdu negalima padaryti ultragarso jutiklio kaip a tik imtuvas nes mikrovaldiklis negali valdyti ECO kaiščio pakilimo, nes jis yra susijęs su jutiklio paleidimo kaiščiu. Tačiau yra vienas dalykas, kurį galime padaryti, yra tai, kad šio ultragarso jutiklio siųstuvą galime uždengti lipnia juosta, kad nepatektų jokia UV banga. Tada siųstuvas nepaveiks šio siųstuvo ECO kaiščio.

4 žingsnis: grandinės darbas

Dabar, kai abu jutiklius privertėme dirbti atskirai kaip siųstuvą ir imtuvą, čia susiduriama su didele problema. Imtuvas nežinos, kiek laiko ultragarso banga sklinda iš siųstuvo į imtuvą, nes tiksliai nežino, kada ši banga buvo perduota.

Norėdami išspręsti šią problemą, turime padaryti tai, kad turime išsiųsti AUKŠTAS signalas imtuvo ECO, kai tik perduodama ultragarso banga, ir siųstuvo jutiklis. Arba paprastais žodžiais galime pasakyti, kad imtuvo ECO ir siųstuvo gaiduką reikia siųsti į HIGH tuo pačiu metu. Taigi, norėdami tai pasiekti, imtuvo gaiduką kažkaip padarysime aukštą, kai tik siųstuvo gaidukas pakils aukštai. Šis imtuvo gaidukas išliks aukštas, kol užeis ECO kaištis MAŽAI . Kai imtuvo ECO kaištis priims ultragarso signalą, jis eis LOW. Tai reikš, kad siųstuvo jutiklio trigeris ką tik gavo AUKŠTĄ signalą. Kai tik ECO sumažės, lauksime žinomo delsimo ir imtuvo gaiduką padėsime HIGH. Tokiu būdu bus sinchronizuojami abiejų jutiklių trigeriai, o atstumas bus apskaičiuojamas žinant bangos eigos vėlavimą.

5 žingsnis: komponentų surinkimas

Nors mes naudojame tik vieno ultragarso jutiklio siųstuvą ir kito imtuvą, tačiau būtina prijungti visus keturis ultragarso jutiklis į Arduino. Norėdami prijungti grandinę, atlikite toliau nurodytus veiksmus:

  1. Paimkite du ultragarso jutiklius. Uždenkite pirmojo jutiklio imtuvą ir antrojo jutiklio siųstuvą. Tam tikslui naudokite baltą lipnią juostą ir įsitikinkite, kad šios dvi yra visiškai uždengtos, kad iš antrojo jutiklio siųstuvo neliktų jokio signalo ir į pirmojo jutiklio imtuvą nepatektų jokio signalo.
  2. Prijunkite du „Arduino“ ant dviejų atskirų skydinių ir prijunkite jų jutiklius. Prijunkite paleidimo kaištį prie „Arduino“ pin9 ir „ecoPin“ prie „Arduino“ pin10. Įjunkite ultragarso jutiklį 5 V „Arduino“ ir naudokite visus pagrindus.
  3. Įkelkite imtuvo kodą į imtuvo „Arduino“ ir siųstuvo kodą į siųstuvo „Arduino“.
  4. Dabar atidarykite serijinį priimančiosios pusės monitorių ir pažymėkite matuojamą atstumą.

Šio projekto schema atrodo taip:

Grandinės schema

6 žingsnis: darbo pradžia naudojant „Arduino“

Jei dar nesate susipažinę su „Arduino IDE“, nesijaudinkite, nes toliau paaiškinta žingsnis po žingsnio, kaip nustatyti ir naudoti „Arduino IDE“ su mikrovaldiklio plokšte.

  1. Atsisiųskite naujausią „Arduino IDE“ versiją iš Arduino.
  2. Prijunkite „Arduino Nano“ plokštę prie nešiojamojo kompiuterio ir atidarykite valdymo skydą. valdymo skydelyje spustelėkite Aparatūra ir garsas . Dabar spustelėkite Prietaisai ir spausdintuvai. Čia raskite prievadą, prie kurio prijungta jūsų mikrovaldiklio plokštė. Mano atveju taip yra COM14 bet skirtinguose kompiuteriuose yra kitaip.

    Rasti uostą

  3. Spustelėkite meniu Įrankis. ir nustatykite lentą „Arduino Nano“ iš išskleidžiamojo meniu.

    Nustatymo lenta

  4. Tame pačiame meniu Įrankis nustatykite prievadą į prievado numerį, kurį anksčiau pastebėjote Prietaisai ir spausdintuvai .

    Uosto nustatymas

  5. Tame pačiame meniu Įrankis nustatykite procesorių į ATmega328P (senas Bootloader ).

    Procesorius

  6. Atsisiųskite žemiau pridėtą kodą ir įklijuokite jį į „Arduino IDE“. Spustelėkite įkelti mygtuką, kad įrašytumėte kodą savo mikrovaldiklio plokštėje.

    Įkelti

Norėdami atsisiųsti kodą, paspauskite čia.

7 veiksmas: supraskite kodą

Šiame projekte naudojamas kodas yra labai paprastas ir gana gerai komentuojamas. Pridėtame aplanke yra du kodų failai. Siųstuvo kodas ir imtuvo pusės kodas pateikiami atskirai. Šiuos kodus įkelsime į abi atitinkamas „Arduino“ plokštes. Nors tai savaime suprantama, ji yra trumpai aprašyta žemiau.

Siųstuvo pusės kodas

1. Pradžioje inicijuojami „Arduino“ plokštės kaiščiai, kurie bus prijungti prie ultragarso jutiklio. Tada deklaruojami kintamieji, kurie bus naudojami vertėms išsaugoti skaičiuojant laiką ir atstumą per kodo vykdymo laiką.

// apibrėžia smeigtukų skaičius const int trigPin = 9; // Prijunkite ultragarso jutiklio paleidimo kaištį prie Arduino const int echoPin = 10; // Prijunkite ultragarso jutiklio ekologinį kaištį prie „Arduino“ pin10 // apibrėžia kintamuosius ilgą laiką; // kintamasis saugoti laiką, kurį užima ultragarso banga t kelionės int atstumas; // apskaičiuotas kintamasis atstumui laikyti

2. negaliojanti sąranka () yra funkcija, vykdoma tik vieną kartą paleidus plokštę arba paspaudus įjungimo mygtuką. Čia skelbiama, kad abu „Arduino“ kaiščiai naudojami kaip ĮVADAS ir IŠĖJIMAS . Šioje funkcijoje nustatytas perdavimo greitis. „Baud rate“ yra greitis bitais per sekundę, kuriuo mikrovaldiklis bendrauja su ultragarso jutikliu.

negaliojanti sąranka () {pinMode (trigPin, OUTPUT); // nustato trigPin kaip išvesties pinMode (echoPin, INPUT); // Nustato echoPin kaip įvesties seriją.begin (9600); // Pradeda nuoseklųjį ryšį}

3. tuščia kilpa () yra funkcija, kuri veikia vėl ir vėl cikle. Čia mes užkodavome mikrovaldiklį taip, kad jis siunčia AUKŠTĄ signalą į ultragarso jutiklio paleidimo kaištį, sugeba 20 mikrosekundžių ir siunčia jam LOW signalą.

void loop () {// nustato trigPin būsenoje HIGH 10 mikro sekundžių digitalWrite (trigPin, HIGH); // nusiųsti HIGH signalą įjungus pirmojo jutiklio delsąMikrosekundės (10); // palaukite 10 mikro sekundžių digitalWrite (trigPin, LOW); // nusiųskite LOW signalą į pirmojo jutiklio vėlavimo paleidiklį (2); // palaukite 0,2 sekundės}

Imtuvo pusės kodas

1. Pradžioje inicijuojami „Arduino“ plokštės kaiščiai, kurie bus prijungti prie ultragarso jutiklio. Tada deklaruojami kintamieji, kurie bus naudojami vertėms išsaugoti skaičiuojant laiką ir atstumą per kodo vykdymo laiką.

// apibrėžia smeigtukų skaičius const int trigPin = 9; // Prijunkite ultragarso jutiklio paleidimo kaištį prie Arduino const int echoPin = 10; // Prijunkite ultragarso jutiklio ekologinį kaištį prie „Arduino“ pin10 // apibrėžia kintamuosius ilgą laiką; // kintamasis saugoti laiką, kurį užima ultragarso banga t kelionės int atstumas; // apskaičiuotas kintamasis atstumui laikyti

2. negaliojanti sąranka () yra funkcija, vykdoma tik vieną kartą paleidus plokštę arba paspaudus įjungimo mygtuką. Čia skelbiama, kad abu „Arduino“ kaiščiai naudojami kaip įvestis ir išvestis. Šioje funkcijoje nustatytas perdavimo greitis. „Baud rate“ yra greitis bitais per sekundę, kuriuo mikrovaldiklis bendrauja su ultragarso jutikliu.

negaliojanti sąranka () {pinMode (trigPin, OUTPUT); // nustato trigPin kaip išvesties pinMode (echoPin, INPUT); // Nustato echoPin kaip įvesties seriją.begin (9600); // Pradeda nuoseklųjį ryšį}

3. negaliojantis Trigger_US () yra funkcija, kuri bus naudojama suklastojus antrojo ultragarso jutiklio paleidimo kaištį. Sinchronizuosime abiejų jutiklių paleidimo kaiščio paleidimo laiką.

void Trigger_US () {// Netikras suaktyvina JAV jutiklį digitalWrite (trigPin, HIGH); // Siųskite AUKŠTĄ signalą į antrojo jutiklio vėlavimo mikrosekundę (10); // palaukite 10 mikro sekundžių digitalWrite (trigPin, LOW); // siųsti žemą signalą į paleidimo kaiščio antrąjį siuntėją}

Keturi. negaliojantis „Calc“ () yra funkcija, kuri naudojama ultragarso signalo trukmei nuo pirmojo jutiklio iki antrojo jutiklio apskaičiuoti.

void Calc () // funkcija apskaičiuoti laiką, kurį ultragarso banga praleido {trukmė = 0; // trukmė iš pradžių nustatyta į nulį Trigger_US (); // iškvieskite Trigger_US funkciją while (digitalRead (echoPin) == HIGH); // o eo PIN būsena labai vėluojama (2); // uždėti 0,2 sekundės vėlavimą Trigger_US (); // iškvieskite Trigger_US funkcijos trukmę = pulseIn (echoPin, HIGH); // apskaičiuokite užtruktą laiką}

5. Čia tuščia kilpa () funkciją, mes apskaičiuojame atstumą, naudodami laiką, kurį užima ultragarso signalas, kad nukeliautų nuo pirmojo jutiklio iki antrojo jutiklio.

void loop () {Pdistumas = atstumas; Apskaičiuoti (); // iškvieskite funkcijos Calc () atstumą = trukmė * 0,034; // apskaičiuojant ultragarso bangos įveikiamą atstumą, jei (Pdistumas == atstumas || Pdistumas == atstumas + 1 || Pdistumas == atstumas-1) {Serial.print ('Išmatuotas atstumas:'); // spausdinti serijiniame monitoriuje Serial.println (atstumas / 2); // spausdinti serijiniame monitoriuje} //Serial.print('Tolumas: '); //Serial.println( atstumas/2); vėlavimas (500); // palaukite 0,5 sekundės}