Il sensore ad ultrasuoni

25
Il sensore ad ultrasuoni

Transcript of Il sensore ad ultrasuoni

Il sensore ad ultrasuoniAlimentazione: 5 Vcc
Il sensore rileva oggetti da 0 cm fino a 6,45 metri.
Tre diverse possibiltà per leggere il dato di uscita del sensore:
1. lettura seriale del dato che indica la distanza dell’oggetto
dal sensore (piedini TX-RX) con velocità di 9600 baud;
2. lettura dal piedino AN del sensore di una tensione
proporzionale alla distanza dell’oggetto rilevato, con una
precisione di 3,86 mV/cm.
3. lettura dell’uscita sul pin PW di un impulso di durata
proporzionale alla distanza dell’oggetto, con una
precisione di 57,87 μs/cm.
lettura del dato del sensore, mediante la misura
della tensione analogica presente sul pin AN .
• Come detto la tensione misurata su questo pin
risulta proporzionale alla distanza dell’oggetto
dal sensore, con un fattore di 3,86 mV per ogni
cm di distanza.
Esperienza di laboratorio
della prossimità di un oggetto”.
• Il circuito è basato sul PIC 16F876, perché questo
modello dispone di un convertitore A/D, per la
conversione del dato analogico proveniente dal
sensore ad ultrasuoni.
segnali la “prossimità” di un oggetto, mediante
l’accensione di un LED.
Rivelatore di prossimità
• Se l’oggetto ha una distanza inferiore a 10 cm, il circuito deve segnalare questo evento.
• Poiché la caratteristica del sensore è di 3,86 mV/cm, ne segue che quando l’oggetto si trova a 10 cm, sul pin AN del sensore ci saranno 38,6 mV.
• Il software deve prevedere l’accensione del LED se la tensione sull’ingresso del convertitore A/D del PIC è pari o al di sotto di 38,6 mV.
CONVERTITORE AD PIC16F87X
di tipo sample and hold con risoluzione di 10 bit.
Abbiamo quattro registri per interagire con il convertitore:
- ADRESH - Parte alta risultato della conversione
- ADRESL - Parte bassa risultato della conversione
- ADCON0 e ADCON1 - Registri di controllo
Registro ADCON0
Registro ADCON0
Passi da seguire per avviare una conversione
1. Configurare il pin da utilizzare come ingresso analogico nel registro TRISA come input.
2. Configurare il registro ADCON1 (es. poniamo ADCON1 = 10001110 ).
3. Configuriamo il registro ADCON0 (es. poniamo ADCON0= 00000001 ). In questo modo selezioniamo il canale RA0, la frequenza di conversione (Fosc/2) e accendiamo il convertitore (ADON)
4. Avviamo la conversione, flag GO/DONE=1 .
5. Attendiamo il termine della conversione (la conversione termina quando il flag GO/DONE diventa = 0 , oppure quando il flag ADIF diventa = 1).
6. Leggere il dato convertito dai registri ADRESH e ADRESL.
La lettura del dato dall’ADC
Il dato digitale a 10 bit fornito dall’ADC interno al PIC16f876 viene reso disponibile al termine della conversione nella coppia di registri a 8 bit rispettivamente ADRESH per la parte alta e ADRESL per la parte bassa.
Questi due registri vengono letti dal programma software che gira sul PIC e i dati vengono messi nelle due variabili di programma HBYTE e LBYTE.
Quindi al fine di ottenere un unico dato digitale, si combinano insieme HBYTE e LBYTE mediante una operazione di OR logico.
Calcolo del dato dell’ADC corrispondente alla
distanza di 10 cm
Per calcolare qual è il dato fornito dall’ADC ( con
una risoluzione di 10 bit) per una distanza
dell’oggetto pari a 10 cm, occorre impostare la
seguente proporzione:
Da cui:
=
N = 8 (se il sensore rileva un oggetto ad una
distanza di circa 10 cm)
Lo schema elettrico
main ( )
TRISA=0b00000001; // imposta RA0 come ingresso
TRISB=0; // imposta RB0 della porta B come uscita sul LED
RB0=0; // spegni LED
while (1)
T0IF=0;
ADIF=0;
HBYTE=ADRESH; // riversa parte alta del dato convertito in HBYTE
LBYTE=ADRESL; // riversa parte bassa del dato convertito in LBYTE
HBYTE<<=8; // shifta di 8 posizioni a sinistra HBYTE
N=HBYTE | LBYTE; // mette insieme - OR - la parte alta e la parte bassa
if (N<=8) RB0=1; // accendi il LED se la distanza è <= 10 cm
else RB0=0; // oppure spegnilo
}
}
PER FAR FUNZIONARE QUESTO ALTRO TIPO DI SENSORE AD ULTRASUONI
OCCORRE REALIZZAREUN COLLEGAMENTO DI TIPO IIC (detto anche I2C)
FRA IL PIC ED IL SENSORE.
Lo standard I2C
• Il bus I2C è un sistema messo a punto dalla Philips nella metà degli anni ottanta che consente di pilotare una famiglia molto vasta di circuiti integrati utilizzando solamente due linee I/O più la massa.
• Si tratta dunque di un economico protocollo di comunicazione seriale a bassa o media velocità (100kbit/s, 400kbit/s o più recentemente 3,4Mbit/s)
• Esso consente di indirizzare un numero molto grande di dispositivi sullo stesso bus, grazie ad un codice d'indirizzo proprio a ciascun dispositivo.
Utilizzo del bus I2C
costruiti dalla Philips, ma anche aziende
indipendenti adottano quello che è ormai
diventato uno standard molto diffuso.
Fra i modelli forniti dalla Philips, troviamo diversi
orologi/calendari (PCF8573, PCF8583),
EEPROM (PCF8582, 24C01), convertitori
Hardware del bus I2C
• Il bus I2C è composto, come si è detto, da due sole linee
bidirezionali più la massa.
• La prima linea, denominata SCK è il clock della trasmissione e la
seconda, denominata SDA è la linea su cui transitano i dati al ritmo
scandito da SCK.
• Il protocollo in questo modo è sincrono (a differenza, per esempio
del protocollo RS232 che è asincrono e più complesso da gestire).
• Data la possibilità di avere più dispositivi
presenti sulle linee, normalmente esse
sono gestite con una logica a drain
aperto e richiedono una resistenza di
pull-up collegata con il positivo
di alimentazione.
trasmettitore ed un solo ricevitore sul bus I2C.
Si può distinguere tra dispositivo master e dispositivo slave a seconda di chi genera il clock, in altre parole a seconda di chi impone la cadenza con cui i dati vengono inviati sulla linea, sia in un senso che nell'altro.
In questo modo, il dispositivo master potrà essere sia un trasmettitore o un ricevitore, in modo complementare rispetto al dispositivo slave.
Come regola generale, ad un istante prefissato, sul bus I2C vi può essere un solo master ed un numero anche rilevante di slave.
Nella stragrande maggioranza dei casi, il microcontrollore funge da master ed il dispositivo da gestire da slave. In altre parole, il clock SCK sarà sempre gestito dal microcontrollore mentre la linea SDA è generalmente bidirezionale.
Connessione del PIC16F876 al bus I2C
Pin RC3
Pin RC4
occorre connettere al bus
Ogni device deve avere un indirizzo unico.
Ad esempio per una sola EEPROM collegata al bus, si può impostare il suo
indirizzo come 000, mettendo a massa i pin A0, A1, A2 della EEPROM.
Il livello fisico del protocollo I2C
Quando il MASTER vuole comunicare con uno SLAVE allora egli inizia
la sequenza di START. Quando la comunicazione deve finire allora
egli attiva la sequenza di STOP.
I dati sono trasferiti in sequenze da 8 bit, che viaggiano sulla linea SDA
a cominciare dal bit MSB (più significativo).
Ogni bit spedito sulla linea SDA, viene anche sincronizzato dal segnale
SCL (clock).
Ogni 8 bit traferiti il dispositivo che riceve i dati, invia indietro un bit di
ACK (ackowledge=conferma) per confermare che gli 8 bit sono stati
acquisiti correttamente.
• Il sensore appare all`utilizzatore - Ed una serie di
come una serie di locazioni comandi possibili da
di memoria indirizzabili: potergli inviare:
Schema elettrico PIC – SRF02
Pinout del PIC 18F452
main:
I2C_Start
I2C_Wr($E0) ' il PIC indirizza il sensore SRF02, indirizzo di default = $E0 + bit W/R = 0 (cioè esegui WRITE)
I2C_Wr(0) ' locazione 0, cioè comandi
I2C_Wr($51) ' il comando è fai una lettura del sensore
I2C_Stop
delay_ms(70)
I2C_Start
I2C_Wr($E0) ' il PIC indirizza il sensore SRF02, indirizzo di default =$E0 + bit W/R = 0 (cioè esegui WRITE)
I2C_Wr(2) ' leggi dal registro 2 del SRF02 la parte alta del dato acquisito
I2C_Repeated_start
I2C_Wr($E1) ' il PIC indirizza il sensore SRF02 + bit W/R = 1 (cioè esegui READ)
dato_high = I2C_Rd(1) ' legge un dato dal sensore (con acknoledge)
dato_low = I2C_Rd(0) ' legge un dato dal sensore (senza acknoledge)
I2C_Stop
if lettura <= 10 then porta.0 = 1
else porta.0 = 0