Kad bet koks projektas būtų gyvas, turime naudoti jutiklius. Jutikliai veikia kaip visos įdėtos programos akys ir ausys. Tai padeda skaitmeniniam mikrovaldikliui suprasti, kas iš tikrųjų vyksta šiame realiame analoginiame pasaulyje. Šioje pamokoje sužinosime, kaip susieti ultragarso jutiklį HC-SR04 su PIC mikrovaldikliu.
HC-SR04 yra ultragarso jutiklis, kuris gali būti naudojamas matuoti atstumą bet kur tarp 2 cm į 450cm (teoriškai). Šis jutiklis pasirodė esąs vertas, nes buvo įtrauktas į daugelį projektų, kurie apima kliūčių aptikimą, atstumo matavimą, aplinkos žemėlapį ir kt. Šio straipsnio pabaigoje sužinosite, kaip veikia šis jutiklis ir kaip jį susieti su PIC16F877A mikrovaldikliu, kad būtų galima išmatuoti atstumą ir ekraną. LCD ekrane. Skamba įdomiai teisingai! Taigi pradėkime…
Reikalingos medžiagos:
- PIC16F877A MCU su programavimo sąranka
- LCD 16 * 2 ekranas
- Ultragarsinis jutiklis (HC-SR04)
- Jungiamieji laidai
Kaip veikia ultragarso jutiklis?
Prieš žengdami toliau, turėtume žinoti, kaip veikia ultragarso jutiklis, kad galėtume daug geriau suprasti šią pamoką. Šiame projekte naudojamas ultragarso jutiklis parodytas žemiau.
Kaip matote, turi dvi apskritas akis, pavyzdžiui, projekcijas ir keturis kaiščius. Dvi į akis panašios projekcijos yra ultragarso bangos (toliau - JAV banga) siųstuvas ir imtuvas. Siųstuvas skleidžia JAV bangą 40Hz dažniu, ši banga sklinda oru ir atspindėdama objektą atsispindi. Grįžtančias bangas stebi imtuvas. Dabar mes žinome laiką, per kurį ši banga atsispindi ir grįžta, o JAV bangos greitis taip pat yra universalus (3400 cm / s). Naudodamiesi šia informacija ir žemiau pateiktomis vidurinės mokyklos formulėmis galime apskaičiuoti įveiktą atstumą.
Atstumas = greitis × laikas
Dabar, kai žinome, kaip veikia JAV jutiklis, leiskite mums, kaip jis gali būti susietas su bet kuriuo MCU / CPU, naudojant keturis kaiščius. Šie keturi kaiščiai yra atitinkamai „Vcc“, „Trigger“, „Echo“ ir „Ground“. Modulis veikia + 5 V įtampoje, todėl Vcc ir įžeminimo kaištis naudojami modulio maitinimui. Kiti du kaiščiai yra įvesties / išvesties kaiščiai, kuriais mes bendraujame su savo MCU. Sukelti kaištis turi būti deklaruojamas kaip išėjimo pin ir padarė aukštas iš 10uS, tai perduos JAV bangą į orą kaip 8 ciklo sonic sprogo. Pastebėjus bangą, aido kaištis bus aukštas tiksliai tą laiką, kurį JAV banga grįžo atgal į jutiklio modulį. Taigi šis Echo kaištis bus deklaruojamas kaip įvestisir laikmatis bus naudojamas matuoti, kiek laiko kaištis buvo aukštas. Tai galima suprasti toliau pateiktoje laiko schemoje.
Tikimės, kad priėjote preliminarų būdą susieti šį jutiklį su PIC. Šioje pamokoje naudosime laikmačio modulį ir skystųjų kristalų modulį, ir aš manau, kad esate susipažinę su abiem, jei ne, grįžkite į toliau pateiktą atitinkamą mokymo programą, nes praleisiu didžiąją dalį su tuo susijusios informacijos.
- LCD sąsaja su PIC mikrovaldikliu
- Suprasti laikmačius PIC mikrovaldiklyje
Grandinės schema:
Visa grandinės schema, skirta susieti ultragarso jutiklį su PIC16F877A, parodyta žemiau:
Kaip parodyta, grandinė apima tik LCD ekraną ir patį ultragarso jutiklį. JAV jutiklis gali būti maitinamas iš + 5 V, todėl jį tiesiogiai maitina 7805 įtampos reguliatorius. Jutiklis turi vieną išvesties kaištį (paleidimo kaištį), kuris yra prijungtas prie 34 kaiščio (RB1), o įvesties kaištis (aido kaištis) yra prijungtas prie kaiščio 35 (RB2). Visas kaiščių sujungimas parodytas toliau pateiktoje lentelėje.
S.Ne: |
PIC PIN kodas |
PIN vardas |
Prisijungęs prie |
1 |
21 |
RD2 |
LCD ekranas |
2 |
22 |
RD3 |
LCD ekranas |
3 |
27 |
RD4 |
D4 skystųjų kristalų ekranas |
4 |
28 |
RD5 |
D5 skystųjų kristalų ekranas |
5 |
29 |
RD6 |
D6 skystųjų kristalų ekranas |
6 |
30 |
RD7 |
D7 skystųjų kristalų ekranas |
7 |
34 |
RB1 |
JAV trigeris |
8 |
35 |
RB2 |
JAV aidas |
PIC mikrovaldiklio programavimas:
Visa šios mokymo programos programa pateikiama šio puslapio pabaigoje, žemiau aš paaiškinau kodą į mažus įpročius, kad suprastumėte. Kaip minėta anksčiau, programa apima LCD sąsajos ir laikmačio sąvoką, kuri šioje instrukcijoje nebus išsamiai paaiškinta, nes mes jas jau aptarėme ankstesnėse pamokose.
Viduje pagrindinę funkciją pradedame inicijuodami IO kaiščius ir kitus registrus, kaip įprasta. Apibrėžiame LCD ir JAV jutiklių IO kaiščius, taip pat inicijuojame „Timer 1“ registrą, nustatydami, kad jis veiktų prieš skaliarą 1: 4 ir naudotų vidinį laikrodį („Fosc / 4“).
TRISD = 0x00; // PORTD deklaruota kaip sąsajos LCD TRISB0 išvestis = 1; // Apibrėžkite RB0 kaištį kaip įvestį, kurį norite naudoti kaip pertraukimo kaištį TRISB1 = 0; // JAV jutiklio trigerio kaištis siunčiamas kaip išvesties kaištis TRISB2 = 1; // JAV jutiklio aido kaištis nustatytas kaip įvesties kaištis TRISB3 = 0; // RB3 yra LED T1CON išvesties kaištis = 0x20; // 4 presskaliarinis ir vidinis laikrodis
Laikmatis 1 yra 16 bitų laikmatis, naudojamas PIC16F877A, T1CON registras valdo laikmačio modulio parametrus, o rezultatas bus saugomas TMR1H ir TMR1L, nes 16 bitų rezultatas, pirmieji 8 bus saugomi TMR1H, o 8-asis TMR1L. Šį laikmatį galima įjungti arba išjungti naudojant atitinkamai TMR1ON = 0 ir TMR1ON = 1.
Dabar laikmatis yra paruoštas naudoti, bet mes turime išsiųsti JAV bangas iš jutiklio. Norėdami tai padaryti, mes turime išlaikyti aukštą „Trigger“ kaištį 10 uS, tai daroma pagal šį kodą.
Paleidiklis = 1; __delay_us (10); Paleidiklis = 0;
Kaip parodyta aukščiau esančioje laiko schemoje, Echo kaištis išliks žemas, kol banga grįš atgal, o tada pakils aukštai ir išliks aukšta tikslaus laiko, per kurį bangos grįžta atgal. Šį laiką reikia išmatuoti „Timer 1“ moduliu, kurį gali padaryti žemiau esanti eilutė
o (Aidas == 0); TMR1ON = 1; o (Aidas == 1); TMR1ON = 0;
Išmatavus laiką, gautoji vertė bus išsaugota registruose TMR1H ir TMR1L, šie registrai turi būti suklijuoti, kad surinktų 16 bitų vertę. Tai daroma naudojant žemiau esančią eilutę
paimtas laikas = (TMR1L - (TMR1H << 8));
Šis laiko paimtas bus formos baitais, kad gautume faktinę laiko vertę, turime naudoti žemiau pateiktą formulę.
Laikas = (16 bitų registro reikšmė) * (1 / Vidinis laikrodis) * (Išankstinis mastelis) Vidinis laikrodis = Fosc / 4 Kur mūsų atveju Fosc = 20000000Mhz ir Pre-scale = 4 Vadinasi, vidinio laikrodžio vertė bus 5000000Mhz, o laiko vertė bus Laikas = (16 bitų registro reikšmė) * (1/5000000) * (4) = (16 bitų registro vertė) * (4/5000000) = (16 bitų registro vertė) * 0,0000008 sekundės (ARBA) Laikas = (16 bitų registro reikšmė) * 0,8 mikro sekundės
Mūsų programoje 16 bitų registro reikšmė saugoma kintamajame time_taken , todėl žemiau pateikta eilutė naudojama apskaičiuoti laiką, kurį reikia paimti per mikro sekundes.
paimtas laikas = paimtas laikas * 0,8;
Toliau turime sužinoti, kaip apskaičiuoti atstumą. Kaip žinome atstumas = greitis * laikas. Bet čia rezultatas turėtų būti padalytas iš 2, nes banga apima tiek perdavimo, tiek priėmimo atstumą. Mūsų bangos (garso) greitis yra 34000cm / s.
Atstumas = (greitis * laikas) / 2 = (34000 * (16 bitų registro reikšmė) * 0,0000008) / 2 Atstumas = (0,0272 * 16 bitų registro vertė) / 2
Taigi atstumą galima apskaičiuoti centimetrais, kaip nurodyta toliau:
atstumas = (0,0272 * užimtas laikas) / 2;
Apskaičiavę atstumo ir laiko vertę, mes tiesiog turime juos parodyti LCD ekrane.
Atstumo matavimas naudojant PIC ir ultragarso jutiklį:
Atlikę ryšius ir įkėlę kodą, eksperimentinė sąranka turėtų atrodyti maždaug taip, kaip parodyta žemiau esančiame paveikslėlyje.
PIC Perf plokštė, rodoma šiame paveikslėlyje, buvo sukurta mūsų PIC mokomųjų programų serijai, kurioje mes išmokome naudoti PIC mikrovaldiklį. Galbūt norėsite grįžti prie tų PIC mikrovaldiklių vadovėlių, kuriuose naudojamos MPLABX ir XC8, jei nežinote, kaip įrašyti programą naudojant „Pickit 3“, nes praleisiu visą tą pagrindinę informaciją.
Dabar uždėkite daiktą prieš jutiklį ir jis turėtų parodyti, kiek objektas yra nuo jutiklio. Taip pat galite pastebėti, kiek laiko per mikrobangų bangos signalą perduoda ir grįžta.
Galite perkelti objektą pageidaujamu atstumu ir patikrinti LCD ekrane rodomą vertę. Aš galėjau išmatuoti atstumą nuo 2 cm iki 350 cm 0,5 cm tikslumu. Tai gana patenkinamas rezultatas! Tikiuosi, kad jums patiko pamoka ir išmokote ką nors pagaminti patys. Jei turite kokių nors abejonių, palikite juos žemiau esančiame komentarų skyriuje arba naudokitės forumais.
Taip pat patikrinkite ultragarso jutiklio sąsają su kitais mikrovaldikliais:
- „Arduino“ ir ultragarsinių jutiklių atstumo matavimas
- Išmatuokite atstumą naudodami Raspberry Pi ir HCSR04 ultragarso jutiklį
- Atstumo matavimas naudojant HC-SR04 ir AVR mikrovaldiklį