Hogyan lehet mérni két pont közötti távolságot az Arduino segítségével?

Az elektronikában legtöbbször ultrahangos érzékelőket használnak az egyes pontok közötti távolság mérésére. Nagyon egyszerű kódot írni az Arduino táblára és integrálni egy ultrahangos érzékelő hogy ezt a feladatot elvégezze. De ebben a cikkben más megközelítést fogunk elfogadni. Két különálló ultrahangos érzékelőt fogunk használni, amelyeket két külön Arduinóval fognak integrálni. Ez a két modul két különböző pontra kerül, amelyek között a távolságot meg kell mérni. Az egyik érzékelőből vevő lesz, a másikból adó. Ezzel képesek leszünk megmérni a köztük lévő távolságot, csak úgy, hogy sok ultrahangos vevő segítségével meghatározzuk az adó helyzetét. Az itt használt technikát nevezzük Háromszögelés.



Távolság mérése Arduino használatával

Az itt használt technika csak olyan kisméretű rendszerekben hasznos, ahol kis távolság található. Nagyszabású megvalósításához bizonyos módosításokra szükség van. A projekt végrehajtása során felmerülő összes kihívást az alábbiakban tárgyaljuk.



Hogyan kell használni az Arduino és az ultrahangos érzékelőt a távolság méréséhez?

Amint ismerjük a projekt mögött álló összefoglalót, lépjünk előre és gyűjtsünk további információkat a projekt elindításához.



1. lépés: Az összetevők összegyűjtése (hardver)

Ha bármilyen projekt közepette el akarja kerülni a kellemetlenségeket, a legjobb megoldás az, ha elkészítjük az összes összetevő teljes listáját, amelyet használni fogunk. A második lépés, mielőtt megkezdenénk az áramkört, át kell tekintenünk mindezen összetevők rövid tanulmányozását. Az alábbiakban felsoroljuk a projektben szükséges összes összetevőt.



  • Jumper huzalok
  • 5 V AC - DC adapter (x2)

2. lépés: Az összetevők összegyűjtése (szoftver)

  • Proteus 8 Professional (letölthető innen: Itt )

A Proteus 8 Professional letöltése után tervezze meg rajta az áramkört. Ide illesztettem szoftverszimulációkat, hogy a kezdők számára kényelmes legyen az áramkör megtervezése és a hardver megfelelő csatlakoztatása.

3. lépés: A HCR-05 működése

Mivel már ismerjük projektünk fő elvonását, lépjünk előre és végezzünk egy rövid tanulmányt a HCR-05 . Az érzékelő fő működését a következő ábra mutatja be.

Ennek az érzékelőnek két csapja van, ravasz csap, és eco pin amelyek mindkettőt két adott pont közötti távolság mérésére használják. A folyamatot úgy kezdeményezik, hogy ultrahangos hullámot küldenek az érzékelőből. Ezt a feladatot úgy kell végrehajtani, hogy kiváltja a 10 pin triggert. Amint ezt a feladatot elvégzi, az adóból 8 szonikus ultrahangos hullám érkezik. ez a hullám a levegőben halad, és amint egy tárgynak ütközik az útjában, visszacsap és az érzékelőbe épített vevő fogadja.



Amikor az ultrahangos hullámot a vevő fogadja, miután visszatükrözte az érzékelőt, akkor a eco pin magas állapotba. Ez a tüske magas állapotban marad addig az időtartamig, amely pontosan megegyezik az ultrahangos hullám által az adóból és az érzékelő vevőjéig tartó utazáshoz szükséges idővel.

Az ultrahangos érzékelő elkészítéséhez adó csak, csak a kimeneti tűként állítsa be a kioldó csapot, és küldjön nagy impulzust erre a tűre 10 us-ig. Amint ez megtörtént, ultrahangos sorozat indul. Tehát, amikor a hullámot továbbítani kell, csak az ultrahangos érzékelő kioldócsapját kell vezérelni.

Nincs mód arra, hogy az ultrahangos érzékelőt a csak vevő mert az ECO tű emelkedését a mikrovezérlő nem tudja szabályozni, mert az az érzékelő kioldócsapjával függ össze. De egy dolgot megtehetünk, hogy ennek az ultrahangos érzékelőnek az adóját olyan ragasztószalaggal fedhetjük le, amelyen nem kerül ki UV hullám. Ekkor ennek az adónak az ECO-tűjét nem érinti az adó.

4. lépés: Az áramkör működése

Most, amikor mindkét érzékelőt külön-külön működtettük adóként és vevőként, itt egy nagy probléma merül fel. A vevő nem fogja tudni, hogy az ultrahangos hullám mennyi idő alatt jut el az adóból a vevőbe, mert nem tudja pontosan, mikor továbbította ezt a hullámot.

