Arduino può misurare la corrente?

Ciao a tutti,
mi sono iscritto oggi, questo è il mio primo post e sono felice di far parte della Community di Arduino!! ;D

Ho scoperto da poco Arduino e credo sia proprio il mezzo che cercavo per realizzare quei tanti progetti che ho in mente.
Sono un appassionato di elettronica ma ho iniziato da poco a studiare il linguaggio di programmazione quindi mi scuso fin da ora se vi farò delle domande che posson sembrare banali.

Bene vengo al punto.. Ho un Arduino 2009 e vorrei sapere se è possibile interfacciarlo e programmarlo in modo che mi "legga" in tempo reale la corrente che scorre durante la carica di una batteria 12v e mi riporti il valore su un display lcd HD44780 (16x2).
Come posso fare per realizzarlo?
Grazie a tutti :slight_smile:

potresti usare una resistenza di valore basso e con una buona precisione messa in serie al circuito e la utilizzi come shunt leggi la caduta ai capi della risistenza con i pin analogici .
pero' la devi dimensionare bene in base alla corrente che fluira nel circuito e in base alla precisione della conversione analogica digitale che è di 4.9 mv per divisione utilizzando come riferimento 5 v

un esempio

con una corrente da misurare di 1A poniamo come caduta sulla resistenza 1V quindi devi usare una resistenza da 1 ohm e tu andrai a leggere con la funzione analogread():
1(tensione a i capi R)/0.0049 = 204 questo è il valore che dopo nel programma dovrai riconvertire in A per poterlo mostrare sul display facendo la proporzione:
lettura : X = 1024 :5
dove x e il valore della corrente che otterrai 1024 e il valore massimo della conversione analogica digitale e 5 e il valore massimo in volt che puoi leggere.
vedi che in questo caso la lettura non è molto accurata perche al valore massimo della corrente leggiamo 200 su 1024 quindi potremmo ridurre il valore di riferimento dei pin analogici mettendo a 3 volt il pin aref cosi la precisione sara di = 3/1024=0.002929 V quindi 29,3 mV per unità
rifacendo il calcolo otterremo 1/0.00293=341 hai una precisione maggiore per quando si dovranno leggere correnti molto basse

spero di esser stato utile al tuo progetto

Grazie di cuore pdor90, si sei stato utilissimo!! :wink:
allora devo pensare di che valore e di che potenza scegliere la resistenza da collegare tra il generatore di carica e la batteria.
La corrente che fruirà nel circuito sarà massimo 10A.

ora mi metto sotto coi calcoli grazie ancora :wink:

la corrente è sempre di 10 A o man mano andra calando ?
perche allora dovrai sfruttare tutto il range di lettura del convertitore analogico digitale per poter leggere anche valori di corrente piccoli pero devi anche contenere la potenza dissipata dalla resistenza altrimenti avrai un fornetto al posto di un caricabatteria e poi la tensione sulla batteria non sare quella esatta

no la corrente sarà sempre variabile perchè proverrà da un generatore eolico o da un pannello fotovoltaico quindi la corrente dipenderà dal vento/sole.
in pratica sto cercando di capire a piccoli passi un po della logica arduino.. il mio obiettivo finale è quello di realizzare un regolatore di carica eolico/solare MPPT (inseguimento del punto di massima potenza) ad alta efficienza con controllo in logica fuzzy (la più veloce ed affidabile).

