Kuidas mõõta Arduino abil kahe punkti vahelist kaugust?

Elektroonikas kasutatakse enamasti ultraheliandureid, et mõõta kaugust ühest konkreetsest punktist teise. Arduino tahvlile on väga lihtne koodi kirjutada ja an integreerida ultraheliandur selle ülesande täitmiseks. Kuid selles artiklis valime teistsuguse lähenemisviisi. Kasutame kahte eraldi ultraheliandurit, mis integreeritakse kahe eraldi Arduinoga. Need kaks moodulit paigutatakse kahte erinevasse punkti, mille vahel tuleb mõõta kaugust. Ühest andurist saab vastuvõtja ja teisest saatja. Nii toimides saame mõõta nende vahelist kaugust, määrates paljude ultrahelivastuvõtjate abil kindlaks saatja asukoha. Seda tehnikat, mida siin kasutame, nimetatakse Kolmnurk.



Kauguse mõõtmine Arduino abil

Siin kasutatav tehnika on lihtsalt kasulik väikesemahulistes süsteemides, kus on väike vahemaa. Selle laiaulatuslikuks rakendamiseks on kindlasti vaja mõningaid muudatusi. Kõiki väljakutseid, millega selle projekti käigus kokku puututi, käsitletakse allpool.



Kuidas kasutada Arduino ja ultraheliandurit kauguse mõõtmiseks?

Kuna teame projekti kokkuvõtet, liigume edasi ja kogume projekti alustamiseks lisateavet.



1. samm: komponentide (riistvara) kogumine

Kui soovite vältida ebamugavusi mis tahes projekti keskel, on parim viis koostada täielik loetelu kõikidest komponentidest, mida kavatseme kasutada. Teine samm, enne vooluringi alustamist, on kõigi nende komponentide lühike uurimine. Allpool on toodud loetelu kõigist komponentidest, mida me selles projektis vajame.



  • Hüppaja juhtmed
  • 5 V vahelduvvoolu alalisvooluadapter (x2)

2. samm: komponentide (tarkvara) kogumine

  • Proteus 8 Professional (saab alla laadida saidilt Siin )

Pärast Proteus 8 Professionali allalaadimist kujundage sellele vooluring. Lisasin siia tarkvarasimulatsioonid, et algajatel oleks mugav vooluahelat kujundada ja riistvaral asjakohaseid ühendusi luua.

3. samm: HCR-05 töötamine

Kuna me teame nüüd oma projekti peamist abstraktsust, siis liikugem edasi ja tehkem lühike uuring töö kohta HCR-05 . Selle anduri põhitööst saate aru järgmise skeemi järgi.

Sellel anduril on kaks tihvti, päästik, ja öko tihvt mida kasutatakse mõlema konkreetse punkti vahelise kauguse mõõtmiseks. Protsess algatatakse andurilt ultraheli laine saatmisega. Selle ülesande täitmiseks käivitatakse päästik 10 mm jaoks. Niipea kui see ülesanne on tehtud, saadetakse saatjast 8 ultrahelilainete helipurske. see laine liigub õhus ja niipea, kui see mõnda objekti oma teel tabab, lööb see tagasi ja võtab vastu anduri sisse ehitatud vastuvõtja.



Kui vastuvõtja saab ultrahelilaine pärast anduri peegeldamist, paneb see signaali öko tihvt kõrgesse olekusse. See tihvt jääb kõrgeks seisundiks ajaks, mis on täpselt võrdne ultrahelilaine kulumise ajaga saatjalt ja anduri vastuvõtjale tagasi.

Ultrahelianduri valmistamiseks saatja ainult, lihtsalt tehke päästik nööpnõelaks ja saatke sellele pinile kõrge impulss 10us. Ultraheli plahvatus käivitatakse kohe, kui see on tehtud. Niisiis, kui laine tuleb edastada, tuleb juhtida ainult ultrahelianduri päästikut.

Ei saa kuidagi teha ultraheliandurit a ainult vastuvõtja kuna ECO tihvti tõusu ei saa mikrokontroller juhtida, kuna see on seotud anduri päästikuga. Kuid on üks asi, mida saame teha, on see, et saame selle ultrahelianduri saatja katta kleeplindiga, et UV-laine välja ei läheks. Siis ei mõjuta saatja selle saatja ECO-kontakti.

4. samm: vooluringi töö

Kuna oleme mõlemad andurid pannud eraldi töötama nii saatja kui ka vastuvõtjana, on siin suur probleem. Vastuvõtja ei tea ultrahelilaine saatjast vastuvõtjani liikumiseks kuluvat aega, kuna ta ei tea täpselt, millal see laine edastati.

