Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

3
voti

Acquisizione e registrazione temperature

Descrivo un sistema sperimentale di misura e registrazione che ho realizzato per monitorare le temperature di un termosifone per prepararmi a verificare il funzionamento del teleriscaldamento, dei termostati e dei contabilizzatori del calore. Mi interessava misurare tre temperature: la temperatura della superficie del termosifone, la temperatura in vicinanza della manopola dove verrà montata la testa termostatica e una temperatura a circa 1 cm dal termosifone. Ho utilizzato componenti economici e il tutto mi è costato poche ore di sviluppo, è facile adattarlo ad acquisire altre grandezze elettriche che variano lentamente, lo descrivo sperando sia di spunto per altre applicazioni. Il sistema si compone di sensori di temperatura, di una scheda concentratore dati, del programma di acquisizione e trasmissione, di una connessione USB, di un PC supervisore con un programma di visualizzazione e memorizzazione dei dati in formato compatibile Excel.

Indice

Sensori temperatura

Ho adoperato dei sensori LM35DZ con involucro TO-92 a tre piedini a saldare, già disponibili da più di 10 anni. Si alimentano da 4 a 40 V, il campo di funzionamento è 2 - 100 C°. L'uscita è una tensione riferita a massa che vale 10 mV/C°, quindi alla temperatura di 20 C° forniscono una tensione di 200 mV. La precisione dichiarata è migliore di +/- 1 C°. Costano circa 2 Euro l'uno. Connessi a un voltmetro si può già leggere la temperatura in gradi. Per misurare anche una temperatura inferiore allo 0 C°, avrei potuto adoperare dei sensori LM60, con un campo da -25 C° a 125 C°, tensione in uscita di 6,25 mV/C° + 424 mV, precisione +/-2 C°.

Recentemente sono disponibili i sensori Maxim DS18B20 che forniscono la temperatura già in digitale su una linea seriale. Se ne possono connettere diversi in parallelo sulla stessa linea, ognuno ha il proprio indirizzo e si possono interfacciare con un unico ingresso/uscita logico. Sarebbero i migliori da adoperare per una produzione di serie, ma in piccole quantità costano tre volte di più. Poi la scheda Arduino del concentratore possiede già sei ingressi analogici.

Avrei anche potuto adoperare dei termistori da 2,2 kohm a 25 C°, alimentandoli con una R in serie di valore prossimo che crea un partitore di tensione. Vanno bene per temperature ambiente; costano la metà, ma la caratteristica resistenza temperatura non è dichiarata, la variazione della tensione di partizione con la temperatura non è lineare e avrei dovuto caratterizzarli immersi in un bicchiere d'acqua calda insieme a un termometro di riferimento. Come cavi di connessione ho usato un cavo telefonico a tre fili, e un cavo con calza schermata a quattro conduttori per linea seriale che avevo disponibili.

Concentratore

Si adopera una scheda Arduino Uno o 2009. L'alimentazione, la programmazione e la trasmissione dati avvengono tramite il cavo USB. Nello schema elettrico insieme con le connessioni ai sensori sono riportati i nomi dei piedini che compaiono sulla scheda. Come connettori per sezionare la scheda e i sensori dal cablaggio ho usato delle strisce di pin. I condensatori ( 10 uF 16 V ) eliminano i disturbi indotti dalla 50 Hz nei cavi che provocavano piccole fluttuazioni nelle misure.

schema elettrico monitoraggio temperature jpg.jpg

schema elettrico monitoraggio temperature jpg.jpg

concentratore e sensore.JPG

concentratore e sensore.JPG

Il programma del concentratore misura tutti i sei ingressi ogni 120 secondi, acquisendo per 30 volte di seguito ogni ingresso e sommando i valori. La tensione di riferimento del convertitore analogico digitale (ADC) è selezionata a 1,1 Volt. Dato che il numero acquisito varia fra 0 e 1023 (1023 per 1,1 V) al massimo la somma vale 1023*30= 30690 è minore di 32767, quindi è contenuta in una variabile intera della CPU.

