Hur mäter man avståndet mellan två punkter med Arduino?

I elektronik används oftast ultraljudssensorer för att mäta avståndet från en viss punkt till en annan. Det är väldigt enkelt att skriva en kod på Arduino-kortet och integrera en ultraljudssensor för att utföra denna uppgift. Men i den här artikeln kommer vi att anta ett annat tillvägagångssätt. Vi kommer att använda två separata ultraljudssensorer som kommer att integreras med två separata Arduino. Dessa två moduler placeras på två olika punkter mellan vilka avståndet ska mätas. En sensor kommer att göras till mottagare och den andra kommer att göras till sändare. Genom att göra det kommer vi att kunna mäta avståndet mellan dem bara genom att lokalisera sändarens position med hjälp av många ultraljudsmottagare. Tekniken vi använder här kallas Triangulering.



Mät avstånd med Arduino

Tekniken som används här är bara användbar i småskaliga system där det finns ett litet avstånd. För att implementera den i stor skala behövs vissa ändringar. Nedan diskuteras alla utmaningar som stod inför detta projekt.



Hur man använder Arduino och ultraljudssensor för att mäta avstånd?

Som vi känner sammanfattningen bakom projektet, låt oss gå vidare och samla in ytterligare information för att starta projektet.



Steg 1: Samla in komponenterna (hårdvara)

Om du vill undvika besvär mitt i något projekt är det bästa sättet att göra en fullständig lista över alla komponenter som vi ska använda. Det andra steget, innan du börjar göra kretsen, är att gå igenom en kort studie av alla dessa komponenter. En lista över alla komponenter som vi behöver i detta projekt ges nedan.



  • Bygeltrådar
  • 5V AC till DC-adapter (x2)

Steg 2: Samla in komponenterna (programvara)

  • Proteus 8 Professional (kan laddas ner från Här )

Efter att ha laddat ner Proteus 8 Professional, design kretsen på den. Jag har inkluderat programvarusimuleringar här så att det kan vara bekvämt för nybörjare att utforma kretsen och göra lämpliga anslutningar på hårdvaran.

Steg 3: Arbeta med HCR-05

Som vi nu vet det huvudsakliga sammandraget av vårt projekt, låt oss gå vidare och gå igenom en kort studie av arbetet med HCR-05 . Du kan förstå den huvudsakliga funktionen för denna sensor genom följande diagram.

Denna sensor har två stift, trigger pin, och eko-stift som båda används för att mäta avståndet mellan två specifika punkter. Processen initieras genom att skicka en ultraljudsvåg från sensorn. Denna uppgift görs genom att trigga utlösningsstiftet för 10us. En 8 sonisk utbrott av ultraljudsvågor skickas från sändaren så snart denna uppgift är klar. denna våg kommer att röra sig i luften och så snart den träffar ett föremål på sin väg kommer den att slå tillbaka och tas emot av mottagaren inbyggd i sensorn.



När ultraljudsvågen kommer att tas emot av mottagaren efter att den har reflekterat sensorn kommer den att placera eko-stift till ett högt tillstånd. Denna stift kommer att förbli i högt tillstånd under den tid som kommer att vara exakt lika med den tid som ultraljudsvågen tar för att färdas från sändaren och tillbaka till sensormottagaren.

Att göra din ultraljudssensor sändare endast, gör bara trig-pin som din utgångsstift och skicka en hög puls till denna pin i 10us. En ultraljudssprängning kommer att initieras så snart detta är gjort. Så närhelst vågen ska sändas, ska bara ultraljudssensorns utlösningsstift styras.

Det finns inget sätt att göra ultraljudssensorn som en endast mottagaren eftersom ökningen av ECO-stiftet inte kan kontrolleras av mikrokontrollern eftersom den är relaterad till sensorns trig-pin. Men det finns en sak som vi kan göra är att vi kan täcka sändaren till denna ultraljudssensor med tejp som ingen UV-våg kommer ut. Då påverkas inte sändarens ECO-stift av sändaren.

Steg 4: Arbeta i kretsen

Nu, eftersom vi har gjort att båda sensorerna fungerar separat som sändare och mottagare, finns det ett stort problem som står inför här. Mottagaren vet inte vilken tid ultraljudsvågen tar för att resa från sändaren till mottagaren eftersom den inte vet exakt när denna våg överfördes.

