Un datalogger "GradiGiornimetro"


Il datalogger
Il datalogger è uno strumento che, a intervalli predefiniti o conseguenti al verificarsi di un determinato evento, registrano uno o più valori, rilevati solitamente da sensori specifici per la grandezza considerata, che in seguito possono essere consultati e ulteriormente elaborati. Nella fattispecie, questo progetto rileva la temperatura esterna e la registra su una memoria. Tramite il collegamento ad un computer, viene prodotto un file in formato .csv contenente i dati via via immagazzinati.

I gradi giorno
Cito da wikipedia: "Per gradi giorno di una località s'intende la somma, estesa a tutti i giorni di un periodo convenzionale di riscaldamento, delle sole differenze positive giornaliere tra la temperatura dell'ambiente e la temperatura media esterna giornaliera; l'unità di misura utilizzata è il grado giorno (GG)".
In parole povere, ci consente di stabilire in termini oggettivi quanto sia freddo un inverno. Ciò permette di paragonare efficacemente località diverse o annate diverse, nonchè di "destagionalizzare" i consumi energetici per il riscaldamento. Esempio. Se lo scorso inverno ho consumato 1000 metri cubi di metano e ho registrato 2500 gradi giorno, mentre l'anno precedente ho consumato 950 mc a fronte di 2300 gradi giorno, apparentemente ho consumato di più, mentre in realtà no. Infatti, calcolando il consumo in mc/gg, l'ultimo anno è stato di 0.4, in quello precedente 0.41. Negli ultimi anni si stanno diffondendo formule di pagamento delle spese di riscaldamento alle ditte che gestiscono gli impianti termici calcolate sulla base dei gradi giorno effettivamente registrati. Ma registrati da cosa? Da quello che sono riuscito a trovare, gli apparecchi che misurano i gradi giorno sono rari e destinati a usi professionali, e quel che si trova in commercio ha dei costi altrettanto "professionali".

Cosa fa il mio "gradigiornimetro"
  • Ha un orologio/calendario interno, una sonda di temperatura, una memoria non volatile, la possibilità di scaricare i dati su PC.
  • A intervalli regolari rileva la temperatura e la registra in memoria.
  • A partire dalla mezzanotte, ogni minuto accumula la temperatura rilevata in un contatore.
  • Alla mezzanotte del giorno successivo, calcola la temperatura media giornaliera.
  • Se questa è inferiore a 20°C, la differenza viene accumulata nel contatore dei gradi giorno; se superiore, il valore va a incrementare il contatore dei gradi giorno di raffrescamento.

Schema
La sezione di alimentazione è composta da un classico regolatore di tensione tipo 7805. Un alimentatore esterno (ex cellulare o simili, da almeno 8 volt / 100mA) fornisce l'energia necessaria. Poichè il circuito deve funzionare ininterrottamente, ho previsto una batteria tampone, necessaria in caso di mancanza di alimentazione, con un circuito minimale di ricarica. L'assorbimento medio misurato è di circa 7 mA, quindi sei elementi NiCd da 300 mAh consentono una autonomia di 40 ore con funzionamento a batteria. Il cuore del circuito è costituito da un microprocessore della Microchip tipo PIC 16F88 con memoria di programma da 4Kbytes. Il clock per il funzionamento è fornito da un quarzo relativamente lento (i canonici 4MHz) per avere la precisione necessaria all'orologio a al tempo stesso limitare i consumi di energia.
Stante la sua vocazione di integrato APM (ag pensi me), questi si occupa di:
  • Tenere aggiornate ora e data, compresi gli anni bisestili;
  • Comunicare con protocollo I2C con la memoria EEPROM;
  • Leggere i dati della sonda di temperatura con protocollo 1wire (Dallas);
  • Visualizzare le informazioni di funzionamento su un display a matrice di punti da 20 caratteri x 4 righe;
  • Comunicare con un PC con protocollo seriale RS232, formattando i dati contenuti nella memoria in formato csv.
  • Nel "tempo libero", che in termini di cicli di clock è ancora parecchio, effettua i calcoli per determinare la temperatura media giornaliera, i gradi giorno e quanto necessario al funzionamento dell'insieme.
Per la misura della temperatura ho utilizzato la sonda della Dallas/Maxim tipo DS1820 in quanto, avendo uscita digitale, non ci sono dubbi riguardo alla taratura o all'influenza di parametri vari ed eventuali (lunghezza e sezione dei fili di collegamento, disturbi elettrici ecc.) sui valori rilevati. Inoltre, sullo stesso bus possono essere installati più dispositivi, costituendo un datalogger multicanale con modifiche minime al firmware.


Circuito stampato, lato rame


Disposizione dei componenti


Elenco componenti

