Questo articolo è dedicato a tutti quelli che hanno seguito il tutorial sul focheggiatore Moonlite costruito con Arduino (lo trovate qui) e vorrebbero aggiungere la lettura della temperatura a esso.
Stato dell’arte del firmware moonlite
Una volta fatto il flash del firmware su arduino e collegato al vostro sistema (perlomeno su Ekos) la temperatura segna sempre 0 anche se dovessimo aggiungere una sonda per la temperatura sul pin corretto.
Il firmware è rotto? Ho cablato male qualcosa? No, assolutamente!
Potenza del software open source
Il firmware disponibile è completamente open source (potete sbirciare la versione originale qui; il firmware non è stato scritto da me, l’ho solo messo su GitHub per visualizzarlo meglio), diamogli un’occhiata insieme e cerchiamo di capire come funziona la lettura della temperatura.
Ah! Ecco qui il problema!
Il firmware originale cerca di fare una lettura analogica dal pin 0 di Arduino, anche inserendo un termometro digitale su quel pin non otterremo un granchè; in ogni caso, essendo il codice sorgente modificabile senza nessun problema, cerchiamo di adattarlo alle nostre esigenze!
One fix to rule them all (oppure no)
Mi piacerebbe, ma la verità è che non esiste un unico fix per tutti i termometri in circolazione. Ogni termometro può avere settaggi differenti, poi ci aggiungiamo digitale VS analogico, i pin dove li vogliamo mettere. Insomma, non esiste un modo unico per sistemare il firmware in modo che possa utilizzare tutti i sensori di temperatura presenti sul mercato, ma con un po’ di pazienza possiamo adattare il codice al termometro in nostro possesso.
DS1820 – lo standard low cost per la temperatura
In questo tutorial userò il famoso DS18b20 che è probabilmente il più diffuso sul mercato, si trova a pochi euro in giro (o dalla Cina) e si può acquistare sia in configurazione THT (con le tre gambette di metallo per intenderci) oppure già con un cavetto come nel mio caso:
In aggiunta c’è bisogno di una resistenza da 4.7kOhm che verrà utilizzata come pull-up. Iniziamo il circuito!
Colleghiamo il cavetto rosso al 3.3V di Arduino, il nero al GND e il giallo a uno dei pin digitali, io sceglierò il numero 7, inoltre dovrete inserire la resistenza tra il pin dati (giallo) e il 3.3V, ecco come dovrebbe essere lo schema completo fatto su una scheda per prototipi
Cablato il tutto possiamo passare alla modifica del firmware originale, apriamo Arduino IDE e come primissima cosa andiamo a scaricare due librerie aggiuntive da Tools -> Manage Libraries.
Nel menù di ricerca ricercare le librerie “dallas” e onewire, selezionare le stesse versioni delle immagini seguenti e installarle.
Ora apriamo il firmware originale in Arduino IDE (potete fare semplicemente copia incolla dal primo link che ho riportato da github) e apportiamo le seguenti modifiche:
- Includiamo le librerie appena installate e aggiungiamo una nuova variabile che possiamo modificare a seconda del pin digitale utilizzato.
- Andiamo a modificare la sezione //Temperature measeurement cancellando il vecchio contentuo e rendendola come da immagine.
- Cerchiamo la funzione setup() e andiamo ad aggiungere sensors.begin(); come da immagine.
- Cerchiamo la funzione GetTemp(void), cancelliamone il contenuto e riscriviamola così.
- Come ultimo step modifichiamo leggermente il case dove viene processato il comando di lettura della temperatura in questo modo.
Abbiamo finito! Abbiamo apportato le modifiche necessarie al firmware, possiamo flasharlo su Arduino e fare partire ad esempio Ekos e provare a leggere la temperatura .
Conclusioni
Abbiamo visto insieme come “espandere” le funzionalità del firmware Moonlite aggiungendo la lettura della temperatura, come detto in precedenza questa in particolare dovebbe funzionare con tutti i dsXXXX, per gli altri sensori basta osservare la specifica e modificare di conseguenza la funziona GetTemp e otterremo gli stessi risultati!
Non c’è bisogno di modificare il firmware a mano se non volete, ho caricato una versione completa qui che può essere utilizzata direttamente (non dimenticatevi di installare le librerie però!)
Non mi resta che augurarvi buon tinkering e tante letture corrette (insieme a cieli sereni!), come al solito, per ogni dubbio o domanda lasciate un commento, rimango a disposizione!