Aby každý projekt ožil, musíme použít senzory. Senzory fungují jako oči a uši pro všechny vestavěné aplikace, pomáhají digitálnímu mikrokontroléru pochopit, co se ve skutečnosti děje v tomto skutečném analogovém světě. V tomto tutoriálu se naučíme, jak propojit ultrazvukový senzor HC-SR04 s mikrokontrolérem PIC.
HC-SR04 je ultrazvukový snímač, který může být použit pro měření vzdálenosti kdekoli mezi 2 cm do 450cm (teoreticky). Tento senzor se osvědčil tím, že se hodí do mnoha projektů, které zahrnují detekci překážek, měření vzdálenosti, mapování prostředí atd. Na konci tohoto článku se dozvíte, jak tento senzor funguje a jak jej propojit s mikrokontrolérem PIC16F877A pro měření vzdálenosti a zobrazení na LCD obrazovce. Zní to zajímavě správně !! Pojďme tedy začít…
Potřebné materiály:
- PIC16F877A MCU s nastavením programování
- Displej LCD 16 * 2
- Ultrazvukový senzor (HC-SR04)
- Připojovací vodiče
Jak funguje ultrazvukový senzor?
Než se dostaneme dále, měli bychom vědět, jak funguje ultrazvukový senzor, abychom tomuto tutoriálu porozuměli mnohem lépe. Ultrazvukový senzor použitý v tomto projektu je uveden níže.
Jak vidíte, má dvě kruhová oči jako výstupky a čtyři kolíky, které z ní vycházejí. Dva projekce podobné oku jsou vysílač a přijímač ultrazvukové vlny (dále jen vlna USA). Vysílač vysílá americkou vlnu na frekvenci 40 Hz, tato vlna prochází vzduchem a odráží se zpět, když cítí předmět. Vracející se vlny jsou přijímačem pozorovány. Nyní víme čas potřebný na to, aby se tato vlna odrazila a vrátila se, a rychlost americké vlny je také univerzální (3400 cm / s). Pomocí těchto informací a níže uvedených středoškolských vzorců můžeme vypočítat ujetou vzdálenost.
Vzdálenost = rychlost × čas
Nyní, když víme, jak americký senzor funguje, pojďme, jak jej lze propojit s jakýmkoli MCU / CPU pomocí čtyř pinů. Tyto čtyři piny jsou Vcc, Trigger, Echo a Ground. Modul pracuje na + 5 V, a proto se k napájení modulu používá Vcc a zemnící kolík. Další dva piny jsou I / O piny, pomocí kterých komunikujeme s naším MCU. Spouštěcí kolík by měl být deklarován jako výstupní kolík a vytvořil vysoce pro 10us, bude vysílat US vlny do vzduchu, 8 cyklu zvukové roztržení. Jakmile je vlna pozorována, kolík Echo půjde vysoko na přesný časový interval, který americká vlna potřebovala k návratu zpět do modulu snímače. Proto bude tento Echo pin deklarován jako vstupa časovač se použije k měření, jak dlouho byl kolík vysoký. Tomu lze dále porozumět níže uvedeným časovým diagramem.
Doufám, že jste dospěli k pokusnému způsobu propojení tohoto senzoru s PIC. V tomto tutoriálu budeme používat modul časovače a modul LCD a předpokládám, že jste oba obeznámeni, pokud ne, vraťte se prosím k příslušnému tutoriálu níže, protože budu přeskakovat většinu informací s ním souvisejících.
- Rozhraní LCD s mikrokontrolérem PIC
- Porozumění časovačům v mikrokontroléru PIC
Kruhový diagram:
Kompletní schéma zapojení rozhraní ultrazvukového senzoru s PIC16F877A je uvedeno níže:
Jak je znázorněno, obvod nezahrnuje nic jiného než LCD displej a samotný ultrazvukový senzor. Americký senzor může být napájen + 5 V, a proto je přímo napájen regulátorem napětí 7805. Senzor má jeden výstupní kolík (spouštěcí kolík), který je připojen ke kolíku 34 (RB1) a vstupní kolík (kolík Echo) je připojen ke kolíku 35 (RB2). Kompletní pinové připojení je znázorněno v tabulce níže.
S.No: |
Číslo PIN PIC |
Název PIN |
Připojen 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 |
Spouštěč USA |
8 |
35 |
RB2 |
Ozvěna USA |
Programování mikrokontroléru PIC:
Kompletní program pro tento tutoriál je uveden na konci této stránky, dále níže jsem vysvětlil kód do malých významů, které jsou pro vás pochopitelné. Jak již bylo řečeno, program zahrnuje koncept rozhraní LCD a časovače, které v tomto tutoriálu nebudeme podrobně vysvětlovat, protože jsme je již popsali v předchozích tutoriálech.
Uvnitř hlavní funkce začínáme inicializací IO pinů a dalších registrů jako obvykle. Definujeme IO piny pro LCD a US senzor a také inicializujeme registr Timer 1 nastavením tak, aby pracoval na 1: 4 předskalární a používal interní hodiny (Fosc / 4)
TRISD = 0x00; // PORTD deklarován jako výstup pro propojení LCD TRISB0 = 1; // Definujte pin RB0 jako vstup, který se použije jako přerušovací pin TRISB1 = 0; // Spouštěcí kolík amerického snímače je odeslán jako výstupní kolík TRISB2 = 1; // Echo pin amerického senzoru je nastaven jako vstupní pin TRISB3 = 0; // RB3 je výstupní pin pro LED T1CON = 0x20; // 4 preskalární a interní hodiny
Časovač 1 je 16bitový časovač používaný v PIC16F877A, registr T1CON řídí parametry časovacího modulu a výsledek bude uložen v TMR1H a TMR1L, protože jako 16bitový výsledek bude prvních 8 uloženo v TMR1H a dalších 8 v TMR1L. Tento časovač lze zapnout nebo vypnout pomocí TMR1ON = 0 a TMR1ON = 1.
Nyní je časovač připraven k použití, ale musíme vyslat americké vlny ze senzoru, abychom to mohli udělat, musíme udržovat Trigger pin vysoko na 10uS, to se děje pomocí následujícího kódu.
Spouštěč = 1; __delay_us (10); Spouštěč = 0;
Jak je ukázáno v časovacím diagramu výše, kolík Echo zůstane nízký, dokud se vlna nevrátí zpět, a poté se zvýší a zůstane vysoko po přesnou dobu, po kterou se vlny vrátí zpět. Tento čas musí být měřen modulem Časovač 1, což lze provést pomocí níže uvedeného řádku
while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0;
Jakmile je čas změřen, bude výsledná hodnota uložena v registrech TMR1H a TMR1L, tyto registry musí být spojeny, aby se shromáždila 16bitová hodnota. To se provádí pomocí níže uvedeného řádku
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 = (16bitová hodnota registru) * (1 / Interní hodiny) * (Předběžné měřítko) Vnitřní hodiny = Fosc / 4 Kde v našem případě Fosc = 20000000 MHz a Předběžné měřítko = 4 Proto bude hodnota interních hodin 5000000Mhz a hodnota času bude Time = (16bitová hodnota registru) * (1/5000000) * (4) = (16bitová hodnota registru) * (4/5000000) = (16bitová hodnota registru) * 0,0000008 sekundy (NEBO) Čas = (16bitová hodnota registru) * 0,8 mikrosekundy
V našem programu je hodnota 16bitového registru uložena v proměnné time_taken, a proto se pro výpočet time_taken v mikrosekundách používá níže uvedený řádek
time_taken = time_taken * 0,8;
Dále musíme zjistit, jak vypočítat vzdálenost. Jak víme vzdálenost = rychlost * čas. Ale zde by měl být výsledek vydělen 2, protože vlna pokrývá vysílací i přijímací vzdálenost. Rychlost naší vlny (zvuku) je 34000 cm / s.
Vzdálenost = (Rychlost * Čas) / 2 = (34000 * (16bitová hodnota registru) * 0,0000008) / 2 Vzdálenost = (0,0272 * 16bitová hodnota registru) / 2
Vzdálenost tedy může být vypočítána v centimetrech jako níže:
vzdálenost = (0,0272 * čas) / 2;
Po výpočtu hodnoty ujeté vzdálenosti a času je jednoduše musíme zobrazit na LCD obrazovce.
Měření vzdálenosti pomocí PIC a ultrazvukového senzoru:
Po provedení připojení a nahrání kódu by vaše experimentální nastavení mělo vypadat asi takto, jak je znázorněno na následujícím obrázku.
Deska PIC Perf, zobrazená na tomto obrázku, byla vytvořena pro naši sérii výukových programů PIC, ve které jsme se naučili používat mikrokontrolér PIC. Možná se budete chtít vrátit k těm tutoriálům PIC Microcontroller pomocí MPLABX a XC8, pokud nevíte, jak vypálit program pomocí Pickit 3, protože budu všechny tyto základní informace přeskakovat.
Nyní umístěte předmět před senzor a měl by zobrazovat, jak daleko je objekt od senzoru. Můžete si také všimnout času, který se zobrazuje v mikrosekundách, než se vlna přenese a vrátí zpět.
Objekt můžete přesunout na požadovanou vzdálenost a zkontrolovat hodnotu zobrazenou na LCD. Byl jsem schopen měřit vzdálenost od 2 cm do 350 cm s přesností 0,5 cm. To je docela uspokojivý výsledek! Doufám, že se vám výukový program líbil a naučili jste se, jak si něco vyrobit sami. Máte-li jakékoli pochybnosti, zahoďte je do sekce komentářů níže nebo použijte fóra.
Zkontrolujte také propojení ultrazvukového senzoru s jinými mikrokontroléry:
- Arduino a ultrazvukové senzory založené na měření vzdálenosti
- Měření vzdálenosti pomocí Raspberry Pi a ultrazvukového senzoru HCSR04
- Měření vzdálenosti pomocí HC-SR04 a mikrokontroléru AVR