Da bi bilo koji projekt zaživio, moramo koristiti senzore. Senzori djeluju kao oči i uši svih ugrađenih aplikacija, pomaže digitalnom mikrokontroleru da shvati što se zapravo događa u ovom stvarnom analognom svijetu. U ovom uputstvu naučit ćemo kako povezati ultrazvučni senzor HC-SR04 s PIC mikrokontrolerom.
HC-SR04 je ultrazvučni senzor koji se može koristiti za mjerenje udaljenosti bilo gdje između 2 cm do 450cm (teoretski). Ovaj se senzor pokazao vrijednim uklapanjem u mnoge projekte koji uključuju otkrivanje prepreka, mjerenje udaljenosti, mapiranje okoliša itd. Na kraju ovog članka naučit ćete kako ovaj senzor radi i kako ga povezati s mikrokontrolerom PIC16F877A za mjerenje udaljenosti i prikaza na LCD zaslonu. Zvuči zanimljivo zar ne !! Pa krenimo…
Potrebni materijali:
- PIC16F877A MCU s postavkom programiranja
- LCD zaslon 16 * 2
- Ultrazvučni senzor (HC-SR04)
- Spajanje žica
Kako radi ultrazvučni senzor?
Prije nego što nastavimo dalje, trebali bismo znati kako radi ultrazvučni senzor kako bismo mogli puno bolje razumjeti ovaj vodič. Ultrazvučni senzor korišten u ovom projektu prikazan je u nastavku.

Kao što vidite, ima dva kružna oka poput izbočina i četiri igle koje izlaze iz njega. Dvije očne projekcije su ultrazvučni val (u daljnjem tekstu američki val) odašiljač i prijemnik. Odašiljač emitira američki val na frekvenciji od 40 Hz, taj val putuje zrakom i reflektira se natrag kad osjeti objekt. Povratne valove promatra prijamnik. Sada znamo koliko je vremena potrebno da se ovaj val odbije i vrati, a brzina američkog vala je također univerzalna (3400 cm / s). Koristeći ove podatke i donje srednjoškolske formule možemo izračunati prijeđenu udaljenost.
Udaljenost = Brzina × Vrijeme
Sad kad znamo kako funkcionira američki senzor, dozvolite nam kako se može povezati s bilo kojim MCU / CPU-om pomoću četiri pina. Ova četiri pina su Vcc, Trigger, Echo i Ground. Modul radi na + 5V, pa se za napajanje modula koriste Vcc i uzemljenje. Druga dva pina su I / O pinovi pomoću kojih komuniciramo s našim MCU-om. Okidač pin treba deklarirati kao izlazni pin i napravio visoka za 10uS, to će prenositi američki val u zraku što je osam ciklusa zvučnog praska. Jednom kada se promatra val, Echo pin će se povisiti za točan vremenski interval koji je trebao američki val da se vrati natrag u senzorski modul. Stoga će ovaj Echo pin biti deklariran kao ulaza timer će se koristiti za mjerenje koliko je dugo pin bio visok. To bi se dalje moglo razumjeti u donjem vremenskom dijagramu.

Nadam se da ste došli do probnog načina povezivanja ovog senzora s PIC-om. U ovom uputstvu koristit ćemo modul Timer i LCD modul i pretpostavljam da ste im upoznati, ako ne, vratite se na donji tutorial u nastavku jer ću preskočiti većinu informacija povezanih s njim.
- LCD povezivanje s PIC mikrokontrolerom
- Razumijevanje odbrojavanja u PIC mikrokontroleru
Kružni dijagram:
Kompletna shema sklopa za povezivanje ultrazvučnog senzora s PIC16F877A prikazana je u nastavku:

