Aby každý projekt ožil, musíme použiť senzory. Senzory fungujú ako oči a uši pre všetky zabudované aplikácie. Pomáha digitálnemu mikrokontroléru pochopiť, čo sa v skutočnosti deje v tomto skutočnom analógovom svete. V tomto výučbe sa naučíme, ako prepojiť ultrazvukový snímač HC-SR04 s mikrokontrolérom PIC.
HC-SR04 je ultrazvukový snímač, ktorý môže byť použitý pre meranie vzdialenosti kdekoľvek medzi 2 cm do 450cm (teoreticky). Tento snímač sa osvedčil ako vhodný do mnohých projektov, ktoré zahŕňajú detekciu prekážok, meranie vzdialenosti, mapovanie prostredia atď. Na konci tohto článku sa dozviete, ako tento snímač funguje a ako ho prepojiť s mikrokontrolérom PIC16F877A na meranie vzdialenosti a zobrazenia. na obrazovke LCD. Znie to zaujímavo, dobre !! Tak poďme na to…
Potrebné materiály:
- PIC16F877A MCU s programovacím nastavením
- Displej LCD 16 * 2
- Ultrazvukový senzor (HC-SR04)
- Pripojovacie vodiče
Ako funguje ultrazvukový senzor?
Než sa dostaneme ďalej, mali by sme vedieť, ako funguje ultrazvukový senzor, aby sme tomuto tutoriálu porozumeli oveľa lepšie. Ultrazvukový senzor použitý v tomto projekte je uvedený nižšie.
Ako vidíte, má dve kruhové oči ako výstupky a štyri špendlíky, ktoré z nej vychádzajú. Dva projekcie podobné oku sú vysielač a prijímač ultrazvukovej vlny (ďalej len vlna USA). Vysielač vysiela americkú vlnu na frekvencii 40 Hz, táto vlna cestuje vzduchom a odrazí sa naspäť, keď sníma objekt. Vracajúce sa vlny prijímač pozoruje. Teraz vieme, aký čas je potrebný na to, aby sa táto vlna odrazila a vrátila späť, a rýchlosť americkej vlny je tiež univerzálna (3 400 cm / s). Pomocou týchto informácií a nižšie uvedených vzorcov pre stredné školy môžeme vypočítať prejdenú vzdialenosť.
Vzdialenosť = rýchlosť × čas
Teraz, keď vieme, ako funguje americký senzor, poďme na to, ako je možné ho prepojiť s akýmkoľvek MCU / CPU pomocou štyroch pinov. Tieto štyri piny sú Vcc, Trigger, Echo a Ground. Modul pracuje na + 5 V, a preto sa na napájanie modulu používa Vcc a uzemňovací kolík. Ďalšie dva piny sú I / O piny, pomocou ktorých komunikujeme s našim MCU. Spúšťací kolík by mal byť deklarovaný ako výstupné kolík a vytvoril veľmi vysoké 10US, bude vysielať US vlny do vzduchu, 8 cyklu zvukové roztrhnutiu. Akonáhle je vlna pozorovaná, pin Echo pôjde vysoko na presný časový interval, ktorý americká vlna potrebovala na návrat späť do modulu senzora. Preto bude tento Echo pin deklarovaný ako vstupa pomocou časovača sa zmeria, ako dlho bol špendlík vysoký. To by sa dalo ďalej pochopiť časovým diagramom uvedeným nižšie.
Dúfam, že ste dospeli k pokusnému spôsobu prepojenia tohto snímača s PIC. V tomto výučbe budeme používať modul časovača a modul LCD a predpokladám, že ste s nimi oboznámení, ak nie, vráťte sa prosím k príslušnému výukovému programu uvedenému nižšie, pretože preskočím väčšinu informácií, ktoré sa ho týkajú.
- Rozhranie LCD s mikrokontrolérom PIC
- Pochopenie časovačov v mikrokontroléri PIC
Schéma zapojenia:
Kompletná schéma zapojenia pre prepojenie ultrazvukového snímača s PIC16F877A je uvedená nižšie:
Ako je znázornené, obvod neobsahuje nič iné ako LCD displej a samotný ultrazvukový snímač. Americký snímač môže byť napájaný + 5 V, a preto je priamo napájaný regulátorom napätia 7805. Senzor má jeden výstupný kolík (spúšťací kolík), ktorý je pripojený k pólu 34 (RB1) a vstupný kolík (Echo pin) je pripojený k pólu 35 (RB2). Kompletné kolíkové pripojenie je znázornené v nasledujúcej tabuľke.
S.No: |
Číslo PIN PIC |
Názov špendlíka |
Pripojený k |
1 |
21 |
RD2 |
RS LCD |
2 |
22 |
RD3 |
E LCD |
3 |
27 |
RD4 |
D4 LCD |
4 |
28 |
RD5 |
D5 LCD |
5 |
29 |
RD6 |
D6 LCD |
6 |
30 |
RD7 |
D7 LCD |
7 |
34 |
RB1 |
Spúšť USA |
8 |
35 |
RB2 |
Ozvena USA |
Programovanie vášho mikrokontroléra PIC:
Celý program pre tento tutoriál je uvedený na konci tejto stránky. Ďalej som vysvetlil kód v malom význame celých častí, aby ste mu porozumeli. Ako už bolo povedané, program zahrnuje koncepciu prepojenia LCD a časovača, ktoré nebudú v tomto výučbe podrobne vysvetlené, pretože sme sa im už venovali v predchádzajúcich výučbách.
Vo vnútri hlavnej funkcie začíname inicializáciou IO pinov a ďalších registrov ako obvykle. Definujeme IO piny pre LCD a US senzor a tiež inicializujeme register Timer 1 tak, že ho nastavíme tak, aby pracoval na 1: 4 predkalárne a používal interné hodiny (Fosc / 4)
TRISD = 0x00; // PORTD deklarovaný ako výstup pre prepojenie LCD TRISB0 = 1; // Definujte pin RB0 ako vstup, ktorý sa použije ako prerušovací pin TRISB1 = 0; // Spúšťací kolík amerického snímača je odoslaný ako výstupný kolík TRISB2 = 1; // Echo pin amerického snímača je nastavený ako vstupný pin TRISB3 = 0; // RB3 je vystupny pin pre LED T1CON = 0x20; // 4 predskarárne a vnútorné hodiny
Časovač 1 je 16-bitový časovač používaný v PIC16F877A, register T1CON riadi parametre časovacieho modulu a výsledok sa uloží do TMR1H a TMR1L, pretože pri 16-bitovom výsledku sa prvých 8 uloží do TMR1H a ďalších 8 v TMR1L. Tento časovač je možné zapnúť alebo vypnúť pomocou TMR1ON = 0 a TMR1ON = 1.
Teraz je časovač pripravený na použitie, ale musíme vyslať americké vlny zo snímača, aby sme to dosiahli, musíme držať spúšťací kolík vysoko po dobu 10uS, čo sa deje pomocou nasledujúceho kódu.
Trigger = 1; __delay_us (10); Spúšťač = 0;
Ako je znázornené v časovom diagrame vyššie, kolík Echo zostane nízky, kým sa vlna nevráti späť, a potom pôjde vysoko a zostane vysoko počas presného času potrebného na návrat vĺn. Tento čas musí byť meraný modulom Časovač 1, čo je možné vykonať pomocou riadku pod ním
while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0;
Po nameraní času sa výsledná hodnota uloží do registrov TMR1H a TMR1L, tieto registre sa musia zhromaždiť, aby sa získala 16-bitová hodnota. To sa deje pomocou riadku nižšie
time_taken = (TMR1L - (TMR1H << 8));
This time_taken will be in form bytes, to get the actual time value we have to use the below formula.
Čas = (16-bitová hodnota registra) * (1 / Interné hodiny) * (Predbežné nastavenie) Vnútorné hodiny = Fosc / 4 Kde v našom prípade Fosc = 20000000 MHz a Predbežné nastavenie = 4 Preto bude hodnota Interných hodín 5000000 MHz a hodnota času bude Čas = (16-bitová hodnota registra) * (1/5000000) * (4) = (16-bitová hodnota registra) * (4/5000000) = (16-bitová hodnota registra) * 0,0000008 sekundy (ALEBO) Čas = (16-bitová hodnota registra) * 0,8 mikrosekundy
V našom programe je hodnota 16-bitového registra uložená v premennej time_taken, a preto sa na výpočet time_taken v mikrosekundách používa nasledujúci riadok
time_taken = time_taken * 0,8;
Ďalej musíme zistiť, ako vypočítať vzdialenosť. Ako vieme vzdialenosť = rýchlosť * čas. Ale tu by mal byť výsledok vydelený 2, pretože vlna pokrýva vysielaciu aj prijímaciu vzdialenosť. Rýchlosť našej vlny (zvuku) je 34000cm / s.
Vzdialenosť = (rýchlosť * čas) / 2 = (34000 * (16-bitová hodnota registra) * 0,0000008) / 2 Distance = (0,0272 * 16-bitová hodnota registra) / 2
Vzdialenosť sa dá vypočítať v centimetroch, ako je uvedené nižšie:
vzdialenosť = (0,0272 * čas) / 2;
Po vypočítaní hodnoty vzdialenosti a času musíme ich jednoducho zobraziť na LCD obrazovke.
Meranie vzdialenosti pomocou PIC a ultrazvukového snímača:
Po vykonaní pripojení a nahraní kódu by malo vaše experimentálne nastavenie vyzerať asi takto, zobrazené na obrázku nižšie.
Doska PIC Perf, ktorá je zobrazená na tomto obrázku, bola vyrobená pre našu sériu cvičení PIC, v ktorej sme sa naučili používať mikrokontrolér PIC. Možno sa budete chcieť vrátiť k týmto výučbám mikrokontroléra PIC pomocou programov MPLABX a XC8, ak neviete, ako napáliť program pomocou programu Pickit 3, pretože všetky tieto základné informácie preskočím.
Teraz umiestnite objekt pred snímač a mal by zobrazovať, ako ďaleko je objekt od snímača. Môžete si tiež všimnúť čas potrebný na prenos a návrat vlny, ktorý sa zobrazuje v mikrosekundách.
Objekt môžete presunúť na vami preferovanú vzdialenosť a skontrolovať hodnotu, ktorá sa zobrazuje na LCD displeji. Dokázal som zmerať vzdialenosť od 2cm do 350cm s presnosťou na 0,5cm. Je to celkom uspokojivý výsledok! Dúfam, že sa vám výukový program páčil a naučili ste sa, ako si niečo vyrobiť svojpomocne. Ak máte pochybnosti, napíšte ich do sekcie komentárov nižšie alebo použite fóra.
Skontrolujte tiež prepojenie ultrazvukového snímača s inými mikrokontrolérmi:
- Arduino a ultrazvukové snímače založené na meraní vzdialenosti
- Merajte vzdialenosť pomocou Raspberry Pi a ultrazvukového snímača HCSR04
- Meranie vzdialenosti pomocou HC-SR04 a AVR mikrokontroléra