6° progetto (PIC18F45K50) – Sensore HC-SR04

In questo articolo impareremo ad utilizzare un piccolo ed economico sensore ad ultrasuoni, l’HC-SR04, in particolare esso verrà utilizzato come ‘allarme di prossimità’: quando il sensore rileverà un ostacolo ad una distanza inferiore a 10 cm accenderà un led di segnalazione.

Progetto completo.

HC – SR04.

L’HC-SR04 è uno dei sensori ad ultrasuoni più utilizzati nell’elettronica DIY, visto il suo basso costo e la sua relativa precisione nella misura. Per riuscire a capire come funziona questo sensore dobbiamo partire dall’analizzare le parti che lo compongono: la prima cosa che salta all’occhio di questo sono le due grandi capsule poste agli estremi della scheda. Le capsule sono utilizzate per l’invio e la ricezione delle onde sonore, che stanno alla base del funzionamento di questo dispositivo.

Il tempo che trascorre tra l’invio di un’onda e la sua ricezione può essere convertito in una distanza applicando semplici calcoli matematici (che vedremo di seguito).

Dettagli pratici del sensore.

Il sensore dispone di quattro pin:

  • VCC – Collegato al + dell’alimentazione
  • GND – Collegato al – dell’alimentazione
  • TRIG – Il pin che dà inizio all’invio di onde sonore. L’invio avviene dopo un impulso alto positivo di 10us su questo pin
  • ECHO – Il pin che si occupa della letture delle onde sonore. Il pin in questione alla ricezione della prima onda sonora porta il suo stato a livello alto e ci permane per una durata corrispondente al viaggio compiuto dalle onde.

Fasi realizzazione progetto (dopo la sua creazione).

  1. Configurazione del PIC
  2. Stesura del codice:
    1. Creazione del ciclo while infinito
    2. Settaggio iniziale (pin e dispositivi)
    3. Progettazione e stesura del programma
    4. Verifica del codice e programmazione del PIC
  3. Montaggio del circuito elettrico
  4. Test su breadboard

Configurazione del PIC.

Questa può essere fatta tramite il tool descritto nel primo progetto (qui) o configurando manualmente cioè ‘scrivendo a mano’ soltanto le configurazioni cambiate.

Stesura del codice.

Il progetto in questione non necessita di alcuna libreria in quanto le istruzioni da eseguire sono limitate ad un numero piccolo.

Creazione del ciclo while infinito.

Per funzionare, il programma ha bisogno di un while infinito entro cui noi andremo a scrivere le istruzioni che verranno svolte in continuazione.

void main(void){
    while(1){
    }
}
Settaggio iniziale (pin e dispositivi).
PINComponente
RD1+ (LED)
RD2TRIG (HC-SR04)
RD3ECHO (HC-SR04)

L’HC-SR04 necessita, come abbiamo visto nella parte iniziale, di essere collegato al micro attraverso due pin soltanto: il pin TRIG e il pin ECHO. Essi vanno configurati rispettivamente come uscita e ingresso per le motivazioni elencate sopra.

// Registro per la configurazione dei pin (INPUT-1, OUTPUT-0)
TRISDbits.RD2 = 0; // Pin collegato al TRIG
TRISDbits.RD3 = 1; // Pin collegato all'ECHO
TRISDbits.RD1 = 0; // Pin collegato al led
// Registro per la congigurazione del tipo di pin (ANALOGICO-1, DIGITALE-0)
ANSELD = 0x00;
Progettazione e stesura del programma.
while (1) {
 // Resetto le variabili per la lettura della distanza
 DurataImpulso = 0;
 // Invio un impulso di 10us sul pin TRIG
 PORTDbits.RD2 = 0;
 PORTDbits.RD2 = 1;
 __delay_us(10);
 PORTDbits.RD2 = 0;
 // Aspetto fino a quando il pin ECHO non va a livello alto
 while (PORTDbits.RD0 != 1);
 while(PORTDbits.RD0 == 1){
 DurataImpulso++;
 __delay_us(1);
 }
 // Converto la durata dell'impulso in distanza metrica
 Distanza = DurataImpulso / 58;
 // Controllo se la distanza è inferiore a 10cm
 if (Distanza < 10)
 PORTDbits.RD1 = 1;
 else
 PORTDbits.RD1 = 0;
 __delay_ms(100);
}
Verifica del codice e programmazione del PIC.

Una breve ricontrollata generale a tutto il codice unita a una buona riuscita nella compilazione del progetto ci permetteranno poi di programmare il nostro microcontrollore.

Montaggio del circuito elettrico.

Fatto questo non ci resta altro che montare il circuito.

Mi raccomando prestate particolare attenzione alle varie alimentazioni perchè la mancata attenzione su ciò potrebbe portare alla rottura di diversi componenti.

Test su breadboard.

 

Download.

La cartella del progetto completo, compilato (con XC8 v.1.43) e funzionante la potete scaricare qui [Download non trovato]

Versione con display LCD.

Ho realizzato anche una versione con il display LCD e TIMER0 in cui vengono visualizzate la durata dell’impulso fornito dal pin ECHO (misurata tramite il TIMER0) e la distanza in cm, rispettivamente su prima e seconda riga di esso. La versione è base infatti viene soltanto stampato il numero senza descrizione.

Per le modifiche apportate allo schema e al codice dovete fare riferimento al progetto precedente .

Progetto completo e compilato (con XC8 v.1.43):  PIC18F45K50_HC-SR04_V.1.X

Lascia un commento