Hur mäter man avståndet mellan två punkter med Arduino?
I elektronik används ultraljudssensorer oftast 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 kommer att placeras på två olika punkter mellan vilka avståndet ska mätas. En sensor görs till mottagare och den andra görs till sändare. Genom att göra detta 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.
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 säkert 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.
Steg 2: Samla in komponenterna (programvara)
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 färdas 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-stifttill 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 resa från sändaren och tillbaka till sensormottagaren.
Att göra din ultraljudssensor endast sändare,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 kontrolleras.
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 utlösare ska skickas till HIGH samtidigt. Så för att uppnå detta kommer vi på något sätt att få mottagarens avtryckare 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 betyda att avtryckaren på sändarsensorn precis fick en HÖG signal. Så snart ECO: n går lågt 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 på 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:
- 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.
- Anslut två Arduino på två separata paneler och anslut deras respektive sensorer med dem. Anslut avtryckarstiftet till pin9 på Arduino och ecoPin till pin10 på Arduino. Slå på ultraljudssensorn med 5V Arduino och gemensamma alla grunder.
- Ladda upp mottagarkoden till Arduino på mottagaren och sändarkoden till sändarens Arduino.
- Öppna nu den seriella bildskärmen på den mottagande sidan och notera avståndet som mäts.
Kretsschemat för detta projekt ser ut som:
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 mikrokontrollkort förklaras nedan.
- Ladda ner den senaste versionen av Arduino IDE från Arduino.
- Anslut ditt Arduino Nano-kort till din bärbara dator och öppna kontrollpanelen. klicka på på kontrollpanelenHå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 COM14men det är annorlunda på olika datorer.
- Klicka på Verktyg-menyn. och sätt styrelsen till Arduino Nano från rullgardinsmenyn.
- I samma verktygsmeny ställer du in porten till det portnummer som du observerade tidigare i Enheter och skrivare.
- I samma verktygsmeny ställer du in processorn på ATmega328P (Old Bootloader).
- 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.
Klicka här för att ladda ner koden.
Steg 7: Förstå koden
Koden som används i detta projekt är mycket enkel och ganska 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 körningstiden för koden.
// definierar stiftnummer const int trigPin = 9; // Anslut trigpinnen till ultraljudssensorn till pin9 i Arduino const int echoPin = 10; // Anslut eco-stift av ultraljudssensor till pin10 av Arduino // definierar variabler med lång varaktighet; // variabel för att lagra den tid det tar av ultraljudsvågens t-sträcka; // 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 i 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 av den första sensorfördröjningen Mikrosekunder (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 körningstiden för koden.
// definierar stiftnummer const int trigPin = 9; // Anslut trigpinnen till ultraljudssensorn till pin9 i Arduino const int echoPin = 10; // Anslut eco-stift av ultraljudssensor till pin10 av Arduino // definierar variabler med lång varaktighet; // variabel för att lagra den tid det tar av ultraljudsvågens t-sträcka; // 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 INGÅNG och UTGÅNG. 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 kallas 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 avtryckarens andra sändare}
4. 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 initialt 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 (); // ringa Calc () -funktionsavståndet = 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}