Jak měřit vzdálenost mezi dvěma body pomocí Arduina?

V elektronice se většinou používají ultrazvukové senzory k měření vzdálenosti z jednoho konkrétního bodu do druhého. Je velmi snadné napsat kód na desku Arduino a integrovat ultrazvukový senzor k provedení tohoto úkolu. Ale v tomto článku použijeme jiný přístup. Budeme používat dva samostatné ultrazvukové senzory, které budou integrovány do dvou samostatných Arduino. Tyto dva moduly budou umístěny ve dvou různých bodech, mezi kterými se má měřit vzdálenost. Jeden snímač bude vyroben jako přijímač a druhý jako vysílač. Tímto způsobem budeme schopni měřit vzdálenost mezi nimi pouhým lokalizováním polohy vysílače pomocí mnoha ultrazvukových přijímačů. Technika, kterou zde používáme, se nazývá Triangulace.



Měření vzdálenosti pomocí Arduina

Zde použitá technika je užitečná pouze v systémech malého rozsahu, kde lze nalézt malou vzdálenost. K jeho implementaci ve velkém měřítku jsou jistě nutné některé úpravy. Níže jsou popsány všechny výzvy, kterým čelily při provádění tohoto projektu.



Jak používat Arduino a ultrazvukový senzor k měření vzdálenosti?

Jak víme shrnutí za projektem, pojďme se posunout vpřed a shromáždit další informace k zahájení projektu.



Krok 1: Shromáždění komponent (hardware)

Pokud se chcete vyhnout jakýmkoli nepříjemnostem uprostřed jakéhokoli projektu, nejlepším přístupem je vytvořit úplný seznam všech komponent, které budeme používat. Druhým krokem, před zahájením výroby obvodu, je projít krátkou studií všech těchto komponent. Seznam všech komponent, které v tomto projektu potřebujeme, je uveden níže.



  • Propojovací dráty
  • 5V AC na DC adaptér (x2)

Krok 2: Shromáždění komponent (software)

  • Proteus 8 Professional (lze stáhnout z Tady )

Po stažení Proteus 8 Professional na něm navrhněte obvod. Zahrnul jsem sem softwarové simulace, aby pro začátečníky mohlo být výhodné navrhnout obvod a provést příslušná připojení k hardwaru.

Krok 3: Práce s HCR-05

Jak nyní známe hlavní abstrakt našeho projektu, pojďme se posunout kupředu a projít si krátkou studii fungování HCR-05 . Hlavní fungování tohoto snímače můžete pochopit podle následujícího schématu.

Tento senzor má dva piny, spoušťový kolík, a eko kolík které se používají k měření vzdálenosti mezi dvěma konkrétními body. Proces je zahájen odesláním ultrazvukové vlny ze snímače. Tento úkol se provádí spuštěním spouštěcího kolíku na 10us. Jakmile je tento úkol splněn, je z vysílače vyslán 8 ultrazvukových vln. tato vlna se bude pohybovat ve vzduchu a jakmile zasáhne nějaký objekt v cestě, zasáhne zpět a přijme přijímač zabudovaný v senzoru.



Když přijímač po odražení senzoru přijme ultrazvukovou vlnu, umístí eko kolík do vysokého stavu. Tento kolík zůstane ve vysokém stavu po dobu, která bude přesně stejná jako doba, kterou ultrazvuková vlna potřebuje k cestování z vysílače a zpět do přijímače senzoru.

Vyrobit si ultrazvukový senzor vysílač pouze, stačí vytvořit trig pin jako výstupní pin a odeslat vysoký puls na tento pin po dobu 10us. Jakmile to bude provedeno, spustí se ultrazvuková dávka. Kdykoli se má vlna přenášet, je třeba ovládat pouze spouštěcí kolík ultrazvukového snímače.

Neexistuje způsob, jak vyrobit ultrazvukový senzor jako a pouze přijímač protože vzestup ECO pinu nelze ovládat mikrokontrolérem, protože to souvisí se spouštěcím kolíkem senzoru. Existuje ale jedna věc, kterou můžeme udělat, je to, že můžeme vysílač tohoto ultrazvukového senzoru zakrýt lepicí páskou, kterou se nedostane žádná UV vlna. Potom nebude ECO pin tohoto vysílače ovlivněn vysílačem.

Krok 4: Práce na okruhu

Nyní, když jsme oba snímače nechali pracovat samostatně jako vysílač a přijímač, je zde velký problém, kterému zde čelíme. Přijímač nebude znát čas potřebný ultrazvukové vlně na cestu z vysílače do přijímače, protože neví přesně, kdy byla tato vlna přenesena.