tornando ai calcoli.. prendiamo per esempio una resistenza R da 0,2ohm 1% 50W (tipo queste http://cgi.ebay.com/30-Dale-RH-50-Aluminium-Resistors-0-2-Ohm-50-Watt-1-/220696011256?pt=LH_DefaultDomain_0&hash=item336281e1f8)

con una corrente di 10A avrei una tensione ai capi di R di 10*0,2=2V
e con una corrente di 1A avrei una tensione di 0,2V
abbiamo detto che arduino ha 1024 finestre quindi impostando aref=2V con questa scelta avremmo una risoluzione di 2/1024 = 1,95mV
il primo livello di misurazione della corrente sarà di circa 10mA.

ho fatto un esempio di calcolo corretto oppure ho detto qualche castroneria? ;D

quello che non ho capito è questo: analogread():
1(tensione a i capi R)/0.0049 = 204 questo è il valore che dopo nel programma dovrai riconvertire in A
se la corrente è V/R perchè hai messo 0.0049 come valore divisore?
grazie mille per l'aiuto.. se riuscirò nel mio intento sarei felice di pubblicare poi sul forum tutto il codice così chiunque fosse interessato può farsi un ottimo regolatore di carica eolico/solare a pochi euro :wink:

1/0.0049 è il calcolo che ti dice cosa leggerai da arduino quando gli chiederai di fare l'analog read perche in quel caso
arduino ti restituisce il valore riferito ad una tensione
perche tu in quella formula fai = V/(k d itrasformazione)
questo k e quello che varia in base al AREF che imposti nel caso dei 2 V che hai scritto sara 0.00195 mV/div
cosi in caso di 1 A otterrai un valore restituito da AnalogRead() di
0.2/0.00195= 102 poi per poterlo mostrare sul dysplay dovrai riconvertire questo valore numerico in tensione e poi in corrente :
(valore analograd)(K analogread)(K shunt)
il K dello Shunt lo trovi facendi 1/(valore restivo) quindi 1/0.2 = 5
ricapitolando per il tuo 1A dovrai fare:
1020.001925=0,9792 A ;D
qui poi entrano in gioco tutti gli errori di approssimazione e di misura
però per avere una indicazione spannometrica della corrente il sistema dovrebbe andare al massimo potresti moltiplicare tutti i numeri * 1000
cosi ragioni con meno numeri decimali e guadagni come precisione e poi alla fine dividi per lo stesso fattore di moltiplicazione :slight_smile: ;D

Se vuoi abbandonare la soluzione della R per misurare la corrente puoi dare occhiata al sito allegro cercando il chip ACS714, in base al modello può misurare fino a +-30A, con una R di Shunt di soli 1.2milliohm. Sul sito di sparkfun mi pare di ricordare di aver visto una schedina già pronta.

Ciao

urca bello questo
ma quindi posso misurare anche la corrente alternata?
o solo positiva o solo negativa?

ma quindi posso misurare anche la corrente alternata?
o solo positiva o solo negativa?

Da quello che riporta il datasheet sembra puoi fare entrambe le cose. Dalla DC fino a 80KHZ f-3db.

Frequency Bandwidth f –3 dB, TA = 25°C; IP is 10 A peak-to-peak – 80 – kHz.

Gli avevo dato un'occhiata in passato è volevo acquistarlo , ma poi tra ardu, bread, ecc ho sforato il badget, per di più robotitaly non c'è l'aveva ora non so.

il mio obiettivo finale è quello di realizzare un regolatore di carica eolico/solare MPPT (inseguimento del punto di massima potenza) ad alta efficienza con controllo in logica fuzzy (la più veloce ed affidabile).

Bello cos'è la logica fuzzy?
Comunque io farei l'inseguimento separato per ogni generatore, questo poi comunica tramite I2C con la centrale che dovrà gestire il pannello di controllo, questo comunica con il circuito di ricarica tramite I2C, il quale ha il compito di far convergere le fonti collegate in un'unica risorsa da fornire alle batterie.

Già se c'è molto sole e poco vento l'elolico fornirà una tensione/corrente bassa ma ancora utile, rispetto al pannello il far convergere le sorgenti in una lo vedo un compito abbastanza complesso.

Tempo a dietro buttai giù degli appunti che non trovo più, nel mito caso erà prevista la possibilità di ricaricare dalla 220, quando manca sole e vento, avevo anche pensato di attribuire alle sorgenti una priorità, la 220 avrebbe avuto priorità più bassa.

Ciao.

Grazie per la spiegazione pdor90, ora credo di aver capito!!
Grazie anche a MauroTech.. ottima soluzione il chip ACS714, ho curiosato sul sito di Allegro ed ho trovato il chip fratello che credo sia perfetto per il mio scopo (se non fosse per l'offset) :slight_smile:

Si chiama ACS715.
Misura la corrente dc fino a 30A (c'è la versione 20A ma meglio la 30A.. non si sa mai che in un futuro mi servirà maggiore corrente da misurare). Risoluzione 133mV/A. Tensione d'alimentazione 5V. Tensione di offset: 0,5V.
Quindi la tensione che misura in base alla corrente va da 0.5V (con 0A) a 4,49V (con 30A).

Per avere quindi una risoluzione di arduino di 1024 finestre ed iniziare a misurare da 0V dovrei portare la tensione di offset a zero tramite un circuito sommatore non invertente o c'è qualche altro sistema?

Per impostare aref con una tensione inferiore a 5V posso generarla e prelevarla da un uscita digitale pwm filtrata?

Bello cos'è la logica fuzzy?

La logica fuzzy nei regolatori MPPT è un sistema di ricerca del punto di massima potenza attraverso tre fasi (molto semplificate):

  1. fuzzification (si misura P0 e P1 in un deltaT, si calcola la derivata di potenza sulla derivata di tensione e la differenza delle derivate al tempo T0 e T1, le variabili numeriche vengono trasformate in variabili linguistiche)
  2. confronto con la tabella delle regole
  3. defuzzification (variazione della potenza in base al risultato)
    E' un processo iterativo e continuo e quando si ottengono valori vicini al punto di massima potenza, la potenza non viene variata ed il sistema non oscilla ma rimane fermo.
    Maggiori info le puoi trovare qui: Logica fuzzy - Wikipedia

MauroTec il regolatore MPPT che vorrei realizzare gestisce la carica o da un generatore eolico ad asse verticale modello savonius o modello windside (quindi senza bisogno di sistemi frenanti o spinte iniziali) o da un pannello fotovoltaico, non tutti e due insieme.. quello magari più avanti ;D
Bella l'idea della priorità!
Ragazzi il risultato sull'lcd sarà simile a questo: MPPT Charger - YouTube
o ancora meglio a questo MPPT vs PWM Solar Charger - Part 2 Follow-up - YouTube
Salutoni :slight_smile:

Per avere quindi una risoluzione di arduino di 1024 finestre ed iniziare a misurare da 0V dovrei portare la tensione di offset a zero tramite un circuito sommatore non invertente o c'è qualche altro sistema?

Se vuoi agire elettronicamente non vedo altra strada, però non capisco perchè tutta sta precisione.

Vediamo se fornisco 10A a una batteria da 100Ah la ricarico in 10 ore. Ora se anziche 10 ne fornisco 11 la batteria non si guasta ma si carica prima.

Cioè potresti pure fornire 20A la battteria specie se di tipo automobilistico tollera le extra correnti.

Per impostare aref con una tensione inferiore a 5V posso generarla e prelevarla da un uscita digitale pwm filtrata?

Ottima idea, così potresti anche fare autorange.

Grazie per le info su fuzzy.
Ciao.

Si sono d'accordo che un 10% di corrente di carica in più non danneggia la batteria. La precisione di cui stiamo parlando però non è per la corrente d'uscita dal regolatore ma per la lettura della corrente d'entrata nel regolatore, cioè quella variabile proveniente dalla fonte rinnovabile.
Se sbaglio la lettura della corrente d'entrata sbaglio tutto il sistema d'inseguimento del punto di massima potenza.

Se sbaglio la lettura della corrente d'entrata sbaglio tutto il sistema d'inseguimento del punto di massima potenza.

Non avevo capito che vuoi usare la corrente di carica in tal senso. Intanto non so come vuoi inseguire la massima potenza, posso ipotizzare che pannello fotovoltaico è motorizzato, ma per l'eolico questo non fà da se, cioè non si gira dove soffia pià vento o no.

Comunque dal momento che il risultato del miglior posizionamento si traduce in corrente in ingresso al regolatore perchè non misurare quella, quindi scelta logica, in questo caso si hai bisogno di precisione, però il 1/2 Amper può bastare o no. Quindi devi fare come hai detto prima.

Ok ciao.

Credo che non hai capito cosa sia la regolazione di carica mppt.
Non ha nulla a che fare con la motorizzazione del pannello o altre cose simili. L'mmpt è una tecnica per ottimizzare l'energia che il pannello o il generatore eolico stesso già produce. Con i sistemi pwm, parte di questa energia viene persa.
questo pdf ti potrà essere utile: http://www.wutel.net/schede/schede_tecniche/Regolatori%20di%20carica%20MPPT.pdf
Salutoni :slight_smile:

Ciao a Tutti

scusate che rispondo solo ora:

@symon
Se non ho capito male hai un accumulatori di piombo e voresti misurare la corrente e farla vedere su un display.
Come giá consigliato un trasduttore di corrente come questo giá messo su basetta: http://www.watterott.com/en/ACS714-Current-Sensor-Carrier-30-to-30A hai una tensone in uscita che a 0A é di 2,5V e una segnale sopra di 185mV/A
La ditta é tedesca ma spedisce a costo di 10 ? anche in Italia.
Evitei la soluzione con la resistenza perché devi usare una resistenza piccola e il segnale deve essere amplificato. L' accumulatore di piombo viene caricato limitando la corrente ( perché l' alimentatore ha una potenza massima e anche l' accumulatore ha delle restrizioni, ma normalmente molto piú ampie rispetto l'alimentatore) e non superando una tensione ( 13,8V) per non fare gassare (produrre idrogeno e ossigeno per elettrolisi) che in un accumulatore aperto comporta perdita di acqua e fa necessitare un rabocco o in un sistema chiuso a gel fa aumentare la pressione interna e come conseguenza distrugge l'accumulatore.
Se aggiungi una resistenza il controllo della tensione non funziona perfettamente e di consequenza non distruggi l'accumulatore ma disturbi la regolazione di carica percui carica male e percui serve piú tempo.

@MauroTec

Un panello solare ha una certa curva U/I. Con poco carico (I < ) la tensione é alta ma visto che la corrente é piccola é la potenza piccola; la stessa cosa quando la corrente é alta, la tensione sará piccola.
Esiste un punto di lavoro dove il prodotto U*I ha il suo massimo e percui il panello da la massima potenza sempre in funzione della quantita di sole e l' angolo incidente. Praticamente un regolatore di carica é un alimentatore switching che regola la sua potenza per poter prendere al panello fotovoltaico la massima potenza e sul uscita é praticamente un caricabattera per batterie al piombo.

Ciao Uwe

Aggiunta:

Per impostare aref con una tensione inferiore a 5V posso generarla e prelevarla da un uscita digitale pwm filtrata?

Non funziona con la precisione necessaria.
Se vuoi poter modificare in modo dinamico il range di misura aggiungi dei amplificatori operazionali e amplifica il sgnale in 2 o 3 step e metti ogni tensione su un entrata analogica (esempio: amplificazione 1x su A0, 5x su A1 e 10x su A2) cosí scegli l' entrata a secondo della amplificazione necessaria.

Ciao Uwe

Ciao Uwe, grazie per i consigli! Fatalità proprio pochi minuti fa ho acquistato il trasduttore di corrente. Ho preso il fratello, cioè questo http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=170543618264&ssPageName=STRK:MEWNX:IT ;D

Si come primo esercizio vorrei imparare a "leggere" con Arduino la corrente durante la carica di una batteria al piombo 12v perchè successivamente vorrei costruirmi un regolatore di carica solare/eolico con Arduino e quindi la lettura di V e di I sarà fatta sull'uscita del pannello fotovoltaico o generatore eolico, quindi molto variabile per poi stabilizzarla con Arduino.

Ti vorrei chiedere un info sulla configurazione di questo trasduttore ACS715 con Arduino.
La tensione che misura varia in base alla corrente e, a differenza del ACS714, va da 0.5V (con 0A) a 4,49V (con 30A). Risoluzione 133mV/A.
Arduino ha una risoluzione sull'ingresso analogico di 1024 livelli.
Il primo livello di Arduino inizia a 0V, mentre il primo livello del trasduttore inizia a 0,5V.
Come posso ovviare a questo problema? Devo per forza traslare il segnale del trasduttore di -0.5V per portarlo in corretta lettura?
Grazie mille!

Credo che non hai capito cosa sia la regolazione di carica mppt.

Ok non l'ho capito semplicemente perchè quello MPPT, per ciò che mi riguardo è un'acronimo commerciale.

Cioè io e altri non possiamo sapere cosa c'è dietro quell'acronimo, dal momento che si tratta di un progetto chiuso e commerciale. Ora il buon uwefed, ricorre alle sue conoscenze per dire che quell'ageggio non è altro che un'alimentare a commutazione.

Ora comincio a capire almeno credo. Tu vuoi realizzare quel tipo di caricatore da te. Quindi se ho capito bene il sito che per me offre maggiori spunti è il sito di LinearTecnologic, dove puoi anche scaricare a titolo gratuito i loro software di progettazione, in testa LTswitchCAD.

Posso quindi ipotizzare che quel caricatore è in realtà un generatore di corrente costante basato su un'alimentare switching di tipo step-up/step_down. In questo caso visto che la corrente di ricarica deve essere mantenuta costante viene da se che allora devo aumenta la tensione di ricarica. E da dove lo prendo questo surplus di tensione visto che il massimo è 17-18volts?
La prendo grazie all'alimentare step-up/step-down che è in grado di lavorare in salita o in discesa.

Fin qui niente di segreto e complicato, ben diverso è realizzare quel progetto mantenendo un'efficienza di conversione prossima 90%, in un'ampio range di tensioni di ingresso.

Ok ciao.

ciao a tutti

@MauroTec
Il regolatore dei panelli fotovoltaici funge da carico a fare lavorare il panello in un ben determinato punto di lavoro.

I accumulatori al Piombo che si usano per immaganizzare l'energia non si caricano in corrente ma si carica fino una tensione massima 13,8 V per un accumulatore da 12V.

@symon
il ACS715 misura 30 Ampere solo in una direzione; puoi usarlo per misurare la corrente del panello o del generatore eolico.
Non puoi usarlo per misurare la corrente dell'accumulatore visto che quello lo carichi e lo scarichi.

Per la correspondenza 0A = 0,5V basta che sottrai il valore ADC di 0,5V dal valore ADC letto dal Arduino.

Per il regolatore di carico del panello Fotoelettrico: È meglio che Ti compri uno. CostruirTi uno ben funzionante é difficile.

Ciao Uwe

Il regolatore dei panelli fotovoltaici funge da carico a fare lavorare il panello in un ben determinato punto di lavoro.
http://www.strumentazioneelettronica.it/tecnologie/analog-test/caratteristiche-d...
I accumulatori al Piombo che si usano per immaganizzare l'energia non si caricano in corrente ma si carica fino una tensione massima 13,8 V per un accumulatore da 12V.

Si ho letto nulla di nuovo all'orizzonte. Ok cosa succede quando il pannello invecchia, il circuito continua a fare il suo lavoro?

Gli accumulatori al PB possono essere caricati sottoponendoli ad una corrente costante, monitarando la tensione. Quando Vbat è di 13.8 si passa a corrente di mantenimento. Ricaricare a corrente costante riduce i tempi di carica.

Comunque anche qui non mi pare ci siano delle novità, avevo 12 anni quando sperimantai il generatore di corrente costante.

Io comunque sarei curioso di vedere un circuito di quel tipo, sono sempre scettico ho visto troppi strombazzamenti, squillino le trombe tada tada. Abbiamo fatto quello che un bravo ingegnere avrebbe fatto, però ci siamo inventati un'acronimo in più come tradizione abbiamo spiegato come magicamente siamo in grado di inventarci 0.9A.

Tuttavia sono sempre pronto a capire e a ricredermi.

Alle volte si può apparire polemici, se è così che sia almeno costruttiva.

Sono daccordo che è meglio comprare un'ageggio di quel tipo anzichè costruirselo. Anche se al momento non ho il tempo per fare una visità al mio sito preferito (LT).
Può essere che ci sia qualche IC, che con le Application Note, permetta di sviluppare qualcosa di valido.

Ok ciao a tutti.

Ciao ragazzi,
vi ringrazio per i vostri consigli e sono consapevole che il mio progetto è ambizioso.. ma sono di natura ottimista e sono deciso a continuare finchè non l'avrò realizzato! :wink: ..sia per una mia soddisfazione personale, sia perchè penso che questo progetto sarà utile a tutti coloro che amano le energie rinnovabili e amano risparmiare sulla bolletta della luce.
Credo quindi che dall'unione delle nostre conoscenze, in un clima costruittivo, possiamo fare davvero grandi cose.

Due precisazioni per MauroTec

Ok non l'ho capito semplicemente perchè quello MPPT, per ciò che mi riguardo è un'acronimo commerciale.

L'MPPT non è un acronimo commerciale. E' un acronimo che indentifica un particolare sistema di carica che chiunque è libero di fare.

io e altri non possiamo sapere cosa c'è dietro quell'acronimo, dal momento che si tratta di un progetto chiuso e commerciale

non è nè un progetto chiuso nè commerciale. Ci sono pure dei libri al riguardo, aperti a tutti coloro che vogliono sapere, imparare e pure costruirselo.

@symon
il ACS715 misura 30 Ampere solo in una direzione; puoi usarlo per misurare la corrente del panello o del generatore eolico.
Non puoi usarlo per misurare la corrente dell'accumulatore visto che quello lo carichi e lo scarichi.

Si esatto.. infatti mi serve solo per misurare la corrente che scorre dal pannello/generatore eolico alla batteria.
In base al valore di corrente e tensione letta, l'algoritmo fuzzy gestirà la carica attraverso un MOSFET comandato in PWM (PWM che sono indeciso se portare o ad una frequenza di 64kHz modificando il prescaler del Timer 0 di Arduino o ad una frequenza di 32kHz modificando il prescaler del Timer 2). Della batteria mi interessa sapere solo la tensione.

Uwe mi puoi postare un esempio di codice per sottrarre il valore ADC di 0,5V del trasduttore dal valore ADC letto dal Arduino?
Non vedo l'ora di fare delle prove :smiley:
Grazie a tutti ragazzi!!