Ako merať vzdialenosť medzi dvoma bodmi pomocou Arduina?

V elektronike sa väčšinou používajú ultrazvukové senzory na meranie vzdialenosti od jedného konkrétneho bodu k druhému. Je veľmi ľahké napísať kód na dosku Arduino a integrovať kód ultrazvukový senzor splniť túto úlohu. Ale v tomto článku sa chystáme prijať iný prístup. Budeme používať dva samostatné ultrazvukové senzory, ktoré budú integrované do dvoch samostatných Arduino. Tieto dva moduly budú umiestnené v dvoch rôznych bodoch, medzi ktorými sa má merať vzdialenosť. Jeden snímač bude vyrobený ako prijímač a druhý ako vysielač. Týmto spôsobom budeme schopní zmerať vzdialenosť medzi nimi iba lokalizáciou polohy vysielača pomocou mnohých ultrazvukových prijímačov. Nazýva sa technika, ktorú tu používame Triangulácia.



Meranie vzdialenosti pomocou Arduina

Tu použitá technika je užitočná iba v systémoch malého rozsahu, kde je potrebné nájsť malú vzdialenosť. Na jeho implementáciu vo veľkom meradle sú určite potrebné určité úpravy. Ďalej sú diskutované všetky výzvy, ktorým čelili pri uskutočňovaní tohto projektu.



Ako používať Arduino a ultrazvukový senzor na meranie vzdialenosti?

Ako vieme súhrn projektu, poďme ďalej a zhromaždme ďalšie informácie potrebné na zahájenie projektu.



Krok 1: Zhromaždenie komponentov (hardvér)

Ak sa chcete vyhnúť nepríjemnostiam uprostred každého projektu, najlepším riešením je vytvoriť kompletný zoznam všetkých komponentov, ktoré budeme používať. Druhým krokom, pred začatím výroby obvodu, je prejsť krátkym štúdiom všetkých týchto komponentov. Zoznam všetkých komponentov, ktoré v tomto projekte potrebujeme, je uvedený nižšie.



  • Prepojovacie drôty
  • 5V AC na DC adaptér (x2)

Krok 2: Zhromaždenie komponentov (softvér)

  • Proteus 8 Professional (možno stiahnuť z Tu )

Po stiahnutí Proteus 8 Professional na ňom navrhnite obvod. Zahrnul som sem softvérové ​​simulácie, aby bolo pre začiatočníkov výhodné navrhnúť obvod a vykonať príslušné pripojenia na hardvéri.

Krok 3: Práca s HCR-05

Keď už poznáme hlavný abstrakt nášho projektu, poďme ďalej a urobme si krátku štúdiu práce HCR-05 . Hlavné fungovanie tohto snímača pochopíte na nasledujúcom diagrame.

Tento snímač má dva piny, spúšťací kolík, a eko špendlík ktoré sa používajú na meranie vzdialenosti medzi dvoma konkrétnymi bodmi. Proces sa iniciuje vyslaním ultrazvukovej vlny zo senzora. Táto úloha sa vykonáva spustením spúšťacieho kolíka na 10us. Hneď ako je táto úloha vykonaná, z vysielača sa vysiela 8 ultrazvukových vĺn ultrazvuku. táto vlna bude cestovať vzduchom a akonáhle udrie do cesty v ceste, udrie späť a prijme ju prijímač zabudovaný v senzore.



Keď prijímač po odraze snímača prijme ultrazvukovú vlnu, položí eko špendlík do vysokého stavu. Tento kolík zostane vo vysokom stave po dobu, ktorá sa bude presne rovnať času, ktorý trvá ultrazvuková vlna na prechod z vysielača a späť do prijímača snímača.

Aby ste si vyrobili ultrazvukový senzor vysielač iba, len urobte trig pin ako svoj výstupný pin a pošlite na tento pin vysoký impulz na 10us. Hneď ako sa tak stane, spustí sa ultrazvuková dávka. Takže kedykoľvek sa má vlna prenášať, musí sa ovládať iba spúšťací kolík ultrazvukového snímača.

Neexistuje spôsob, ako vyrobiť ultrazvukový snímač ako a iba prijímač pretože vzostup ECO kolíka nie je možné riadiť mikrokontrolérom, pretože to súvisí so spúšťacím kolíkom snímača. Existuje však jedna vec, ktorú môžeme urobiť, je to, že môžeme zakryť vysielač tohto ultrazvukového snímača lepiacou páskou, aby sa nedostala žiadna UV vlna. Vysielač potom neovplyvní kolík ECO tohto vysielača.

Krok 4: Opracovanie obvodu

Teraz, keď sme obidva snímače nastavili tak, aby fungovali oddelene ako vysielač a prijímač, nastáva tu veľký problém. Prijímač nebude vedieť čas, ktorý trvá ultrazvuková vlna na cestu z vysielača do prijímača, pretože nevie presne, kedy bola táto vlna vysielaná.

