top of page

Il codice sorgente

Aggiornamento: 18 nov 2019



AGGIORNAMENTO 17/11/2019: ho aggiunto in download la versione 1.5 del firmware, che disabilita permanentemente il deumidificatore (non mi è mai servito).


La programmazione del cervello di Demetra è il lavoro che ha assorbito la maggior parte del tempo di realizzazione. In questo articolo illustrerò sommariamente l'analisi dei requisiti, rimandando alla sezione dedicata del forum gli eventuali approfondimenti relativi al codice.


Il sistema deve:

  1. Acquisire la temperatura/umidità esterna e interna alla camera.

  2. Essere in grado di mantenere internamente la temperatura/umidità impostata dall'utente per un tempo personalizzabile da mezz'ora fino a un massimo di 72 ore.

  3. Essere in grado di mantenere le temperature impostate su 4 cicli temporali interamente personalizzabili (raffreddamento, conservazione, prelievitazione, lievitazione).

  4. Essere in grado di gestire un range di temperature da -10°C a + 42°C e di umidità da 60% a 90%.

  5. Raggiungere rapidamente le temperature impostate e mantenerle con la minima oscillazione possibile.

  6. Integrare un calendario perpetuo.

  7. Darmi la possibilità di programmare una preaccensione allo scopo di climatizzare la camera.

  8. Darmi la possibilità di memorizzare un programma e richiamarlo successivamente.

  9. Darmi la possibilità di modificare le impostazioni anche durante il funzionamento.

  10. Essere facilmente upgradabile.

  11. Essere dotato di sistemi di sicurezza.

  12. Rimanere con il programma attivo anche in caso di interruzione alimentazione di rete.

  13. Essere in grado di inviare i dati sul proprio stato attraverso internet, in formato interpretabile da un cloud di servizi IoT per la costruzione di grafici (consultabili via PC o Smartphone).

  14. Avere una interfaccia utente (input/output) elementare.


Chi non fosse interessato alla parte IoT può escludere dal progetto l'Arduino Uno e commentare la funzione del codice Master che si occupa di trasmettergli i dati.

Allo stesso modo, si può fare a meno della scheda SD commentando le righe che gestiscono il log e la memorizzazione/caricamento dei dati.


Raccomando di utilizzare esclusivamente le librerie incluse nel file .zip in download. In particolare, segnalo che ho dovuto effettuare una piccola modifica nella gestione di un pin della SD card (avevo fatto dei test con un modulo ethernet alternativo).

Inoltre, non sono certo del fatto che alcune abbiano subìto, in questi mesi, delle modifiche importanti: se volete aggiornarle consultate bene la documentazione per scongiurare sorprese, ma non consiglio di farlo (funzionano benissimo così).


L'unico lavoro che ho deciso di attribuire esternamente è la gestione Wireless: è una scelta di convenienza perché nessun modulo ha le prestazioni di un router da pochi euro, a valle dello shield ethernet. Io ho utilizzato un economico Tp-Link, configurato come client.


La struttura del codice farà storcere il naso a più di un purista, ma una volta raggiunto gli obiettivi prefissati non ho avuto tempo di dedicarmi alla formattazione e correzione di alcune ridondanze, tale era il desiderio di mettere Demetra al lavoro. Lascio il piacere a chi ne avrà voglia.


Ricordarsi, al primo caricamento sia nel Master sia nello Slave, di togliere il commento alla seguente riga:

//EEPROM.writeByte(50,idIndirizzoRete);


poi ricommentarla e procedere nuovamente all'upload.



Bugs noti

  1. Un paio di volte mi è capitato di trovare Demetra in blocco. Credo fosse dovuto alla frammentazione della memoria, ma dovrei aver risolto dalla versione 1.4 del FW.

  2. Ogni tanto il RTC non tiene memorizzata la data impostata. Me ne accorgo quando lascio Demetra spento per molto tempo, forse è dovuto alla batteria CR2032 che non gradisce le temperature estive. AGGIORNAMENTO: ho montato un RTC con LIR2032, va decisamente meglio.

  3. Può capitare che lo slave vada in blocco o non si inizializzi; occorre resettarlo. Anche qui credo sia un problema di memoria o gestione di qualche buffer in libreria.

  4. Ci sono problemi nel riconoscimento librerie su sistemi Linux, per via dei nomi cartelle che contengono caratteri non ammessi. Sto preparando un file zip da caricare sull'editor web ( https://create.arduino.cc/editor ) ed eliminare i problemi di portabilità. Devo effettuare ulteriori test: quando pronto, il file sarà linkato in download.

57 visualizzazioni0 commenti

Post recenti

Mostra tutti

DEMETRA avrà un successore!

Da un po' di tempo lavoro a un upgrade di DEMETRA, allo scopo di semplificarne la realizzazione pratica e modernizzare l'interfaccia utente. In questi due anni ho potuto collaudarne ogni funzionalità

bottom of page