För att lösa detta problem måste vi skicka ett HÖG signal till mottagarens ECO så snart ultraljudsvågen överförs via sändarsensorn. Eller med enkla ord kan vi säga att mottagarens ECO och sändarens trigger ska skickas till HIGH samtidigt. Så för att uppnå detta kommer vi på något sätt att få utlösaren till mottagaren att gå hög så snart sändarens avtryckare går högt. Denna utlösare på mottagaren förblir hög tills ECO-stiftet går LÅG . När en ultraljudssignal kommer att tas emot av mottagarens ECO-stift går den LÅG. Detta kommer att innebära att sändarens givare precis fick en HÖG signal. Så snart ECO blir låg, väntar vi på den kända förseningen och sätter mottagarens avtryckare HÖG. Genom att göra detta kommer triggarna för båda sensorerna att synkroniseras och avståndet beräknas genom att känna till vågens tidsfördröjning.

Steg 5: Montering av komponenterna

Även om vi bara använder sändaren till en ultraljudssensor och mottagaren till den andra, men det är obligatoriskt att ansluta alla de fyra stiften på ultraljudssensor till Arduino. Följ stegen nedan för att ansluta kretsen:

  1. Ta två ultraljudssensorer. Täck mottagaren för den första sensorn och sändaren för den andra sensorn. Använd vit tejp för detta ändamål och se till att dessa två är helt täckta så att ingen signal lämnar sändaren på den andra sensorn och ingen signal kommer in i mottagaren på den första sensorn.
  2. Anslut två Arduino på två separata paneler och anslut deras respektive sensorer. Anslut avtryckarstiftet till pin9 i Arduino och ecoPin till pin10 på Arduino. Slå på ultraljudssensorn med 5V Arduino och gemensamma alla grunder.
  3. Ladda upp mottagarkoden till mottagarens Arduino och sändarkoden till sändarens Arduino.
  4. Öppna nu seriemonitorn på mottagarsidan och notera avståndet som mäts.

Kretsschemat för detta projekt ser ut som:

Kretsschema

Steg 6: Komma igång med Arduino

Om du inte redan är bekant med Arduino IDE, oroa dig inte eftersom en steg för steg-procedur för att ställa in och använda Arduino IDE med ett mikrokontrollerkort förklaras nedan.

  1. Ladda ner den senaste versionen av Arduino IDE från Arduino.
  2. Anslut ditt Arduino Nano-kort till din bärbara dator och öppna kontrollpanelen. Klicka på på kontrollpanelen Hårdvara och ljud . Klicka nu på Enheter och skrivare. Här hittar du porten som ditt mikrokontrollkort är anslutet till. I mitt fall är det COM14 men det är annorlunda på olika datorer.

    Hitta port

  3. Klicka på Verktyg-menyn. och sätt styrelsen till Arduino Nano från rullgardinsmenyn.

    Inställningsbräda

  4. I samma verktygsmeny ställer du in porten till det portnummer som du observerade tidigare i Enheter och skrivare .

    Ställ in port

  5. I samma verktygsmeny ställer du in processorn på ATmega328P (gammal Bootloader ).

    Processor

  6. Ladda ner koden som bifogas nedan och klistra in den i din Arduino IDE. Klicka på ladda upp -knappen för att bränna koden på ditt mikrokontrollerkort.

    Ladda upp

För att ladda ner koden, Klicka här.

Steg 7: Förstå koden

Koden som används i det här projektet är mycket enkel och ganska bra kommenterad. Det finns två filer med koder i den bifogade mappen. Kod för sändaren och en kod för mottagarsidan ges båda separat. Vi laddar upp dessa koder i båda Arduino-korten. Även om det är självförklarande beskrivs det kort nedan.

Kod för sändarsidan

1. I början initialiseras stiften på Arduino-kortet som kommer att anslutas till ultraljudssensorn. Därefter deklareras variablerna som kommer att användas för att lagra värden för beräkning av tid och avstånd under kodens körtid.

// definierar stiftnummer const int trigPin = 9; // Anslut trigpinnen för ultraljudssensorn till pin9 i Arduino const int echoPin = 10; // Anslut ultraljudssensorns eco-pin till pin10 i Arduino // definierar variabler med lång varaktighet; // variabel för att lagra den tid det tar av ultraljudsvågen och färdas avståndet; // variabel för att lagra avstånd beräknat