Na vyriešenie tohto problému musíme odoslať a VYSOKÁ signál do ECO prijímača, akonáhle je ultrazvuková vlna prenášaná snímačom vysielača. Alebo jednoduchými slovami, môžeme povedať, že ECO prijímača a spúšť vysielača by mali byť zaslané súčasne na HIGH. Takže aby sme to dosiahli, nejako nastavíme spúšť prijímača vysoko, akonáhle stúpne spúšť vysielača. Táto spúšť prijímača zostane vysoká, kým neprejde kolík ECO NÍZKY . Keď bude ECO pin prijímača prijímať ultrazvukový signál, pôjde LOW. To bude znamenať, že spúšť senzora vysielača práve dostala HIGH signál. Teraz, hneď ako ECO klesne, počkáme na známe oneskorenie a aktivujeme spúšť HIGH. Týmto spôsobom sa zosynchronizujú spúšťače oboch snímačov a vzdialenosť sa vypočíta pomocou znalosti časového oneskorenia pohybu vlny.

Krok 5: Zostavenie komponentov

Aj keď používame iba vysielač jedného ultrazvukového snímača a prijímač druhého, je potrebné zapojiť všetky štyri piny konektora ultrazvukový senzor k Arduinu. Pri pripájaní obvodu postupujte podľa krokov uvedených nižšie:

  1. Vezmite dva ultrazvukové snímače. Zakryte prijímač prvého snímača a vysielač druhého snímača. Na tento účel použite bielu lepiacu pásku a skontrolujte, či sú tieto dve časti úplne zakryté, aby z vysielača druhého snímača nevychádzal žiadny signál a aby sa žiaden signál nedostal do prijímača prvého snímača.
  2. Pripojte dve Arduino k dvom samostatným doskám a pripojte k nim príslušné senzory. Pripojte spúšťací kolík na pin9 Arduina a ecoPin na pin10 Arduina. Zapnite ultrazvukový snímač na 5 V od Arduina a vykonajte všetky bežné činnosti.
  3. Nahrajte kód prijímača do Arduina prijímača a kód vysielača do Arduina vysielača.
  4. Teraz otvorte sériový monitor na strane prijímača a všimnite si vzdialenosť, ktorá sa meria.

Schéma zapojenia tohto projektu vyzerá takto:

Schéma zapojenia

Krok 6: Začíname s Arduino

Ak ešte nemáte skúsenosti s Arduino IDE, nebojte sa, pretože nižšie je vysvetlený krok za krokom postup nastavenia a používania Arduino IDE s doskou mikrokontroléra.

  1. Stiahnite si najnovšiu verziu Arduino IDE z Arduino.
  2. Pripojte dosku Arduino Nano k notebooku a otvorte ovládací panel. na ovládacom paneli kliknite na Hardvér a zvuk . Teraz kliknite na Zariadenia a tlačiarne. Tu nájdite port, ku ktorému je pripojená doska vášho mikrokontroléra. V mojom prípade to tak je COM14 ale na rôznych počítačoch je to iné.

    Hľadá sa prístav

  3. Kliknite na ponuku Nástroj. a nastavte dosku na Arduino Nano z rozbaľovacej ponuky.

    Nastavovacia doska

  4. V rovnakej ponuke nástrojov nastavte port na číslo portu, ktoré ste pozorovali predtým v priečinku Zariadenia a tlačiarne .

    Nastavenie portu

  5. V tej istej ponuke nástrojov nastavte procesor na ATmega328P (starý Bootloader ).

    procesor

  6. Stiahnite si nižšie priložený kód a vložte ho do svojho Arduino IDE. Klikni na nahrať tlačidlo na vypálenie kódu na doske vášho mikrokontroléra.

    Nahrať

Ak chcete stiahnuť kód, kliknite tu.

Krok 7: Porozumenie Kódexu

Kód použitý v tomto projekte je veľmi jednoduchý a celkom dobre komentovaný. V priloženom priečinku sú dva súbory kódov. Kód pre vysielač a kód pre stranu prijímača sú uvedené osobitne. Tieto kódy nahráme na obe príslušné dosky Arduino. Aj keď je to samozrejmé, je to stručne popísané nižšie.

Kód pre stranu vysielača

1. Na začiatku sú inicializované kolíky dosky Arduino, ktoré budú pripojené k ultrazvukovému senzoru. Potom sa deklarujú premenné, ktoré sa použijú na ukladanie hodnôt pre výpočet času a vzdialenosti počas doby chodu kódu.

// definuje piny cisla const int trigPin = 9; // Pripojte trig pin ultrazvukového senzora k pin9 Arduino const int echoPin = 10; // Pripojte ekologický kolík ultrazvukového snímača k kolíku 10 Arduina // definuje premenné dlhé trvanie; // premenná na uloženie času potrebného na prekonanie vzdialenosti ultrazvukovej vlny t; // premenná na výpočet vypočítanej vzdialenosti

