- Material som krävs:
- Kretsschema:
- Hur HC-SR04-modulen faktiskt fungerar:
- Mätavstånd mellan två ultraljudssensorer (HC-SR04):
- Program för sändarsensor:
- Program för mottagarsensor:
- Arbetssätt:
- Improviserad idé - kalibrera sensorn med ett känt avstånd:
Ultraljudsensor (HC-SR04) används vanligtvis för att hitta ett objekts avstånd från en viss punkt. Det har varit ganska enkelt att göra detta med Arduino och koden är också ganska enkel. Men i den här artikeln ska vi prova något annorlunda med dessa populära HC-SR04-sensorer. Vi kommer att försöka beräkna avståndet mellan två ultraljudssensorer det vill säga, vi kommer att få en sensor att fungera som sändare och den andra sensorn att fungera som mottagare. Genom att göra detta kan vi spåra platsen för en sändare med hjälp av många ultraljudsmottagare. Denna spårning kallas triangulering och kan användas för automatiska dockningsrobotar bagage följare och andra liknande applikationer. Hitta avståndet mellan två amerikanska sensorer kanske låter som en ganska enkel uppgift men jag stod inför få utmaningar som diskuteras i detta projekt.
Tekniken som diskuteras i den här artikeln är inte ganska korrekt och kanske inte användbar i några verkliga system utan modifieringar. Under tiden för denna dokumentation hittade jag ingen som fick resultat så nära som mitt så jag har just delat mina åsikter om hur jag fick det att fungera så att människor som försöker detta inte behöver uppfinna hjulet igen.
Material som krävs:
- Arduino (2Nos) - Vilken modell som helst
- HCSR04-modul (2Nos)
Kretsschema:
Även om vi ska göra en amerikansk (ultraljud) sensor för att fungera som sändare och den andra som mottagare är det obligatoriskt att ansluta alla fyra stift på sensorerna med Arduino. Varför ska vi göra det? Mer av det kommer att diskuteras senare, men för närvarande kommer kretsschemat att vara som följer
Som du kan se är kretsschemat för både sändare och mottagare båda identiska. Kontrollera även: Arduino Ultraljudssensorgränssnitt
Hur HC-SR04-modulen faktiskt fungerar:
Innan vi fortsätter, låt oss förstå hur HC-SR04-sensorn fungerar. Nedanstående tidsdiagram hjälper oss att förstå arbetet.
Sensorn har två stift Trigger och Echo som används för att mäta avstånd som visas i tidsdiagrammet. Först för att starta mätningen ska vi skicka en ultraljudsvåg från sändaren, detta kan göras genom att sätta avtryckaren högt på 10uS. Så snart detta är gjort kommer sändarstiftet att skicka åtta ljudvågor av amerikanska vågor. Denna amerikanska våg kommer att träffa ett objekt som studsar tillbaka och kommer att tas emot av mottagaren.
Här visar tidsdiagrammet att när mottagaren tar emot vågen kommer det att få Echo-stiftet att gå högt under en tid som är lika med den tid det tar för vågen att resa från US-sensorn och nå tillbaka till sensorn. Detta tidsdiagram verkar inte vara sant.
Jag täckte Tx (sändar) -delen av min sensor och kollade om Echo-pulsen blev hög, och ja den blir hög. Detta innebär att Echo-pulsen inte väntar på att den amerikanska (ultraljud) vågen ska tas emot av den. När den väl har sänt den amerikanska vågen blir den hög och förblir hög tills vågen återvänder. Så det korrekta tidsdiagrammet borde vara ungefär så här som visas nedan (Ledsen för min dåliga skrivförmåga)
Få din HC-SR04 att fungera endast som sändare:
Det är ganska enkelt att göra en HC-SR04 för att bara fungera som sändare. Som visas i tidsdiagrammet måste du deklarera utlösarstiftet som utgångsstift och få det att hålla sig högt i 10 mikrosekunder. Detta kommer att initiera Ultrasonic Wave Burst. Så när vi vill sända vågen måste vi bara styra sändarens givare, för vilken koden anges nedan.
Att få din HC-SR04 att fungera endast som mottagare:
Som visas i tidsdiagrammet kan vi inte kontrollera ökningen av Echo-stiftet eftersom det är relaterat till utlösningsstiftet. Så det finns inget sätt att få HC-SR04 att fungera endast som mottagare. Men vi kan använda ett hack genom att bara täcka sändardelen av sensorn med tejp (som visas på bilden nedan) eller locket, den amerikanska vågen kan inte fly utanför sändarhöljet och Echo-stiftet påverkas inte av denna amerikanska våg.
Nu för att få ekonålen att gå högt måste vi bara dra den här dummy-utlösarstiftet högt i 10 mikrosekunder. När denna mottagarsensor får den amerikanska vågen överförd av sändarsensorn kommer ekostiftet att bli lågt.
Mätavstånd mellan två ultraljudssensorer (HC-SR04):
Hittills har vi förstått hur man får en sensor att fungera som sändare och den andra att fungera som mottagare. Nu måste vi överföra ultraljudsvåg från sändarsensorn och ta emot den med mottagarsensorn och kontrollera den tid det tar för vågen att resa från sändare till mottagare låter lätt, eller hur? Men tyvärr!, Vi har ett problem här och det fungerar inte.
Sändarmodulen och mottagarmodulen ligger långt ifrån varandra och när mottagarmodulen tar emot den amerikanska vågen från sändarmodulen vet den inte när sändaren skickade just den här vågen. Utan att känna till starttiden kan vi inte beräkna tiden och därmed avståndet. För att lösa detta problem måste mottagarmodulens ekopuls göras hög exakt när sändarmodulen har sänt den amerikanska vågen. Med andra ord bör sändarmodulen och mottagarmodulen utlösas samtidigt. Detta kan uppnås med följande metod.
I ovanstående diagram representerar Tx sändarsensorn och Rx representerar mottagarsensorn. Som visat kommer sändarsensorn att göra det att sända amerikanska vågor med en periodiskt känd fördröjning, detta är allt den behöver göra.
I mottagarsensorn måste vi på något sätt få utlösarstiftet att gå högt exakt när sändarstiftet blir högt. Så initialt gör vi slumpmässigt att mottagarutlösaren går högt vilket kommer att hålla sig högt tills ekonålen blir låg. Detta ekostift blir lågt endast när det tar emot en amerikansk våg från sändaren. Så snart det går lågt kan vi anta att sändarsensorn precis har utlösts. Nu, med detta antagande så snart ekot blir lågt kan vi vänta på den kända fördröjningen och sedan utlösa mottagarens utlösare. Detta skulle delvis synkronisera avtryckaren för både sändaren och mottagaren och därmed kan du läsa omedelbar ekopulsvaraktighet med pulseIn () och beräkna avståndet.
Program för sändarsensor:
Det kompletta programmet för sändarmodulen finns längst ner på sidan. Det gör ingenting annat än att utlösa sändarsensorn med ett periodiskt intervall.
digitalWrite (trigPin, HIGH); delayMicroseconds (10); digitalWrite (trigPin, LOW);
För att utlösa en sensor måste vi göra att utlösarstiftet håller sig högt i 10uS. Koden för att göra detsamma visas ovan
Program för mottagarsensor:
I mottagarsensorn har vi täckt sensorns sändaröga för att göra den dummy som diskuterats tidigare. Nu kan vi använda ovan nämnda teknik för att mäta avståndet mellan två sensorer. Hela programmet ges längst ner på denna sida. Några viktiga rader förklaras nedan
Trigger_US (); medan (digitalRead (echoPin) == HIGH); delayMicroseconds (10); Trigger_US (); varaktighet = pulseIn (echoPin, HIGH);
Inledningsvis utlöser vi den amerikanska sensorn med hjälp av funktionen Trigger_US () och väntar sedan tills ekonålen förblir hög med en stundslinga. När det blir lågt väntar vi på förutbestämd varaktighet, den här varaktigheten bör vara någonstans mellan 10 och 30 mikrosekunder som kan bestämmas med hjälp av försök och fel (eller så kan du använda en improviserad idé nedan). Efter denna fördröjning utlösa USA igen med samma funktion och använd sedan pulseIn () -funktionen för att beräkna vågens varaktighet.
Nu med samma gamla formler kan vi beräkna avståndet enligt nedan
avstånd = varaktighet * 0,034;
Arbetssätt:
Gör anslutningarna enligt förklaringen i programmet. Täck över Tx-delen av mottagarsensorn enligt bilden. Ladda sedan upp sändarkoden och mottagarkoden som anges nedan till sändaren respektive mottagaren Arduino. Öppna den seriella bildskärmen på mottagarmodulen och du bör märka avståndet mellan två moduler som visas i videon nedan.
Obs! Den här metoden är bara en ideologi och kanske inte är korrekt eller tillfredsställande. Du kan dock prova den improviserade idén nedan för att få bättre resultat.
Improviserad idé - kalibrera sensorn med ett känt avstånd:
Metoden som förklarades hittills konstigt verkar vara tillfredsställande, men ändå var det tillräckligt för mitt projekt. Men jag skulle också vilja dela nackdelarna med denna metod och ett sätt att övervinna dem. En stor nackdel med denna metod är att vi antar att mottagarens Echo-stift faller lågt omedelbart efter att sändarsensorn har sänt den amerikanska vågen, vilket inte är sant eftersom det tar lite tid att gå från sändare till mottagare. Därför kommer inte sändarens trigger och mottagarens trigger att vara i perfekt synk.
För att övervinna detta kan vi kalibrera sensorn med hjälp av ett känt avstånd från början. Om avståndet är känt kommer vi att veta hur lång tid det tar för den amerikanska vågen att nå mottagaren från sändaren. Låt oss hålla den här tiden som Del (D) enligt nedan.
Nu vet vi exakt efter hur mycket tid vi ska göra mottagarens utlösarstift för högt för att synkroniseras med sändarens utlösare. Denna varaktighet kan beräknas med Känd fördröjning (t) - Del (D). Jag kunde inte testa denna idé på grund av tidsbegränsningar så jag är inte säker på hur korrekt den skulle fungera. Så om du råkar prova, låt mig veta resultaten genom kommentarsektionen.