Ciao a tutti, sto diventando matto con questo sensore per molti aspetti poco chiari.
Quando l' ho acquistato sul mercato online, nella descrizione dichiaravano come assorbimento massimo sopportabile di 30 ampere mentre su varie ricerche fatte, lo danno per 5 ampere massimi. Anche perchè il morsetto su pcd è quello da 10 ampere, quindi perchè dichiarano valori cosi alti? credo che parlino del micro all' interno, ma il pcb è fatto per sopportare tali correnti?
A parte questo, ho trovato diversi sketch, ma tutti danno valori molto sballati, non ho trovato niente che misura un reale valore.
Ho trovato questo sketch che mi generava la metà del reale assorbimento e ho modificato il valore finale.
Adesso sembra dare risultati piu o meno reali, ma ho fatto solo una prova con un carico massimo di 1A
Lo sketch è questo:
In fond, invece di /1000 ho messo /500 e i valori adesso sono abbastanza reali, ma questa istruzione usa il delay
e ogni lettura mi blocca le altre istruzioni.
Ho poco chiara la parte di come calcola il delay, potete aiutarmi a capire cosa significa delay(1); ?
e perchè se cambio il valore "1000" nel ciclo for, sballano anche i valori della lettura finale?
delay(1) vuol dire "aspetta 1 millisecondo".
Il for esegue 1000 letture intervallate da 1 millisecondo di pausa. Ci metterà 1 secondo per completarle.
Se cambi il 1000 devi cambiare anche il valore per cui dividi la media.
Se non ti tornano i valori è probabile che il tuo sensore abbia una costante V/A diversa da quella utilizzata per lo sketch che hai.
Ti conviene espandere i calcoli e fare i passaggi uno ad uno.
Grazie Paolo, dopo un' attenta verifica, avevo capito il significato della funzione.
In pratica Fa mille letture che moltiplicate per 1 Millesimo di secondo, fanno un secondo.
Infatti, se mettevo 10 al posto di uno, avevo una lettura ogni dieci secondi.
Ma a cosa serve fare mille letture in un secondo e calcolarne la media? ho abbassato i valori portando a 10 le letture con delay 100
e non è cambiato nulla. il /1000 è per la formula del valore medio di 1000 valori letti quindi, ho dovuto portare quel valore a 10.
Adesso ho la lettura di dieci valori con la media, ma devo sostituire il delay con la funzione millis perchè ho altre funzioni importanti che non possono essere interrotte da un delay così grande.
Ho notato che con quella formula, ho la metà del valore reale quindi è bastato dividere il valore divisore portandolo alla metà.
in pratica, su 10 letture, hocalcolato la media non di dieci valori, ma di 5 con il risultato che più o meno ci siamo comparato con un tester di alta affidabilità, ma non credo sia la soluzione migliore.
Cosa dovrei modificare? la schedina che ospita i micro ha due condensatori e una resistenza, credo siano settati per il range massimo di corrente misurata. Io l' ho acquistato come fondo scala di 20 ampere e quindi avrà una sensibilità molto bassa per valori di corrente sotto i 5 ampere, ma non saprei come muovermi. A me serve una lettura di un carico a 220 volt massimo 20 ampere, sapresti consigliarmi una soluzione?
Il sensore ACS712, come ha già detto il grande Ratto, è disponibile in tre versioni con fondo scala da +/- 5, 20 e 30A.
Poiché è alimentato a +5V, la sua uscita ha lo "zero" situato a +2.5V.
La Sparkfun vende una piccola schedina che contiene la versione a 5A (ACS712ELCTR-05B-T) ed è probabilmente quella in tuo possesso.
Per ogni ampere che passa per questa scheda, l'uscita si incrementa di +/- 185mV secondo il verso della corrente.
Se il tuo problema è quello di misurare una corrente continua la soluzione è semplice, mentre se devi misurare una corrente alternata la cosa è un po' più complicata.
Cosa devi misurare?
cyberhs:
Il sensore ACS712, come ha già detto il grande Ratto,
Grande io ? grazie, troppo gentile ma francamente mi sento al pari dei newbie
ciao.
ps io per avere una buona precisione non ho usato i valori da datasheet o meglio sono partito da quelli e li aggiustati gradualmente, ti metti in serie un multimetro con misura della corrente misuri con quello e paragoni con quello che misura l'ACS e aggiusti i valori di conversione (di conseguenza) a mio avviso è il miglior sistema.
cyberhs:
Il sensore ACS712, come ha già detto il grande Ratto, è disponibile in tre versioni con fondo scala da +/- 5, 20 e 30A.
Poiché è alimentato a +5V, la sua uscita ha lo "zero" situato a +2.5V.
La Sparkfun vende una piccola schedina che contiene la versione a 5A (ACS712ELCTR-05B-T) ed è probabilmente quella in tuo possesso.
Per ogni ampere che passa per questa scheda, l'uscita si incrementa di +/- 185mV secondo il verso della corrente.
Se il tuo problema è quello di misurare una corrente continua la soluzione è semplice, mentre se devi misurare una corrente alternata la cosa è un po' più complicata.
Cosa devi misurare?
Esattamente, mi sa che ho un problema...devo misurare un carico in A.C Precisamente il carico totale dell' assorbimento di una abitazione.
Nel mio sistema ci sono diversi tipi di letture, e diversi tipi di fondoscala. quello che ho io è quello da 20 ampere, me ne sono accorto leggendo sul micro anche se il morsetto non va assolutamente bene visto che è molto piccolo. ho letto in vari forum la difficoltà nel controllare gli ampere in alternata, ma con lo sketch modificato da Paolo, che ringrazio moltissimo, è possibile misurare anche in A.C? ho visto che modificando il "fattore" cambiano i valori...ho messo 100 come valore e sembra andare tutto bene. ho dei problemi se porto i tre cavetti ad arduino con distanze entro i 5 metri? Per quello posso sempre fare delle prove, magari vi faccio sapere
ma con lo sketch modificato da Paolo, che ringrazio moltissimo, è possibile misurare anche in A.C?
No, non é possibile. Quel alogaritmo se funziona bene deve darti 0,0 A.
Devi fare la media quadrata (valoere effettivo) e non la media artimetica.
Ciao Uwe
Misurare una corrente alternata significa misurare il valore del suo valore efficace.
La cosa sarebbe anche semplice se la corrente fosse sinusoidale, ma purtroppo questo accade solo se il carico è puramente resistivo.
Nella realtà la presenza di carichi induttivi (motori, compressori, luci al neon, ecc) o disturbi altera la forma d'onda.
Ti consiglio prima di tutto di comprendere il problema leggendo questo articolo fatto abbastanza bene: openenergymonitor.org/emon/buildingblocks/ac-power-introduction
E poi anche questo: openenergymonitor.org/emon/buildingblocks/ac-power-arduino-maths
correggo:
La misura della corrente di un carico induttivo o capacitivo non é un problema. La forma d'onda resta sinusoidale. Misurare la potenza attiva é il problemino che complica la facenda. Ancora piú complicato é misurare utenze che hanno un andamento della corrente non sinusoidale (come motori con regolazione continua di velocitá e almentatori switching).
IO mi sono trovato davanti alla stessa problematica un po di giorni fa.
Ho cercato di scrivere qualcosina.. guardando qua e la in rete, ma lo sketch non è molto preciso, il risultato.. mi sballa di + o - 5W .. ed è molto soggetto a variazioni rispetto alla tensione di rete che hai in ingresso (non sempre è 230V) e inoltre varia anche lo scostamento provocato dal coseno di fi. E mi sa che su questo non ci possiamo fare niente, a meno che non si legga in qualche modo il valore istantaneo della rete in volt con qualche altro sensore e poi lo si moltiplichi per quello che ti esce come ampere da questo sensore. (resta sempre un po incerto il cos di fi)
Un'abbozzo di quello che ti potrebbe servire è questa funzione....
Te l'ho detto non è il massimo come precisione (anzi se qualcuno ha dei suggerimenti per migliorarla sarebbero graditi), ma almeno qualcosa ti restituisce.
In sample = analogRead(pin) - 512; ho messo 512 .... per ottenere una cosa più simile allo 0..
Per intenderci dato che il sensore ha lo "zero" situato a +2.5V., per l'uscita analogica corrisponde più o meno a 1024/2 512 ....
Se non è sbagliato.... xRMS è il quadrato della media di ogni campione , e dopo facendone la radice quadrata ottieni il valore efficace di cui parlava Uwefed.
e poi il codice si spiega da solo...
L'unica cosa che non mi è chiara è la formula per passare da valore efficace ad Ampere, e come è uscito fuori quel valore di 0.048828 che ho visto nei commenti a questo link http://www.lucadentella.it/2011/11/29/sensore-di-corrente-con-arduino/ fatti da un certo alessio verso la fine .
Se qualcuno riesce ad illuminarci sarebbe ottimo.
Il risultato in qualche modo si vede. ma non è soddisfacente.
Se magari qualcuno può fare altre prove o ha suggerimenti per modificare la funzione...
Ben vengano.
dr4gone:
... come è uscito fuori quel valore di 0.048828 che ho visto nei commenti a questo link Sensore di corrente con Arduino – lucadentella.it fatti da un certo alessio verso la fine .
Se qualcuno riesce ad illuminarci sarebbe ottimo.
dr4gone:
ok un passo avanti
Ma la speigazione?
Perchè il valore efficace moltiplicato per 5/1024 da come risultato ampere?
perchè il "valore efficace" è un dato in digitale compreso tra 0 e 1023, fino a che non lo trasformi in un dato analogico tramite la costante ADC che in questo caso è proprio 5/1024
L'errore è dovuto al fatto che hai imposto un cosFi = 0.707 ma non è detto che sia così, poiché dipende dallo sfasamento tra tensione e corrente.
Si il fatto del coseno di fi sapevo, infatti ho già scritto in precedenza che è quello il problema.
Inoltre il problema principale è che la tensione non è mai 230v ma oscilla anch'essa, anche se sul lungo periodo a meno di tensione sempre bassa, si può ottenere un risultato accettabile per tutto l'impianto in media...
Secondo te c'è qualcosa nel codice che si può migliorare?
Oppure accoppiare in qualche modo un voltmetro a questo sensore e calcolare la potenza che ne esce fuori in base alla tensione che varia sarebbe fattibile?
marinaio67:
dr4gone:
ok un passo avanti
Ma la speigazione?
Perchè il valore efficace moltiplicato per 5/1024 da come risultato ampere?
perchè il "valore efficace" è un dato in digitale compreso tra 0 e 1023, fino a che non lo trasformi in un dato analogico tramite la costante ADC che in questo caso è proprio 5/1024
Grazie lo ignoravo proprio che la costante ADC fosse quella.
Dovrei approfondire per capire meglio
Oppure accoppiare in qualche modo un voltmetro a questo sensore e calcolare la potenza che ne esce fuori in base alla tensione che varia sarebbe fattibile?
Più che fattibile... ad esempio il mio progetto di Power Meter funziona in questo modo!
dr4gone:
ok un passo avanti
Ma la speigazione?
Perchè il valore efficace moltiplicato per 5/1024 da come risultato ampere?
Infatti non da ampere, ma indica i volt letti dall'ADC.
Se moltiplichi per mille ottieni i millivolt letti dall'ingresso analogico.
A quel punto dividendo per il fattore di conversione mA/mV dato dal datasheet del sensore ottieni il valore in mA.
Essendo tutte costanti le puoi moltiplicare tra di loro ottenendo un solo valore numerico. che moltiplichi per la lettura analogica.
Ecco perché nel precedente intervento ho esplicitato tutti i passaggi; altrimenti non si capisce perché si passa dalle mele alle arancie.