Misuratore di corrente AC con ATtiny84. (ora SO quanto mi costi!)

Si era un altro utente :) Grazie per la delucidazione

ciao

dalubar: @Testato: eh eh mi hai anticipato.

L'importante e' aver detto le stesse cose :)

Prima di pubblicare il software preferisco testarlo ancora un po'

Ok, grazie

@Menniti: Ok, fammi sapere allora...aspetto tue news in proposito.

Testato:
se poi tu gli applichi tensioni continuo o alternate il sensore non lo sa e non lo vuole sapere.
sarai tu lato sw a fare cioe’ che si deve fare,

ValA0 = analogRead(A0) ;
if (ValA0 < 512 ){ValA0 = 512 + (512 - ValA0); }

Cosi’ riporti “sopra” la semionda negativa

come ad esempio calcolare il RMS della snusoide

Le letture diventano 100 anziche’ 50
Inoltre io faccio la media di 5000 letture e vi posso assicurare che il dato risultante e’ piu’ che accettabile
Confrontato con la pinza amperometrica digitale ci si avvicina su qualche decimo di differenza

Un for di 50-100 campionamenti sulle porte analogiche (16 analog input) nel mio progetto è impensabile se tengo conto che ci sono troppi parametri da ricevere, da gestire e inviare in un solo loop, siamo sempre li la precisione implica una maggior frequenza di clock. Voglio arduino due!!! ]:D

Come promesso, pubblico il software per il funzionamento della scheda.

Descrivere in dettaglio tutto il funzionamento credo sia inutile; come si vedrà, lo sketch è abbastanza (spero esaurientemente) commentato e quindi si “spiega” quasi da solo. L’applicazione ha diverse caratteristiche e lavora come una macchina a stati finiti.

