uPLibrary : un driver per gli ultrasonic sensor

La libreria che sto sviluppando per il .Net Micro Framework si arricchisce sempre di più con un nuovo managed driver per la gestione degli ultrasonic sensor (sensori ad ultrasuoni), che permettono di misurare le distanze dagli oggetti che li circondano.

Un sensore di questo tipo emette un’onda sonora ad elevata frequenza (ultrasuono, al di fuori delle frequenze udibili dall’orecchio umano) e rileva l’echo dell’onda stessa di ritorno da un oggetto sul quale è rimbalzata. Per i miei progetti ho acquistato questo sensore ma il funzionamento è fondamentalmente comune a tutti gli altri. Esso prevede banalmente tre pin rispettivamente per l’alimentazione, la massa ed il pin per pilotare il sensore e leggerne la misura eseguita.

3542.ultrasonic_image_1656E964

Come si evince dalla figura sottostante, è necessario inviare un impulso di una certa durata (molto breve) per avviare la misurazione da parte del sensore che internamente emette un suono con una frequenza elevatissima (ultrasuoni). Immediatamente dopo, il sensore alza il pin di uscita e lo abbassa solo nel momento in cui rileva il ritorno del suono emesso a seguito del rimbalzo nell’ambiente circostante.

6765.ultrasonic_1C6E1032

Per poter determinare la distanza dall’oggetto, basta partire dalla conoscenza della velocità del suono (343,2 m/s ad una temperatura di 20 °C) e rilevare dal sensore stesso la durata del livello alto del segnale in uscita.

Il driver che ho messo a disposizione, fornisce un costruttore con cui impostare il pin del micro collegato al sensore e definire il periodo con cui si è interessati alla misura eseguita.

Infatti, il driver utilizza internamente un Timer e periodicamente esegue la misura e solleva l’evento Distance, il quale mette a disposizione un UltrasonicEventArgs in cui troviamo la distanza misurata in mm ed il tempo di rimbalzo in us.

Ovviamente, è possibile disattivare il Timer direttamente nel costruttore oppure utilizzando la property Period, impostando il periodo a Timeout.Infinite. In questo caso, non avendo un feedback automatico dal driver, è possibile sfruttare il metodo GetDistance().

Il progetto lo trovate su Codeplex e nella Nuget Gallery (sia sul sito che all’interno del plugin per Visual Studio 2010) aggiornato alla versione 1.2.0.0.

Leave a comment