La funzione di libreria “Serial.print (T0,1);” converte la variabile floating T1 e la scrive sulla linea seriale in caratteri ASCII con una cifra decimale separata da un punto. Il programma trasmette le tre temperature al PC come caratteri ASCII nel seguente formato: “ $xx.x;xx.x;xx.x” seguito da cr . Il carattere $ serve come sincronismo per individuare l'inizio del pacchetto.

Il listato del programma sorgente da caricare nell'ambiente Arduino è il seguente:

//Acquisizione temperatura da sensori di temperatura LM35DZ e trasmissione
// valori acquisiti a un PC
int nu_ana[6];
int tms,memt;
float T0,T1,T2;//temperature in C°
int Dtempo ;//secondi periodicita esecuzione calcoli
int Dms, N;

void setup()
{
Serial.begin(19200);
Dtempo = 10;  Dms = Dtempo * 1000;
N= 12; //trasmette valori subito
analogReference(INTERNAL); // riferimento interno 1,1 V
memt = (millis() & 0xFFFFF) -Dms;  //inizializza per trasmettere subito
}

void loop()
{  tms = millis() & 0xFFFFF;  //serve solo una variabile int
   if ((tms - memt) >= Dms ) // periodicità  10 s 
 { memt = tms;
   N=N+1;
   if (N >= 12) //una volta ogni 12, ossia ogni  2 minuti
  { N=0; 
 for (int j=0;j<6;j++)
 {
 nu_ana[j] = 0; for (int i=0;i<30;i++)
 {nu_ana[j]= nu_ana[j]+ analogRead(j);}}//legge input 
  //sensore 10 mV/C° , da cui: 1 C° ogni 10 mV ossia
  //  1 C°  ogni  centesimo di volt  
  // il max è  1023 per 5V.
  // Si sommano 30 valori; 30690 = 500 centesimi di V
  //  500/30690 = 0,0162919
  //il max è  1023 per 1,1V rif. interno.
  // Si sommano 30 valori; 30690 per 110 centesimi
  // V  110/30690 = 0,0035823
   const float kconv = 0.0035823;//const float kconv = 0.0162919 ;  
   T0= (kconv * nu_ana[0]);
   T1= (kconv * nu_ana[1]);
   T2= (kconv * nu_ana[2]); 
  Serial.print ("$");
  Serial.print (T0,1); Serial.print (";");
  Serial.print (T1,1); Serial.print (";");
  Serial.print (T2,1);
  Serial.println ("");
  }
  }
}  

Programma supervisore

Alla partenza, il programma legge la data e il tempo dall'orologio interno del PC e crea un file nominandolo “aa_mm_gg_hh_mm.txt“. Alla ricezione di un pacchetto di dati dal concentratore, attacca ai dati la data e il tempo HHMM presi dall'orologio interno e scrive il tutto sul file in un formato importabile direttamente in Excel come ad esempio: “ 13/2/2012 11.05;25,3;42,8;46,6 “. Il programma cambia i punti in virgole per adattarsi alla versione italiana di Excel.

Il programma, oltre a memorizzare, per comodità di verifica del funzionamento, visualizza sullo schermo in modo numerico gli ultimi valori di temperatura ricevuti e il tempo di acquisizione, inoltre visualizza il grafico degli ultimi 200 valori.

Schermata prog registr temperature

Schermata prog registr temperature

Quando l'ora passa per le 12.00 o le 00.00, il file viene chiuso e ne viene aperto un'altro, in questo modo se il PC viene spento accidentalmente non si perdono tutti i dati. Premendo il tasto U il programma chiude il file in corso e termina.