/***************************************************************************************************
 * MISURATORE DI CORRENTE  "Quanto mi costi?" (by Dalubar) - MAGGIO 2012
 * =======================================================================
 * Il software lavora come una macchina a stati finiti. Caratteristiche principali:
 * - Preriscaldamento: all'avvio aspetta un tempo (TIME_PRERISC) per ottenere l'assestamento termico
 * - Autocalibrazione OFFSET: prima di essere operativo "tara" l'uscita del sensore sullo "zero" logico (2.50V)
 * - Calcolo potenza effettiva basato su valore RMS in regime sinusoidale
 * - Preallarme: implementazione contro i picchi di consumo transitori e/o oscillazioni intorno alla soglia d'allarme (MINIMUM_TIME_PREALARM)
 * - Allarme: mantenimento di un tempo minimo programmato (MINIMUM_TIME_ALARM) per evitare stati di indecisione

Ma dato che un’immagine vale più di 1k parole, mostro il più semplice dei diagrammi UML (state diagram) che dovrebbe dare un’idea quantomeno globale del funzionamento.

La parte relativa agli stati di preallarme e allarme è stata inserita dopo una sperimentazione pratica e serve ad evitare che picchi di assorbimento transitori o oscillazioni del consumo intorno al valore di soglia possano far scattare il relays di allarme (si pensi allo spunto iniziale di motori presenti in elettrodomestici come aspirapolvere o lavatrici).

Ovviamente poi ognuno è libero di personalizzarsi il programma come vuole…io lo “regalo” alla comunità :sweat_smile:

Buon 1° maggio a tutti.

LTSR1_84_AC_4_HW.ino (15.7 KB)

grazie del codice.

e' un progetto fatto benissimo, il tuo stile sia del progetto in se, che ad esempio della documentazione, e' ai piu' alti livelli.

Complimenti :)

...ma grazie!!! Troppo buono. :stuck_out_tongue_closed_eyes: Il software, ovviamente, è ancora "giovane" ed è lungi dall'essere esaustivo del problema, quindi può essere senz'altro migliorato...cosa che lascio ampiamente a quanti vogliano approfondire e perfezionare la questione "consumi". Direi, anzi, che tutti i suggerimenti sono ben accetti!

Per quel che mi riguarda, dato che lo scopo iniziale per il quale il progetto è nato è stato raggiunto (ha appagato il mio alto senso della pigrizia nel non dover andare nel gabbiotto dei contatori) posso dire che per me è sufficiente cosi com'è ;)

Qualche delucidazione che penso possa essere utile:

  • Il pulsante presente nella scheda serve a "forzare" la calibrazione del sensore al fine di ottenere il riferimento esatto di 2,5V in assenza di carico. Questo significa che dovrebbe essere premuto, appunto, solo quando non c'è nessuna apparecchiatura collegata. Comunque posso dire che in questi giorni nei quali è stato acceso costantemente, il riferimento non è mai cambiato (oscilla talvolta leggermente tra 2.49 e 2.51 max). La domanda che potrebbe porsi è: "perchè mettere il pulsante se il programma ha l'autocalibrazione?" Semplice, perchè essa entra in funzione solo nei casi di "deriva" del valore verso il basso, cioè nei casi in cui il rifemento dovesse scendere sotto i 2,48V, e si può affermare di certo che se questo avviene NON c'è sicuramente nessun carico collegato quindi si può fare la calibrazione. Se, invece, il valore dovesse subire una "deriva" verso l'alto (da 2,52 in poi) il software non attiva l'autocalibrazione dato che non può sapere se il valore dipende da una deriva naturale o perchè c'è un carico collegato. Per questo motivo ho inserito il pulsante, in questo modo ogni tanto si può controllare (magari shuntando o staccando il carico) che il riferimento sia costante a 2.5V (è il valore Vo del display). Ripeto nel mio prototipo il riferimento diventa praticamente costante dopo i primi minuti dall'accensione (motivo del preriscaldamento che può anche essere portato, appunto, a 120 o 180 secondi).

  • Sulla "board". Le due piste che portano la corrente da misurare (quelle dal sensore alla morsettiera) devono essere ovviamente "rinforzate", dato che devono sopportare almeno 3000W. Io, le ho stagnate e poi ho inserito, per tutta la lunghezza della pista uno spezzone di rame spesso, ricoprendo il tutto di stagno.

Quando parli di "riscaldamento" lo intendi come sinonimo di "stabilizzazione" oppure lo intendi letteralmente ? Non capisco cosa dovrebbe riscaldarsi ? Il sensore ? ha una curva di risposta che vria in base alla temperatura ?

pablos: Un for di 50-100 campionamenti sulle porte analogiche (16 analog input) nel mio progetto è impensabile

Io non faccio un for ; leggo a giro di loop , sommo il valore letto ed incremento un contatore Quando arriva a 5000 divido la somma per 5000 , azzero e ricomincio

Voglio arduino due!!! ]:D

Forse non sei il solo

Io non faccio un for ; leggo a giro di loop , sommo il valore letto ed incremento un contatore Quando arriva a 5000 divido la somma per 5000 , azzero e ricomincio

si intelligiente come metodo, bisogna vedere quanti cicli fa il tuo loop in un secondo, io ne faccio 40 e non ho delay di nessun tipo. 125 secondi per aggiornare una variabile, non sarebbe proprio una misura istantanea nel mio caso :)

ciao

pablos: io ne faccio 40 e non ho delay di nessun tipo. 125 secondi per aggiornare una variabile, non sarebbe proprio una misura istantanea nel mio caso :)

Devo finire l'opera e ne approfittero' per visualizzare sulla seriale il contatore , giusto per capire spannometricamente il tempo impiegato Tempo che nella mia applicazione non crea problemi

@Testato: naturalmente parlo di "stabilizzazione", il sensore non riscalda affatto. :) Quel che ho notato da sperimentazione pratica è che dopo i primi minuti dall'accensione il valore letto dal DAC si mantiene molto piu sabile (parliamo sempre di poche unità in più o in meno) rispetto ai minuti precedenti...e questo immagino sia dovuto non solo al sensore ma anche al resto del circuito, MCU compresa.

dalubar: @Testato: naturalmente parlo di "stabilizzazione", il sensore non riscalda affatto. :) Quel che ho notato da sperimentazione pratica è che dopo i primi minuti dall'accensione il valore letto dal DAC si mantiene molto piu sabile (parliamo sempre di poche unità in più o in meno) rispetto ai minuti precedenti...e questo immagino sia dovuto non solo al sensore ma anche al resto del circuito, MCU compresa.

Verissimo, questa è una prerogativa di tutte le macro e micro-componenti di un circuito elettronico; inevitabilmente la temperatura in fase operativa è diversa da quella in fase OFF, quindi bisogna sempre attendere il raggiungimento della stabilizzazione termica, prima di prendere in considerazione dei risultati. Non a caso qualsiasi strumento di misura nel manuale d'uso riporta che deve essere acceso da almeno 30 minuti prima di poterlo utilizzare correttamente

No...stavo pensando al discorso di Mike per l'utilizzo dell'aggeggio come "contatore".

Premetto che non sono pratico di problematiche di questo tipo, per cui a primo acchito non mi è sembrata una cosa affatto semplice; volendo prendere analogia dai contatori ENEL e le loro lucine lampeggianti, quello che servirebbe è misurare il transito di ogni kilowattora e incrementare un contatore di "scatti". Ogni scatto un kwh.

Dal punto di vista matematico bisognerebbe integrare la curva delle potenze istantanee nell'unità di tempo, l'area sottesa alla curva sarebbe l'energia consumata (l'analogia con velocità istantanea e spazio percorso sembra scontata). Ma come fare praticamente? Una idea mi è venuta pensando ai vecchi contatori che avevano dei dischi dentellati che facevano avanzare i contascatti meccanici.

L'idea è questa (abbastanza scontata, forse), realizzare l'integrazione come somme di prodotti: - Dividere l'unità di tempo (ora) in intervalli sufficientemente piccoli nei quali si suppone che la potenza istantanea sia costante. Nel caso della mia applicazione direi che posso spezzare l'ora in 3600 parti (risoluzione di un secondo). - Moltiplicare la potenza istantanea (che è costante nell'intervallino) per l'unità di tempo (1/3600) - Sommare tutti i prodotti. Notare che dopo un ora esatta si otterrebbe il consumo espresso in wattora che diviso per 1000 darebbe i kwh. Ma non è questo che ci interessa, bensì sapere quando è "transitato" un kwh dalla rete. Per far questo basterebbe fare una cosa semplice: - Non appena la somma parziale dei prodotti raggiunge il valore 1000 si può affermare che sia transitato 1Kwh e quindi si può incrementare una variabile "scatti" e ricominciare il processo di integrazione.

La lettura della variabile "scatti" ad intervalli di tempo stabiliti (tipo settimanale o mensile) permetterà di stabilire il numero di kwh consumati.

Che ne pensate, potrebbe andare?

perfetto, l'approssimazione del cacolo sull'unita' di Un Secondo credo sia affidabile, inutile spezzettare di piu'.

Non capisco solo l'ultima fase, quando dici:

La lettura della variabile "scatti" ad intervalli di tempo stabiliti (tipo settimanale o mensile) permetterà di stabilire il numero di kwh consumati.

in realta' non appena arrivi a 1000 hai consumato 1KWh, non serve questa ulteriore fase. In ualsiasi momento vado sul display leggo i KWh consumati, poi si mette un bel tasto per resettare. Tipo quando l'amministratore va a leggere, ad inizio mese, premera' il tasto ed a fine mese avra' la lettura diretta dell'ultimo mese.

Oppure, implementando un RTC fare uno storico su SD, ma questo e' altro discorso

l’approssimazione del cacolo sull’unita’ di Un Secondo credo sia affidabile, inutile spezzettare di piu’.

Già, è inutile per il semplice fatto che l’applicazione ci mette più di 1/2 secondo per ottenere il valore della potenza istantanea :wink:
In altri casi più piccolo è l’intervallino è migliore è l’approssimazione (al “limite” che tende a zero della dimensione dell’intervallo si avrebbe l’integrazione “pura”)

In ualsiasi momento vado sul display leggo i KWh consumati, poi si mette un bel tasto per resettare.

Certo, forse mi sono espresso male io, quello che volevo dire era appunto che si poteva avere una stima del consumo in Kwh in un determinato periodo leggendola come differenza tra i valori di inizio e fine periodo (proprio come si fa nella lettura dei normali contatori). Mi riferivo, in particolare, alla situazione condominiale esposta da Michele dove, per fare un confronto tra i consumi di “rami” di linea elettrica differenti occorre avere un uguale riferimento temporale.

Ovvio che per il salvataggio dei dati c’è solo l’imbarazzo hardware della scelta (RTC, logger, SD, e quant’altro)…ma io vorrei arrangiarmi con la scheda a disposizione…al limite avevo pensato di usare la EEPROM per salvare i dati; ogni volta che si leggeva il contatore si salvava il valore corrente in memoria in modo da poter calcolare anche una stima sull’andamento medio dei consumi facendo le differenze delle coppie di valori salvate. L’ATtiny84 ha 512 byte di EEPROM, usando questo spazio come una coda circolare (508 byte + 4byte per i puntatori) e supponendo una lettura del contatore con cadenza mensile si potrebbe disporre di uno storico di oltre 40 anni di dati!!

EDIT: mi correggo, considerando di salvare le letture come tipo di dati “long” ci sarebbe spazio per 10 anni di dati contemporaneamente…che comunque non sono bruscolini XD

Ma forse, come cantava Noemi profetizzando a sua insaputa…“sono solo parole” :slight_smile:

[quote author=Michele Menniti link=topic=103702.msg778060#msg778060 date=1335778723] Ottimo $) Ti spiego: amministro il mio Condominio, classica gabbia di matti... ... A dire il vero mi risulta che vendano dei contatori già fatti, a prezzi abbordabili, ma non ho cercato. Appena possibile faccio il controllo con l'elettricista e ti faccio sapere se ne facciamo qualcosa. :) [/quote] Per evitare altri casini con i condomini ti consiglio vivamente due contatori di consumo: uno per ogni zona. Usa contatori comperati e non autocostruiti (alla Lidl ne ho comperati alcuni a 5 Euro) e falli installare da un' elettricista. In questa maniera sara' l' elettricista ad essere accusato di imbrogliare.... Non tu !

acik: [quote author=Michele Menniti link=topic=103702.msg778060#msg778060 date=1335778723] Ottimo $) Ti spiego: amministro il mio Condominio, classica gabbia di matti... ... A dire il vero mi risulta che vendano dei contatori già fatti, a prezzi abbordabili, ma non ho cercato. Appena possibile faccio il controllo con l'elettricista e ti faccio sapere se ne facciamo qualcosa. :)

Per evitare altri casini con i condomini ti consiglio vivamente due contatori di consumo: uno per ogni zona. Usa contatori comperati e non autocostruiti (alla Lidl ne ho comperati alcuni a 5 Euro) e falli installare da un' elettricista. In questa maniera sara' l' elettricista ad essere accusato di imbrogliare.... Non tu ! [/quote] Già, hai sacrosanta ragione! Visti i soggetti con cui ho a che fare, sarebbero capaci di dire di tutto. ]:D