V tomto výučbe sa chystáme diskutovať a navrhnúť obvod na meranie vzdialenosti. Tento obvod je vyvinutý prepojením ultrazvukového snímača „HC-SR04“ s mikrokontrolérom AVR. Tento snímač používa techniku zvanú „ECHO“, čo je niečo, čo získate, keď sa zvuk odrazí späť po údere o povrch.
Vieme, že zvukové vibrácie nemôžu preniknúť cez pevné látky. Takže to, čo sa stane, je, že keď zdroj zvuku generuje vibrácie, cestujú vzduchom rýchlosťou 220 metrov za sekundu. Tieto vibrácie, keď sa dostanú do nášho ucha, označujeme ako zvuky. Ako už bolo povedané, tieto vibrácie nemôžu prechádzať pevnými látkami, takže keď narazia na povrch ako stena, odrážajú sa rovnakou rýchlosťou späť k zdroju, ktorý sa nazýva echo.
Ultrazvukový snímač „HC-SR04“ poskytuje na základe echa výstupný signál úmerný vzdialenosti. Senzor tu generuje zvukové vibrácie v ultrazvukovom rozsahu po spustení, potom čaká na návrat zvukových vibrácií. Teraz na základe parametrov, rýchlosti zvuku (220 m / s) a času potrebného na to, aby sa ozvena dostala k zdroju, poskytuje výstupný impulz úmerný vzdialenosti.
Ako je znázornené na obrázku, najskôr je potrebné inicializovať snímač na meranie vzdialenosti, čo je VYSOKÝ logický signál na spúšťacom kolíku snímača na viac ako 10 uS, potom je snímačom odoslaná zvuková vibrácia, po ozvene poskytuje snímač signál na výstupnom kolíku, ktorého šírka je úmerná vzdialenosti medzi zdrojom a prekážkou.
Táto vzdialenosť sa počíta ako vzdialenosť (v cm) = šírka impulzného výstupu (v uS) / 58.
Tu musí byť šírka signálu vyjadrená v násobkoch uS (mikrosekundu alebo 10 ^ -6).
Súčasti sú povinné
Hardvér: ATMEGA32, napájací zdroj (5 V), AVR-ISP PROGRAMÁTOR, JHD_162ALCD (16x2LCD), kondenzátor 1000uF, rezistor 10KΩ (2 kusy), snímač HC-SR04.
Softvér: Atmel studio 6.1, progisp alebo flash magic.
Schéma zapojenia a pracovné vysvetlenie
Tu používame PORTB na pripojenie k dátovému portu LCD (D0-D7). Každý, kto nechce pracovať s FUSE BITS v ATMEGA32A, nemôže používať PORTC, pretože PORTC obsahuje špeciálny typ komunikácie, ktorú je možné deaktivovať iba zmenou FUSEBITS.
V obvode pozorujete, že som vzal iba dva ovládacie piny, čo dáva flexibilitu na lepšie pochopenie. Kontrastný bit a READ / WRITE sa často nepoužívajú, aby ich bolo možné skratovať na zem. Toto nastavuje LCD do najvyššieho kontrastu a režimu čítania. Potrebujeme iba ovládať piny ENABLE a RS, aby sme mohli zodpovedajúcim spôsobom odosielať znaky a údaje.
Pripojenia, ktoré sa vykonávajú pre LCD, sú uvedené nižšie:
PIN1 alebo VSS na zem
PIN2 alebo VDD alebo VCC na napájanie + 5 V.
PIN3 alebo VEE na zem (poskytuje maximálny kontrast najlepšie pre začiatočníkov)
PIN4 alebo RS (výber registra) na PD6 uC
PIN5 alebo RW (čítanie / zápis) na zem (prepnutie LCD do režimu čítania uľahčuje komunikáciu pre používateľa)
PIN6 alebo E (povoliť) na PD5 uC
PIN7 alebo D0 až PB0 uC
PIN8 alebo D1 až PB1 uC
PIN9 alebo D2 až PB2 uC
PIN10 alebo D3 až PB3 uC
PIN11 alebo D4 až PB4 uC
PIN12 alebo D5 až PB5 uC
PIN13 alebo D6 až PB6 uC
PIN14 alebo D7 až PB7 uC
V obvode, ktorý vidíte, sme použili 8-bitovú komunikáciu (D0-D7), nie je to však povinné a môžeme použiť 4-bitovú komunikáciu (D4-D7), ale so 4-bitovým komunikačným programom sa stáva trochu zložitejšou. Takže ako je uvedené v tabuľke vyššie, pripájame 10 pinov LCD k radiču, v ktorých 8 pinov sú dátové piny a 2 piny pre riadenie.
Ultrazvukový snímač je štvorpólové zariadenie, PIN1- VCC alebo + 5V; PIN2-TRIGGER; PIN3-ECHO; PIN4- UZEMNENIE. Spúšťací kolík je miesto, kde dáme spúšť, aby sme povedali senzoru, aby zmeral vzdialenosť. Echo je výstupný pin, kde dostaneme vzdialenosť vo forme šírky impulzu. Echo pin je tu pripojený k radiču ako externý zdroj prerušenia. Aby sme dostali šírku výstupného signálu, je echo pin snímača pripojený k INT0 (prerušenie 0) alebo PD2.
1. Spustenie senzora potiahnutím spúšte nahor minimálne na 12uS.
2. Akonáhle echo stúpne, dostaneme externé prerušenie a ideme spustiť počítadlo (umožňujúce počítadlo) v ISR (Interrupt Service Routine), ktoré sa vykoná hneď po spustení prerušenia.
3. Akonáhle echo opäť klesne, vygeneruje sa prerušenie, tentokrát zastavíme počítadlo (deaktivujeme počítadlo).
4. Takže pre impulz od najvyššieho po najnižší pri kolíku echa sme spustili počítadlo a zastavili ho. Tento počet sa aktualizuje na pamäť na získanie vzdialenosti, pretože teraz máme v počte šírku ozveny.
5. Budeme robiť ďalšie výpočty v pamäti, aby sme dostali vzdialenosť v cm
6. Vzdialenosť sa zobrazuje na 16x2 LCD displeji.
Pre nastavenie vyššie uvedených funkcií nastavíme nasledujúce registre:
Vyššie uvedené tri registre sa majú nastaviť zodpovedajúcim spôsobom, aby nastavenie fungovalo, a budeme o nich krátko diskutovať, MODRÁ (INT0): tento bit musí byť nastavený vysoko, aby sa umožnilo externé prerušenie0, akonáhle je tento pin nastavený, budeme cítiť logické zmeny na PIND2 kolíku.
BROWN (ISC00, ISC01): tieto dva bity sú upravené na príslušnú logickú zmenu na PD2, ktorá sa považuje za prerušenie.
Takže ako už bolo povedané, na začatie počítania a zastavenie počítania potrebujeme prerušenie. Takže nastavíme ISC00 ako jeden a dostaneme prerušenie, keď je logika LOW až HIGH na INT0; ďalšie prerušenie, keď existuje logika VYSOKÁ až NÍZKA.
ČERVENÁ (CS10): Tento bit slúži iba na povolenie a zakázanie počítadla. Aj keď to funguje spolu s ostatnými bitmi CS10, CS12. Nerobíme tu nijaké preskalácie, takže si s nimi nemusíme robiť starosti.
Tu je potrebné pamätať na niekoľko dôležitých vecí:
Používame interné hodiny ATMEGA32A, ktoré sú 1MHz. Tu nie je potrebné prednastavovanie, nerobíme rutinu generovania prerušenia zhody, takže neexistujú žiadne zložité nastavenia registra.
Hodnota počítania po spočítaní je uložená v 16-bitovom registri TCNT1.
Skontrolujte tiež tento projekt pomocou arduino: Meranie vzdialenosti pomocou Arduina
Vysvetlenie programovania
Činnosť snímača merania vzdialenosti je vysvetlená krok za krokom v nižšie uvedenom programe C.
#include // hlavička na povolenie riadenia toku dát cez piny # define F_CPU 1000000 // pripojená informácia o kryštalickej frekvencii radiča #include