Kā izmērīt attālumu starp diviem punktiem, izmantojot Arduino?

Elektronikā lielākoties ultraskaņas sensorus izmanto, lai izmērītu attālumu no viena konkrēta punkta līdz otram. Arduino dēlī ir ļoti viegli uzrakstīt kodu un integrēt ultraskaņas sensors veikt šo uzdevumu. Bet šajā rakstā mēs pieņemsim citu pieeju. Mēs izmantosim divus atsevišķus ultraskaņas sensorus, kas tiks integrēti ar diviem atsevišķiem Arduino. Šie divi moduļi tiks izvietoti divos dažādos punktos, starp kuriem jāmēra attālums. Vienam sensoram tiks izgatavots uztvērējs, bet otram - raidītājs. To darot, mēs varēsim izmērīt attālumu starp tiem, tikai atrodot raidītāja atrašanās vietu, izmantojot daudzus ultraskaņas uztvērējus. Tiek saukta Tehnika, kuru mēs šeit izmantojam Triangulācija.



Attāluma mērīšana, izmantojot Arduino

Šeit izmantotā tehnika ir vienkārši noderīga maza mēroga sistēmās, kur ir neliels attālums. Lai to plaši ieviestu, noteikti ir nepieciešamas dažas modifikācijas. Visas problēmas, ar kurām nācās saskarties, īstenojot šo projektu, ir aplūkotas turpmāk.



Kā izmērīt attālumu ar Arduino un Ultraskaņas sensoru?

Kā mēs zinām projekta kopsavilkumu, ļaujiet mums virzīties uz priekšu un apkopot papildu informāciju, lai sāktu projektu.



1. darbība: komponentu apkopošana (aparatūra)

Ja jūs vēlaties izvairīties no jebkādām neērtībām jebkura projekta vidū, vislabāk ir izveidot pilnu sarakstu ar visām sastāvdaļām, kuras mēs izmantosim. Otrais solis, pirms sākt ķēdi, ir īss visu šo komponentu izpēte. Visu šajā projektā nepieciešamo komponentu saraksts ir sniegts zemāk.



  • Džemperu vadi
  • 5V maiņstrāvas līdzstrāvas adapteris (x2)

2. darbība: komponentu apkopošana (programmatūra)

  • Proteus 8 Professional (var lejupielādēt no Šeit )

Pēc Proteus 8 Professional lejupielādes izveidojiet tajā shēmu. Es šeit esmu iekļāvis programmatūras simulācijas, lai iesācējiem varētu būt ērti izstrādāt shēmu un izveidot atbilstošus savienojumus aparatūrā.

3. solis: HCR-05 darbība

Tā kā mēs tagad zinām sava projekta galveno kopsavilkumu, virzīsimies uz priekšu un veiksim īsu pētījumu par HCR-05 . Jūs varat saprast šī sensora galveno darbību, izmantojot šo diagrammu.

Šim sensoram ir divas tapas, sprūda tapa, un eko tapa abi tiek izmantoti, lai izmērītu attālumu starp diviem konkrētiem punktiem. Process tiek uzsākts, nosūtot ultraskaņas viļņu no sensora. Šis uzdevums tiek veikts, iedarbinot sprūda tapu 10us. Tiklīdz šis uzdevums ir paveikts, no raidītāja tiek nosūtīts 8 skaņas ultraskaņas viļņu pārrāvums. šis vilnis ceļos pa gaisu un, tiklīdz tas atsitīsies pret kādu priekšmetu savā ceļā, tas atsitīsies un saņems sensorā iebūvēto uztvērēju.



Kad uztvērējs uztvers ultraskaņas vilni pēc sensora atstarošanas, tas iedarbinās eko tapa uz augstu stāvokli. Šī tapa paliks augstā stāvoklī tik ilgi, cik precīzi būs vienāds ar laiku, kas nepieciešams ultraskaņas viļņa virzībai no raidītāja un atpakaļ uz sensora uztvērēju.

