Lai jebkurš projekts atdzīvinātos, mums jāizmanto sensori. Sensori darbojas kā acis un ausis visām iegultajām lietojumprogrammām, tas palīdz digitālajam mikrokontrolleram saprast, kas patiesībā notiek šajā reālajā analogajā pasaulē. Šajā apmācībā mēs iemācīsimies saskarni ar ultraskaņas sensoru HC-SR04 ar PIC mikrokontrolleru.
HC-SR04 ir ultraskaņas sensoru, kuru var izmantot, lai izmērītu attālumu jebkur starp 2cm līdz 450cm (teorētiski). Šis sensors ir izrādījies cienīgs, iekļaujoties daudzos projektos, kas ietver šķēršļu noteikšanu, attāluma mērīšanu, vides kartēšanu utt. Šī raksta beigās jūs uzzināsiet, kā šis sensors darbojas un kā to sasaistīt ar PIC16F877A mikrokontrolleru, lai izmērītu attālumu un displeju LCD ekrānā. Izklausās interesanti labi !! Tātad sāksim…
Nepieciešamie materiāli:
- PIC16F877A MCU ar programmēšanas iestatīšanu
- LCD 16 * 2 displejs
- Ultraskaņas sensors (HC-SR04)
- Savienojošie vadi
Kā darbojas ultraskaņas sensors?
Pirms tiekam tālāk, mums jāzina, kā darbojas ultraskaņas sensors, lai mēs daudz labāk saprastu šo apmācību. Šajā projektā izmantotais ultraskaņas sensors ir parādīts zemāk.
Kā redzat, tam ir divas apļveida acis, piemēram, izvirzījumi, un no tā iziet četras tapas. Divas acīm līdzīgas projekcijas ir Ultraskaņas viļņa (turpmāk - ASV vilnis) raidītājs un uztvērējs. Raidītājs izstaro ASV viļņu frekvenci 40Hz, šis vilnis pārvietojas pa gaisu un atstarojas, sajutis objektu. Atgriežamos viļņus uztvērējs novēro. Tagad mēs zinām laiku, kas šim vilnim jāatspoguļojas un jāatgriežas, un arī ASV viļņa ātrums ir universāls (3400cm / s). Izmantojot šo informāciju un zemāk redzamās vidusskolas formulas, mēs varam aprēķināt veikto attālumu.
Attālums = ātrums × laiks
Tagad, kad mēs zinām, kā darbojas ASV sensors, ļaujiet mums to sazināties ar jebkuru MCU / CPU, izmantojot četras tapas. Šīs četras tapas ir attiecīgi Vcc, Trigger, Echo un Ground. Modulis darbojas ar + 5 V, un tāpēc moduļa darbināšanai tiek izmantots Vcc un zemējuma tapa. Divas pārējās tapas ir I / O tapas, ar kuru palīdzību mēs sazināmies ar mūsu MCU. Sprūda pin būtu jādeklarē kā izejas pin un izgatavoti rekordu par 10us, tas pārsūta ASV vilni gaisā kā 8 cikla skaņas pārsprāgt. Kad vilnis ir novērots, atbalss tapa palielināsies uz precīzu laika intervālu, kas bija vajadzīgs ASV vilnim, lai atgrieztos atpakaļ sensora modulī. Tādējādi šī atbalss tapa tiks deklarēta kā ievadeun taimeris tiks izmantots, lai izmērītu, cik ilgi tapa bija augsta. To tālāk varētu saprast ar zemāk redzamo laika shēmu.
Ceru, ka esat nonācis pie provizoriska veida, kā šo sensoru savienot ar PIC. Šajā apmācībā mēs izmantosim taimera moduli un LCD moduli, un es pieņemu, ka jūs esat iepazinušies ar abiem, ja nē, lūdzu, atgriezieties attiecīgajā tālāk sniegtajā apmācībā, jo es izlaidīšu lielāko daļu ar to saistītās informācijas.
- LCD mijiedarbība ar PIC mikrokontrolleru
- Izpratne par taimeri PIC mikrokontrollerī
Ķēdes shēma:
Pilna ķēdes shēma ultraskaņas sensora un PIC16F877A saskarnei ir parādīta zemāk:
Kā parādīts, ķēde ietver tikai LCD displeju un pašu ultraskaņas sensoru. ASV sensoru var darbināt ar + 5 V, un tāpēc to tieši darbina 7805 sprieguma regulators. Sensoram ir viena izejas tapa (Trigger pin), kas ir savienota ar 34. kontaktu (RB1), un ievades tapa (Echo pin) ir savienota ar tapu 35 (RB2). Pilns tapu savienojums ir parādīts zemāk esošajā tabulā.
S.Nē: |
PIC PIN numurs |
Piespraudes nosaukums |
Savienots ar |
1 |
21 |
RD2 |
LCD LCD |
2 |
22 |
RD3 |
LCD ekrāns |
3 |
27 |
RD4 |
LCD D4 |
4 |
28 |
RD5 |
LCD D5 |
5 |
29 |
RD6 |
LCD D6 |
6 |
30 |
RD7 |
LCD D7 |
7 |
34 |
RB1 |
ASV izraisītājs |
8 |
35 |
RB2 |
ASV atbalss |
PIC mikrokontrollera programmēšana:
Pilna šīs apmācības programma ir dota šīs lapas beigās, tālāk es kodu esmu izskaidrojis mazās nozīmes pilnās daļās, lai jūs saprastu. Kā jau iepriekš minēts, programma ietver LCD saskarnes un taimera jēdzienu, kas šajā apmācībā nav detalizēti izskaidrots, jo mēs tos jau esam aprakstījuši iepriekšējās apmācībās.
Iekšpusē galveno funkciju mēs sākam ar IO tapu un citu reģistru inicializēšanu, kā parasti. Mēs definējam IO tapas LCD un ASV sensoriem, kā arī iniciējam Taimera 1 reģistru, iestatot to darbam ar pirmsskalāru 1: 4 un iekšējā pulksteņa izmantošanu (Fosc / 4)
TRISD = 0x00; // PORTD deklarēts kā izeja LCD TRISB0 saskarnei = 1; // Definējiet RB0 tapu kā ievadi, ko izmantot kā pārtraukuma tapu TRISB1 = 0; // ASV sensora sprūda tapa tiek nosūtīta kā izejas tapa TRISB2 = 1; // ASV sensora atbalss tapa ir iestatīta kā ievades tapa TRISB3 = 0; // RB3 ir izejas tapa LED T1CON = 0x20; // 4 presskalārs un iekšējais pulkstenis
Taimeris 1 ir 16 bitu taimeris, ko izmanto PIC16F877A, T1CON reģistrs kontrolē taimera moduļa parametrus, un rezultāts tiks saglabāts TMR1H un TMR1L, jo 16 bitu rezultāts, pirmie 8 tiks saglabāti TMR1H un nākamie 8 TMR1L. Šo taimeri var ieslēgt vai izslēgt, izmantojot attiecīgi TMR1ON = 0 un TMR1ON = 1.
Tagad taimeris ir gatavs lietošanai, taču mums no sensora ir jānosūta ASV viļņi, lai to izdarītu, mums ir jāuztur Trigger tapa augsta par 10uS, to dara šāds kods.
Aktivizētājs = 1; __kavēšanās_us (10); Aktivizētājs = 0;
Kā parādīts iepriekš redzamajā laika shēmā, atbalss tapa paliks zems, līdz viļņi atgriezīsies, un pēc tam iet uz augšu un paliks augsts precīzu laiku, kas vajadzīgs, lai viļņi atgrieztos. Šis laiks ir jāmēra ar taimera 1 moduli, ko var izdarīt ar zemāk esošo līniju
kamēr (Atbalss == 0); TMR1ON = 1; kamēr (Atbalss == 1); TMR1ON = 0;
Kad laiks ir izmērīts, iegūtā vērtība tiks saglabāta reģistros TMR1H un TMR1L, šie reģistri ir jāapvieno, lai savāktu 16 bitu vērtību. To veic, izmantojot zemāk esošo līniju
laiks_uzņemts = (TMR1L - (TMR1H << 8));
Šis time_taken būs formas baiti, lai iegūtu faktisko laika vērtību, mums ir jāizmanto šī formula.
Laiks = (16 bitu reģistra vērtība) * (1 / Iekšējais pulkstenis) * (Iepriekšēja mēroga) Iekšējais pulkstenis = Fosc / 4 Kur mūsu gadījumā Fosc = 20000000Mhz un Pre-scale = 4 Tādējādi iekšējā pulksteņa vērtība būs 5000000Mhz un laika vērtība būs Laiks = (16 bitu reģistra vērtība) * (1/5000000) * (4) = (16 bitu reģistra vērtība) * (4/5000000) = (16 bitu reģistra vērtība) * 0,0000008 sekundes (OR) Laiks = (16 bitu reģistra vērtība) * 0,8 mikro sekundes
Mūsu programmā 16 bitu reģistra vērtība tiek saglabāta mainīgajā time_taken, un tāpēc zemāk redzamā rinda tiek izmantota, lai aprēķinātu time_taken mikro sekundēs
laiks_atņemts = laiks_atņemts * 0,8;
Tālāk mums jāatrod, kā aprēķināt attālumu. Kā mēs zinām attālums = ātrums * laiks. Bet šeit rezultāts būtu jāsadala ar 2, jo vilnis aptver gan raidīšanas, gan saņemšanas attālumu. Mūsu viļņa (skaņas) ātrums ir 34000cm / s.
Attālums = (ātrums * laiks) / 2 = (34000 * (16 bitu reģistra vērtība) * 0,0000008) / 2 attālums = (0,0272 * 16 bitu reģistra vērtība) / 2
Tātad attālumu var aprēķināt centimetros, piemēram, zemāk:
attālums = (0,0272 * uzņemtais laiks) / 2;
Pēc veiktā attāluma un laika vērtības aprēķināšanas mums tie vienkārši jāparāda LCD ekrānā.
Attāluma mērīšana, izmantojot PIC un ultraskaņas sensoru:
Pēc savienojumu izveidošanas un koda augšupielādes eksperimentālajam iestatījumam vajadzētu izskatīties apmēram tā, kā parādīts zemāk esošajā attēlā.
Šajā attēlā redzamā PIC Perf plāksne tika izveidota mūsu PIC apmācību sērijai, kurā mēs iemācījāmies izmantot PIC mikrokontrolleru. Iespējams, vēlēsities atgriezties pie šīm PIC mikrokontrolleru apmācībām, izmantojot MPLABX un XC8, ja nezināt, kā ierakstīt programmu, izmantojot Pickit 3, jo es izlaidīšu visu šo pamatinformāciju.
Tagad novietojiet objektu pirms sensora, un tam jāatspoguļo objekta attālums no sensora. Varat arī pamanīt, cik ilgs laiks tiek parādīts mikro sekundēs, lai vilnis pārraidītu un atgrieztos.
Jūs varat pārvietot objektu sev vēlamajā attālumā un pārbaudīt LCD ekrānā redzamo vērtību. Es varēju izmērīt attālumu no 2 cm līdz 350 cm ar 0,5 cm precizitāti. Tas ir diezgan apmierinošs rezultāts! Ceru, ka jums patika apmācība un uzzinājāt, kā kaut ko pagatavot pats. Ja jums ir kādas šaubas, nometiet tos komentāru sadaļā zemāk vai izmantojiet forumus.
Pārbaudiet arī ultraskaņas sensora saskarni ar citiem mikrokontrolleriem:
- Arduino un ultraskaņas sensoru attāluma mērīšana
- Izmēriet attālumu, izmantojot Raspberry Pi un HCSR04 ultraskaņas sensoru
- Attāluma mērīšana, izmantojot HC-SR04 un AVR mikrokontrolleru