2. nastavenie neplatnosti () je funkcia, ktorá sa spustí iba raz na začiatku, keď je doska zapnutá alebo je stlačené tlačidlo povolenia. Tu sa obidva piny Arduina deklarujú na použitie ako VSTUP a VÝKON . V tejto funkcii je nastavená prenosová rýchlosť. Prenosová rýchlosť je rýchlosť v bitoch za sekundu, ktorou mikrokontrolér komunikuje s ultrazvukovým snímačom.

void setup () {pinMode (trigPin, OUTPUT); // Nastaví trigPin ako výstupný pinMode (echoPin, INPUT); // Nastaví echoPin ako Input Serial.begin (9600); // Spustí sériovú komunikáciu}

3. neplatná slučka () je funkcia, ktorá beží znova a znova v slučke. Tu sme kódovali mikrokontrolér tak, aby vysielal VYSOKÝ signál na kolík Trigger ultrazvukového snímača, umlčal sa 20 mikrosekúnd a poslal do neho signál NÍZKY.

void loop () {// Nastaví trigPin na HIGH stav na 10 mikrosekúnd digitalWrite (trigPin, HIGH); // vyšle VYSOKÝ signál na spúšte prvého oneskorenia senzoraMicroseconds (10); // čakať 10 mikrosekúnd digitalWrite (trigPin, LOW); // vyšle signál LOW na spúšť prvého oneskorenia snímača (2); // počkajte 0,2 sekundy}

Kód pre stranu prijímača

1. Na začiatku sú inicializované kolíky dosky Arduino, ktoré budú pripojené k ultrazvukovému senzoru. Potom sa deklarujú premenné, ktoré sa použijú na ukladanie hodnôt pre výpočet času a vzdialenosti počas doby chodu kódu.

// definuje piny cisla const int trigPin = 9; // Pripojte trig pin ultrazvukového senzora k pin9 Arduino const int echoPin = 10; // Pripojte ekologický kolík ultrazvukového snímača k kolíku 10 Arduina // definuje premenné dlhé trvanie; // premenná na uloženie času potrebného na prekonanie vzdialenosti ultrazvukovej vlny t; // premenná na výpočet vypočítanej vzdialenosti

2. nastavenie neplatnosti () je funkcia, ktorá sa spustí iba raz na začiatku, keď je doska zapnutá alebo je stlačené tlačidlo povolenia. Tu sa obidva piny Arduina deklarujú na použitie ako VSTUP a VÝSTUP. V tejto funkcii je nastavená prenosová rýchlosť. Prenosová rýchlosť je rýchlosť v bitoch za sekundu, ktorou mikrokontrolér komunikuje s ultrazvukovým snímačom.

void setup () {pinMode (trigPin, OUTPUT); // Nastaví trigPin ako výstupný pinMode (echoPin, INPUT); // Nastaví echoPin ako Input Serial.begin (9600); // Spustí sériovú komunikáciu}

3. void Trigger_US () je funkcia, ktorá sa bude volať na falošné spustenie spúšťacieho kolíka druhého ultrazvukového snímača. Synchronizujeme čas spustenia trig pinu oboch senzorov.

void Trigger_US () {// Falošné spustenie amerického senzora digitalWrite (trigPin, HIGH); // Vyšle signál HIGH na spúšťací kolík Second delay delayMicroseconds (10); // čakať na 10 mikrosekúnd digitalWrite (trigPin, LOW); // vyšle signál NÍZKY do druhého odosielateľa spúšťacieho kolíka}

Štyri. void Calc () je funkcia, ktorá sa používa na výpočet času potrebného na prechod ultrazvukového signálu z prvého snímača do druhého snímača.

void Calc () // funkcia na výpočet času potrebného na cestu ultrazvukovej vlny {duration = 0; // trvanie spočiatku nastavené na nulu Trigger_US (); // volanie funkcie Trigger_US while (digitalRead (echoPin) == HIGH); // zatiaľ čo stav eo kolíka vo vysokom oneskorení (2); // dajte oneskorenie 0,2 sekundy Trigger_US (); // volanie funkcie Trigger_US duration = pulseIn (echoPin, HIGH); // calulate the time needed}

5. Tu v neplatná slučka () Funkcia vypočítava vzdialenosť pomocou času potrebného na prekonanie ultrazvukového signálu od prvého senzora k druhému senzoru.

neplatná slučka () {Pdistance = vzdialenosť; Calc (); // volanie funkcie Calc () vzdialenosť = trvanie * 0,034; // výpočet vzdialenosti prekonanej ultrazvukovou vlnou, ak (Pdistance == vzdialenosť || Pdistance == vzdialenosť + 1 || Pdistance == vzdialenosť-1) {Serial.print ('Nameraná vzdialenosť:'); // tlač na sériový monitor Serial.println (vzdialenosť / 2); // tlač na sériovom monitore} //Serial.print('Distance: '); //Serial.println(distance/2); oneskorenie (500); // počkajte 0,5 sekundy}