A probléma megoldásához azt kell tennünk, hogy el kell küldenünk egy MAGAS jelet a vevő ECO-jához, amint az ultrahangos hullám továbbadódik, és az adó-érzékelőt. Vagy egyszerű szavakkal elmondhatjuk, hogy a vevő ECO-ját és az adó triggerjét egyszerre kell elküldeni a HIGH-nak. Tehát ennek elérése érdekében valamilyen módon a vevő ravaszt kiváltjuk, amint a jeladó magasra megy. A vevőnek ez a ravasztja magasan marad, amíg az ECO tű el nem megy ALACSONY . Amikor egy ultrahangos jelet kap a vevő ECO csapja, akkor az LOW-ra megy. Ez azt jelenti, hogy az adó-érzékelő kioldója éppen HIGH jelet kapott. Amint az ECO lemerül, megvárjuk az ismert késleltetést, és a vevő ravaszát HIGH-ra tesszük. Ezzel mindkét szenzor kiváltó okai szinkronizálódnak, és a hullámmenet késleltetésének ismeretében kiszámítják a távolságot.

5. lépés: Az alkatrészek összeszerelése

Annak ellenére, hogy csak az egyik ultrahangos érzékelő adóját és a másik vevőjét használjuk, de kötelező csatlakoztatni a ultrahangos érzékelő az Arduinónak. Az áramkör csatlakoztatásához kövesse az alábbi lépéseket:

  1. Vegyünk két ultrahangos érzékelőt. Fedje le az első érzékelő vevőjét és a második érzékelő adóját. Használjon erre a célra fehér ragasztószalagot, és győződjön meg arról, hogy e kettő teljesen le van fedve, hogy egyetlen jel ne hagyja el a második érzékelő adóját, és ne kerüljön jel az első érzékelő vevőjébe.
  2. Csatlakoztasson két Arduino-t két külön kenyérlapra, és csatlakoztassa hozzájuk a megfelelő érzékelőket. Csatlakoztassa a ravaszt a Pin 9-es Arduino-hoz, az ecoPin-t pedig az Arduino 10-es pinjéhez. Bekapcsolja az ultrahangos érzékelőt az Arduino 5 V-jával, és megoszthatja az összes talajt.
  3. Töltse fel a vevő kódját a vevő Arduino-ba, és az adó kódját az adó Arduino-jába.
  4. Most nyissa ki a vevő oldal soros monitorját, és jegyezze fel a mért távolságot.

A projekt kapcsolási rajza a következőképpen néz ki:

Kördiagramm

6. lépés: Az Arduino használatának megkezdése

Ha még nem ismeri az Arduino IDE-t, ne aggódjon, mert az Arduino IDE mikrokontroller táblával történő beállításának és használatának lépésről lépésre történő leírását az alábbiakban ismertetjük.

  1. Töltse le az Arduino IDE legújabb verzióját innen: Arduino.
  2. Csatlakoztassa Arduino Nano kártyáját a laptophoz, és nyissa meg a kezelőpanelt. a vezérlőpulton kattintson a gombra Hardver és hang . Most kattintson a gombra Eszközök és nyomtatók. Itt keresse meg azt a portot, amelyhez a mikrokontroller kártya csatlakozik. Az én esetemben az COM14 de a különböző számítógépeken más.

    Port keresése

  3. Kattintson az Eszköz menüre. és állítsa a táblát Arduino Nano a legördülő menüből.

    Tábla beállítása

  4. Ugyanabban az Eszköz menüben állítsa be a portot arra a portszámra, amelyet korábban a Eszközök és nyomtatók .

    Port beállítása

  5. Ugyanebben az Eszköz menüben állítsa a Processort értékre ATmega328P (régi Bootloader ).

    Processzor

  6. Töltse le az alább csatolt kódot, és illessze be az Arduino IDE-be. Kattintson a feltölteni gombot a mikrovezérlő-alaplapon lévő kód beírásához.

    Feltöltés

A kód letöltéséhez kattints ide.

7. lépés: A kód megértése

A projektben használt kód nagyon egyszerű és elég jól kommentált. A csatolt mappában két kódfájl található. Az adó kódját és a vevő oldal kódját külön-külön adjuk meg. Ezeket a kódokat feltöltöttük a megfelelő Arduino táblákba. Noha magától értetődik, az alábbiakban röviden ismertetjük.

Az adó oldalának kódja

1. Az elején inicializálják az Arduino kártya csapjait, amelyeket az ultrahangos érzékelőhöz csatlakoztatnak. Ezután deklaráljuk azokat a változókat, amelyek felhasználásával értékeket tárolnak az idő és a távolság kiszámításához a kód futási ideje alatt.

// definiálja a csapok számát const int trigPin = 9; // Csatlakoztassa az ultrahangos érzékelő kioldócsapját az Arduino const9 pin int echoPin = 10-hez; // Csatlakoztassa az ultrahangos érzékelő öko tűjét az Arduino pin10-hez // hosszú időtartamú változókat határoz meg; // változó az ultrahangos hullám t utazási int távolságának eltárolásához szükséges idő tárolására; // kiszámított változó a távolság tárolásához

