Ho integrato nella mia libreria per il .Net Micro Framework un driver per poter gestire un sensore PIR (Passive Infrared Sensor) per la rilevazione dei movimenti. Per capirci è uno di quei sensori di cui sono dotati gli impianti di allarme casalinghi.
La nuova classe Pir è molto semplice da usare e prevede di fornire al costruttore tutte le informazioni relative al pin del nostro micro al quale intendiamo connettere l’uscita del sensore PIR. Tra di esse ovviamente c’è l’identificativo del pin, attivazione o meno dell’eventuale filtro per il disturbo, eventuale resistenza di pullup/pulldown, fronte o livello dell’interrupt sul quale vogliamo avere segnalazione di movimento o meno. Infine, va specificato lo stato iniziale del driver, se abilitato o meno.
Inoltre mette a disposizione :
-
Motion : un evento che viene sollevato quando viene rilevato un movimento o meno (dipende da come abbiamo impostato la segnalazione dell’interrupt nel costruttore). Ad esso è associata la class PirEventArgs che ha le due seguenti proprietà :
-
Motion : indica se c’è stato o meno un movimento;
-
Time : timestamp in cui si è verificato un cambiamento di stato del sensore (rilevato movimento o meno);
-
-
Enabled : proprietà attraverso la quale possiamo abilitare o meno le segnalazioni da parte del PIR;
Per i miei test ho usato il seguente componente abbastanza economico.
Esso prevede banalmente tre pin di collegamento, ossia la massa, l’alimentazion ed un pin di uscita che va collegato al pin del nostro micro. Ogni qual volta il sensore rileva un movimento, esso fornisce una tensione di 3,3 V sul pin di uscita che torna a 0 V in assenza di movimento. Sfruttando i due fronti (salita e discesa) del segnale, è possibile configurare l’istanza della classe Pir in modo che sollevi l’evento solo in caso di movimento oppure in presenza di una variazione (movimento, non movimento e viceversa).
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.1.0.0.