Šioje pamokoje aptarsime ir suprojektuosime nuotolio matavimo grandinę. Ši grandinė sukurta susiejus ultragarso jutiklį „HC-SR04“ su AVR mikrovaldikliu. Šis jutiklis naudoja „ECHO“ vadinamą metodiką, kurią jūs gaunate, kai garsas atsispindi po smūgio į paviršių.
Mes žinome, kad garso vibracijos negali prasiskverbti per kietąsias medžiagas. Taigi, kas atsitinka, kai garso šaltinis generuoja vibraciją, jie keliauja oru 220 metrų per sekundę greičiu. Šias vibracijas, kai jie sutinka mūsų ausį, mes apibūdiname kaip garsą. Kaip minėta anksčiau, šios vibracijos negali praeiti per kietą, todėl, kai jos smogia tokiu paviršiumi kaip siena, jos tuo pačiu greičiu atsispindi atgal į šaltinį, kuris vadinamas aidu.
Ultragarsinis jutiklis „HC-SR04“ teikia išėjimo signalą, proporcingą atstumui, atsižvelgiant į aidą. Jutiklis čia sukuria garso vibraciją ultragarso diapazone, duodamas trigerį, po to laukia, kol garso vibracija grįš. Dabar, atsižvelgiant į parametrus, garso greitį (220 m / s) ir laiką, per kurį aidas pasiekia šaltinį, jis suteikia išėjimo impulsą, proporcingą atstumui.
Kaip parodyta paveikslėlyje, iš pradžių mes turime įjungti jutiklį matuoti atstumą, tai yra HIGH loginis signalas prie jutiklio kaiščio daugiau nei 10uS, po to jutiklis siunčia garso vibraciją, po aido jutiklis suteikia signalas prie išvesties kaiščio, kurio plotis yra proporcingas atstumui tarp šaltinio ir kliūties.
Šis atstumas apskaičiuojamas kaip atstumas (cm) = impulso išėjimo plotis (uS) / 58.
Čia signalo plotis turi būti paimamas iš daugybės uS (mikro sekundė arba 10 ^ -6).
Būtini komponentai
Aparatūra: ATMEGA32, maitinimo šaltinis (5v), AVR-ISP PROGRAMMERIUS, JHD_162ALCD (16x2LCD), 1000uF kondensatorius, 10KΩ rezistorius (2 vnt.), HC-SR04 jutiklis.
Programinė įranga: „ Atmel studio 6.1“, „progisp“ arba „flash magic“.
Grandinės schema ir darbo paaiškinimas
Čia mes naudojame PORTB, kad prisijungtume prie LCD duomenų prievado (D0-D7). Visi, kurie nenori dirbti su ATMEGA32A saugikliais, negali naudoti PORTC, nes PORTC yra specialus ryšio tipas, kurį galima išjungti tik pakeitus FUSEBITS.
Trasoje pastebite, kad paėmiau tik du valdymo kaiščius, tai suteikia lankstumo geriau suprasti. Kontrasto bitai ir READ / WRITE nėra dažnai naudojami, todėl juos galima sutrumpinti. Tai padidina LCD kontrasto ir skaitymo režimą. Mes tiesiog turime valdyti ENABLE ir RS smeigtukus, kad galėtume atitinkamai siųsti simbolius ir duomenis.
LCD jungtys pateikiamos žemiau:
PIN1 arba VSS į žemę
PIN2 arba VDD arba VCC iki + 5v maitinimo
PIN3 arba VEE į žemę (suteikia maksimalų kontrastą pradedantiesiems)
PIN4 arba RS (registracijos pasirinkimas) į uC PD6
PIN5 arba RW (skaitymas / rašymas) į žemę (įjungus skystųjų kristalų ekraną skaitymo režimu, palengvinamas ryšys vartotojui)
PIN6 arba E (įjungti) į uC PD5
PIN7 arba D0 - PB0 iš uC
UC PIN8 arba D1 – PB1
PIN9 arba D2 – PB2 iš uC
U10 PIN10 arba D3 – PB3
PIN11 arba D4 – PB4 iš uC
U12 PIN12 arba D5 – PB5
U13 PIN13 arba D6 – PB6
U14 PIN14 arba D7 – PB7
Grandinėje matote, kad mes naudojome 8 bitų ryšį (D0-D7), tačiau tai nėra privaloma ir mes galime naudoti 4 bitų ryšį (D4-D7), tačiau su 4 bitų ryšio programa tampa šiek tiek sudėtinga. Taigi, kaip parodyta aukščiau pateiktoje lentelėje, mes prijungiame 10 LCD kontaktų su valdikliu, kuriame 8 kontaktai yra duomenų kaiščiai ir 2 valdikliai.
Ultragarso jutiklis yra keturių kontaktų įtaisas, PIN1- VCC arba + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- ŽEMĖ. Trigerio kaištis yra vieta, kur mes duodame paleidiklį liepti jutikliui išmatuoti atstumą. Aidas yra išvesties kaištis, kuriame gauname atstumą impulsų pločio pavidalu. Čia aido kaištis yra prijungtas prie valdiklio kaip išorinis pertraukimo šaltinis. Taigi, norint gauti signalo išvesties plotį, jutiklio aido kaištis yra prijungtas prie INT0 (0 pertraukimas) arba PD2.
1. Suaktyvinkite jutiklį, patraukdami mažiausiai 12uS trigerio kaištį.
2. Kai aidas praeina aukštai, mes gauname išorinį pertraukimą ir mes ketiname paleisti skaitiklį (įgalinantį skaitiklį) ISR („Interrupt Service Routine“), kuris vykdomas iškart po suveikimo.
3. Kai aidas vėl bus žemas, generuojamas pertraukimas, šį kartą mes ketiname sustabdyti skaitiklį (išjungti skaitiklį).
4. Taigi, norint, kad impulsas būtų aukštas ir žemas, esant aido kaiščiui, mes užvedėme skaitiklį ir jį sustabdėme. Šis skaičius atnaujinamas atmintyje, kad gautume atstumą, nes dabar skaičiuojame aido plotį.
5. Atmintyje atliksime tolesnius skaičiavimus, kad gautume atstumą cm
6. Atstumas rodomas 16x2 LCD ekrane.
Norėdami nustatyti pirmiau nurodytas funkcijas, nustatysime šiuos registrus:
Pirmiau minėti trys registrai turi būti nustatyti, kad sąranka veiktų, ir mes ketiname juos trumpai aptarti, MĖLYNA (INT0): šis bitas turi būti nustatytas aukštai, kad būtų galima įjungti išorinį pertraukimą0, kai šis kaištis bus nustatytas, mes suprasime PIND2 kaiščio loginius pokyčius.
BROWN (ISC00, ISC01): šie du bitai sureguliuojami atsižvelgiant į atitinkamą loginį pokytį esant PD2, kuris laikomas pertraukimu.
Taigi, kaip sakyta anksčiau, mums reikia pertraukos, kad galėtume pradėti skaičiuoti ir jį sustabdyti. Taigi mes nustatome ISC00 kaip vieną ir gauname pertrauką, kai yra logika LOW to HIGH ties INT0; dar vienas pertraukimas, kai yra logika HIGH to LOW.
RED (CS10): Šis bitas yra tiesiog įjungti ir išjungti skaitiklį. Nors jis veikia kartu su kitais bitais CS10, CS12. Mes čia nedarome jokio išankstinio skalavimo, todėl neturime dėl jų jaudintis.
Keletas svarbių dalykų, kuriuos reikia prisiminti, yra šie:
Mes naudojame vidinį ATMEGA32A laikrodį, kuris yra 1MHz. Čia nėra išankstinio skalavimo, mes nedarome palyginimo rungtynių pertraukimo generavimo rutinos, todėl nėra sudėtingų registrų nustatymų.
Skaičiavimo vertė po skaičiavimo saugoma 16 bitų TCNT1 registre.
Taip pat patikrinkite šį projektą naudodami „arduino“: Atstumo matavimas naudojant „Arduino“
Programavimo paaiškinimas
Atstumo matavimo jutiklio veikimas žingsnis po žingsnio paaiškinamas žemiau esančioje C programoje.
#include // antraštė, kad būtų galima valdyti duomenų srautą per kaiščius #define F_CPU 1000000 // pridedamas valdiklio kristalo dažnis