Lai izveidotu savu ultraskaņas sensoru raidītājs tikai, vienkārši izveidojiet sprūda tapu kā izejas tapu un nosūtiet lielu impulsu uz šo tapu 10us. Tiklīdz tas būs izdarīts, tiks sākts ultraskaņas sprādziens. Tātad vienmēr, kad jāpārraida vilnis, jākontrolē tikai ultraskaņas sensora sprūda tapa.

Nekādā gadījumā nevar padarīt ultraskaņas sensoru par a tikai uztvērējs jo ECO tapas pacēlumu nevar kontrolēt ar mikrokontrolleru, jo tas ir saistīts ar sensora sprūda tapu. Bet ir viena lieta, ko mēs varam darīt, ir: mēs varam nosegt šī ultraskaņas sensora raidītāju ar līmlenti, no kuras neiziet UV viļņi. Tad raidītājs neietekmēs šī raidītāja ECO tapu.

4. solis: ķēdes darbība

Tagad, kad mēs esam panākuši, ka abi sensori darbojas atsevišķi kā raidītājs un uztvērējs, šeit ir liela problēma. Uztvērējs nezinās laiku, kas nepieciešams ultraskaņas viļņa ceļojumam no raidītāja uz uztvērēju, jo tas precīzi nezina, kad šis vilnis tika pārraidīts.

Lai atrisinātu šo problēmu, mums ir jānosūta AUGSTS signāls uztvērēja ECO, tiklīdz tiek raidīts ultraskaņas vilnis, izmantojot raidītāja sensoru. Vai vienkāršiem vārdiem sakot, mēs varam teikt, ka uztvērēja ECO un raidītāja iedarbinātājs vienlaikus jānosūta uz HIGH. Tātad, lai to panāktu, mēs kaut kā liksim uztvērēja iedarbināšanai uz augšu, tiklīdz raidītāja sprūda iet uz augšu. Šis uztvērēja palaidējs paliks augsts, līdz aiziet ECO tapa ZEMS . Kad uztvērēja ECO tapa saņems ultraskaņas signālu, tas notiks LOW. Tas nozīmēs, ka raidītāja sensora sprūda tikko ieguva AUGSTU signālu. Tiklīdz ECO samazināsies, mēs gaidīsim zināmo kavēšanos un uztvērēja aktivizētāju novietosim HIGH. To darot, abu sensoru izraisītāji tiks sinhronizēti, un attālums tiks aprēķināts, zinot viļņa kustības laika aizturi.

5. solis: komponentu montāža

Pat ja mēs izmantojam tikai viena ultraskaņas sensora raidītāju un otra uztvērēju, ir obligāti jāpievieno visas četras ultraskaņas sensors uz Arduino. Lai pievienotu ķēdi, rīkojieties šādi:

  1. Paņemiet divus ultraskaņas sensorus. Nosedziet pirmā sensora uztvērēju un otrā sensora raidītāju. Šim nolūkam izmantojiet baltu līmlenti un pārliecinieties, ka šie divi ir pilnībā nosegti, lai otrā sensora raidītājā neatstātu signāls un pirmā sensora uztvērējā nenonāktu signāls.
  2. Savienojiet divus Arduino uz diviem atsevišķiem paneļiem un pievienojiet tiem attiecīgos sensorus. Savienojiet sprūda tapu ar Arduino pin9 un ecoPin ar Arduino pin10. Ieslēdziet ultraskaņas sensoru ar Arduino 5 V un izmantojiet visus pamatus.
  3. Augšupielādējiet uztvērēja kodu uztvērēja Arduino un raidītāja kodu raidītāja Arduino.
  4. Tagad atveriet saņēmējas puses sērijveida monitoru un atzīmējiet mērāmo attālumu.

Šī projekta shēma izskatās šādi:

Ķēdes shēma

6. darbība: darba sākšana ar Arduino

