Perquè qualsevol projecte tingui vida, necessitem utilitzar sensors. Els sensors actuen com a ulls i orelles per a totes les aplicacions incrustades, ajuden el microcontrolador digital a entendre el que està passant realment en aquest món analògic real. En aquest tutorial aprendrem com interfacar el sensor d'ultrasons HC-SR04 amb el microcontrolador PIC.
L' HC-SR04 és un sensor d'ultrasons que es pot utilitzar per mesurar la distància entre 2cm i 450cm (teòricament). Aquest sensor ha demostrat ser digne per encast en molts projectes que implica la detecció d'obstacles, de mesura de distància, el medi ambient mapatge etc. A la fi d'aquest article vostè aprendrà com aquest sensor funciona i com interactuar amb PIC16F877A microcontrolador per mesurar la distància i la pantalla a la pantalla LCD. Sona interessant oi !! Comencem doncs…
Materials necessaris:
- MCU PIC16F877A amb configuració de programació
- Pantalla LCD 16 * 2
- Sensor d'ultrasons (HC-SR04)
- Connexió de cables
Com funciona un sensor d'ultrasons?
Abans d’arribar més enllà, hauríem de saber com funciona un sensor d’ultrasons per poder entendre molt millor aquest tutorial. A continuació es mostra el sensor d’ultrasons utilitzat en aquest projecte.

