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:
se la sonda viene colpita dal sole, si riscalda e la misura viene falsata (irraggiamento);
se il supporto della sonda è solidale alla parete di un edificio, si riscalda e la misura viene falsata (conduzione);
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);
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