Selle probleemi lahendamiseks peame saatma a KÕRGE signaali vastuvõtja ECO-le kohe, kui ultraheli laine on edastatud, saatja andur. Või lihtsate sõnadega võime öelda, et vastuvõtja ECO ja saatja päästik tuleks samaaegselt saata HIGH-ile. Niisiis paneme selle saavutamiseks vastuvõtja päästiku kuidagi kõrgele kohe, kui saatja päästik kõrgele läheb. See vastuvõtja päästik püsib kõrgel seni, kuni ECO tihvt läheb MADAL . Kui vastuvõtja ECO-tihvt võtab vastu ultrahelisignaali, läheb see LOW. See tähendab, et saatjaanduri päästik sai just HIGH signaali. Niipea, kui ECO langeb madalaks, ootame teadaolevat viivitust ja paneme vastuvõtja päästiku HIGH. Seda tehes sünkroniseeritakse mõlema anduri päästikud ja arvutatakse kaugus, teades laine käigu aja viivitust.

5. samm: komponentide kokkupanek

Kuigi me kasutame ainult ühe ultrahelianduri saatjat ja teise vastuvõtjat, on kohustuslik ühendada kõik ultraheliandur Arduinole. Vooluahela ühendamiseks toimige järgmiselt.

  1. Võtke kaks ultraheliandurit. Katke esimese anduri vastuvõtja ja teise anduri saatja. Selleks kasutage valget kleeplinti ja veenduge, et need kaks oleksid täielikult kaetud, nii et teise anduri saatjalt ei jääks signaali ega satuks signaali esimese anduri vastuvõtjasse.
  2. Ühendage kaks Arduino kahte eraldi paneelilauda ja ühendage nendega vastavad andurid. Ühendage päästiku tihvt Arduino pin9-ga ja ecoPin Arduino pin10-ga. Lülitage ultraheliandur Arduino 5 V abil sisse ja jagage kõiki põhjuseid.
  3. Laadige vastuvõtja kood vastuvõtja Arduinosse ja saatja kood saatja Arduinosse.
  4. Nüüd avage vastuvõtva külje seeriamonitor ja märkige üles mõõdetav kaugus.

Selle projekti skeem näeb välja selline:

Vooluringi skeem

6. samm: Arduinoga alustamine

Kui te pole Arduino IDE-ga juba tuttav, ärge muretsege, sest allpool on selgitatud samm-sammult protseduuri Arduino IDE seadistamiseks ja kasutamiseks mikrokontrolleriplaadiga.

  1. Laadige alla Arduino IDE uusim versioon saidilt Arduino.
  2. Ühendage oma Arduino Nano plaat sülearvutiga ja avage juhtpaneel. klõpsake juhtpaneelil nuppu Riistvara ja heli . Nüüd klõpsake nuppu Seadmed ja printerid. Siit leiate porti, millega teie mikrokontrolleri plaat on ühendatud. Minu puhul on see nii KOM14 kuid see on erinevates arvutites erinev.

    Sadama leidmine

  3. Klõpsake menüüd Tööriist. ja seadke tahvel asendisse Arduino Nano rippmenüüst.

    Laua määramine

  4. Määrake samas menüüs Tööriist portiks pordinumber, mida olete enne Seadmed ja printerid .

    Pordi seadistamine

  5. Valige samas menüüs Tööriist protsessor ATmega328P (vana Bootloader ).

    Protsessor

  6. Laadige alla allolev kood ja kleepige see oma Arduino IDE-sse. Klõpsake nuppu Laadi üles nupp mikrokontrolleri plaadil oleva koodi kirjutamiseks.

    Laadi üles

Koodi allalaadimiseks kliki siia.

7. samm: koodeksist aru saamine

Selles projektis kasutatud kood on väga lihtne ja üsna hästi kommenteeritud. Manustatud kaustas on kaks koodifaili. Saatja kood ja vastuvõtja pool on mõlemad eraldi välja toodud. Laadime need koodid üles mõlemasse vastavasse Arduino tahvlisse. Kuigi see on iseenesestmõistetav, kirjeldatakse seda lühidalt allpool.

Saatja külje kood

1. Alguses lähtestatakse Arduino plaadi tihvtid, mis ühendatakse ultrahelianduriga. Seejärel deklareeritakse muutujad, mida kasutatakse väärtuste salvestamiseks aja ja vahemaa arvutamiseks koodi käitamise ajal.

// defineerib tihvtide arvu const int trigPin = 9; // Ühendage ultrahelianduri päästik pin Arduino const int echoPin = 10-ga; // Ühendage ultrahelianduri öko tihvt Arduino pin10-ga // määratleb muutujate pika kestuse; // muutuja ultrahelilaine t liikumise int kauguse jaoks kuluva aja salvestamiseks; // arvutatud muutuja vahemaa salvestamiseks