Com podeu veure, té dos ulls circulars com a projeccions i hi surten quatre passadors. Les dues projeccions semblants a l'ull són el transmissor i receptor d'ona ultrasònica (d'ara endavant anomenada ona dels EUA) El transmissor emet una ona dels EUA a una freqüència de 40Hz, aquesta ona viatja a través de l’aire i es reflecteix cap enrere quan detecta un objecte. Les ones que tornen són observades pel receptor. Ara sabem el temps que s’ha trigat perquè aquesta ona es reflecteixi i torni i la velocitat de l’ona dels EUA també és universal (3400cm / s). Mitjançant aquesta informació i les fórmules següents de l’institut podem calcular la distància recorreguda.
Distància = Velocitat × Temps
Ara que ja sabem com funciona un sensor nord-americà, permeteu-nos com es pot interactuar amb qualsevol MCU / CPU mitjançant els quatre pins. Aquests quatre pins són Vcc, Trigger, Echo i Ground respectivament. El mòdul funciona a + 5V i, per tant, s’utilitza el pin Vcc i el terra per alimentar el mòdul. Els altres dos pins són els pins d'E / S que utilitzem per comunicar-nos a la nostra MCU. El passador de tret ha de ser declarat com un pin de sortida i va fer alt per a un 10US, aquest transmetrà l'ona dels Estats Units a l'aire com 8 cicle de ràfegues de so. Una vegada que s’observa l’ona, el pin Echo augmentarà durant l’interval de temps exacte que va prendre l’ona dels EUA per tornar al mòdul del sensor. Per tant, aquest pin Echo es declararà com a entradai s’utilitzarà un temporitzador per mesurar quant de temps va estar alt el passador. Això també es podria entendre mitjançant el diagrama de temps següent.

Espero que hagueu arribat a una manera provisional d’interfocar aquest sensor amb PIC. Utilitzarem el mòdul Temporitzador i el mòdul LCD en aquest tutorial i suposo que esteu familiaritzats amb tots dos, si no, torneu al respectiu tutorial a continuació, ja que saltaré la major part de la informació relacionada amb ell.
- Interfície LCD amb microcontrolador PIC
- Comprensió dels temporitzadors al microcontrolador PIC
Esquema de connexions:
A continuació es mostra el diagrama complet del circuit per a la interfície del sensor ultrasònic amb el PIC16F877A:

Com es mostra, el circuit no implica res més que una pantalla LCD i el mateix sensor d'ultrasons. El sensor nord-americà es pot alimentar amb + 5 V i, per tant, s’alimenta directament amb el regulador de voltatge 7805. El sensor té un pin de sortida (pin gatell) que està connectat al pin 34 (RB1) i el pin d’entrada (pin Echo) està connectat al pin 35 (RB2). La connexió de pin completa es mostra a la taula següent.
|
S. No: |
Número de pin PIC |
Nom del pin |
Connectat a |
|
1 |
21 |
RD2 |
RS de LCD |
|
2 |
22 |
RD3 |
E de pantalla LCD |
|
3 |
27 |
RD4 |
D4 de pantalla LCD |
|
4 |
28 |
RD5 |
D5 de pantalla LCD |
|
5 |
29 |
RD6 |
D6 de pantalla LCD |
|
6 |
30 |
RD7 |
D7 de pantalla LCD |
|
7 |
34 |
RB1 |
Desencadenant dels EUA |
|
8 |
35 |
RB2 |
Ressò dels EUA |
Programació del microcontrolador PIC:
El programa complet d’aquest tutorial es dóna al final d’aquesta pàgina, més avall he explicat el codi en petits trossos complets que els permeten entendre. Com s’ha dit anteriorment, el programa implica el concepte d’interfície LCD i temporitzador que no s’explicarà en detalls en aquest tutorial, ja que ja els hem tractat en els tutorials anteriors.
A l'interior, la funció principal la comencem inicialitzant els pins IO i altres registres de forma habitual. Definim els pins IO per al sensor LCD i EUA i també iniciem el registre del temporitzador 1 configurant-lo perquè funcioni en 1: 4 pre-escalar i que faci servir el rellotge intern (Fosc / 4)
TRISD = 0x00; // PORTD declarat com a sortida per a la interfície LCD TRISB0 = 1; // Definiu el pin RB0 com a entrada per utilitzar-lo com a pin d'interrupció TRISB1 = 0; // El pin gatell del sensor dels EUA s’envia com a pin de sortida TRISB2 = 1; // El pin de ressò del sensor dels EUA s'estableix com a pin d'entrada TRISB3 = 0; // RB3 és un pin de sortida per al LED T1CON = 0x20; // 4 rellotges pres-escalars i interns
El temporitzador 1 és un temporitzador de 16 bits utilitzat a PIC16F877A, el registre T1CON controla els paràmetres del mòdul de temporitzador i el resultat s’emmagatzemarà a TMR1H i TMR1L ja que amb un resultat de 16 bits els primers 8 s’emmagatzemaran a TMR1H i el els propers 8 a TMR1L. Aquest temporitzador es pot activar o desactivar mitjançant TMR1ON = 0 i TMR1ON = 1 respectivament.
Ara, el temporitzador està llest per utilitzar-lo, però hem d’ enviar les ones dels EUA fora del sensor, per fer-ho hem de mantenir el pin Trigger alt durant 10uS, això es fa amb el següent codi.
Trigger = 1; __delay_us (10); Trigger = 0;
Com es mostra al diagrama de temporització anterior, el pin Echo es mantindrà baix fins que l’ona torni cap enrere i, a continuació, pujarà i es mantindrà elevat durant el temps exacte perquè les ones tornin enrere. Aquest temps s’ha de mesurar mitjançant el mòdul Temporitzador 1, que es pot fer mitjançant la línia següent
mentre que (Eco == 0); TMR1ON = 1; mentre que (Eco == 1); TMR1ON = 0;
Un cop mesurat el temps, el valor resultant es guardarà als registres TMR1H i TMR1L, aquests registres han de ser clavats per reunir-se per obtenir el valor de 16 bits. Per fer-ho, utilitzeu la línia següent
time_taken = (TMR1L - (TMR1H << 8));
Aquest time_taken tindrà forma de bytes, per obtenir el valor de temps real hem d’utilitzar la fórmula següent.
Temps = (valor de registre de 16 bits) * (1 / Rellotge intern) * (Preescala) Rellotge intern = Fosc / 4 En el nostre cas, Fosc = 20000000Mhz i Preescala = 4 Per tant, el valor del rellotge intern serà 5000000Mhz i el valor del temps serà Time = (valor de registre de 16 bits) * (1/5000000) * (4) = (valor de registre de 16 bits) * (4/5000000) = (valor de registre de 16 bits) * 0,0000008 segons (O) Temps = (valor de registre de 16 bits) * 0,8 microsegons
Al nostre programa, el valor del registre de 16 bits s’emmagatzema a la variable time_taken i, per tant, la línia següent s’utilitza per calcular el time_taken en micro segons
time_taken = time_taken * 0,8;
A continuació, hem de trobar com calcular la distància. Com sabem distància = velocitat * temps. Però aquí el resultat s’ha de dividir per 2, ja que l’ona cobreix la distància de transmissió i la distància de recepció. La velocitat de les nostres ones (so) és de 34000cm / s.
Distància = (Velocitat * Temps) / 2 = (34000 * (valor de registre de 16 bits) * 0,0000008) / 2 Distància = (0,0272 * valor de registre de 16 bits) / 2
Per tant, la distància es pot calcular en centímetres com a continuació:
distància = (0,0272 * temps_executat) / 2;
Després de calcular el valor de la distància i el temps presos, simplement els hem de mostrar a la pantalla LCD.
Mesurament de la distància mitjançant PIC i sensor d'ultrasons:
Després de fer les connexions i carregar el codi, la vostra configuració experimental hauria de ser semblant a la que es mostra a la imatge següent.
El tauler PIC Perf, que es mostra en aquesta imatge, va ser creat per a la nostra sèrie de tutorials PIC, en què vam aprendre a utilitzar el microcontrolador PIC. És possible que vulgueu tornar a aquests tutorials PIC Microcontroller amb MPLABX i XC8 si no sabeu com gravar un programa amb Pickit 3, ja que saltaré tota aquesta informació bàsica.

Ara col·loqueu un objecte davant del sensor i hauria de mostrar la distància que té l'objecte del sensor. També podeu notar el temps que es mostra en micro segons perquè l’ona es transmeti i torni.
Podeu moure l'objecte a la vostra distància preferida i comprovar el valor que es mostra a la pantalla LCD. Vaig poder mesurar la distància de 2cm a 350cm amb una precisió de 0,5cm. Aquest és un resultat força satisfactori. Espero que us hagi agradat el tutorial i hàgiu après a fer alguna cosa pel vostre compte. Si teniu dubtes, deixeu-los anar a la secció de comentaris o utilitzeu els fòrums.
Comproveu també la interfície del sensor d'ultrasons amb altres microcontroladors:
- Mesura de distància basada en el sensor ultrasònic i Arduino
- Mesureu la distància amb el sensor d'ultrasons Raspberry Pi i HCSR04
- Mesura de distància mitjançant microcontrolador HC-SR04 i AVR
