V tej vadnici bomo razpravljali in oblikovali vezje za merjenje razdalje. To vezje je razvito s povezovanjem ultrazvočnega senzorja "HC-SR04" z mikrokrmilnikom AVR. Ta senzor uporablja tehniko, imenovano "ECHO", ki jo dobite, ko se zvok po udarcu s površino odbije nazaj.
Vemo, da zvočne vibracije ne morejo prodreti skozi trdne snovi. Torej se zgodi, ko vir zvoka ustvari vibracije, ki potujejo po zraku s hitrostjo 220 metrov na sekundo. Te vibracije, ko se srečajo z našim ušesom, jih opišemo kot zvok. Kot smo že omenili, te vibracije ne morejo iti skozi trdne snovi, zato se pri udarcu s površino, kakršna je stena, z enako hitrostjo odbijajo nazaj do vira, ki se imenuje odmev.
Ultrazvočni senzor “HC-SR04” zagotavlja izhodni signal, sorazmeren z razdaljo glede na odmev. Tukaj senzor po sprožitvi sproži zvočne vibracije v ultrazvočnem območju, nato pa počaka, da se zvočne vibracije vrnejo. Zdaj na podlagi parametrov, hitrosti zvoka (220 m / s) in časa, potrebnega, da odmev doseže vir, zagotavlja izhodni impulz sorazmerno z razdaljo.
Kot je prikazano na sliki, moramo najprej sprožiti senzor za merjenje razdalje, to je VISOK logični signal na sprožilnem zatiču senzorja za več kot 10uS, nato pa senzor pošlje zvočne vibracije, po odmevu senzor zagotavlja signal na izhodnem zatiču, katerega širina je sorazmerna z razdaljo med izvorom in oviro.
Ta razdalja se izračuna kot, razdalja (v cm) = širina impulznega izhoda (v uS) / 58.
Tu je treba širino signala sprejeti v večkratniku uS (mikrosekunda ali 10 ^ -6).
Potrebne komponente
Strojna oprema: ATMEGA32, napajalnik (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), kondenzator 1000uF, upor 10KΩ (2 kosa), senzor HC-SR04.
Programska oprema: Atmel studio 6.1, progisp ali flash magic.
Shema vezja in delovna razlaga
Tu uporabljamo PORTB za povezavo s podatkovnimi vrati LCD (D0-D7). Kdor ne želi delati s FUSE BITS ATMEGA32A, ne more uporabljati PORTC-a, saj PORTC vsebuje posebno vrsto komunikacije, ki jo lahko onemogočite samo s spremembo FUSEBITS.
V vezju opažate, da sem vzel le dva krmilna zatiča, kar omogoča boljše razumevanje. Kontrastni bit in READ / WRITE se ne uporabljata pogosto, zato jih je mogoče kratko skleniti na tla. To LCD zaslon postavi v najvišji kontrast in način branja. Samo nadzorovati moramo ENABLE in RS pin, da ustrezno pošljemo znake in podatke.
Povezave za LCD so podane spodaj:
PIN1 ali VSS na ozemljitev
PIN2 ali VDD ali VCC do + 5v moči
PIN3 ali VEE na tla (za začetnike daje največji kontrast)
PIN4 ali RS (Register Selection) na PD6 uC
PIN5 ali RW (branje / pisanje) na ozemljitev (LCD v načinu branja olajša komunikacijo za uporabnika)
PIN6 ali E (Omogoči) do PD5 uC
PIN7 ali D0 do PB0 uC
PIN8 ali D1 do PB1 uC
PIN9 ali D2 do PB2 uC
PIN10 ali D3 do PB3 uC
PIN11 ali D4 do PB4 uC
PIN12 ali D5 do PB5 uC
PIN13 ali D6 do PB6 uC
PIN14 ali D7 do PB7 uC
V vezju lahko vidite, da smo uporabili 8-bitno komunikacijo (D0-D7), vendar to ni obvezno in lahko uporabimo 4-bitno komunikacijo (D4-D7), vendar s 4-bitnim komunikacijskim programom postane nekoliko zapleten. Kot je prikazano v zgornji tabeli, na krmilnik povežemo 10 zatičev LCD, v katerih je 8 zatičev podatkovnih zatičev in 2 zatiča za nadzor.
Ultrazvočni senzor je štirinožna naprava, PIN1-VCC ali + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- TLA. Sprožilni zatič je mesto, kjer sprožimo sprožilec, ki pove senzorju, naj izmeri razdaljo. Echo je izhodni pin, kjer dobimo razdaljo v obliki širine impulza. Tu je odmevni zatič povezan s krmilnikom kot zunanji vir prekinitve. Torej, da dobimo širino izhodnega signala, je echo pin senzorja priključen na INT0 (prekinitev 0) ali PD2.
1. Sproži senzor tako, da povlečeš sprožilni zatič vsaj 12 uS.
2. Ko je odmev visok, dobimo zunanjo prekinitev in v ISR (Interrupt Service Rutine) začnemo števec (ki omogoča števec), ki se izvede takoj po sproženi prekinitvi.
3. Ko se odmev spet zniža, se ustvari prekinitev, tokrat bomo ustavili števec (onemogočili števec).
4. Torej, za impulz od visoko do nizko na eho zatiču smo sprožili števec in ga ustavili. To štetje se posodobi v pomnilnik za določanje razdalje, saj imamo zdaj odštevanje širine odmeva.
5. Naredili bomo nadaljnje izračune v pomnilniku, da bomo dobili razdaljo v cm
6. Razdalja je prikazana na 16x2 LCD zaslonu.
Za nastavitev zgornjih funkcij bomo nastavili naslednje registre:
Zgornje tri registre je treba ustrezno nastaviti, da nastavitev deluje, o njih pa bomo na kratko razpravljali, MODRA (INT0): ta bit mora biti nastavljen visoko, da se omogoči zunanja prekinitev0, ko je ta pin nastavljen, zaznamo spremembe logike na pinu PIND2.
RJAVO (ISC00, ISC01): ta dva bita sta prilagojena ustrezni logični spremembi na PD2, ki se šteje za prekinitev.
Kot že rečeno, potrebujemo prekinitev, da začnemo štetje in ga ustavimo. Tako nastavimo ISC00 kot enega in dobimo prekinitev, ko obstaja logika LOW do HIGH pri INT0; druga prekinitev, kadar obstaja logika VISOKO DO NIZKO.
RDEČA (CS10): Ta bit je preprosto za omogočanje in onemogočanje števca. Čeprav deluje skupaj z drugimi bitami CS10, CS12. Tukaj ne izvajamo nobenega predkazovanja, zato nam zanje ni treba skrbeti.
Tu si je treba zapomniti nekaj pomembnih stvari:
Uporabljamo interno uro ATMEGA32A, ki znaša 1 MHz. Tu ni predkalniranja, ne izvajamo rutine za ustvarjanje prekinitve primerjanja ujemanja, zato ni zapletenih nastavitev registra.
Vrednost štetja po štetju je shranjena v 16-bitnem registru TCNT1.
Ta projekt preverite tudi z arduino: Merjenje razdalje s pomočjo Arduina
Pojasnilo programiranja
Delovanje senzorja za merjenje razdalje je podrobno razloženo v spodnjem programu C.
#include // glava za omogočanje nadzora pretoka podatkov nad zatiči #define F_CPU 1000000 // pripovedovanje frekvence kristalne frekvence priložene