K vyřešení tohoto problému musíme odeslat a VYSOKÝ signál do ECO přijímače, jakmile je ultrazvuková vlna přenesena snímačem vysílače. Nebo jednoduše řečeno, můžeme říci, že ECO přijímače a spoušť vysílače by měly být odeslány současně na HIGH. Abychom toho dosáhli, nějakým způsobem nastavíme spoušť přijímače vysoko, jakmile spoušť vysílače vysoko. Tato spoušť přijímače zůstane vysoká, dokud nezačne kolík ECO NÍZKÝ . Když bude ultrazvukový signál přijímán ECO pinem přijímače, bude LOW. To bude znamenat, že spoušť snímače vysílače právě dostala VYSOKÝ signál. Jakmile ECO poklesne, počkáme na známé zpoždění a aktivaci spouště přijímače nastavíme na VYSOKOU. Tímto způsobem se synchronizují spouštěče obou senzorů a vzdálenost se vypočítá pomocí znalosti časového zpoždění pohybu vlny.

Krok 5: Sestavení komponent

I když používáme pouze vysílač jednoho ultrazvukového senzoru a přijímač druhého, je nutné zapojit všechny čtyři piny na ultrazvukový senzor do Arduina. Pro připojení obvodu postupujte podle následujících kroků:

  1. Vezměte dva ultrazvukové senzory. Zakryjte přijímač prvního snímače a vysílač druhého snímače. K tomuto účelu použijte bílou lepicí pásku a ujistěte se, že tyto dva jsou plně zakryty, aby žádný signál neopouštěl vysílač druhého snímače a žádný signál se nedostal do přijímače prvního snímače.
  2. Připojte dva Arduino na dva samostatné prkénko a připojte k nim příslušné senzory. Připojte spouštěcí kolík na pin9 Arduina a ecoPin na pin10 Arduina. Zapněte ultrazvukový senzor pomocí 5V Arduina a běžte na všech místech.
  3. Nahrajte kód přijímače do Arduina přijímače a kód vysílače do Arduina vysílače.
  4. Nyní otevřete sériový monitor na přijímací straně a všimněte si vzdálenosti, která se měří.

Schéma zapojení tohoto projektu vypadá takto:

Kruhový diagram

Krok 6: Začínáme s Arduino

Pokud ještě nejste obeznámeni s Arduino IDE, nebojte se, protože níže je vysvětlen krok za krokem postup nastavení a používání Arduino IDE s deskou mikrokontroléru.

  1. Stáhněte si nejnovější verzi Arduino IDE z Arduino.
  2. Připojte desku Arduino Nano k notebooku a otevřete ovládací panel. na ovládacím panelu klikněte na Hardware a zvuk . Nyní klikněte na Zařízení a tiskárny. Zde najděte port, ke kterému je připojena deska vašeho mikrokontroléru. V mém případě ano COM14 ale na různých počítačích je to jiné.

    Hledání přístavu

  3. Klikněte na nabídku Nástroj. a nastavte desku na Arduino Nano z rozevírací nabídky.

    Nastavovací deska

  4. Ve stejné nabídce nástrojů nastavte port na číslo portu, které jste pozorovali dříve v souboru Zařízení a tiskárny .

    Nastavení portu

  5. Ve stejné nabídce nástrojů nastavte procesor na ATmega328P (starý Zavaděč ).

    Procesor

  6. Stáhněte si níže přiložený kód a vložte jej do svého Arduino IDE. Klikněte na nahrát tlačítko pro vypálení kódu na desce vašeho mikrokontroléru.

    nahrát

Chcete-li stáhnout kód, klikněte zde.

Krok 7: Porozumění Kodexu

Kód použitý v tomto projektu je velmi jednoduchý a docela dobře komentovaný. V přiložené složce jsou dva soubory kódů. Kód pro vysílač a kód pro stranu přijímače jsou uvedeny samostatně. Tyto kódy nahrajeme na obě příslušné desky Arduino. Ačkoli je to vysvětlující, je stručně popsáno níže.

Kód pro stranu vysílače

1. Na začátku jsou inicializovány kolíky desky Arduino, které budou připojeny k ultrazvukovému senzoru. Poté jsou deklarovány proměnné, které budou použity k uložení hodnot pro výpočet času a vzdálenosti během doby běhu kódu.

// definuje čísla pinů const int trigPin = 9; // Připojte trig pin ultrazvukového senzoru k pin9 Arduino const int echoPin = 10; // Připojte ekologický kolík ultrazvukového senzoru k pin10 Arduina // definuje proměnné dlouhé trvání; // proměnná pro uložení času, který uběhla vzdálenost ultrazvukové vlny t; // proměnná pro výpočet vypočítané vzdálenosti

