Hvordan måles afstanden mellem to punkter ved hjælp af Arduino?
I elektronik bruges ultralydssensorer det meste af tiden til at måle afstanden fra et bestemt punkt til et andet. Det er meget let at skrive en kode på Arduino-kortet og integrere en ultralydssensor at udføre denne opgave. Men i denne artikel vil vi vedtage en anden tilgang. Vi skal bruge to separate ultralydssensorer, der integreres med to separate Arduino. Disse to moduler placeres på to forskellige punkter, mellem hvilke afstanden skal måles. Den ene sensor bliver til en modtager, og den anden bliver en sender. Ved at gøre dette vil vi være i stand til at måle afstanden mellem dem bare ved at finde senderens position ved hjælp af mange ultralydsmodtagere. Den teknik, vi bruger her, kaldes Triangulering.
Den anvendte teknik er bare nyttig i små skalaer, hvor der findes en lille afstand. For at implementere det i stor skala er der bestemt behov for nogle ændringer. Alle de udfordringer, der stod over for under gennemførelsen af dette projekt, er beskrevet nedenfor.
Hvordan bruges Arduino og ultralydssensor til at måle afstand?
Da vi kender resuméet bag projektet, lad os gå videre og indsamle yderligere information for at starte projektet.
Trin 1: Samling af komponenterne (hardware)
Hvis du vil undgå ulemper midt i ethvert projekt, er den bedste tilgang at lave en komplet liste over alle de komponenter, som vi skal bruge. Det andet trin, før du begynder at oprette kredsløbet, er at gennemgå en kort undersøgelse af alle disse komponenter. En liste over alle de komponenter, som vi har brug for i dette projekt, er angivet nedenfor.
Trin 2: Samling af komponenterne (software)
Efter download af Proteus 8 Professional skal du designe kredsløbet på den. Jeg har inkluderet softwaresimuleringer her, så det kan være praktisk for begyndere at designe kredsløbet og foretage passende forbindelser på hardwaren.
Trin 3: Arbejde med HCR-05
Som vi nu kender hovedabstraktet af vores projekt, lad os gå videre og gennemgå en kort undersøgelse af arbejdet med HCR-05. Du kan forstå den vigtigste funktion af denne sensor ved hjælp af følgende diagram.
Denne sensor har to ben, udløserstift, og øko pin der begge bruges til at måle afstanden mellem to bestemte punkter. Processen startes ved at sende en ultralydsbølge fra sensoren. Denne opgave udføres ved at udløse trig-pin i 10us. En 8 sonisk burst af ultralydsbølger sendes fra senderen, så snart denne opgave er udført. denne bølge bevæger sig i luften, og så snart den rammer en genstand på sin måde, rammer den tilbage og modtages af modtageren, der er indbygget i sensoren.
Når ultralydsbølgen modtages af modtageren efter at have reflekteret sensoren, vil den placere øko pintil en høj tilstand. Denne pin forbliver i høj tilstand i den tid, der vil være nøjagtigt lig med den tid, det tager af ultralydsbølgen at rejse fra senderen og tilbage til sensormodtageren.
At lave din ultralydssensor kun sender,lav bare trig pin som din output pin og send en høj puls til denne pin i 10us. En ultralydssprengning vil blive indledt, så snart dette er gjort. Så når bølgen skal transmitteres, skal bare ultralydssensorens udløserstift styres.
Der er ingen måde at gøre ultralydssensoren som en kun modtageren fordi stigningen af ECO-stiften ikke kan styres af mikrokontrolleren, fordi den er relateret til sensorens trig-pin. Men der er én ting, vi kan gøre, er, vi kan dække transmitteren til denne ultralydssensor med duct tape, så ingen UV-bølge kommer ud. Derefter påvirkes ikke senderen af ECO-stiften.
Trin 4: Arbejde i kredsløbet
Nu, da vi har fået begge sensorer til at fungere separat som sender og modtager, er der et stort problem, der står over for her. Modtageren kender ikke den tid, det tager af ultralydsbølgen at rejse fra senderen til modtageren, fordi den ikke ved nøjagtigt, hvornår denne bølge blev transmitteret.
For at løse dette problem skal vi sende en HØJ signal til modtagerens ECO, så snart ultralydsbølgen transmitteres, sendesensoren. Eller med enkle ord kan vi sige, at modtagerens ECO og senderens udløser skal sendes til HIGH på samme tid. Så for at opnå dette vil vi på en eller anden måde få udløseren til modtageren til at gå højt, så snart udløseren på senderen går højt. Denne trigger på modtageren forbliver høj, indtil ECO-stiften går LAV. Når et ultralydssignal modtages af modtagerens ECO-pin, går det LAVT. Dette vil betyde, at udløseren til transmitterføleren lige har fået et HIGH signal. Så snart ECO'en er lav, venter vi på den kendte forsinkelse og sætter modtagerens trigger HIGH. Ved at gøre dette synkroniseres udløserne for begge sensorer, og afstanden beregnes ved at kende bølgernes tidsforsinkelse.
Trin 5: Samling af komponenterne
Selvom vi kun bruger senderen til den ene ultralydssensor og modtageren til den anden, men det er obligatorisk at forbinde alle de fire ben på ultralydssensor til Arduino. For at forbinde kredsløbet skal du følge nedenstående trin:
- Tag to ultralydssensorer. Dæk modtageren til den første sensor og senderen til den anden sensor. Brug hvidt bånd til dette formål, og sørg for, at disse to er helt dækket, så der ikke kommer noget signal fra senderen til den anden sensor, og intet signal kommer ind i modtageren på den første sensor.
- Forbind to Arduino på to separate brødbrædder og tilslut deres respektive sensorer med dem. Tilslut triggerpinden til pin9 i Arduino og ecoPin til pin10 på Arduino. Tænd ultralydssensoren med 5V Arduino og fælles alle grunde.
- Upload modtagerkoden til Arduino på modtageren og senderkoden til senderens Arduino.
- Åbn nu den serielle skærm på den modtagende side og noter den afstand, der måles.
Kredsløbsdiagrammet for dette projekt ser ud som:
Trin 6: Kom godt i gang med Arduino
Hvis du ikke allerede er bekendt med Arduino IDE, skal du ikke bekymre dig, fordi en trinvis procedure til opsætning og brug af Arduino IDE med et mikrocontrollerkort forklares nedenfor.
- Download den nyeste version af Arduino IDE fra Arduino.
- Tilslut dit Arduino Nano-kort til din bærbare computer, og åbn kontrolpanelet. i kontrolpanelet skal du klikke påHardware og lyd. Klik nu påEnheder og printere.Her finder du den port, som dit mikrocontrollerkort er tilsluttet. I mit tilfælde er det COM14men det er anderledes på forskellige computere.
- Klik på værktøjsmenuen. og sæt tavlen til Arduino Nano fra rullemenuen.
- I den samme værktøjsmenu skal du indstille porten til det portnummer, du tidligere har observeret i Enheder og printere.
- I den samme værktøjsmenu skal du indstille processoren til ATmega328P (gammel bootloader).
- Download koden, der er vedhæftet nedenfor, og indsæt den i din Arduino IDE. Klik på upload knap til at brænde koden på dit mikrocontrollerkort.
Klik her for at downloade koden.
Trin 7: Forstå koden
Koden, der bruges i dette projekt, er meget enkel og ganske godt kommenteret. Der er to filer med koder i den vedhæftede mappe. Kode til senderen og en kode til modtagersiden gives begge separat. Vi uploader disse koder i begge de respektive Arduino-kort. Selvom det er selvforklarende, beskrives det kort nedenfor.
Kode til sendersiden
1. I starten initialiseres stifter på Arduino-kortet, der forbindes til ultralydssensoren. Derefter erklæres variablerne, som vil blive brugt til at gemme værdier til beregning af tid og afstand i løbet af koden.
// definerer pins tal const int trigPin = 9; // Tilslut trigpinden til ultralydssensoren til pin9 i Arduino const int echoPin = 10; // Tilslut øko-stift af ultralydssensor til pin10 af Arduino // definerer variabler med lang varighed; // variabel til lagring af den tid, der er taget af ultralydsbølgen t kører i afstand; // variabel til at gemme afstand beregnet
2. ugyldig opsætning ()er en funktion, der kun kører en gang i starten, når tavlen tændes eller aktiveringsknappen trykkes. Her erklæres begge stifter af Arduino for at blive brugt som INDGANG og PRODUKTION. Baudrate er indstillet i denne funktion. Baudhastighed er den hastighed i bits pr. Sekund, hvormed mikrokontrolleren kommunikerer med ultralydssensoren.
ugyldig opsætning () {pinMode (trigPin, OUTPUT); // Indstiller trigPin som en Output pinMode (echoPin, INPUT); // Indstiller echoPin som en Input Serial.begin (9600); // Starter seriel kommunikation}
3. ugyldig sløjfe ()er en funktion, der kører igen og igen i en løkke. Her har vi kodet mikrokontrolleren, så den sender et HØJT signal til udløserstiften på ultralydssensoren, viser 20 mikrosekunder og sender et LAVT signal til den.
void loop () {// Indstiller trigPin på HIGH-tilstand i 10 mikrosekunder digitalWrite (trigPin, HIGH); // send et HIGH signal på triggeren af den første sensor delayMicroseconds (10); // vent i 10 mikrosekunder digitalWrite (trigPin, LOW); // sende et LAVT signal til udløseren af den første sensorforsinkelse (2); // vent i 0,2 sekunder}
Kode til modtagersiden
1. I starten initialiseres stifter på Arduino-kortet, der forbindes til ultralydssensoren. Derefter erklæres variablerne, som vil blive brugt til at gemme værdier til beregning af tid og afstand i løbet af koden.
// definerer pins tal const int trigPin = 9; // Tilslut trigpinden til ultralydssensoren til pin9 i Arduino const int echoPin = 10; // Tilslut øko-stift af ultralydssensor til pin10 af Arduino // definerer variabler med lang varighed; // variabel til lagring af den tid, der er taget af ultralydsbølgen t kører i afstand; // variabel til at gemme afstand beregnet
2. ugyldig opsætning ()er en funktion, der kun kører en gang i starten, når tavlen tændes eller aktiveringsknappen trykkes. Her erklæres begge stifter af Arduino for at blive brugt som INPUT og OUTPUT. Baudrate er indstillet i denne funktion. Baudhastighed er den hastighed i bits pr. Sekund, hvormed mikrokontrolleren kommunikerer med ultralydssensoren.
ugyldig opsætning () {pinMode (trigPin, OUTPUT); // Indstiller trigPin som en Output pinMode (echoPin, INPUT); // Indstiller echoPin som en Input Serial.begin (9600); // Starter seriel kommunikation}
3. ugyldig Trigger_US () er en funktion, der kaldes for falsk udløsning af trig-pin fra den anden ultralydssensor. Vi synkroniserer udløsertiden for trig-pin fra begge sensorer.
ugyldig Trigger_US () {// Falske trigger den amerikanske sensor digitalWrite (trigPin, HIGH); // Send et HØJT signal til udløserstiften til Anden sensorforsinkelse Mikrosekunder (10); // vent på 10 mikrosekunder digitalWrite (trigPin, LOW); // send et LAVT signal til trigger-pin anden afsender}
4. ugyldigt Calc ()er en funktion, der bruges til at beregne den tid, det tager af ultralydssignalet at rejse fra den første sensor til den anden sensor.
ugyldig Calc () // funktion til at beregne den tid, det tager af ultralydsbølgen at rejse {varighed = 0; // varighed oprindeligt sat til nul Trigger_US (); // kalder Trigger_US-funktionen, mens (digitalRead (echoPin) == HIGH); // mens status for eo pin i høj forsinkelse (2); // sætte en forsinkelse på 0,2 sekunder Trigger_US (); // kalde Trigger_US-funktionens varighed = pulseIn (echoPin, HIGH); // beregne den tid, det tager}
5. Her i ugyldig sløjfe ()funktion beregner vi afstanden ved hjælp af den tid, som ultralydssignalet tager at rejse fra den første sensor til den anden sensor.
ugyldig sløjfe () {Pdistance = distance; Calc (); // kalde Calc () - funktion afstand = varighed * 0,034; // at kalibrere den afstand, der er dækket af ultralydsbølgen, hvis (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ("Målt Distance:"); // udskrive på seriel skærm Serial.println (distance / 2); // udskriv på seriel skærm} //Serie.print("Distance: "); //Serial.println(afstand/2); forsinkelse (500); // vent i 0,5 sekunder}