Kao što je prikazano, sklop uključuje samo LCD zaslon i sam ultrazvučni senzor. Američki senzor može se napajati s + 5V, pa ga izravno napaja regulator napona 7805. Osjetnik ima jedan izlazni pin (okidački pin) koji je povezan na pin 34 (RB1), a ulazni pin (Echo pin) spojen je na pin 35 (RB2). Kompletna pin veza prikazana je u donjoj tablici.
|
S.Ne: |
PIC broj pina |
Naziv pribadače |
Spojen na |
|
1 |
21 |
RD2 |
RS LCD |
|
2 |
22 |
RD3 |
E od LCD-a |
|
3 |
27 |
RD4 |
D4 LCD-a |
|
4 |
28 |
RD5 |
D5 LCD-a |
|
5 |
29 |
RD6 |
D6 LCD-a |
|
6 |
30 |
RD7 |
D7 LCD-a |
|
7 |
34 |
RB1 |
Okidač SAD-a |
|
8 |
35 |
RB2 |
Odjek SAD-a |
Programiranje vašeg PIC mikrokontrolera:
Kompletni program za ovu lekciju dan je na kraju ove stranice, dalje u nastavku objasnio sam kôd u male značenja u cjelini kako biste ga mogli razumjeti. Kao što je ranije rečeno, program uključuje koncept LCD povezivanja i timera, što neće biti detaljno objašnjeno u ovom vodiču, jer smo ih već obrađivali u prethodnim vodičima.
Iznutra, glavna funkcija koju započinjemo s inicijalizacijom IO pinova i ostalih registara kao i obično. Definiramo IO pinove za LCD i američki senzor, a također pokrećemo registar Timer 1 postavljanjem da radi na 1: 4 pre-skalaru i da koristi interni sat (Fosc / 4)
TRISD = 0x00; // PORTD deklariran kao izlaz za povezivanje LCD TRISB0 = 1; // Definirajte pin RB0 kao ulaz koji ćete koristiti kao pin prekida TRISB1 = 0; // Okidački pin američkog senzora šalje se kao izlazni pin TRISB2 = 1; // Echo pin američkog senzora postavljen je kao ulazni pin TRISB3 = 0; // RB3 je izlazni pin za LED T1CON = 0x20; // 4 preskalarni i unutarnji sat
Timer 1 je 16-bitni timer koji se koristi u PIC16F877A, registar T1CON kontrolira parametre modula timera, a rezultat će biti pohranjen u TMR1H i TMR1L, jer će 16-bitni rezultat prvih 8 biti pohranjen u TMR1H, a sljedećih 8 u TMR1L. Taj se timer može uključiti ili isključiti pomoću TMR1ON = 0 i TMR1ON = 1.
Sada je tajmer spreman za upotrebu, ali moramo poslati američke valove iz senzora. Da bismo to učinili, okidač moramo držati visokim 10 uS, to se radi prema sljedećem kodu.
Okidač = 1; __zakasni_us (10); Okidač = 0;
Kao što je prikazano na vremenskom dijagramu gore, Echo pin ostat će nizak sve dok se val ne vrati natrag, a zatim će ići visoko i ostati visok točno vrijeme potrebno za povratak valova. Ovo vrijeme mora se izmjeriti modulom Timer 1, što može učiniti donji redak
dok je (Odjek == 0); TMR1ON = 1; dok je (Odjek == 1); TMR1ON = 0;
Jednom kada se izmjeri vrijeme, rezultirajuća vrijednost bit će spremljena u registre TMR1H i TMR1L, ti registri moraju se skupiti da bi se dobila 16-bitna vrijednost. To se postiže pomoću donjeg retka
zauzeto vrijeme = (TMR1L - (TMR1H << 8));
Ovaj time_taken bit će u bajtovima oblika, da bismo dobili stvarnu vrijednost vremena moramo koristiti donju formulu.
Vrijeme = (16-bitna vrijednost registra) * (1 / Interni sat) * (Pre-skala) Interni sat = Fosc / 4 Gdje je u našem slučaju Fosc = 20000000Mhz i Pre-scale = 4 Stoga će vrijednost Internog sata 5000000Mhz i vrijednost vremena bit će Vrijeme = (16-bitna vrijednost registra) * (1/5000000) * (4) = (16-bitna vrijednost registra) * (4/5000000) = (16-bitna vrijednost registra) * 0,0000008 sekundi (ILI) Vrijeme = (vrijednost 16-bitnog registra) * 0,8 mikro sekundi
U našem programu vrijednost 16-bitnog registra pohranjuje se u varijablu time_taken i stoga se donji redak koristi za izračunavanje time_takta u mikro sekundama
zauzeto vrijeme = zauzeto vrijeme * 0,8;
Dalje moramo pronaći kako izračunati udaljenost. Kao što znamo udaljenost = brzina * vrijeme. Ali ovdje bi rezultat trebalo podijeliti s 2, jer val pokriva i prijenosnu i prijemnu udaljenost. Brzina našeg talasa (zvuka) je 34000cm / s.
Udaljenost = (Brzina * Vrijeme) / 2 = (34000 * (16-bitna vrijednost registra) * 0,0000008) / 2 Udaljenost = (0,0272 * 16-bitna vrijednost registra) / 2
Dakle, udaljenost se može izračunati u centimetrima kao dolje:
udaljenost = (0,0272 * zauzeto vrijeme) / 2;
Nakon izračuna vrijednosti udaljenosti i potrebnog vremena jednostavno ih moramo prikazati na LCD zaslonu.
Mjerenje udaljenosti pomoću PIC-a i ultrazvučnog senzora:
Nakon uspostavljanja veza i prijenosa koda, vaša eksperimentalna postavka trebala bi izgledati otprilike ovako prikazano na donjoj slici.
PIC Perf ploča, prikazana na ovoj slici, napravljena je za našu seriju PIC tutoriala, u kojoj smo naučili kako se koristi PIC mikrokontroler. Možda se želite vratiti na te upute za PIC mikrokontroler pomoću MPLABX-a i XC8 ako ne znate kako snimiti program pomoću Pickita 3, jer ću preskočiti sve te osnovne informacije.

Sada stavite objekt ispred senzora i on bi trebao prikazati koliko je objekt udaljen od senzora. Također možete primijetiti vrijeme potrebno za prikaz u mikro sekundama da se val pošalje i vrati natrag.
Možete premjestiti objekt na željenu udaljenost i provjeriti vrijednost koja se prikazuje na LCD-u. Uspio sam izmjeriti udaljenost od 2 cm do 350 cm s točnošću od 0,5 cm. Ovo je sasvim zadovoljavajući rezultat! Nadam se da ste uživali u vodiču i naučili kako sami nešto napraviti. Ako sumnjate, napustite ih u odjeljku za komentare u nastavku ili koristite forume.
Također provjerite povezanost ultrazvučnog senzora s drugim mikrokontrolerima:
- Mjerenje udaljenosti na osnovi Arduino i ultrazvučnog senzora
- Izmjerite udaljenost pomoću Raspberry Pi i ultrazvučnog senzora HCSR04
- Mjerenje udaljenosti pomoću HC-SR04 i AVR mikrokontrolera