Ja jūs vēl neesat pazīstams ar Arduino IDE, neuztraucieties, jo tālāk ir paskaidrota pakāpeniska procedūra, kā iestatīt un izmantot Arduino IDE ar mikrokontrolleru paneli.

  1. Lejupielādējiet jaunāko Arduino IDE versiju no Arduino.
  2. Pievienojiet savu Arduino Nano dēli klēpjdatoram un atveriet vadības paneli. vadības panelī noklikšķiniet uz Aparatūra un skaņa . Tagad noklikšķiniet uz Ierīces un printeri. Šeit atrodiet portu, kuram ir pievienota jūsu mikrokontrolleru plate. Manā gadījumā tā ir COM14 bet dažādos datoros tas ir atšķirīgs.

    Ostas atrašana

  3. Noklikšķiniet uz izvēlnes Rīks. un iestatiet dēli uz Arduino Nano no nolaižamās izvēlnes.

    Dēļu iestatīšana

  4. Tajā pašā izvēlnē Rīks iestatiet portu uz porta numuru, kuru iepriekš novērojāt Ierīces un printeri .

    Portas iestatīšana

  5. Tajā pašā izvēlnē Rīks iestatiet Procesors uz ATmega328P (vecs Bootloader ).

    Procesors

  6. Lejupielādējiet zemāk pievienoto kodu un ielīmējiet to savā Arduino IDE. Noklikšķiniet uz augšupielādēt pogu, lai ierakstītu kodu mikrokontrolleru dēlī.

    Augšupielādēt

Lai lejupielādētu kodu, noklikšķiniet šeit.

7. solis: izpratne par kodeksu

Šajā projektā izmantotais kods ir ļoti vienkāršs un diezgan labi komentēts. Pievienotajā mapē ir divi kodu faili. Raidītāja kods un uztvērēja puses kods ir norādīts atsevišķi. Mēs augšupielādēsim šos kodus abos attiecīgajos Arduino dēļos. Lai gan tas ir pats par sevi saprotams, tas ir īsumā aprakstīts tālāk.

Raidītāja puses kods

1. Sākumā tiek inicializēti Arduino dēļa tapas, kas tiks savienotas ar ultraskaņas sensoru. Tad tiek deklarēti mainīgie, kas tiks izmantoti, lai saglabātu vērtības laika un attāluma aprēķināšanai koda darbības laikā.

// definē tapu skaitļus const int trigPin = 9; // Savienojiet ultraskaņas sensora trig tapu ar Arduino const int echoPin = 10 pin9; // Savienojiet ultraskaņas sensora eko tapu ar Arduino pin10 // definē mainīgos ilgtermiņa; // mainīgais, lai saglabātu laiku, kas vajadzīgs ultraskaņas viļņa t ceļojuma int attālumam; // aprēķināts mainīgais, lai saglabātu attālumu

2. anulēt iestatīšanu () ir funkcija, kas startā darbojas tikai vienu reizi, kad dēlis ir ieslēgts vai iespējota iespējošanas poga. Šeit abi Arduino tapas tiek deklarēti kā lietojami IEVADE un IZVADE . Šajā funkcijā ir iestatīts pārraides ātrums. Bauda ātrums ir ātrums bitos sekundē, ar kuru mikrokontrolleris sazinās ar ultraskaņas sensoru.