Per visualizzare i valori sullo schermo, ho dovuto riconvertire i caratteri ASCII nel numero rappresentato; per farlo ho utilizzato una struttura logica chiamata “macchina a stati” eseguita a ogni ricezione di un carattere; la descrivo in modo semplificato per la decodifica della sola variabile T0:

  Si definisce una variabile Stato,alla partenza del programma la si pone= 0.
  Se Stato = 0, attende il carattere “$” per porre Stato = 1.
  Se Stato = 1, quando legge il primo carattere,
    lo si converte nella cifra decimale corrispondente, 
     si mette la cifra in una variabile Accumula e si pone Stato=2 .
  Se Stato = 2, quando  legge un nuovo carattere (é il secondo),
     si moltiplica  Accumula per 10,
     si somma ad Accumula la cifra decimale corrispondente a si  pone Stato=3.
  Se Stato = 3, quando  legge un nuovo carattere (é il punto),
     lo si trascura  ponendo Stato=4.
  Se Stato = 4, quando  legge un nuovo carattere (é il terzo e ultimo),
     si moltiplica Accumula per 10, si somma ad    Accumula la cifra decimale
     corrispondente, trasferisce il contenuto di Accumula in “T0” e  riparte
     ponendo Stato=0.

Il programma è scritto nel linguaggio simil C++ dell'ambiente open www.processing.org, renderò disponibile il sorgente a chi me lo chiede.

In alternativa al programma di supervisione, si può adoperare il monitor dell'ambiente Arduino o il programma Hyper Terminal della dotazione di Windows Xp pro (configurare la porta COMxx adoperata a 19200, 8N1).

Elaborazione successive dei dati memorizzati

Riporto come esempio una elaborazione ottenuta in Excel visualizzando i dati importati:

grafico temperature

grafico temperature

Elaborando ulteriormente i dati memorizzati, si può calcolare una stima del calore prodotto e dei relativi costi.

Nota autore: La qualità dell'impaginazione delle immagini è insoddisfacente, è quanto sono riuscito a fare. Spero che almeno il contenuto dell'articolo sia interessante.

23/2/2012   Rev del 17/7/2015 autore Marco Ducco
15

Commenti e note

Inserisci un commento

di ,

comunque, tanto per spezzare una lancia, ti spiego perchè una misura del genere (fatta ovviamente con certi criteri) ha senso. Come Marco ha accennato, qui non si tratta solo di valvola termostatica ma contabilizzazione del calore. Non ci ho mai lavorato direttamente, ma per calcolare quanti kWh ha emesso un calorifero in un ambiente o ne misuri temperatura in ingresso e in uscita (e portata) del fluido scaldante, oppure misuri la T del calorifero e da quella e opportune tabelle calcoli l'energia ceduta all'ambiente.

Rispondi

di ,

azzzahahahah meglio di no!

Rispondi

di ,

Mah, a me sembra di essere stato molto diplomatico. Tuttavia, se l'autore ci tiene, potrei anche essere sincero al 100%.

Rispondi

di ,

beh tardo il tuo commento è un po' troppo duro. Sicuramente MarcoD è stato molto approssimativo nella definizione e nell'individuare gli aspetti "fisici" legati ad un calorifero e alla contabilizzazione del calore, ma in fondo ha tentato di fare...un po' alla buona... quello che devono o dovrebbero fare sensori, centraline e gestori degli impianti contabilizzati.

@marcoD: di contabilizzazione se ne è parlato nella sezione termotecnica, cerca o chiedi qui

Rispondi

di ,

Ammiro la tua buona volontà ed apprezzo molto il tuo slancio e la tua voglia di fare qualcosa con i micronctrollori a tutti i costi. Questo è encomiabile. La tua risposta è una risposta che non ha senso. Tutto quello che hai scritto non ha senso, non risolve nessun problema anche perché non si capisce quale problema dovrebbe risolvere. L'unica cosa che mi viene in mente è che tu abbia voluto fare un qualcosa di non ben specificato per divertitrti con i sensori di temperatura (e ci può stare). Mi riservo di scrivere in futuro un articolo che prenderà spunto da questo tuo articolo, per spiegare cosa non bisogna fare per non risolvere un problema che non esiste.

Rispondi

di ,

