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:
![](/wp-content/uploads/2022/05/IMG_20220509_120959-1024x768.jpg)
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
![](/wp-content/uploads/2022/05/IMG_20220509_122734-1024x768.jpg)
![](/wp-content/uploads/2022/05/IMG_20220509_122903-1024x768.jpg)
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.
![](/wp-content/uploads/2022/05/manage_lib.jpg)
Nel menù di ricerca ricercare le librerie “dallas” e onewire, selezionare le stesse versioni delle immagini seguenti e installarle.
![](/wp-content/uploads/2022/05/dallas.jpg)
![](/wp-content/uploads/2022/05/onewire.jpg)
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.
![](/wp-content/uploads/2022/05/code1.jpg)
- Andiamo a modificare la sezione //Temperature measeurement cancellando il vecchio contentuo e rendendola come da immagine.
![](/wp-content/uploads/2022/05/code4.jpg)
- Cerchiamo la funzione setup() e andiamo ad aggiungere sensors.begin(); come da immagine.
![](/wp-content/uploads/2022/05/code3.jpg)
- Cerchiamo la funzione GetTemp(void), cancelliamone il contenuto e riscriviamola così.
![](/wp-content/uploads/2022/05/code5.jpg)
- Come ultimo step modifichiamo leggermente il case dove viene processato il comando di lettura della temperatura in questo modo.
![](/wp-content/uploads/2022/05/code6.jpg)
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 .
![](/wp-content/uploads/2022/05/code7.jpg)
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!