2. kehtetu seadistamine () on funktsioon, mis töötab stardis ainult ühe korra, kui tahvel on sisse lülitatud või lubamisnuppu vajutatakse. Siin deklareeritakse, et mõlemad Arduino tihvtid on kasutatavad SISEND ja VÄLJUND . Selles funktsioonis on seatud Baudrate. Baudi kiirus on kiirus bittides sekundis, mille abil mikrokontroller suhtleb ultrahelianduriga.

void setup () {pinMode (trigPin, OUTPUT); // Määrab trigPini väljundi pinMode'iks (echoPin, INPUT); // Määrab echoPini sisendsarjana.begin (9600); // Alustab jadasidet}

3. void loop () on funktsioon, mis töötab ikka ja jälle silmusena. Siin oleme kodeerinud mikrokontrolleri nii, et see saadaks ultrahelianduri Trigger-tihvtile HIGH signaali, mõistaks 20 mikrosekundit ja saadaks sellele LOW signaali.

void loop () {// määrab trigPini olekus KÕRGE 10 mikrosekundiks digitalWrite (trigPin, HIGH); // saatke esimese anduri viivituse päästikule HIGH signaalMikrosekundid (10); // oodake 10 mikrosekundit digitalWrite (trigPin, LOW); // saata LOW signaal esimese anduri viivituse päästikule (2); // oota 0,2 sekundit}

Vastuvõtja poole kood

1. Alguses lähtestatakse Arduino plaadi tihvtid, mis ühendatakse ultrahelianduriga. Seejärel deklareeritakse muutujad, mida kasutatakse väärtuste salvestamiseks aja ja vahemaa arvutamiseks koodi käitamise ajal.

// defineerib tihvtide arvu const int trigPin = 9; // Ühendage ultrahelianduri päästik pin Arduino const int echoPin = 10-ga; // Ühendage ultrahelianduri öko tihvt Arduino pin10-ga // määratleb muutujate pika kestuse; // muutuja ultrahelilaine t liikumise int kauguse jaoks kuluva aja salvestamiseks; // arvutatud muutuja vahemaa salvestamiseks

2. kehtetu seadistamine () on funktsioon, mis töötab stardis ainult ühe korra, kui tahvel on sisse lülitatud või lubamisnuppu vajutatakse. Siin deklareeritakse Arduino mõlemad tihvtid kasutamiseks sisendina ja väljundina. Selles funktsioonis on seatud Baudrate. Baudi kiirus on kiirus bittides sekundis, mille abil mikrokontroller suhtleb ultrahelianduriga.

void setup () {pinMode (trigPin, OUTPUT); // Määrab trigPini väljundi pinMode'iks (echoPin, INPUT); // Määrab echoPini sisendsarjana.begin (9600); // Alustab jadasidet}

3. tühine Trigger_US () on funktsioon, mida kutsutakse teise ultrahelianduri käivitustihvti võltskäivituseks. Sünkroonime mõlema anduri päästiku käivitusaja.

void Trigger_US () {// võltsitud käivitaja USA anduri digitalWrite (trigPin, HIGH); // Saada HIGH signaal teise anduri viivituse päästiknupuleMikrosekundid (10); // oodake 10 mikrosekundit digitalWrite (trigPin, LOW); // saatke LOW signaal päästiku tihvti teisele saatjale}

Neli. tühine Calc () on funktsioon, mida kasutatakse ultrahelisignaali kulumise aja arvutamiseks esimesest andurist teise andurini liikumiseks.

void Calc () // funktsioon ultraheli liikumiseks kuluva aja arvutamiseks {kestus = 0; // algselt nulliti kestus Trigger_US (); // kutsuge funktsioon Trigger_US while (digitalRead (echoPin) == HIGH); // samas kui eo pin olek suure viivitusega (2); // panna viivitus 0,2 sekundit Trigger_US (); // funktsiooni Trigger_US kestus = pulseIn (echoPin, HIGH); // arvestage kulunud aeg}

5. Siin void loop () Funktsiooni arvutame kauguse, kasutades ultraheli signaali kuluvat aega esimesest andurist teise andurini liikumiseks.

void loop () {Pdistance = kaugus; Arvutatud (); // helistage funktsiooni Calc () kaugus = kestus * 0,034; // ultrahelilaine läbitud vahemaa arvutamine, kui (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Measured Distance:'); // printige jadamonitoril Serial.println (kaugus / 2); // printige seeriamonitorile} //Serial.print('Distance: '); //Serial.println(distance/2); viivitus (500); // oodake 0,5 sekundit}