Ho impostato l'articolo sul piano elettronico e di programmazione e non sullo scopo delle misure sul termosifone; volevo potesse servire di spunto per realizzare una applicazioni simili.
Racconto la genesi della mia applicazione.
Avevo partecipato come condomino alle riunioni relative alla decisione all'allacciamento al teleriscaldamento e successiva installazione delle valvole termostatiche e contabilizzatori del calore, e avevo sentito le opinioni più allarmanti: scalda troppo, troppo poco, chi sa come cambierà.
Ho voluto strumentarmi provvisoriamente, per me è stata una attività per hobby, per misurare una volta ogni tanto il funzionamento del riscaldamento e verificare eventuali cambiamenti in seguito alle varianti.

Riporto i risultati acquisiti:
I risultati mostrati nell'articolo sono relativi a un termosifone con valvola sempre aperta al massimo.
Si osserva il ciclo termico impostato dall'orologio temporizzatore della caldaia centralizzata: la durata complessiva del riscaldamento corrisponde alla durata prevista.
Si rileva la massima temperatura dell'acqua ( circa 60 C°): normale.
Nei mesi meno freddi, la temperatura giornaliera massima non raggiunge più i 60 C°, e questo indica il corretto funzionamento della sonda esterna della centralina caldaia.
La sonda montata sulla manopola della valvola rileva una temperatura massima di 25 C°, che è superiore a quella ambiente al centro del locale (stimata in 20-22 C°). Sorgono dei dubbi sul possibile buon funzionamento delle valvole termostatiche in quanto agiscono in funzione di una temperatura maggiore di quella ambiente. I fornitori delle teste termostatiche offrono come variante un sensore posto alla distanza di un metro. Per evitare il problema, le manopole delle sonde termostatiche sono tarate in tacche e non in C° e basta compensare l'offset. Non mi aspetto, un significativo risparmio dalla regolazione automatica delle valvole termostatiche, poi uno freddoloso potrebbe posizionarle sempre tutte aperte al massimo. Posizionarle su una temperatura inferiore quando si esce di casa per trovare la casa meno calda al ritorno, permette un risparmio, ma crea un disagio. Esistono dei comandi temporizzati da applicare alle manopole ma sono relativamente costosi e forse complicati da programmare.

Per la sonda posta a un centimetro dal termosifone volevo rilevare la temperatura che dovrebbe utilizzare un contabilizzatore a due sonde. Penso che uno dei problemi dei contabilizzatori sia non incrementare il conteggio in estate quando la temperatura supera i 30 C° ambiente.
Quelli con due sonde verificano che il termosifone scaldi, ossia la temperatura di una sonda (lato termosifone) sia maggiore di quella sul lato esterno. I contabilizzatori con una sola sonda probabilmente conteggiano solo quando la temperatura supera i 40 C°, così facendo non conteggiano in inverno tutto il calore fornito del termosifone.
Però ammetto che nelle mie prove la temperatura della sonda a un centimetro dal termosifone sia poco utile e come ci si può aspettare rileva una temperatura leggermente minore di quella del temposifone.

Rispondi

di ,

Con tutto il rispetto ma non ho capito il senso del progetto. Mi spiego meglio: non riesco a capire per quale motivo dovrei monitorare la temperatura di un termosifone comandato da una valvola termostatica. Se monitorare la temperatura ambiente (lontano dal termosifone) potrebbe significare qualcosa (devo riscaldare la casa) non capisco a cosa possa servire monitorare la temperatura dell'acqua che circola in esso. Tanto meno sapere la temperatura ad un centimetro di distanza dal termo. Dovresti, secondo il mio modesto parere, spiegare meglio Il RISULTATO che vorresti ottenere da questo progetto. Io non l'ho capito.

Rispondi

di ,

Con l'Ardulog potresti rendere standalone il tuo progetto. Può sia fare da logger seriale, nel qual caso non dovresti cambiare niente del tuo progetto, sia essere riprogrammato come una normale Arduino, ed ha tutti e 6 i pin analogici disponibili nonostante sia minuscolo.

Rispondi

di ,