void setup () {pinMode (trigPin, OUTPUT); // Iestata trigPin kā Output pinMode (echoPin, INPUT); // Iestata echoPin kā Input Serial.begin (9600); // Sāk sērijveida saziņu}

3. void loop () ir funkcija, kas darbojas atkal un atkal ciklā. Šeit mēs esam kodējuši mikrokontrolleru tā, lai tas nosūta AUGSTU signālu uz ultraskaņas sensora Trigger tapu, nospiež 20 mikrosekundes un nosūta tam LOW signālu.

void loop () {// iestata trigPin stāvoklī HIGH uz 10 mikro sekundēm digitalWrite (trigPin, HIGH); // nosūtīt HIGH signālu uz pirmā sensora aizkaves trigeriMikrosekundes (10); // pagaidiet 10 mikro sekundes digitalWrite (trigPin, LOW); // nosūtīt LOW signālu uz pirmā sensora aiztures trigeri (2); // pagaidiet 0,2 sekundes}

Uztvērēja puses kods

1. Sākumā tiek inicializēti Arduino dēļa tapas, kas tiks savienotas ar ultraskaņas sensoru. Tad tiek deklarēti mainīgie, kas tiks izmantoti, lai saglabātu vērtības laika un attāluma aprēķināšanai koda darbības laikā.

// definē tapu skaitļus const int trigPin = 9; // Savienojiet ultraskaņas sensora trig tapu ar Arduino const int echoPin = 10 pin9; // Savienojiet ultraskaņas sensora eko tapu ar Arduino pin10 // definē mainīgos ilgtermiņa; // mainīgais, lai saglabātu laiku, kas vajadzīgs ultraskaņas viļņa t ceļojuma int attālumam; // aprēķināts mainīgais, lai saglabātu attālumu

2. anulēt iestatīšanu () ir funkcija, kas startā darbojas tikai vienu reizi, kad dēlis ir ieslēgts vai iespējota iespējošanas poga. Šeit abi Arduino tapas tiek deklarēti kā INPUT un OUTPUT. Šajā funkcijā ir iestatīts pārraides ātrums. Buda ātrums ir ātrums bitos sekundē, ar kuru mikrokontrolleris sazinās ar ultraskaņas sensoru.

void setup () {pinMode (trigPin, OUTPUT); // Iestata trigPin kā Output pinMode (echoPin, INPUT); // Iestata echoPin kā Input Serial.begin (9600); // Sāk sērijveida saziņu}

3. anulēt Trigger_US () ir funkcija, kas tiks izsaukta otrā ultraskaņas sensora sprūda tapas viltus iedarbināšanai. Mēs sinhronizēsim abu sensoru sprūda tapas sprūda laiku.

void Trigger_US () {// Fake trigger ASV sensoru digitalWrite (trigPin, HIGH); // Nosūtiet HIGH signālu uz Otrā sensora aiztures mikrosekundes mikrosekundes (10); // gaidiet 10 mikro sekundes digitalWrite (trigPin, LOW); // nosūtīt LOW signālu sprūda tapas otrajam sūtītājam}

Četri. anulēt Calc () ir funkcija, kuru izmanto, lai aprēķinātu laiku, kas nepieciešams ultraskaņas signālam, lai pārvietotos no pirmā sensora uz otro sensoru.

void Calc () // funkcija, lai aprēķinātu laiku, kāds nepieciešams ultraskaņas viļņa ceļojumam {duration = 0; // sākotnēji ilgums ir iestatīts uz nulli Trigger_US (); // izsaukt funkciju Trigger_US while (digitalRead (echoPin) == HIGH); // kamēr eo pin statuss lielā aizkave (2); // ielieciet 0,2 sekunžu kavēšanos Trigger_US (); // izsaukt funkcijas Trigger_US ilgums = pulseIn (echoPin, HIGH); // aprēķināt aizņemto laiku}

5. Šeit void loop () funkcija, mēs aprēķinām attālumu, izmantojot laiku, kas nepieciešams ultraskaņas signālam, lai pārvietotos no pirmā sensora uz otro sensoru.

void loop () {Pdistance = attālums; Calc (); // izsaukt funkcijas Calc () attālumu = ilgums * 0,034; // aprēķinot ultraskaņas viļņa veikto attālumu, ja (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Measured Distance:'); // drukāt uz sērijveida monitora Serial.println (attālums / 2); // drukāt uz sērijveida monitora} //Serial.print('Distances: '); //Serial.println(tālums/2); kavēšanās (500); // pagaidiet 0,5 sekundes}