2. neplatné nastavení () je funkce, která běží pouze jednou na začátku, když je deska zapnutá nebo je stisknuto tlačítko povolení. Zde jsou oba piny Arduina prohlášeny za používané jako VSTUP a VÝSTUP . V této funkci je nastavena přenosová rychlost. Přenosová rychlost je rychlost v bitech za sekundu, kterou mikrokontrolér komunikuje s ultrazvukovým senzorem.

void setup () {pinMode (trigPin, OUTPUT); // Nastaví trigPin jako výstupní pinMode (echoPin, INPUT); // Nastaví echoPin jako Input Serial.begin (9600); // Zahájí sériovou komunikaci}

3. neplatná smyčka () je funkce, která běží znovu a znovu ve smyčce. Zde jsme kódovali mikrokontrolér tak, aby vysílal signál HIGH na spoušťový kolík ultrazvukového senzoru, pracoval po dobu 20 mikrosekund a odesílal do něj signál LOW.

void loop () {// Nastaví trigPin na HIGH stav na 10 mikrosekund digitalWrite (trigPin, HIGH); // vyšle VYSOKÝ signál na spouštěči zpoždění prvního senzoruMicroseconds (10); // čekání na 10 mikrosekund digitalWrite (trigPin, LOW); // vyšle LOW signál do spouštěče zpoždění prvního senzoru (2); // počkejte 0,2 sekundy}

Kód pro stranu přijímače

1. Na začátku jsou inicializovány kolíky desky Arduino, které budou připojeny k ultrazvukovému senzoru. Poté jsou deklarovány proměnné, které budou použity k uložení hodnot pro výpočet času a vzdálenosti během doby běhu kódu.

// definuje čísla pinů const int trigPin = 9; // Připojte trig pin ultrazvukového senzoru k pin9 Arduino const int echoPin = 10; // Připojte ekologický kolík ultrazvukového senzoru k pin10 Arduina // definuje proměnné dlouhé trvání; // proměnná pro uložení času, který uběhla vzdálenost ultrazvukové vlny t; // proměnná pro výpočet vypočítané vzdálenosti

2. neplatné nastavení () je funkce, která běží pouze jednou na začátku, když je deska zapnutá nebo je stisknuto tlačítko povolení. Zde jsou oba piny Arduina deklarovány jako INPUT a OUTPUT. V této funkci je nastavena přenosová rychlost. Přenosová rychlost je rychlost v bitech za sekundu, kterou mikrokontrolér komunikuje s ultrazvukovým senzorem.

void setup () {pinMode (trigPin, OUTPUT); // Nastaví trigPin jako výstupní pinMode (echoPin, INPUT); // Nastaví echoPin jako Input Serial.begin (9600); // Zahájí sériovou komunikaci}

3. void Trigger_US () je funkce, která bude vyvolána pro falešné spouštění spouštěcího kolíku druhého ultrazvukového snímače. Synchronizujeme čas spuštění spouštěcího kolíku obou senzorů.

void Trigger_US () {// Fake trigger the US sensor digitalWrite (trigPin, HIGH); // Odešle VYSOKÝ signál na spouštěcí kolík zpoždění druhého senzoruMicroseconds (10); // čekání na 10 mikrosekund digitalWrite (trigPin, LOW); // vyšle signál NÍZKÝ do druhého odesílatele spouštěcího kolíku}

Čtyři. void Calc () je funkce, která se používá k výpočtu času, který ultrazvukový signál potřebuje na cestu z prvního snímače do druhého snímače.

void Calc () // funkce pro výpočet času potřebného k průchodu ultrazvukové vlny {duration = 0; // trvání původně nastaveno na nulu Trigger_US (); // volání funkce Trigger_US while (digitalRead (echoPin) == HIGH); // zatímco je stav eo pin ve vysokém zpoždění (2); // zpoždění 0,2 sekundy Trigger_US (); // volání funkce Trigger_US trvání = pulseIn (echoPin, HIGH); // calulate the time needed}

5. Tady v neplatná smyčka () funkce, vypočítáváme vzdálenost pomocí času, který ultrazvukový signál potřebuje na cestu z prvního snímače do druhého snímače.

void loop () {Pdistance = vzdálenost; Calc (); // volání funkce Calc () vzdálenost = doba trvání * 0,034; // výpočet vzdálenosti pokryté ultrazvukovou vlnou, pokud (Pdistance == vzdálenost || Pdistance == vzdálenost + 1 || Pdistance == vzdálenost-1) {Serial.print ('Naměřená vzdálenost:'); // tisk na sériovém monitoru Serial.println (vzdálenost / 2); // tisk na sériovém monitoru} //Serial.print('Distance: '); //Serial.println(distance/2); zpoždění (500); // počkejte 0,5 sekundy}