Tipo/valore Quantità Riferimento
18pF 2 C5, C6
100nF 3 C1, C3, C4
10uF 16V 1 C2
1N4148 3 D1, D2, D5
Zener 5.1V 1 D4
SIP HEADER - 2PIN 2 P1, P2
SIP HEADER - 3PIN 4 P3, P4, P5, P6
SIP HEADER - 14PIN 1 DISP1
2N2222 2 Q1, Q2
100 Ohm 1/4 W 1 R1
4.7 Kohm 1/4 W 3 R2, R7, R8
10 Kohm 1/4 W 7 R3, R4, R5, R6, R9, R10, R11
PIC 16F88 1 U3
24LC1025, eeprom 128K x 8 I2C 1 U2
uA 7805 1 U1
10 Kohm trimmer 1 V1
Display LCD 4x20 HD44780 1 DISP1
Pulsanti da pannello NA 3  
Connettore alimentazione 1  
Connettore polarizzato a 3 poli (es. DIN, XLR...) 1  
Connettore DB9 femmina per RS232 1  

Il prototipo
Come d'abitudine, il primo prototipo del datalogger l'ho realizzato su basetta millefori, mantenendo la disposizione dei componenti come da disegno del circuito stampato e ricostruendo il percorso delle piste con del filo ri rame nudo. Nel caso di esemplare unico il tempo di realizzazione non si discosta molto rispetto all'incisione e foratura di una basetta, col vantaggio che risulta possibile apportare le modifiche che si dovessero rendere necessarie in fase di collaudo del progetto. Per il collegamento al display ho utilizzato un cavo flat a 10 fili, ex floppy drive; tutti i collegamenti alla basetta sono effettuati con connettori a passo 2.54 mm.


Il lato rame


Il firmware
Sul pannello anteriore sono presenti tre pulsanti, due dei quali, denominati "Set" e "Inc" permettono di accedere alle varie funzioni, mentre in terzo. "Light", attiva la retroilluminazione del display a 5 Volt, come da datasheet del mio display. Lo schema che segue sintetizza l'utilizzo del "gradigiornimetro":


La visualizzazione dei dati è ripartita su più pagine, accessibili tramite il tasto "inc". La prima visualizza data.e ora correnti, la temperatura attuale e i gradigiorno contabilizzati. L'ultima riga riporta, se la registrazione dati è attiva, il numero di record immagazzinati nella eeprom e quelli liberi rimanenti; se la registrazione à inattiva viene visualizzata la scritta "STOP". L'attuale organizzazione dei dati permette di immagazzinare 11915 letture; memorizzando ogni ora è possibile registrare la temperatura per 496 giorni, dopo di che, se la registrazione non viene fermata, l'apparecchio sovrascrive i dati più vecchi. Nella schermata successiva sono visualizzate la temperatura media registrata il giorno precedente e i totalizzatori dei gradi giorno di riscaldamento e raffrescamento. Tramite la terza schermata si attiva/disattiva la funzione di logger, cioè la registrazione dei dati su memoria. Tramite il pulsante "Set" si attiva/disattiva la registrazione; l'impostazione viene memorizzata passando alla schermata successiva col tasto "Inc". La quarta e ultima schermata serve per la connessione ad un PC tramite il collegamento seriale. Il datalogger si pone in attesa visualizzando "RS232?"; in caso di connessione atttiva, per esempio premendo invio sulla tastiera, appare la scritta "Connesso" e viene attivata l'interfaccia terminale. Attualmente sono disponibili le funzioni per scaricare i dati relativi all'ultima acquisizione o l'intera eeprom. All'uscita del programma terminale il datalogger torna a utomaticamente alla schermata principale. Scaricare l'intera memoria richiede parecchio tempo, perciò ho previsto l'interruzione forzata del trasferimento premendo il tasto "Inc". La pressione prolungata del tasto "Set" attiva l'impostazione di data e ora, nonchè del valore "drift" per la regolazione dell'anticipo/ritardo dell'orologio interno, e dell'intervallo in minuti fra le letture, impostabile da 1 a 255 minuti. Il recupero della tolleranza del quarzo con il parametro "drift" è ereditato da un mio precedente progetto ( YAC, yet another clock ) e funziona davvero bene. Il mio prototipo, dopo una paziente messa a punto, anticipa di circa un secondo al mese sul segnale DCF77 su cui si sincronizzano gli orologi radiocontrollati. Sorgenti ed eseguibile sono disponibili qui.

I primi vagiti...


Test..


..ancora test..


Finito!

