Bármely projekt életbe lépéséhez érzékelőket kell használnunk. Az érzékelők a beágyazott alkalmazások szemeként és füleként működnek, segítenek a digitális mikrovezérlőnek megérteni, mi történik valójában ebben a valódi analóg világban. Ebben az oktatóanyagban megtanuljuk, hogyan csatlakoztassuk a HC-SR04 ultrahangos érzékelőt a PIC mikrovezérlőhöz.
A HC-SR04 egy ultrahangos érzékelő, amely 2 cm és 450 cm közötti távolság mérésére szolgál (elméletileg). Ez az érzékelő bizonyult méltó az illeszkedő számos projekt, amely magában foglalja az akadályokat felderítése, távolságmérő, környezet feltérképezése stb végén ezt a cikket akkor megtanulják, hogyan ez a szenzor működik és hogyan illeszthetjük a PIC16F877A mikrokontroller méri a távolságot és a kijelző az LCD képernyőn. Érdekesen hangzik !! Tehát kezdjük…
Szükséges anyagok:
- PIC16F877A MCU programozási beállítással
- LCD 16 * 2 kijelző
- Ultrahangos érzékelő (HC-SR04)
- Csatlakozó vezetékek
Hogyan működik az ultrahangos érzékelő?
Mielőtt továbbjutnánk, tudnunk kell az ultrahangos érzékelő működését, hogy sokkal jobban megértsük ezt az oktatóanyagot. Az ebben a projektben használt ultrahangos érzékelő az alábbiakban látható.
Amint láthatja, két kör alakú szeme van, mint a vetületek és négy csap. A két szemszerű vetület az ultrahangos hullám (a továbbiakban: amerikai hullám) adó és vevő. Az adó 40Hz-es frekvencián sugároz egy amerikai hullámot, ez a hullám áthalad a levegőn és visszaverődik, amikor egy tárgyat érzékel. A visszatérő hullámokat a vevő figyeli. Most már tudjuk, mennyi idő szükséges ahhoz, hogy ez a hullám visszaverődjön és visszatérjen, és az amerikai hullám sebessége is univerzális (3400 cm / s). Ezen információk és az alábbi középiskolai képletek felhasználásával kiszámíthatjuk a megtett távolságot.
Távolság = sebesség × idő
Most, hogy tudjuk, hogyan működik egy amerikai szenzor, tegye meg, hogyan illeszthető bármilyen MCU-hoz / CPU-hoz a négy csap segítségével. Ez a négy csap a Vcc, a Trigger, az Echo és a Ground. A modul + 5 V-on működik, ezért a Vcc és a földcsapot használják a modul táplálásához. A másik két csap az I / O csap, amelynek használatával kommunikálunk az MCU-val. A kioldó csapot kimeneti csapnak kell nyilvánítani, és magasra kell állítani 10uS értékre, ez az USA hullámát 8 ciklusú szünetként a levegőbe továbbítja. Miután megfigyelte a hullámot, az Echo tű magasra fog emelkedni, pontosan az az időintervallum, amelyet az amerikai hullám visszatért az érzékelő modulhoz. Ezért ezt az Echo csapot bemenetként deklaráljukés egy időzítőt használunk annak mérésére, hogy meddig volt magas a tű. Ezt az alábbi időzítési ábra is megértheti.
Remélem, hogy eljutott egy kísérleti módszerhez, hogy összekapcsolja ezt az érzékelőt a PIC-szel. Ebben az oktatóanyagban az Időzítő modult és az LCD modult fogjuk használni, és feltételezem, hogy ismeri mindkettőt, ha nem, kérjük, térjen vissza az alábbi megfelelő oktatóanyagra, mivel a vele kapcsolatos információk nagy részét kihagyom.
- LCD interfész a PIC mikrovezérlővel
- Az időzítők megértése a PIC mikrokontrollerben
Kördiagramm:
Az ultrahangos érzékelő és a PIC16F877A összekapcsolásának teljes kapcsolási rajza az alábbiakban látható:
Mint látható, az áramkör nem tartalmaz mást, mint egy LCD-kijelzőt és magát az ultrahangos érzékelőt. Az amerikai érzékelő tápellátása + 5 V, ezért közvetlenül a 7805 feszültségszabályozó táplálja. Az érzékelőnek van egy kimeneti csapja (ravasztüske), amely a 34 érintkezőhöz (RB1) csatlakozik, és a bemeneti tűje (visszhangcsap) a 35 érintkezőhöz (RB2). A teljes csap csatlakozást az alábbi táblázat szemlélteti.
S. Nem: |
PIC PIN-szám |
PIN neve |
Csatlakozva valamihez |
1 |
21 |
RD2 |
Az LCD RS-je |
2 |
22. |
RD3 |
E az LCD |
3 |
27. |
RD4 |
Az LCD D4 |
4 |
28. |
RD5 |
D5 LCD |
5. |
29. |
RD6 |
Az LCD D6-ja |
6. |
30 |
RD7 |
D7 LCD |
7 |
34 |
RB1 |
Az USA kiváltója |
8. |
35 |
RB2 |
USA visszhangja |
A PIC mikrovezérlő programozása:
Az oktatóanyag teljes programját az oldal végén adjuk meg, az alábbiakban a kódot kis jelentőségű, teljes darabokra magyaráztam, hogy megértsétek. Mint korábban említettük, a program magában foglalja az LCD interfész és az Időzítő fogalmát, amelyet nem részletesen ismertetünk ebben az oktatóanyagban, mivel az előző oktatóanyagokban már bemutattuk őket.
Belül a fő funkciót az IO csapok és más regiszterek inicializálásával kezdjük a szokásos módon. Meghatározzuk az IO érintkezőket az LCD és az USA szenzorok számára, és elindítjuk az Időzítő 1 regisztrációt is, beállítva, hogy 1: 4 előtti skalárra működjön és belső órát használjon (Fosc / 4)
TRISD = 0x00; // PORTD az interfész LCD TRISB0 = 1 kimeneteként deklarálva; // Definiálja az RB0 tűt bemenetként, amelyet megszakító tűként használhat TRISB1 = 0; // Az USA-érzékelő kioldócsapját TRISB2 = 1 kimeneti tűként küldi el; // Az amerikai érzékelő visszhangcsapja TRISB3 = 0 bemeneti tűként van beállítva; // RB3 a T1CON = 0x20 LED kimeneti csapja; // 4 presskalár és belső óra
Az 1. időzítő egy 16 bites időzítő, amelyet a PIC16F877A használ, a T1CON regiszter vezérli az időzítő modul paramétereit, és az eredményt a TMR1H és a TMR1L tárolja, mivel ez egy 16 bites eredmény, az első 8-at a TMR1H tárolja, és a következő 8 a TMR1L-ben. Ez az időzítő be- vagy kikapcsolható a TMR1ON = 0 és a TMR1ON = 1 használatával.
Az időzítő használatra kész, de ki kell küldenünk az USA hullámait az érzékelőből, ehhez 10uS-ig magasan kell tartanunk a Trigger csapot, ezt a következő kód végzi.
Kiváltó = 1; __késleltetés_ (10); Kiváltó = 0;
Amint az a fenti időzítési ábrán látható, az Echo csap alacsony marad, amíg a hullám vissza nem tér, majd magasra emelkedik és magas marad a hullámok visszatérésének pontos idejéig. Ezt az időt a Timer 1 modulnak kell megmérnie, amelyet az alábbi sor elvégezhet
míg (Echo == 0); TMR1ON = 1; míg (Echo == 1); TMR1ON = 0;
Miután megmérte az időt, a kapott érték el lesz mentve a TMR1H és TMR1L regiszterekben, ezeket a regisztereket klubba kell gyűjteni, hogy összegyűjtsék a 16 bites értéket. Ez az alábbi sor segítségével történik
idő: = (TMR1L - (TMR1H << 8));
Ez a time_taken formátum bájtok lesz, hogy megkapjuk a tényleges időértéket, az alábbi képletet kell használnunk.
Idő = (16 bites regiszterérték) * (1 / belső óra) * ( előméretezés) belső óra = Fosc / 4 ahol esetünkben Fosc = 20000000Mhz és előméretezés = 4, ezért a belső óra értéke 5000000Mhz, és az idő értéke Idő = (16-bites regiszterérték) * (1/5000000) * (4) = (16-bites regiszterérték) * (4/5000000) = (16-bites regiszterérték) * 0,0000008 másodperc (VAGY) Idő = (16-bites regiszterérték) * 0,8 mikro másodperc
Ebben a programban az érték a 16 bites regiszter tárolja a változó TIME_TAKEN és ezáltal a vonal alatt van kiszámításához használt TIME_TAKEN mikro másodperc
time_taken = time_taken * 0,8;
Ezután meg kell találnunk a távolság kiszámításának módját. Mint tudjuk, távolság = sebesség * idő. De itt az eredményt el kell osztani 2-vel, mivel a hullám az átviteli távolságot és a vételi távolságot egyaránt lefedi. A hullám (hang) sebessége 34000cm / s.
Távolság = (sebesség * idő) / 2 = (34000 * (16 bites regiszterérték) * 0,0000008) / 2 távolság = (0,0272 * 16 bites regiszterérték) / 2
Tehát a távolság centiméterben számolható, mint az alábbiak:
távolság = (0,0272 * felvett idő) / 2;
A megtett távolság és idő értékének kiszámítása után egyszerűen meg kell jelenítenünk őket az LCD képernyőn.
Távolság mérése PIC és ultrahangos érzékelő segítségével:
A kapcsolatok létrehozása és a kód feltöltése után a kísérleti beállításnak valami ilyennek kell lennie, amelyet az alábbi kép mutat.
A képen látható PIC Perf tábla a PIC oktatósorozatunkhoz készült, amelyben megtanultuk a PIC mikrovezérlő használatát. Érdemes visszatérni azokhoz a PIC mikrokontroller oktatóanyagokhoz, amelyek MPLABX-t és XC8-at használnak, ha nem tudja, hogyan kell egy programot a Pickit 3 segítségével égetni, mivel ezeket az alapvető információkat kihagyom.
Most tegyen egy tárgyat az érzékelő elé, és annak ki kell mutatnia, hogy az objektum milyen távolságra van az érzékelőtől. Azt is észreveheti, hogy mikorra jelenik meg a mikró másodpercekben a hullám továbbítása és visszatérése.
Az objektumot a kívánt távolságra mozgathatja, és ellenőrizheti az LCD-n megjelenő értéket. 2 cm és 350 cm közötti távolságot 0,5 cm pontossággal tudtam mérni. Ez elég kielégítő eredmény! Remélem, hogy tetszett a bemutató, és megtanulta, hogyan készítsen valamit saját maga. Ha kétségei vannak, dobja őket az alábbi megjegyzés szakaszba, vagy használja a fórumokat.
Ellenőrizze az ultrahangos érzékelő és a többi mikrovezérlő közötti kapcsolódást is:
- Arduino és ultrahangos szenzor alapú távolságmérés
- Mérje meg a távolságot a Raspberry Pi és a HCSR04 ultrahangos érzékelő segítségével
- Távolságmérés HC-SR04 és AVR mikrokontrollerrel