Quando si visita un nuovo appartamento vuoto e lo si deve arredare, uno dei maggiori problemi è misurare gli
spazi dei locali o le distanze tra i mobili.
Trovandomi in questa situazione ho pensato di costruirmi un metro elettronico; ho cercato prima sul WEB per
trovare un progetto già fatto (sono pigro!) e, sorpresa sorpresa, non ho trovato nulla di adeguato.
Tanti 'range finder' per uso robotico, focalizzati sulla misura di piccole distanze, ma niente che superasse
i 3-4 metri massimi.
Quindi, altra ricerca e ho scoperto il modulo SFR02 di Devantech che raggiunge i 6.45 metri
, forse non sempre sufficienti (o forse sono io il fortunato che ha locali più ampi!), ma abbastanza nella maggior parte
dei casi.
Ho acquistato il modulo da FuturaShop a circa 20 Euro e dopo qualche sperimentazione su breadboard
, e nonostante la documentazione quasi inesistente, sono riuscito ad ottenere dei 'numeri' di ritorno.
Da qui è partito il progetto, piuttosto semplice, per farmi il metro digitale. Premetto che alla data in cui scrivo
ho verificato che il tutto funziona, ma non ho potuto condurre dei test di precisione... diciamo che il momento
mi voglio fidare delle specifiche.
Il modulo SFR02 può comunicare con l'esterno con il protocollo I2C o in seriale asincrono (con livelli TTL non invertiti). Ho scelto la modalità seriale perchè molto più semplice da gestire in assenza di criticità di tempi di risposta. La comunicazione tra microprocessore e modulo avviene inviando comandi a 2 byte (il 1° è l'indirizzo del modulo - per default = 0, il 2° è il vero comando) e ricevendo in risposta 2 byte con la misura rilevata in centimetri. Ci sono anche altre possibilità per le quali rimando al datasheet (sigh!) del modulo.
Come micro ho scelto il PIC 16F819 di Microchip per il semplice fatto che l'avevo disponibile; va bene anche
un 16F88, totalmente compatibile in questa applicazione. Quando posso utilizzo questi micro
(vedere il progetto UNI PIC18) perchè hanno
un oscillatore interno fino a 8MHz (addio quarzi!) e guadagno altri 2 pin d'I/O.
Per la comunicazione seriale non ho usato l'UART hardware, sempre per la fretta di avere il prodotto finito, ma ho
optato per l'emulazione SW, lasciando al buon programma Basic del PIC SIMULATOR IDE di Vladimir Soso il
compito di generare tutte routine di comunicazione.
La scelta del display è stata condizionata dal tipo di contenitore da usare, ovvero, ancora, da quello che avevo in casa. Il classico LCD 16x2 o simili è grande e richiede di forare un grande rettangolo (quando faranno dei case plastici o metallici con la finestra già predisposta per l'LCD ???). Ho scelto quindi utilizzare 2 display LED a 7 segmenti, piccoli e leggeri; questo ha complicato un pò il cablaggio e il firmware, ma tantè... Ne ho usati 2 invece dei 3 realmente necessari (range da 020 a 645cm) perchè 3 non ci stavano facilmente. Il software li utilizza commutando la visualizzazione tra le cifre 0-1 e 1-2, con un effetto alla fine non spiacevole.
Il metro deve essere ovviamente portatile, per cui batterie: una batteria da 9V con il classico 78L05 risolve il problema. L'assorbimento è di circa 50mA, non poco, con il display acceso, ma tipicamente l'uso è ridotto a pochi minuti, per cui la batteria dovrebbe durare piuttosto a lungo. Un diodo (meglio se Schotky per la ridotta caduta di tensione) evita un bel 'arrosto' se si inverte il connettore della batteria. Ho 'sparso' un pò di condensatori elettrolitici per far fronte ai picchi di assorbimento, specialmente durante la misura.
L'unico comando è un bottone che, alternativamente, avvia il ciclo di misura e interrompe la visualizzazione del risultato; durante lo stato di riposo, i 2 punti decimali lampeggiano per far capire che il tutto è vivo. Ho previsto, come faccio sempre, il connettore ICSP per poter riprogrammare al volo il micro; i pin A5, B6 e B7 sono stati dedicati esclusivamente a questa funzione.
Dopo varie pensate e idee per abbellimenti (es. riduzione consumi con l'uso dello SLEEP), ho deciso che era
meglio avere qualcosa funzionante subito anche se spartano.
All'accensione, dopo le inizializzazioni di rito, lo 'scatolo' si pone in attesa, con i punti lampeggianti.
Alla prima pressione del bottone, mediante interrupt sulla porta B0, il display si spegne e parte la misura.
La sequenza di misura prevede di inviare il comando di lettura, attendere 70msec e spedire il comando di ricezione
del risultato, inviato dal modulo come stringa di 2 byte (parte alta per prima).
Per migliorare la sicurezza del risultato, la lettura viene effettuata 4 volte di seguito e quindi è calcolato il
valore medio, suddiviso in 3 variabili da 1 byte: DIG0 (unità), DIG1 (decine) e DIG2 (centinaia).
Al termine parte la routine di visualizzazione, che invia ai 2 LED alternativamente, ogni 1/2 sec, prima le cifre alte e
poi le cifre basse, con i relativi punti decimali riferiti ai metri.
Un'ulteriore pressione del bottone, cancella la misura e pone in attesa lo strumento.
Ho progettato il circuto stampato (schema e PCB creati con Eagle CAD ver. 5.60) in versione monofaccia, per semplificare
la vita a chi vorrà realizzarlo; sono stati necessari 7 ponticelli a filo per sbrogliare il circuito, anche per
ridurre la lunghezza piste e loro passaggio tra i pin dei connettori.
In realtà, io non uso gli stampati (perchè non posso realizzarli!) e adotto invece le millefori; di conseguenza
non posso garantire l'esattezza del PCB presentato.
Per il contenitore, ne ho scelto uno abbastanza piccolo da stare in tasca e dotato di contenitore per la batteria.
Nelle foto che seguono si capisce come è stato utilizzato (mi manca di trovare un pezzo di plastica verde trasparente
per coprire il foro dei display... e scusate l'apparenza dovuta alla mia cronica incapacità di forare i pannelli!).
Intorno al trasduttore dell'SFR02 ho messo della spugna plastica per ridurre in qualche modo le risonanze (e bloccare
il tutto).
![]() |
![]() |
![]() |
| Schema elettrico | Layout componenti | PCB monofaccia |
![]() |
![]() |
![]() |
| Vista modello 3D | Immagine dell'interno | Vista esterna |
Inserito il 21/02/2010