U ovom uputstvu razgovarat ćemo o dizajnu sklopa za mjerenje udaljenosti. Ovaj je krug razvijen povezivanjem ultrazvučnog senzora "HC-SR04" s AVR mikrokontrolerom. Ovaj senzor koristi tehniku koja se naziva "ECHO", a to je nešto što se dobije kad se zvuk odbije natrag nakon udaranja površinom.
Znamo da zvučne vibracije ne mogu prodrijeti kroz krutine. Dakle, ono što se događa je kad izvor zvuka generira vibracije, oni putuju zrakom brzinom od 220 metara u sekundi. Te vibracije kad se susretnu s našim uhom opisujemo ih kao zvuk. Kao što je ranije rečeno, ove vibracije ne mogu proći kroz čvrstu tlo, pa kad se udare površinom poput zida, odbijaju se natrag istom brzinom do izvora, što se naziva eho.
Ultrazvučni senzor "HC-SR04" daje izlazni signal proporcionalan udaljenosti na temelju odjeka. Ovdje senzor generira zvučne vibracije u ultrazvučnom opsegu nakon davanja okidača, nakon čega čeka da se zvučne vibracije vrate. Sada se na temelju parametara, brzine zvuka (220m / s) i vremena potrebnog da jeka dosegne izvor, pruža izlazni impuls proporcionalan udaljenosti.

Kao što je prikazano na slici, u početku moramo pokrenuti senzor za mjerenje udaljenosti, to jest HIGH logički signal na okidaču pin senzora za više od 10uS, nakon čega senzor šalje zvučnu vibraciju, nakon eha, senzor daje signal na izlaznom zatiču čija je širina proporcionalna udaljenosti između izvora i prepreke.
Ova udaljenost izračunava se kao, udaljenost (u cm) = širina impulsnog izlaza (u uS) / 58.
Ovdje se širina signala mora uzimati u umnoženju od uS (mikro sekunda ili 10 ^ -6).
Komponente potrebne
Hardver: ATMEGA32, napajanje (5v), AVR-ISP PROGRAMER, JHD_162ALCD (16x2LCD), kondenzator 1000uF, otpornik 10KΩ (2 komada), senzor HC-SR04.
Softver: Atmel studio 6.1, progisp ili flash magic.
Kružni dijagram i radno objašnjenje

Ovdje koristimo PORTB za povezivanje s LCD podatkovnim portom (D0-D7). Svatko tko ne želi raditi s FUSE BITS-om ATMEGA32A ne može koristiti PORTC, jer PORTC sadrži posebnu vrstu komunikacije koja se može onemogućiti samo promjenom FUSEBITS-a.
U krugu, primijetite da sam uzeo samo dvije upravljačke igle, što daje fleksibilnost boljeg razumijevanja. Kontrastni bit i READ / WRITE se ne koriste često, tako da se mogu kratko spojiti na masu. Ovo LCD postavlja u najveći kontrast i način čitanja. Samo trebamo kontrolirati ENABLE i RS igle da bi u skladu s tim slali znakove i podatke.
Priključci koji se rade za LCD prikazani su u nastavku:
PIN1 ili VSS na masu
PIN2 ili VDD ili VCC do + 5v snage
PIN3 ili VEE na zemlju (daje maksimalni kontrast najbolji za početnike)
PIN4 ili RS (registracijski odabir) na PD6 od uC
PIN5 ili RW (čitanje / pisanje) na masu (stavlja LCD u način čitanja olakšava komunikaciju za korisnika)
PIN6 ili E (Omogući) na PD5 od uC
PIN7 ili D0 do PB0 od uC
PIN8 ili D1 do PB1 od uC
PIN9 ili D2 do PB2 od uC
PIN10 ili D3 do PB3 od uC
PIN11 ili D4 do PB4 od uC
PIN12 ili D5 do PB5 od uC
PIN13 ili D6 do PB6 od uC
PIN14 ili D7 do PB7 od uC
U krugu možete vidjeti da smo koristili 8-bitnu komunikaciju (D0-D7), međutim to nije obvezno i možemo koristiti 4-bitnu komunikaciju (D4-D7), ali s 4-bitnim komunikacijskim programom postaje pomalo složen. Dakle, kao što je prikazano u gornjoj tablici, spajamo 10 pinova LCD-a na kontroler u kojem su 8 pinova podatkovne i 2 pina za kontrolu.
Ultrazvučni senzor je četveropolni uređaj, PIN1-VCC ili + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- ZEMLJA. Okidačka iglica je mjesto na kojem dajemo okidač kako bismo senzoru rekli da mjeri udaljenost. Echo je izlazni pin gdje dobivamo udaljenost u obliku širine impulsa. Ovdje je odjek za eho povezan s regulatorom kao vanjski izvor prekida. Dakle, da bi se dobila širina izlaznog signala, eho pin senzora povezan je na INT0 (prekid 0) ili PD2.
1. Pokretanje senzora povlačenjem okidača za najmanje 12 uS.
2. Jednom kad se eho povisi, dobit ćemo vanjski prekid i započet ćemo brojač (omogućavajući brojač) u ISR-u (Interrupt Service Rutine) koji se izvršava odmah nakon pokretanja prekida.
3. Jednom kad se eho opet smanji, generira se prekid, ovaj put zaustavit ćemo brojač (onemogućivši brojač).
4. Dakle, za puls od visoko do nisko na eho pinu, pokrenuli smo brojač i zaustavili ga. Ovo se brojanje ažurira na memoriju za dobivanje udaljenosti, jer sada imamo širinu odjeka u brojaču.
5. Izvršit ćemo daljnje izračune u memoriji kako bismo dobili udaljenost u cm
6. Udaljenost se prikazuje na LCD zaslonu 16x2.
Za postavljanje gornjih značajki postavit ćemo sljedeće registre:



Gore navedena tri registra treba postaviti u skladu s tim da bi postavljanje funkcioniralo, a mi ćemo o njima kratko razgovarati, PLAVO (INT0): ovaj bit mora biti postavljen visoko da bi se omogućio vanjski prekid0, nakon što je postavljen ovaj pin, osjećamo promjene logike na pindu PIND2.
SMEĐA (ISC00, ISC01): ova dva bita prilagođena su za odgovarajuću logičku promjenu na PD2, što se smatra prekidom.

Dakle, kao što smo ranije rekli, potreban nam je prekid da započnemo brojanje i zaustavimo ga. Dakle, postavljamo ISC00 kao jedan i dobivamo prekid kada postoji logika NISKO NA VISOKO na INT0; još jedan prekid kad postoji logika VISOKO DO NISKO.
CRVENA (CS10): Ovaj je bit samo za omogućavanje i onemogućavanje brojača. Iako radi zajedno s ostalim bitovima CS10, CS12. Ovdje ne vršimo nikakvo preskaliranje, pa se zbog njih ne moramo brinuti.
Ovdje je potrebno zapamtiti nekoliko važnih stvari:
Koristimo interni sat ATMEGA32A koji je 1MHz. Ovdje nema preskaliranja, ne radimo rutinu generiranja prekida uspoređivanja podudaranja, tako da nema složenih postavki registra.
Vrijednost brojanja nakon brojanja pohranjena je u 16-bitnom registru TCNT1.
Također provjerite ovaj projekt s arduinom: Mjerenje udaljenosti pomoću Arduina
Objašnjenje programiranja
Rad senzora za mjerenje udaljenosti objašnjen je korak po korak u donjem programu C.
#include // zaglavlje kako bi se omogućila kontrola protoka podataka preko pinova #define F_CPU 1000000 // kazivanje priključene kristalne frekvencije #include
