|
SRF02: METRO AD ULTRASUONI (da 15 cm a 6 m) con XE164
Scopo del progetto
Anche se ho già realizzato un metro ad ultrasuoni (vedi "Tutorial e progettazione di un Misuratore di Distanze a Ultrasioni con XE164") ho avuto comunque la necessità di connetterne uno al mio sistema senza andare ad appesantire l'applicazione. A tale scopo ho scelto il modello SRF02 (in vendita presso vari siti) perchè molto compatto e semplice da interfacciare ad un microcontrollore:
Documentazione del SRF02
Il produtore fornisce il semplice manuale per la connessione via protocollo seriale e per il protocollo I2C, qui il link a quello per seriale (nota bene: si tratta di usa seriale con livelli elettrici a 5V, percui il MAX232 non serve): SFR02. Tale documento contiene tutto quanto dobbiamo sapere per poterci connettere a tale sensore di distanza, in particolare i dati più importanti per la connessione sono: 9600 baud 1 start, 2 stop and no parity bits.
Realizzazione Hardware
L'hardware è relativamente semplice:
- il microcontrollore Infineon XE164
- un display HD44780 compatibile
- un METRO AD ULTRASUONI SRF02.
Le connessioni sono:
- Mode = GND per selezionare il protocollo seriale
- Rx connesso al pin P7.3
- Tx connesso al pin P7.4
ossia le connessioni a XE164 sono (così come documentate in "SFR02_to_XE164_Connector.ods"):
XE164_ASC_RX (P7.4) <- SFR02_TX
XE164_ASC_TX (P7.3) -> SFR02_RX.
Il tutto è visibile in:

(da notare il "cavallotto" per connettere MODE a massa e i fili bianco/rosso provenienti dal microcontrollore XE164 per la comunicazioen seriale).
Realizzazione Software
Il file zip allegato contiene il progetto per DAvE percui vi rimando ad esso: aprite "SRF02.dav" con DAvE e cercate di capire le configurazione dell'hardware, è piuttosto semplice. Comunque vi basterà sapere che:
- USIC0 canale CH0 è usata per connettersi con protocollo seriale al metro ad ultrasuoni SRF02
- il timer T2 è usato per realizzare la funzione ritardo "GPT2_waitXXms (msec)"
- il display HD44780 è connesso al fine di mostrare utili stringhe di debug (vedi relativo articolo e descrizione libreria).
USIC0 canale CH0:
La seriale è configurata con:

funzione main():
Il main è costituito da:
void main(void)
{
// USER CODE BEGIN (Main,2)
// USER CODE END
MAIN_vInit();
// USER CODE BEGIN (Main,3)
LCDinitialize();
LCDclear();
LCDtest();
LCDgoToPos(2,2);
LCDwriteString("Distance By SRF02");
GPT2_waitXXms(2000);
// Get SRF02 Software Version
PrintOnDisplay( "Version", SFR02_vInit() );
// Wait just some time to permit SFR02 calibration
GPT2_waitXXms(2000);
// USER CODE END
while(1)
{
// USER CODE BEGIN (Main,4)
SFR02_RealRanging();
GPT2_waitXXms(1000);
PrintOnDisplay("[cm]", SFR02_getDistance());
// USER CODE END
}
} // End of function main
funzione SFR02_RealRanging():
La funzione principale per richiedere una misura di distanza in centimetri è:
//****************************************************************************
// @Function SFR02_RealRanging
//
//----------------------------------------------------------------------------
// @Description Return the distance in centimeter
//
//----------------------------------------------------------------------------
// @Returnvalue None
//
//----------------------------------------------------------------------------
// @Parameters None
//
//----------------------------------------------------------------------------
// @Date 21/05/2009
//
//****************************************************************************
unsigned int SFR02_RealRanging (void)
{
// Send Command to SRF02 to measure Distance
RS232_vSendData ( SFR02_ID ); // SFR02 Address (0x00 by default)
RS232_vSendData ( 0x54 ); // Real Ranging Mode - Result in centimeters, automatically Tx range back to controller as soon as ranging is complete.
// GPT2_waitXXms( 80 ); // Wait >70 msec to get back the ranging
// RS232_vSendData ( 0x5E ); // Get Range, returns two bytes (high byte first) from the most recent ranging.
// in reality return the previous measured distance
return ( ubDistance );
}
Misure Sperimentali:
Ecco cosa si legge durante l'inizializzazione dello SFR02:

E dopo le prime misure:

BUON DIVERTIMENTO !!!
L'utilizzo di tutte le informazioni illustrate e riportate in questo documento sono a proprio rischio e pericolo.
Tutte le informazioni vengono fornite “COSI' COME SONO”, senza nessuna forma di garanzia sulla loro validità.
Il presente documento ha uno scopo puramente informativo e didattico.
Ciascuna persona, nell'applicare le informazioni descritte, sarà pienamente responsabile delle
eventuali conseguenze che ne derivano. Elettronicamente.com e l'autore declinano
qualsiasi responsabilità nell'applicazione di tali informazioni, né saranno responsabili
in modo diretto e/o indiretto su eventuali danni provocati di qualsiasi genere a cose o persone.
E' vietata la pubblicazione totale e/o parziale di questo documento su altri siti
Internet diversi da Elettronicamente.com e in qualsiasi altra forma di diffusione
(esempio su riviste) senza il consenso scritto da parte dell'autore.
|