2. ogiltig installation () är en funktion som bara körs en gång i början när kortet är påslaget eller aktiveringsknappen tryckt. Här deklareras båda stiften på Arduino att de används som INMATNING och PRODUKTION . Baudrate ställs in i denna funktion. Baudhastighet är hastigheten i bitar per sekund med vilken mikrokontrollern kommunicerar med ultraljudssensorn.

ogiltig installation () {pinMode (trigPin, OUTPUT); // Ställer in trigPin som en Output pinMode (echoPin, INPUT); // Ställer in echoPin som en Input Serial.begin (9600); // Startar seriekommunikationen}

3. ogiltig slinga () är en funktion som körs om och om igen i en slinga. Här har vi kodat mikrokontrollern så att den skickar en HÖG signal till utlösarstiftet på ultraljudssensorn, klarar 20 mikrosekunder och skickar en LÅG signal till den.

void loop () {// Ställer in trigPin på HIGH-tillstånd i 10 mikrosekunder digitalWrite (trigPin, HIGH); // skicka en HÖG signal på utlösaren för första sensor delayMicroseconds (10); // vänta i 10 mikrosekunder digitalWrite (trigPin, LOW); // skicka en LÅG signal till utlösaren för den första sensorfördröjningen (2); // vänta i 0,2 sekunder}

Kod för mottagarsidan

1. I början initialiseras stiften på Arduino-kortet som kommer att anslutas till ultraljudssensorn. Därefter deklareras variablerna som kommer att användas för att lagra värden för beräkning av tid och avstånd under kodens körtid.

// definierar stiftnummer const int trigPin = 9; // Anslut trigpinnen för ultraljudssensorn till pin9 i Arduino const int echoPin = 10; // Anslut ultraljudssensorns eco-pin till pin10 i Arduino // definierar variabler med lång varaktighet; // variabel för att lagra den tid det tar av ultraljudsvågen och färdas avståndet; // variabel för att lagra avstånd beräknat

2. ogiltig installation () är en funktion som bara körs en gång i början när kortet är påslaget eller aktiveringsknappen tryckt. Här deklareras båda stiften på Arduino att de används som INPUT och OUTPUT. Baudrate ställs in i denna funktion. Baudhastighet är hastigheten i bitar per sekund med vilken mikrokontrollern kommunicerar med ultraljudssensorn.

ogiltig installation () {pinMode (trigPin, OUTPUT); // Ställer in trigPin som en Output pinMode (echoPin, INPUT); // Ställer in echoPin som en Input Serial.begin (9600); // Startar seriekommunikationen}

3. ogiltig Trigger_US () är en funktion som kommer att krävas för falsk utlösning av triggstiftet på den andra ultraljudssensorn. Vi synkroniserar utlösningstiden för triggstiftet för båda sensorerna.

ogiltig Trigger_US () {// Fake trigger den amerikanska sensorn digitalWrite (trigPin, HIGH); // Skicka en HÖG signal till avtryckarstiftet för den andra sensorfördröjningen Mikrosekunder (10); // vänta på 10 mikrosekunder digitalWrite (trigPin, LOW); // skicka en LÅG signal till utlösarens andra sändare}

Fyra. ogiltigt Calc () är en funktion som används för att beräkna den tid det tar för ultraljudssignalen att resa från den första sensorn till den andra sensorn.

void Calc () // funktion för att beräkna den tid som ultraljudsvågen tar för att resa {varaktighet = 0; // varaktighet ursprungligen satt till noll Trigger_US (); // ring Trigger_US-funktionen medan (digitalRead (echoPin) == HIGH); // medan status för eo-stift i hög fördröjning (2); // sätta en fördröjning på 0,2 sekunder Trigger_US (); // ring Trigger_US-funktionens varaktighet = pulseIn (echoPin, HIGH); // beräkna den tid det tar}

5. Här i ogiltig slinga () funktion, beräknar vi avståndet genom att använda den tid som ultraljudssignalen tar för att resa från den första sensorn till den andra sensorn.

void loop () {Pdistance = distance; Calc (); // anropa Funktionsavståndet Calc () = varaktighet * 0,034; // beräkna avståndet som täcks av ultraljudsvågen om (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ('Measured Distance:'); // skriv ut på seriell bildskärm Serial.println (avstånd / 2); // skriv ut på seriell bildskärm} //Serial.print('Distance: '); //Serial.println(avstånd/2); fördröjning (500); // vänta i 0,5 sekunder}