Hoe de afstand tussen twee punten te meten met Arduino?
In de elektronica worden meestal ultrasone sensoren gebruikt om de afstand van het ene punt naar het andere te meten. Het is heel eenvoudig om een code op het Arduino-bord te schrijven en een ultrasoon sensor om deze taak uit te voeren. Maar in dit artikel gaan we het anders aanpakken. We gaan twee afzonderlijke ultrasone sensoren gebruiken die worden geïntegreerd met twee afzonderlijke Arduino. Deze twee modules worden op twee verschillende punten geplaatst waartussen de afstand moet worden gemeten. Van de ene sensor wordt een ontvanger gemaakt en van de andere een zender. Door dit te doen, kunnen we de afstand tussen hen meten door de positie van de zender te lokaliseren met behulp van veel ultrasone ontvangers. De techniek die we hier gebruiken heet Triangulatie.
De hier gebruikte techniek is alleen bruikbaar op kleinschalige systemen waar een kleine afstand te vinden is. Om het op grote schaal te implementeren, zijn zeker enkele aanpassingen nodig. Alle uitdagingen waarmee we werden geconfronteerd tijdens de uitvoering van dit project, worden hieronder besproken.
Hoe Arduino en ultrasone sensor te gebruiken om afstand te meten?
Laten we, aangezien we de samenvatting achter het project kennen, doorgaan en meer informatie verzamelen om het project te starten.
Stap 1: De componenten verzamelen (hardware)
Als u ongemak midden in een project wilt voorkomen, kunt u het beste een volledige lijst maken van alle componenten die we gaan gebruiken. De tweede stap, voordat u begint met het maken van het circuit, is om al deze componenten kort te bestuderen. Hieronder vindt u een lijst met alle componenten die we nodig hebben in dit project.
Stap 2: Verzamelen van de componenten (software)
Na het downloaden van de Proteus 8 Professional, ontwerp je het circuit erop. Ik heb hier softwaresimulaties opgenomen, zodat het voor beginners handig kan zijn om het circuit te ontwerpen en de juiste aansluitingen op de hardware te maken.
Stap 3: werking van de HCR-05
Laten we, aangezien we nu de belangrijkste samenvatting van ons project kennen, verder gaan en een korte studie van de werking van HCR-05. U kunt de belangrijkste werking van deze sensor begrijpen aan de hand van het volgende diagram.
Deze sensor heeft twee pinnen, trigger pin, en eco-speld die beide worden gebruikt om de afstand tussen twee bepaalde punten te meten. Het proces wordt geïnitieerd door een ultrasone golf van de sensor te sturen. Deze taak wordt gedaan door de triggerspeld voor 10us te activeren. Zodra deze taak is voltooid, wordt een 8 sonische uitbarsting van ultrasone golven verzonden vanaf de zender. deze golf zal door de lucht reizen en zodra hij een object in zijn weg raakt, zal hij terugslaan en opgevangen worden door de ontvanger die in de sensor is ingebouwd.
Wanneer de ultrasone golf door de ontvanger wordt ontvangen na het reflecteren van de sensor, zal deze de eco-speldnaar een hoge staat. Deze pin blijft in de hoge staat gedurende de tijd die exact gelijk is aan de tijd die de ultrasone golf nodig heeft om van de zender en terug naar de ontvanger van de sensor te reizen.
Om uw ultrasone sensor te maken alleen zender,maak gewoon de trig-pin als je output-pin en stuur een hoge puls naar deze pin voor 10us. Zodra dit is gebeurd, wordt een ultrasone burst gestart. Dus wanneer de golf moet worden uitgezonden, hoeft alleen de triggerpen van de ultrasone sensor te worden bestuurd.
Er is geen manier om de ultrasone sensor als een alleen ontvanger omdat de stijging van de ECO-pin niet kan worden gecontroleerd door de microcontroller omdat deze gerelateerd is aan de trig-pin van de sensor. Maar er is één ding dat we kunnen doen: we kunnen de zender van deze ultrasone sensor bedekken met ducttape zodat er geen UV-golf naar buiten komt. Dan wordt de ECO-pin van deze zender niet beïnvloed door de zender.
Stap 4: werking van het circuit
Nu we beide sensoren afzonderlijk hebben laten werken als zender en ontvanger, is er hier een groot probleem. De ontvanger weet niet hoeveel tijd de ultrasone golf nodig heeft om van de zender naar de ontvanger te reizen, omdat hij niet precies weet wanneer deze golf werd uitgezonden.
Om dit probleem op te lossen, moeten we een HOOG signaal naar de ECO van de ontvanger zodra de ultrasone golf door de zendersensor wordt uitgezonden. Of in eenvoudige bewoordingen kunnen we zeggen dat de ECO van de ontvanger en de trigger van de zender tegelijkertijd naar HIGH moeten worden gestuurd. Dus om dit te bereiken, zullen we op de een of andere manier de trigger van de ontvanger hoog laten worden zodra de trigger van de zender hoog wordt. Deze trigger van de ontvanger blijft hoog totdat de ECO-pin gaat LAAG. Wanneer een ultrasoon signaal wordt ontvangen door de ECO-pin van de ontvanger, wordt het LAAG. Dit betekent dat de trigger van de zendersensor zojuist een HOOG signaal heeft gekregen. Nu, zodra de ECO laag wordt, zullen we wachten op de bekende vertraging en de trigger van de ontvanger HOOG zetten. Door dit te doen, worden de triggers van beide sensoren gesynchroniseerd en wordt de afstand berekend door de tijdvertraging van de golfbeweging te kennen.
Stap 5: De componenten monteren
Ook al gebruiken we alleen de zender van de ene ultrasone sensor en de ontvanger van de andere, maar het is verplicht om alle vier de pinnen van de ultrasoon sensor naar de Arduino. Volg de onderstaande stappen om het circuit aan te sluiten:
- Neem twee ultrasone sensoren. Bedek de ontvanger van de eerste sensor en de zender van de tweede sensor. Gebruik hiervoor witte ducttape en zorg ervoor dat deze twee volledig bedekt zijn zodat er geen signaal de zender van de tweede sensor verlaat en er geen signaal in de ontvanger van de eerste sensor komt.
- Verbind twee Arduino op twee afzonderlijke breadboards en verbind hun respectievelijke sensoren ermee. Verbind de triggerpin met pin9 van Arduino en ecoPin met pin10 van de Arduino. Schakel de ultrasone sensor in met de 5V van Arduino en maak alle gronden gemeenschappelijk.
- Upload de ontvangercode naar de Arduino van de ontvanger en de zendercode naar de Arduino van de zender.
- Open nu de seriële monitor van de ontvangende kant en noteer de afstand die wordt gemeten.
Het schakelschema van dit project ziet er als volgt uit:
Stap 6: Aan de slag met Arduino
Als u nog niet bekend bent met de Arduino IDE, hoeft u zich geen zorgen te maken, want hieronder wordt een stapsgewijze procedure voor het instellen en gebruiken van de Arduino IDE met een microcontrollerbord uitgelegd.
- Download de nieuwste versie van Arduino IDE van Arduino.
- Sluit je Arduino Nano-bord aan op je laptop en open het configuratiescherm. klik in het configuratiescherm opHardware en geluid. Klik nu opApparaten en printers.Zoek hier de poort waarop uw microcontroller-kaart is aangesloten. In mijn geval wel COM14maar het is anders op verschillende computers.
- Klik op het menu Tool. en zet het bord op Arduino Nano uit het vervolgkeuzemenu.
- Stel in hetzelfde Tool-menu de poort in op het poortnummer dat u eerder in het Apparaten en printers.
- Stel in hetzelfde toolmenu de processor in op ATmega328P (oude bootloader).
- Download de onderstaande code en plak deze in uw Arduino IDE. Klik op de uploaden knop om de code op uw microcontroller-bord te branden.
Klik hier om de code te downloaden.
Stap 7: de code begrijpen
De code die in dit project wordt gebruikt, is heel eenvoudig en redelijk goed becommentarieerd. Er zijn twee bestanden met codes in de bijgevoegde map. Code voor de zender en een code voor de ontvangerzijde worden beide afzonderlijk vermeld. We zullen deze codes in beide respectievelijke Arduino-boards uploaden. Hoewel het voor zichzelf spreekt, wordt het hieronder kort beschreven.
Code voor zenderzijde
1. Bij de start worden de pinnen van het Arduino-bord geïnitialiseerd die worden verbonden met de ultrasone sensor. Vervolgens worden de variabelen gedeclareerd die zullen worden gebruikt om waarden op te slaan voor de berekening van tijd en afstand gedurende de looptijd van de code.
// definieert pinnen nummers const int trigPin = 9; // Verbind de trig-pin van de ultrasone sensor met pin9 van Arduino const int echoPin = 10; // Verbind de eco-pin van de ultrasone sensor met pin10 van Arduino // definieert de lange duur van variabelen; // variabel om de tijd op te slaan die de ultrasone golf nodig heeft om de afstand af te leggen; // variabele om berekende afstand op te slaan
2. leegte setup ()is een functie die in het begin slechts één keer wordt uitgevoerd wanneer de kaart wordt ingeschakeld of de inschakelknop wordt ingedrukt. Hier wordt verklaard dat beide pinnen van Arduino worden gebruikt als INVOER en UITGANG. De baudrate wordt in deze functie ingesteld. Baudrate is de snelheid in bits per seconde waarmee de microcontroller communiceert met de ultrasone sensor.
void setup () {pinMode (trigPin, OUTPUT); // Stelt de trigPin in als een Output pinMode (echoPin, INPUT); // Stelt de echoPin in als een Input Serial.begin (9600); // Start de seriële communicatie}
3. leegte lus ()is een functie die keer op keer in een lus wordt uitgevoerd. Hier hebben we de microcontroller zo gecodeerd dat deze een HOOG signaal naar de Trigger pin van de ultrasone sensor stuurt, gedurende 20 microseconden, en er een LAAG signaal naar stuurt.
void loop () {// Zet de trigPin op HIGH gedurende 10 microseconden digitalWrite (trigPin, HIGH); // stuur een HOOG signaal bij de trigger van de eerste sensor delayMicroseconds (10); // wacht 10 microseconden digitalWrite (trigPin, LOW); // stuur een LOW-signaal naar de trigger van de eerste sensorvertraging (2); // wacht 0,2 seconden}
Code voor ontvangerzijde
1. Bij de start worden de pinnen van het Arduino-bord geïnitialiseerd die worden verbonden met de ultrasone sensor. Vervolgens worden de variabelen gedeclareerd die zullen worden gebruikt om waarden op te slaan voor de berekening van tijd en afstand gedurende de looptijd van de code.
// definieert pinnen nummers const int trigPin = 9; // Verbind de trig-pin van de ultrasone sensor met pin9 van Arduino const int echoPin = 10; // Verbind de eco-pin van de ultrasone sensor met pin10 van Arduino // definieert de lange duur van variabelen; // variabel om de tijd op te slaan die de ultrasone golf nodig heeft om de afstand af te leggen; // variabele om berekende afstand op te slaan
2. leegte setup ()is een functie die in het begin slechts één keer wordt uitgevoerd wanneer de kaart wordt ingeschakeld of de inschakelknop wordt ingedrukt. Hier wordt verklaard dat beide pinnen van Arduino worden gebruikt als INPUT en OUTPUT. De baudrate wordt in deze functie ingesteld. Baudrate is de snelheid in bits per seconde waarmee de microcontroller communiceert met de ultrasone sensor.
void setup () {pinMode (trigPin, OUTPUT); // Stelt de trigPin in als een Output pinMode (echoPin, INPUT); // Stelt de echoPin in als een Input Serial.begin (9600); // Start de seriële communicatie}
3. ongeldig Trigger_US () is een functie die wordt aangeroepen voor Fake Triggering van de trig-pin van de tweede ultrasone sensor. We zullen de triggertijd van de trig-pin van beide sensoren synchroniseren.
void Trigger_US () {// Fake trigger de Amerikaanse sensor digitalWrite (trigPin, HIGH); // Stuur een HIGH-signaal naar de triggerpin van Second sensor delayMicroseconds (10); // wacht 10 microseconden digitalWrite (trigPin, LOW); // stuur een LAAG signaal naar de tweede zender van de triggerpin}
4. leegte Calc ()is een functie die wordt gebruikt om de tijd te berekenen die het ultrasone signaal nodig heeft om van de eerste sensor naar de tweede sensor te gaan.
void Calc () // functie om de tijd te berekenen die de ultrasone golf nodig heeft om te reizen {duration = 0; // duur aanvankelijk ingesteld op nul Trigger_US (); // roep de Trigger_US-functie aan terwijl (digitalRead (echoPin) == HIGH); // terwijl de status van eo pin in hoge vertraging (2); // zet een vertraging van 0,2 seconden Trigger_US (); // roep de Trigger_US functie duur = pulseIn (echoPin, HIGH); // bereken de tijd die nodig is}
5. Hier in het leegte lus ()functie, berekenen we de afstand door de tijd te gebruiken die het ultrasone signaal nodig heeft om van de eerste sensor naar de tweede sensor te gaan.
void loop () {Pdistance = afstand; Calc (); // roep de functie Calc () aan afstand = duur * 0,034; // de afstand berekenen die door de ultrasone golf wordt afgelegd if (Pdistance == distance || Pdistance == distance + 1 || Pdistance == distance-1) {Serial.print ("Measured Distance:"); // afdrukken op seriële monitor Serial.println (afstand / 2); // afdrukken op seriële monitor} //Serial.print("Distance: "); //Serial.println(afstand/2); vertraging (500); // wacht 0,5 seconde}