- Materiali richiesti:
- Come funziona un sensore a ultrasuoni?
- Programmazione del microcontrollore PIC:
Affinché qualsiasi progetto prenda vita, dobbiamo utilizzare sensori. I sensori fungono da occhi e orecchie per tutte le applicazioni incorporate, aiutano il microcontrollore digitale a capire cosa sta realmente accadendo in questo mondo analogico reale. In questo tutorial impareremo come interfacciare il sensore a ultrasuoni HC-SR04 con il microcontrollore PIC.
L' HC-SR04 è un sensore a ultrasuoni che può essere utilizzato per misurare distanze comprese tra 2 cm e 450 cm (teoricamente). Questo sensore si è dimostrato degno di essere inserito in molti progetti che coinvolgono il rilevamento di ostacoli, la misurazione della distanza, la mappatura dell'ambiente ecc. Alla fine di questo articolo imparerai come funziona questo sensore e come interfacciarlo con il microcontrollore PIC16F877A per misurare la distanza e il display sullo schermo LCD. Sembra interessante vero !! Quindi iniziamo…
Materiali richiesti:
- MCU PIC16F877A con configurazione di programmazione
- Display LCD 16 * 2
- Sensore a ultrasuoni (HC-SR04)
- Cavi di collegamento
Come funziona un sensore a ultrasuoni?
Prima di andare oltre, dovremmo sapere come funziona un sensore a ultrasuoni in modo da poter capire molto meglio questo tutorial. Di seguito è mostrato il sensore a ultrasuoni utilizzato in questo progetto.
Come puoi vedere ha due occhi circolari come proiezioni e quattro perni che escono da esso. Le due proiezioni simili a occhi sono il trasmettitore e il ricevitore dell'onda ultrasonica (di seguito denominata onda US). Il trasmettitore emette un'onda US a una frequenza di 40Hz, questa onda viaggia attraverso l'aria e viene riflessa quando rileva un oggetto. Le onde di ritorno vengono osservate dal ricevitore. Ora sappiamo il tempo impiegato da questa onda per riflettersi e tornare indietro e anche la velocità dell'onda statunitense è universale (3400 cm / s). Utilizzando queste informazioni e le seguenti formule delle scuole superiori possiamo calcolare la distanza percorsa.
Distanza = Velocità × Tempo
Ora che sappiamo come funziona un sensore statunitense, vediamo come può essere interfacciato con qualsiasi MCU / CPU utilizzando i quattro pin. Questi quattro pin sono rispettivamente Vcc, Trigger, Echo e Ground. Il modulo funziona su + 5V e quindi il Vcc e il pin di terra vengono utilizzati per alimentare il modulo. Gli altri due pin sono i pin I / O con cui comunichiamo con il nostro MCU. Il trigger pin dovrebbe essere dichiarato come un pin di uscita e reso alto per un 10uS, questo trasmetterà l'onda USA nell'aria come un burst sonoro a 8 cicli. Una volta osservata l'onda, il pin Echo andrà alto per l'esatto intervallo di tempo che è stato impiegato dall'onda statunitense per tornare al modulo sensore. Quindi questo pin Echo verrà dichiarato come inpute un timer verrà utilizzato per misurare quanto tempo il perno è stato alto. Ciò potrebbe essere ulteriormente compreso dal diagramma temporale di seguito.
Spero che tu sia arrivato a un modo provvisorio per interfacciare questo sensore con PIC. Useremo il modulo Timer e il modulo LCD in questo tutorial e presumo che tu abbia familiarità con entrambi, altrimenti torna al rispettivo tutorial di seguito poiché salterò la maggior parte delle informazioni ad esso correlate.
- Interfacciamento LCD con microcontrollore PIC
- Comprensione dei timer nel microcontrollore PIC
Schema elettrico:
Di seguito è riportato lo schema elettrico completo per l' interfacciamento del sensore a ultrasuoni con PIC16F877A:
Come mostrato, il circuito non coinvolge nient'altro che un display LCD e il sensore a ultrasuoni stesso. Il sensore US può essere alimentato da + 5V e quindi è alimentato direttamente dal regolatore di tensione 7805. Il sensore ha un pin di uscita (Trigger pin) che è collegato al pin 34 (RB1) e il pin di ingresso (Echo pin) è collegato al pin 35 (RB2). Il collegamento pin completo è illustrato nella tabella seguente.
S.No: |
Numero pin PIC |
Nome pin |
Collegato a |
1 |
21 |
RD2 |
RS di LCD |
2 |
22 |
RD3 |
E di LCD |
3 |
27 |
RD4 |
D4 di LCD |
4 |
28 |
RD5 |
D5 di LCD |
5 |
29 |
RD6 |
D6 di LCD |
6 |
30 |
RD7 |
D7 di LCD |
7 |
34 |
RB1 |
Trigger di US |
8 |
35 |
RB2 |
Echo of US |
Programmazione del microcontrollore PIC:
Il programma completo per questo tutorial è fornito alla fine di questa pagina, più sotto ho spiegato il codice in piccoli pezzi interi per farti capire. Come detto in precedenza il programma coinvolge il concetto di interfaccia LCD e Timer che non verrà spiegato in dettaglio in questo tutorial poiché li abbiamo già trattati nei tutorial precedenti.
All'interno, la funzione principale iniziamo con l' inizializzazione dei pin IO e degli altri registri come al solito. Definiamo i pin IO per LCD e sensore US e iniziamo anche il registro Timer 1 impostandolo per funzionare su 1: 4 pre-scalare e per utilizzare l'orologio interno (Fosc / 4)
TRISD = 0x00; // PORTD dichiarato come output per interfacciare LCD TRISB0 = 1; // Definisce il pin RB0 come input da utilizzare come pin di interrupt TRISB1 = 0; // Il pin di attivazione del sensore US viene inviato come pin di uscita TRISB2 = 1; // Il pin di eco del sensore US è impostato come pin di ingresso TRISB3 = 0; // RB3 è il pin di uscita per il LED T1CON = 0x20; // 4 pres-scalari e clock interno
Il timer 1 è un timer a 16 bit utilizzato in PIC16F877A, il registro T1CON controlla i parametri del modulo timer e il risultato verrà memorizzato in TMR1H e TMR1L poiché è un risultato a 16 bit i primi 8 saranno memorizzati in TMR1H e i prossimi 8 in TMR1L. Questo timer può essere attivato o disattivato utilizzando TMR1ON = 0 e TMR1ON = 1 rispettivamente.
Ora, il timer è pronto per l'uso, ma dobbiamo inviare le onde americane fuori dal sensore, per fare questo dobbiamo mantenere alto il pin Trigger per 10uS, questo viene fatto dal codice seguente.
Trigger = 1; __delay_us (10); Trigger = 0;
Come mostrato nel diagramma temporale sopra, il pin Echo rimarrà basso fino al ritorno dell'onda e quindi andrà in alto e rimarrà alto per il tempo esatto impiegato dalle onde per tornare indietro. Questo tempo deve essere misurato dal modulo Timer 1, che può essere fatto dalla riga sottostante
while (Echo == 0); TMR1ON = 1; while (Echo == 1); TMR1ON = 0;
Una volta che il tempo è stato misurato, il valore risultante verrà salvato nei registri TMR1H e TMR1L, questi registri devono essere clubbati per raccogliere per ottenere il valore a 16 bit. Questo viene fatto usando la riga sottostante
time_taken = (TMR1L - (TMR1H << 8));
Questo time_taken sarà in formato byte, per ottenere il valore di tempo effettivo dobbiamo utilizzare la formula seguente.
Time = (valore di registro a 16 bit) * (1 / Internal Clock) * (Pre-scale) Internal Clock = Fosc / 4 Dove nel nostro caso, Fosc = 20000000Mhz e Pre-scale = 4 Quindi il valore dell'orologio interno sarà 5000000 Mhz e il valore del tempo sarà Time = (valore di registro a 16 bit) * (1/5000000) * (4) = (valore di registro a 16 bit) * (4/5000000) = (valore di registro a 16 bit) * 0,0000008 secondi (OR) Tempo = (valore di registro a 16 bit) * 0,8 micro secondi
Nel nostro programma il valore del registro a 16 bit è memorizzato nella variabile time_taken e quindi la riga sottostante viene utilizzata per calcolare il time_taken in micro secondi
time_taken = time_taken * 0,8;
Successivamente dobbiamo trovare come calcolare la distanza. Come sappiamo distanza = velocità * tempo. Ma qui il risultato dovrebbe essere diviso per 2 poiché l'onda copre sia la distanza di trasmissione che la distanza di ricezione. La velocità di noi wave (suono) è 34000 cm / s.
Distanza = (Velocità * Tempo) / 2 = (34000 * (valore di registro a 16 bit) * 0,0000008) / 2 Distanza = (0,0272 * valore di registro a 16 bit) / 2
Quindi la distanza può essere calcolata in centimetri come di seguito:
distanza = (0,0272 * time_taken) / 2;
Dopo aver calcolato il valore della distanza e del tempo impiegato dobbiamo semplicemente visualizzarli sullo schermo LCD.
Misurazione della distanza utilizzando PIC e sensore a ultrasuoni:
Dopo aver effettuato i collegamenti e caricato il codice, la configurazione sperimentale dovrebbe essere simile a questa mostrata nell'immagine sottostante.
La scheda PIC Perf, mostrata in questa immagine, è stata realizzata per la nostra serie di tutorial PIC, in cui abbiamo imparato come utilizzare il microcontrollore PIC. Potresti voler tornare a quei tutorial sul microcontrollore PIC usando MPLABX e XC8 se non sai come masterizzare un programma usando Pickit 3, poiché salterò tutte quelle informazioni di base.
Ora posiziona un oggetto prima del sensore e dovrebbe mostrare quanto è lontano l'oggetto dal sensore. Puoi anche notare il tempo impiegato per essere visualizzato in micro secondi per la trasmissione e il ritorno dell'onda.
È possibile spostare l'oggetto alla distanza preferita e controllare il valore visualizzato sull'LCD. Sono stato in grado di misurare la distanza da 2 cm a 350 cm con una precisione di 0,5 cm. Questo è un risultato abbastanza soddisfacente! Spero ti sia piaciuto il tutorial e hai imparato a creare qualcosa da solo. Se hai dei dubbi lasciali nella sezione commenti qui sotto o usa i forum.
Verificare anche l'interfacciamento del sensore a ultrasuoni con altri microcontrollori:
- Misurazione della distanza basata su sensori Arduino e ultrasuoni
- Misura la distanza utilizzando Raspberry Pi e il sensore a ultrasuoni HCSR04
- Misurazione della distanza utilizzando HC-SR04 e microcontrollore AVR