Incuriosito dalle possibilità della scheda FX2LP, ho deciso di mettere “sotto la lente” il semplice ed economico sensore DHT11 presente nel kit Arduino di Elegoo comperato lo scorso anno.
Qualche specifica …
- Intervallo di temperatura: da 0 a 50 ºC +/-2 ºC
- Intervallo di umidità: da 20 a 90% +/-5%
- Risoluzione: Umidità: 1% – Temperatura: 1ºC
- Tensione di alimentazione: 3 – 5.5 V DC
- Corrente assorbita: 0.5 – 2.5 mA
- Periodo di campionamento: 1 sec
Il progetto …
Inizialmente volevo provare ad analizzare qualcosa a livello I2C o SPI, ma il sensore DHT11 che mi girava sulla scrivania era un chiaro segno che dovevo dedicarmi a lui, e a qualcosa di meno complesso di un fascio di segnali dipendenti uno dall’altro. E’ nata così l’idea di studiare cosa accadeva a livello di UART tra Arduino e la board FX2LP sfruttando appunto il campionamento delle temperatura tramite un sensore digitale OneWire. Il progetto in realtà è banale, ma divertente da realizzare ed analizzare: un led rimane accesso durante il breve periodo di campionamento, viene rilevata la temperatura e il suo valore viene mandato via seriale al monitor della console IDE di Arduino. La parte analitica si focalizza su tre canali:
- Lo stato digitale del Led accesso durante il campionamento e spento per 5 secondi in attesa del successivo
- Il campionamento digitale del DHT11
- La trasmissione seriale alla console
La versione del sensore in mio possesso è quella a tre pin, pertanto non è stata necessaria la resistenza di pull-up da 10KΩ.
Pulse View …
Aggiungendo su Pulse View il canale virtuale di Timing ho riscontrato il corretto funzionamento del delay di spegnimento del led di poco più di 5 secondi, periodo tecnicamente esatto considerando i cinque secondi imposti più il breve tempo necessario al campionamento in un sistema non concorrente.
DHT11 e UART
Espandendo la traccia, è possibile studiare il campionamento del DHT11. Nel caso di Arduino non è necessaria nessuna conversione, in quanto la libreria fornita già fornisce due metodi per la lettura finale, pertanto è bastato guardare lo stream seriale associato al canale UART per rilevare la temperatura: 23.50°C!
Per semplicità non ho rilevato l’umidità, ma sarebbe bastato aggiungere il metodo per leggere anche quella. Per sicurezza ho fatto anche un confronto di campionamento tra ciò che veniva intercettato dalla board e cosa riceveva invece il monitor seriale. Ovviamente i valori erano identici a dimostrazione del perfetto funzionamento del sistema.
Proverò per sfizio prossimamente ad usare la stessa configurazione affiancandogli il più preciso DHT22, confrontando i dati ricevuti ed aggiungendo anche il rilevamento dell’umidità.