La sonda di temperatura
La sonda è collegata al datalogger mediante un cavo a tre fili lungo qualche metro e ovviamente va posta all'esterno in posizione tale da rilevare correttamente la temperatura. Dopo qualche riflessione ho realizzato che conduzione, convezione e irraggiamento (in pratica tutti i modi di trasmissione del calore) sono potenziale fonte di guai, infatti:
  1. se la sonda viene colpita dal sole, si riscalda e la misura viene falsata (irraggiamento);
  2. se il supporto della sonda è solidale alla parete di un edificio, si riscalda e la misura viene falsata (conduzione);
  3. se la sonda è molto vicina alla parete di un edificio, gli strati d'aria che lambiscono la parete la riscaldano e la misura viene falsata (convezione);
  4. se la sonda "vede" il cielo, nelle notti serene si raffredda e la misura viene falsata (irraggiamento).
La soluzione più corretta, valutando anche le realizzazioni delle stazioni meteo commerciali, sembra essere quella di posizionare la sonda a nord, in posizione non troppo esposta agli agenti atmosferici ma nemmeno troppo riparata, lontana da oggetti riscaldati e protetta da un involucro ben arieggiato, che comunque fornisca adeguata protezione contro la pioggia. L'oggetto qui sotto è il risultato dei ragionamenti appena esposti. Il nastro di alluminio adesivo dovrebbe proteggere il sensore dalle radiazioni infrarosse di eventuali oggetti nelle vicinanze e dal sole, mentre i fori realizzati alla base e alla sommità della scatola più interna assicurano una buona aerazione. Attualmente la sonda è posta a circa 8 metri da terra, 1 metro dalla facciata, esposizione nord-est, e sembra fare il suo lavoro. Spiegare ai vicini di casa che quel "coso" è un termometro e che i capricci del digitale terrestre non hanno nulla a che fare con la mia sonda è stato più laborioso che costruirla.

E i dati?
Forse combatterò la canicola estiva scrivendo un programma dedicato per scaricare i dati dal "gradigiornimetro". Non servirà a gran che, visto che si può benissimo utilizzare HyperTerminal, FunTerm o simili. Ecco come. Poniamo il datalogger in ascolto sulla porta seriale, apriamo hyperterminal configurato per la connessione diretta, 8 bit di dati nessuna parità, un bit di stop, nessun controllo di flusso, 2400 bps. Colleghiamo il cavo, un enter sulla tastiera ed ecco il menu:


La funzione normalmente utilizzata sarà la prima, che trasferisce i dati della registrazione in corso o di quella appena conclusa. Tramite il menu Trasferimento -> Acquisisci testo scegliamo il nome del nostro file, ad esempio eeprom.csv:


Confermiamo la scelta cliccando Avvia. Il terminale è pronto, premendo il tasto 1 inizierà il trasferimento dei dati.


Al termine del trasferimento riapparirà il menu iniziale. Con la funzione 3 si esce dalla modalità trasferimento, il datalogger torna alla schermata principale. Tutto fatto. Il file appena salvato è utilizzabile da quasi tutti i fogli di calcolo e i data base. Nell'esempio che segue ho costruito un grafico su tre giorni di registrazioni ogni 15 minuti. I dati si riferiscono alla temperatura rilevata in prossimità del pavimento della cucina (la sonda non era ancora installata all'esterno) tranne qualche ora in cui penzolava dal davanzale. Sulla sinistra della videata sono visibili i dati così come importati dal file csv.


Dopo settimane di test e decine di riprogrammazioni del micro, sono finalmente arrivato alla versione "1.0-stable" del gradigiornimetro. Sicuramente ci sono aspetti sia elettrici che del firmware perfettibili, in ogni caso lo strumento fa quello che mi ero ripromesso quando ho iniziato il progetto. Non resta che accumulare un po' di dati per cominciare a giocarci. Certo che prima di poter smentire, dati alla mano, affermazioni sul "periodo più 'caldo' / 'freddo' / 'medio' degli ultimi 120 anni" dovrà passare del tempo...

L'aggiuntina
A realizzazione ultimata mi sono reso conto di aver tralasciato una funzione piuttosto utile, ossia l'azzeramento dei totalizzatori. Infatti per resettare a zero i contatori dei gradi giorno e far ripartire la registrazione dalla posizione 1 della memoria bisogna staccare l'alimentazione e il pacco batteria, quindi riaccendere l'apparecchio, reimpostare data e ora, riabilitare la registrazione. Un po' scomodo...
OPPURE....
Ho pensato di utilizzare per questa funzione la linea di i/o che fa capo al pin A5 del micro, quella "di scorta" connessa al connettore INGR dello stampato, alla quale ho collegato un micropulsante posto in corrispondenza di una delle feritoie del mobile che chiude verso massa la linea ed è azionabile con la punta di una matita tipo il pulsante di reset presente in molti apparecchietti. Quattro-righe-quattro di codice et voilà, alla pressione (1sec) del pulsantino sul display appare "RST" e i contatori sono azzerati. Funzione implementata e svista rimediata.


Per finire, l'archivio dei dati registrati dal "gradigiornimetro" in questa pagina

praz2004 chiocciola libero punto it