Ciao MarcoD, rientro adesso da qualche giorno di ferie! Il tuo risentimento mi ha incuriosito, quindi ho rivisto qualche tuo post e ho notato spesso una richiesta di feedback. Devi avere pazienza, farti conoscere e mai pretendere risposte dagli altri. Vale su tutti i forum e anche su EY! Ora visto che l'argomento mi interessa commento il tuo articolo. Niente da dire sulla parte elettronica, non sono abbastanza esperto e tu stesso hai già commentato riguardo l'abbondanza di prodotti già pronti disponibili. Visto l'intento dichiarato nella prima frase invece ritengo sia discutibile sia il numero che la posizione dei sensori. L'energia (kWh) ceduta all'ambiente dipende principalmente dalla T del calorifero e da quella ambiente. La 1a deve essere quella "media" (il calorifero ha T diversa nei vari punti) la 2a quella "lontana" dal calorifero. Con queste due grandezze e dal catalogo del costruttore ricavi la potenza emessa e poi l'energia

Rispondi

di ,

Condivido i commenti di admin e di mir. Aggiungo una mia nota: lo schema prova a disegnarlo con FIDOCADJ: l'editor degli articoli concede l'integrazione degli schemi fatti con quel programma. L'approccio esplorativo mi piace: non sono un grande amante di Arduino, ma credo che la cosa possa aiutare, almeno in una soluzione domestica, a capire come vanno le cose.

Rispondi

di ,

In effetti, MarcoD, il tuo commento stizzito può solo irritare i lettori. Quando si scrive un articolo e lo si pubblica, non si può pretendere che i lettori si comportino secondo i nostri desideri. Sono liberi di leggere tutto l'articolo, leggerlo in parte, non leggerlo, trovarlo interessante, ma anche no, sentire la necessità di approfondirne i contenuti o meno, commentarlo, non commentarlo, approvarlo o disapprovarlo. Insomma i lettori sono quelli che sono e non come vorremmo che fossero. Quando decidiamo di condividere qualcosa di nostro, lo facciamo e basta, senza pretendere né sperare chissacché, accettando il riscontro che esso avrà, qualunque esso sia.

Rispondi

di ,

Salve MarcoD, stavo per commentare il Tuo interessante articolo, e mi son trovato il Tuo commento scritto davanti. Per l'articolo lo trovo interessante e mi ha incuriosito leggerlo perchè tempo fa anch'io ho maneggiato un LM35 interessante dispositivo, una cosa da ridire sul cablaggio dei condensatori,forse un pezzettino di PCB sarebbe stato meglio, ma poco male se si tratta di un prototipo. Per il tuo commento, direi che è fuori luogo in quanto gli articoli ricevono i commenti di chi ha tempo e vuole commentare perchè ha letto ed ha trovato interesse, posso solo dirti che se il tuo articolo è finito in Home Page è già un ottimo pregio in quanto riconosciuto "interessante e valido" da admin, e il che è un ottimo riconoscimento.

Rispondi

di ,

Sono l'autore dell'articolo. sono un poco deluso dalla mancanza di commenti: Mi sarebbe piaciuto qualche commento di apprezzamento sulla utilità dell'articolo, anche se tratta un argomento banale ed adopera programmi e HW quasi obsoleto. Oppure mi sarei aspettato qualche una nota di denigrazione/critica tipo: Che papocchio hai descritto: Non sai che ora in commercio è disponibile il prodotto XXX che con 50 € a batteria, acquisisce 5 sensori, memorizza i valori e li trasmette a comando via Wi-FI o Blutooth o Zigbee a uno smartphone? Oppure: Il protocollo di trasmissione da Arduino che hai implementato è poco sicuro perchè non controlla la correttezza di tutti i byte ricevuti. Oppure: sul data sheet degli LM35 c'è scritto che, quando i cavi sono lunghi, devi montare in serie all'uscita un resistore da 100 ohm per evitare eventuali oscillazioni della del cavo di connessione che funge da linea risonante. Invece fino ad ora ho ricevuto un solo commento sulla presunta elevata temperatura ambiente. Alla faccia del risparmio energetico? In realtà nell'articolo è scritto che è la temperatura ambiente della manopola della valvola che effettivamente è a soli circa 2-5 cm dalla superfice calda del termosifone.

Rispondi

di ,

Noto temperatura ambiente molto alta anche 25°C. Alla faccia.

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.