2. void setup () olyan funkció, amely az indításkor csak egyszer fut, amikor a tábla be van kapcsolva, vagy az engedélyező gombot megnyomják. Itt az Arduino mindkét tüskéjét deklaráltan használjuk BEMENET és KIMENET . A Baudrate ebben a funkcióban van beállítva. A átviteli sebesség az a sebesség másodpercenként, másodpercenként, amellyel a mikrovezérlő kommunikál az ultrahangos érzékelővel.

void setup () {pinMode (trigPin, OUTPUT); // A trigPin-t kimeneti pinMode-ként állítja be (echoPin, INPUT); // Beállítja az echoPin-t Input Serial.begin (9600); // elindítja a soros kommunikációt}

3. void loop () olyan funkció, amely újra és újra fut egy ciklusban. Itt kódoltuk a mikrovezérlőt úgy, hogy HIGH jelet küld az ultrahangos érzékelő Trigger tűjéhez, 20 mikroszekundumig észlel és LOW jelet küld neki.

void loop () {// A trigPin értékét HIGH állapotban állítja be 10 mikro másodpercig digitalWrite (trigPin, HIGH); // HIGH jelet küld az első érzékelő késleltetésének kiváltójánMikroszekundum (10); // várjon 10 mikro másodpercet digitalWrite (trigPin, LOW); // küldjön LOW jelet az első érzékelő késleltetésének kiváltójának (2); // várjon 0,2 másodpercet}

Kód a vevő oldalához

1. Az elején inicializálják az Arduino kártya csapjait, amelyeket az ultrahangos érzékelőhöz csatlakoztatnak. Ezután deklaráljuk azokat a változókat, amelyek felhasználásával értékeket tárolnak az idő és a távolság kiszámításához a kód futási ideje alatt.

// definiálja a csapok számát const int trigPin = 9; // Csatlakoztassa az ultrahangos érzékelő kioldócsapját az Arduino const9 pin int echoPin = 10-hez; // Csatlakoztassa az ultrahangos érzékelő öko tűjét az Arduino pin10-hez // hosszú időtartamú változókat határoz meg; // változó az ultrahangos hullám t utazási int távolságának eltárolásához szükséges idő tárolására; // kiszámított változó a távolság tárolásához

2. void setup () olyan funkció, amely az indításkor csak egyszer fut, amikor a tábla be van kapcsolva, vagy az engedélyező gombot megnyomják. Itt az Arduino mindkét csapját deklaráltan INPUT és OUTPUT néven használják. A Baudrate ebben a funkcióban van beállítva. A átviteli sebesség az a sebesség másodpercenként, másodpercenként, amellyel a mikrovezérlő kommunikál az ultrahangos érzékelővel.

void setup () {pinMode (trigPin, OUTPUT); // A trigPin-t kimeneti pinMode-ként állítja be (echoPin, INPUT); // Beállítja az echoPin-t Input Serial.begin (9600); // elindítja a soros kommunikációt}

3. érvénytelen Trigger_US () egy olyan funkció, amelyet a második ultrahangos érzékelő kioldócsapjának hamis kiváltására hívnak meg. Szinkronizálni fogjuk mindkét érzékelő kioldócsapjának kioldási idejét.

void Trigger_US () {// Fake trigger az amerikai érzékelő digitalWrite (trigPin, HIGH); // HIGH jel küldése a Második érzékelő késleltetésének mikroszekundum (10) kioldócsapjára; // várjon 10 mikro másodpercig digitalWrite (trigPin, LOW); // küldjön LOW jelet a ravasztüske második küldőjének}

Négy. void Calc () egy olyan funkció, amelyet arra használnak, hogy kiszámítsák az ultrahangos jel által az első érzékelőtől a második érzékelőig tartó utazáshoz szükséges időt.

void Calc () // függvény az ultrahangos hullám utazásához szükséges idő kiszámításához {duration = 0; // időtartam kezdetben nulla Trigger_US (); // hívja a Trigger_US függvényt while (digitalRead (echoPin) == HIGH); // míg az eo pin állapota nagy késésben (2); // 0,2 másodperces késleltetést állít be Trigger_US (); // hívja a Trigger_US függvény időtartamát = pulseIn (echoPin, HIGH); // kalkulálja az elvett időt}

5. Itt a void loop () függvény esetén kiszámítjuk a távolságot az ultrahangos jel által az első érzékelőtől a második érzékelőig való utazáshoz szükséges idő felhasználásával.

void loop () {Ptávolság = távolság; Calc (); // hívja meg a Calc () függvény távolságát = időtartam * 0,034; // az ultrahangos hullám által megtett távolság kiszámítása, ha (Pdistance == távolság || Pdistance == távolság + 1 || Pdistance == távolság-1) {Serial.print ('Mért távolság:'); // nyomtatás soros monitoron Serial.println (távolság / 2); // nyomtatás soros monitoron} //Sorial.print('Távolság: '); //Sorozat.println(távolság/2); késés (500); // várjon 0,5 másodpercet}