- Vereiste materialen:
- Schakelschema:
- Hoe HC-SR04-module echt werkt:
- Meetafstand tussen twee ultrasone sensoren (HC-SR04):
- Programma voor zendersensor:
- Programma voor ontvangersensor:
- Werken:
- Geïmproviseerd idee - de sensor kalibreren met een bekende afstand:
Ultrasone sensor (HC-SR04) wordt vaak gebruikt om de afstand van een object tot een bepaald punt te bepalen. Het is vrij eenvoudig geweest om dit met de Arduino te doen en de code is ook vrij eenvoudig. Maar in dit artikel gaan we iets anders proberen met deze populaire HC-SR04-sensoren. We zullen proberen de afstand tussen twee ultrasone sensoren te berekenen, dat wil zeggen dat we de ene sensor als zender laten werken en de andere sensor als ontvanger. Door dit te doen, kunnen we de locatie van een zender volgen met behulp van veel ultrasone ontvangers.Dit volgen wordt triangulatie genoemd en kan worden gebruikt voor automatische dockingrobots, bagagevolgers en andere soortgelijke toepassingen. De afstand vinden tussen twee Amerikaanse sensoren klinkt misschien als een vrij eenvoudige taak, maar ik stond voor enkele uitdagingen die in dit project worden besproken.
De techniek die in dit artikel wordt besproken, is niet redelijk nauwkeurig en is zonder aanpassingen mogelijk niet bruikbaar in echte systemen. Gedurende de tijd van deze documentatie vond ik niemand die zo dicht bij de resultaten kwam als de mijne, dus ik heb zojuist mijn mening gegeven over hoe ik het aan het werk kreeg, zodat mensen die dit proberen het wiel niet opnieuw hoeven uit te vinden.
Vereiste materialen:
- Arduino (2Nos) - Elk model
- HCSR04 Module (2Nos)
Schakelschema:
Ook al gaan we de ene US (Ultrasonic) sensor laten werken als zender en de andere als ontvanger, het is verplicht om alle vier de pinnen van de sensoren met de Arduino te verbinden. Waarom zouden we? Daarover zal later meer worden besproken, maar voorlopig ziet het schakelschema er als volgt uit
Zoals u kunt zien, zijn het schakelschema voor zowel zender als ontvanger beide identiek. Controleer ook: Arduino Ultrasonic Sensor Interfacing
Hoe HC-SR04-module echt werkt:
Voordat we verder gaan, laten we ons weten hoe de HC-SR04-sensor werkt. Het onderstaande timingdiagram zal ons helpen de werking te begrijpen.
De sensor heeft twee pinnen Trigger en Echo die wordt gebruikt om de afstand te meten, zoals weergegeven in het timingdiagram. Om de meting te starten, moeten we eerst een ultrasone golf van de zender sturen, dit kan worden gedaan door de triggerpen hoog in te stellen voor 10uS. Zodra dit is gebeurd, verzendt de zenderpin 8 sonische uitbarstingen van Amerikaanse golven. Deze Amerikaanse golf zal een object terugslaan en door de ontvanger worden opgevangen.
Hier laat het timingdiagram zien dat zodra de ontvanger de golf ontvangt, de Echo-pin hoog zal worden gedurende een tijdsduur die gelijk is aan de tijd die de golf nodig heeft om van de Amerikaanse sensor te reizen en terug te reiken naar de sensor. Dit timingdiagram lijkt niet waar te zijn.
Ik bedekte het Tx (zender) deel van mijn sensor en controleerde of de Echo-puls hoog werd, en ja, hij gaat hoog. Dit betekent dat de echopuls niet wacht tot de Amerikaanse (ultrasone) golf door hem wordt ontvangen. Zodra het de Amerikaanse golf uitzendt, gaat het hoog en blijft het hoog totdat de golf terugkeert. Dus het juiste timingdiagram zou er ongeveer zo uit moeten zien als hieronder (sorry voor mijn slechte schrijfvaardigheid)
Uw HC-SR04 alleen laten werken als zender:
Het is vrij eenvoudig om een HC-SR04 alleen als zender te laten werken. Zoals te zien is in het timingdiagram, moet je de Trigger-pin als output-pin aangeven en deze 10 microseconden hoog houden. Dit zal de ultrasone golfuitbarsting initiëren. Dus wanneer we de golf willen verzenden, hoeven we alleen maar de triggerpin van de zendersensor te bedienen, waarvoor de code hieronder wordt gegeven.
Uw HC-SR04 alleen laten werken als ontvanger:
Zoals te zien is in het timingdiagram, kunnen we de stijging van de Echo-pin niet regelen omdat deze gerelateerd is aan de trigger-pin. Het is dus onmogelijk om de HC-SR04 alleen als ontvanger te laten werken. Maar we kunnen een hack gebruiken, door gewoon het zendergedeelte van de sensor te bedekken met tape (zoals weergegeven in de onderstaande afbeelding) of om de Amerikaanse golf niet uit de behuizing van de zender te laten ontsnappen en de echopin zal niet worden beïnvloed door deze Amerikaanse golf.
Om de echopin nu hoog te laten worden, hoeven we deze dummy-triggerpen gewoon 10 microseconden hoog te trekken. Zodra deze ontvangersensor de Amerikaanse golf ontvangt die door de zendersensor wordt uitgezonden, zal de echopin laag worden.
Meetafstand tussen twee ultrasone sensoren (HC-SR04):
Tot nu toe hebben we begrepen hoe we de ene sensor kunnen laten werken als zender en de andere sensor als ontvanger. Nu moeten we de ultrasone golf van de zendersensor verzenden en deze ontvangen met de ontvangersensor en controleren hoe lang het duurt voordat de golf van zender naar ontvanger gaat, klinkt eenvoudig toch ?? Maar helaas !, we hebben hier een probleem en dit zal niet werken.
De zendermodule en de ontvangermodule zijn ver uit elkaar en wanneer de ontvangermodule de US-golf van de zendermodule ontvangt, weet hij niet wanneer de zender deze specifieke golf heeft verzonden. Zonder de starttijd te kennen kunnen we de benodigde tijd en dus de afstand niet berekenen. Om dit probleem op te lossen, moet de echopuls van de ontvangermodule hoog worden gemaakt, precies wanneer de zendermodule de US-golf heeft uitgezonden. Met andere woorden, de zendermodule en de ontvangermodule moeten tegelijkertijd worden geactiveerd. Dit kan worden bereikt door de volgende methode.
In het bovenstaande diagram vertegenwoordigt de Tx de zendersensor en vertegenwoordigt Rx de ontvangersensor. Zoals getoond zal de zendersensor gemaakt worden om US-golven te verzenden met een periodieke bekende vertraging, dit is alles wat hij hoeft te doen.
In de ontvanger-sensor moeten we op de een of andere manier ervoor zorgen dat de trigger-pin hoog wordt, precies op het moment dat de zender-pin hoog wordt. Dus in eerste instantie laten we de Receivers Trigger willekeurig hoog gaan, die hoog blijft en blijft totdat de echopin laag wordt. Deze echopin zal alleen laag worden wanneer deze een Amerikaanse golf van de zender ontvangt. Dus zodra het laag wordt, kunnen we aannemen dat de zendersensor net is geactiveerd. Nu, met deze aanname, kunnen we, zodra de echo laag wordt, wachten op de bekende vertraging en vervolgens de ontvanger triggeren. Dit zou de trigger van zowel de zender als de ontvanger gedeeltelijk synchroniseren en daarom kunt u de onmiddellijke echopulsduur aflezen met pulseIn () en de afstand berekenen.
Programma voor zendersensor:
Het complete programma van de zendermodule vindt u onderaan de pagina. Het doet niets anders dan de zendersensor met een periodiek interval activeren.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
Om een sensor te activeren, moeten we ervoor zorgen dat de triggerpin 10uS hoog blijft. De code om hetzelfde te doen, wordt hierboven weergegeven
Programma voor ontvangersensor:
In de ontvangersensor hebben we het zenderoog van de sensor afgedekt om het dummy te maken, zoals eerder besproken. Nu kunnen we de bovengenoemde techniek gebruiken om de afstand tussen twee sensoren te meten. Het volledige programma staat onderaan deze pagina. Enkele belangrijke regels worden hieronder uitgelegd
Trigger_US (); while (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); duur = pulseIn (echoPin, HIGH);
Aanvankelijk activeren we de US-sensor met behulp van de functie Trigger_US () en wachten vervolgens tot de echopin hoog blijft met een while-lus. Zodra het laag wordt, wachten we op een vooraf bepaalde duur, deze duur moet ergens tussen de 10 en 30 microseconden liggen, wat kan worden bepaald met vallen en opstaan (of je kunt het geïmproviseerde idee hieronder gebruiken). Na deze vertraging activeert u de VS opnieuw met dezelfde functie en gebruikt u vervolgens de functie pulseIn () om de duur van de golf te berekenen.
Nu met dezelfde oude formules kunnen we de afstand berekenen zoals hieronder
afstand = duur * 0,034;
Werken:
Maak de aansluitingen zoals uitgelegd in het programma. Bedek het Tx-gedeelte van de ontvangersensor zoals weergegeven in de afbeelding. Upload vervolgens de zendercode en ontvangercode die hieronder worden gegeven naar respectievelijk de zender en ontvanger Arduino. Open de seriële monitor van de ontvangermodule en u zou moeten opmerken dat de afstand tussen twee modules wordt weergegeven, zoals weergegeven in de onderstaande video.
Opmerking: deze methode is slechts een ideologie en is mogelijk niet nauwkeurig of bevredigend. U kunt echter het geïmproviseerde idee hieronder proberen om betere resultaten te krijgen.
Geïmproviseerd idee - de sensor kalibreren met een bekende afstand:
De methode die tot nu toe werd uitgelegd, lijkt vreemd genoeg bevredigend, maar was voldoende voor mijn project. Ik wil echter ook de nadelen van deze methode en een manier om ze te overwinnen, delen. Een groot nadeel van deze methode is dat we aannemen dat de echopin van de ontvanger laag wordt onmiddellijk nadat de zendersensor de US-golf heeft uitgezonden, wat niet waar is, aangezien het enige tijd zal duren om de golf van zender naar ontvanger te verplaatsen. Daarom zullen de trigger van de zender en de trigger van de ontvanger niet perfect synchroon lopen.
Om dit te verhelpen, kunnen we de sensor aanvankelijk met een bekende afstand kalibreren. Als de afstand bekend is, weten we hoe lang het duurt voordat de Amerikaanse golf de ontvanger van de zender bereikt. Laten we deze tijd nemen als Del (D), zoals hieronder wordt weergegeven.
Nu zullen we precies weten na hoeveel tijd we de triggerpin van de ontvanger te hoog moeten maken om synchroon te lopen met de trigger van de zender. Deze duur kan worden berekend met Known Delay (t) - Del (D). Ik kon dit idee niet testen vanwege tijdsbeperkingen, dus ik weet niet zeker hoe nauwkeurig het zou werken. Dus als je het toevallig probeert, laat me dan de resultaten weten via het commentaargedeelte.