Misurare una corrente DC o AC con Arduino

Dopo la misurazione delle tensioni, quella delle correnti continue (DC) o alternate (AC) è una delle misurazioni più comuni e utili per lo scienziato dilettante. In questo articolo, pertanto, vedremo come ciò sia possibile non solo usando degli strumenti classici – quali l’amperometro (che richiede l’inserimento in un circuito DC o AC) e la pinza amperometrica (che effettua misurazioni AC senza contatto) – ma anche usando una resistenza di shunt o degli appositi sensori “a effetto Hall”. Questi ultimi due metodi hanno il vantaggio di permettere di acquisire le misure su PC, ad esempio tramite una scheda Arduino.

Il modo più comune per misurare la corrente in un circuito è quello di interrompere il circuito aperto e inserire un “amperometro” in serie (cioè in linea) con il circuito. Poiché la misurazione della corrente in questo modo richiede che lo strumento sia reso parte del circuito, è un tipo di misurazione più difficile e delicato da eseguire rispetto a quella della tensione. I multimetri digitali dispongono di un jack separato per inserire la spina del puntale quando si misura una corrente elevata (di solito fino a 10 A).

Quando un amperometro viene posto in serie con un circuito, idealmente non fa calare la tensione quando la corrente passa attraverso di esso. In altre parole, si comporta un po’ come un pezzo di filo, con una resistenza molto scarsa da un puntale all’altro. Di conseguenza, un amperometro fungerà da cortocircuito se collocato attraverso i terminali di una notevole fonte di tensione. In tal caso, si verificherà un aumento di corrente che potrebbe potenzialmente danneggiare il misuratore.

I metodi classici per misurare una corrente: multimetro e pinza amperometrica. Ne puoi trovare alcuni esempi a buon prezzo qui.

Sebbene esistano sensori dedicati per misurare la corrente – come ad esempio l’Allegro Microsystems Acs712 (usato nel semplice metodo illustrato più avanti) – la prima parte di quest’articolo descrive il metodo più “tradizionale”: utilizzando una resistenza di shunt di basso valore. L’uso di uno shunt offre molta più flessibilità nell’intervallo corrente in cui è possibile effettuare la misurazione, piuttosto che essere “bloccati” nelle gamme di 5A o 30A dei sensori ad effetto Hall dedicati.

La misurazione della corrente con uno shunt

Una resistenza di shunt è semplicemente una resistenza elettrica che è utilizzata per misurare la corrente elettrica, continua (DC) o alternata (AC). Ciò viene fatto misurando la caduta di tensione attraverso la resistenza in questione. Un dispositivo per misurare la corrente elettrica è chiamato un amperometro. La maggior parte degli amperometri moderni (o la funzione amperometrica di un multimetro) misura la caduta di tensione su una resistenza di precisione avente una resistenza elettrica nota.

Vediamo innanzitutto come effettuare la conversione della corrente in tensione. I pin di ingresso analogico di Arduino misurano la tensione (generalmente tra 0 e 5V), quindi come convertire la corrente in tensione (cioè in volt)? Secondo la legge di Ohm, c’è una relazione lineare molto semplice tra la corrente che scorre attraverso un circuito e la tensione applicata al circuito: la corrente I che fluisce attraverso un conduttore tra due punti è proporzionale alla differenza di tensione V tra questi punti (I = V / R).

La legge di ohm applicata a un semplicissimo circuito elettrico.

La “costante di proporzionalità” R della legge di Ohm (meglio nota nella forma V = R x I) è conosciuta come resistenza, e viene misurata in Ohm. Ad esempio, se abbiamo una resistenza nota e fissa di 2 Ohm e applichiamo 6 V attraverso di essa, allora la corrente che lo attraversa deve essere I = V / R = 6 / 2 = 3 ampere. Allo stesso modo, se una resistenza di 10 ohm ha 2 ampere di corrente che la attraversano, allora la tensione applicata ai capi della resistenza deve essere V = 2 x 10 = 20 volt.

Nel seguente circuito, la resistenza è stata cablata in serie con una lampadina. La lampadina è il carico e desideriamo sapere quanta corrente usa. È abbastanza ovvio che la stessa corrente (I) attraversa la lampadina e la resistenza di shunt posta in serie al carico in questione; quindi, misurando la tensione attraverso la resistenza, possiamo usare la legge di Ohm per calcolare la corrente che attraversa sia la resistenza sia la lampadina, che è appunto quella che ci interessa.

La stessa corrente attraversa sia il carico sia la resistenza di shunt.

Facciamo un paio di ipotesi: (1) Vogliamo misurare valori correnti tra 0 e massimo 5A; (2) Useremo un pin di ingresso analogico di Arduino (ad es. A0) per misurare la tensione attraverso la resistenza. Dato che la massima tensione di ingresso analogico di Arduino è di 5V, sarebbe conveniente se potessimo scegliere un valore di resistenza tale che ci siano max 5V attraverso di essa quando ci sono 5A di corrente nel circuito. Dalla legge di Ohm, R = V / I, così devo usare una resistenza R = 5 / 5 = 1 Ohm.

Vi sono però diversi problemi con questo approccio semplice. Se stiamo usando, per esempio, una lampadina da 12 V, è ragionevole che VT sia di 12 volt. Se vogliamo una caduta di tensione di 5V attraverso (cioè ai capi del)la resistenza, ciò lascia solo 12 – 5 = 7 V per la lampadina. L’altro problema riguarda la “potenza”. Con “soli” 5 ampere che attraversano una resistenza di 1 Ohm, ci sarà molto calore generato, pari a I2 x R = 25 W, per cui occorre una resistenza di potenza adeguata.

Alcune resistenze di shunt di precisione da 1 fino 10 ohm e 100 W dissipati. Puoi trovarne alcune simili online cliccando qui.

Ciò, soprattutto, è uno spreco di energia. Mentre questa specie di energia “persa” potrebbe essere accettabile quando misuriamo correnti molto elevate (dell’ordine di centinaia di ampere negli amplificatori), è troppo alta quando lavoriamo con basse correnti. Per entrambi questi motivi, è preferibile utilizzare un valore di resistenza molto più basso. Infatti, più bassa è la resistenza, minore sarà la tensione “persa” su di essa e meno calore verrà generato (sono entrambi proporzionali a R).

Sfortunatamente, più bassa è le tensione che creiamo ai capi della resistenza (scegliendola di valore più basso), minore è la tensione per il pin di ingresso analogico di Arduino. Anche se è una sorta di “scambio”, l’aspetto importante è che la resistenza che aggiungiamo al circuito deve avere un effetto minimo sul circuito. È inutile, evidentemente, cercare di misurare la corrente in un circuito se noi influenziamo negativamente quella corrente con l’atto stesso di provare a misurarla.

Per tale motivo, sono disponibili in commercio resistenze a valore ohmico molto basso che sono generalmente note come shunt (e classificate in ohm e talvolta anche in mV). Il nome deriva dal loro uso nei vecchi amperometri a bobina mobile, in cui uno shunt era cablato direttamente attraverso i terminali dell’amperometro. Lo scopo era di “deviare” la maggior parte della corrente del circuito dall’amperometro, progettato per gestire solo pochi milliampere per deviare l’ago a fondo scala.

Una resistenza di shunt DC/AC da 30A e 75 mV simile a quelle che trovi qui.

Misurazione di correnti DC e AC con Arduino

Se usiamo una resistenza di shunt da 0,01 ohm nel circuito con la lampadina illustrato in precedenza, come previsto, con 1 ampere di corrente continua (DC) che passa attraverso la lampadina e lo shunt, la tensione attraverso lo shunt è di 10 millivolt (V = R x I = 0,01 x 1 = 0,01 V). Con una scheda Arduino Mega possiamo apprezzare differenze di tensione fino a 1 mV, quindi è la scheda Arduino più adatta per la misurazione di correnti, mentre la classica Arduino Uno è poco utile con le resistenze di shunt.

In realtà, mentre con un buon multimetro non avremo difficoltà a misurare con precisione tensioni così basse, pure con la Arduino Mega siamo davvero al limite della capacità di risoluzione della scheda. La risoluzione di una scheda Arduino Uno potrebbe essere abbastanza buona se stiamo misurando le decine di ampere degli amplificatori, ma non è utile se stiamo provando a misurare la corrente nell’intervallo da 1 a 5 ampere, e quella della Arduino Mega è poco utile nell’intervallo da 0 a 1 A.

La scheda Arduino Mega permette una migliore risoluzione nelle misure.

Se potessimo aumentare la tensione rilevata ai capi della resistenza anche solo di un fattore di x10 – in modo da avere nel nostro esempio una tensione di 100 mV anziché di 10 mV con 1A di corrente – con Arduino aumenteremmo pure la risoluzione di un fattore 10 (potendo così rilevare una corrente minima di 50 mA anziché di 0,5A), che è probabilmente almeno altrettanto accurata di quanto la maggior parte delle altre apparecchiature di misurazione a disposizione di un dilettante possano misurare.

Per aumentare la tensione rilevata ai capi della resistenza, possiamo utilizzare l’amplificatore operazionale AD623AN, che è semplice da usare, e disponibile in un pacchetto DIL standard a 8 pin, alimentabile con i 5V di Arduino (assorbe solo pochi mA). Come si può vedere dal relativo datasheet, il suo guadagno è impostato con una singola resistenza all’1% (o una resistenza variabile preimpostata). Pertanto, con una corrente di 1A , l’uscita dall’amplificatore di tensione è di 100mV, cioè un aumento di x10.

Il circuito con amplificatore operazionale da collocare fra la resistenza di shunt e la scheda di Arduino per aumentare la risoluzione in tensione.

Fin qui abbiamo parlato di misurazioni di correnti continue (DC). I circuiti che trasportano corrente alternata (AC) hanno una complessità aggiunta, perché il termine “resistenza” si applica solo ai circuiti DC. Tutti i circuiti hanno induttanza e capacità che dipendono dalla frequenza della corrente alternata e che, combinati con la resistenza del circuito, determinano l’impedenza totale del circuito. Per semplicità, qui supporremo che l’induttanza e la capacità non abbiano influenza sulla legge di Ohm.

In tal caso, la differenza rispetto a quanto illustrato per il caso DC è che ai capi della resistenza di shunt dovremo misurare una tensione in alternata (AC) anziché in corrente continua (DC). Con un multimetro basta, naturalmente, usare la funzione di misurazione di tensione AC. Con Arduino, invece, abbiamo illustrato come si misura una tensione AC nell’articolo Misurare una tensione DC, AC o PWM con Arduino, cui pertanto rimandiamo il lettore per maggiori dettagli sull’argomento.

Qui ricordiamo solo che basta usare un diodo raddrizzatore e un condensatore di livellamento. Ad esempio, potremmo usare un diodo Schottky 1N5819 (che lavora con tensioni fino a 40 V), ma altri diodi raddrizzatori andrebbero ugualmente bene, come pure un raddrizzatore a ponte. Per il condensatore, suggeriamo di utilizzare un condensatore elettrolitico da 100 μF. Si noti che la tensione DC all’uscita di un circuito con raddrizzatore a ponte è circa 1,4 volte più elevata di quella AC in ingresso.

Il semplice circuito AC -> DC con diodo raddrizzatore e condensatore.

Dunque, per misurare la corrente AC con Arduino la tensione va raddrizzata con un diodo o con un raddrizzatore a ponte e opportunamente livellata per ridurre le fluttuazioni (ripple). La tensione DC livellata così ottenuta può essere inviata all’ingresso analogico (ad es. A0) di Arduino, dato che con le correnti tipicamente usate da un dilettante la tensione DC così ottenuta dovrebbe essere inferiore a 5V. Altrimenti si aggiungerà un partitore di tensione, come illustrato nell’articolo citato.

Misurazione della corrente DC con un sensore di Hall

Un modo alternativo per misurare una corrente è quello di usare un sensore di Hall, o “a effetto Hall”. Si tratta di un trasduttore che varia la sua tensione di uscita senza contatto, in risposta ad un campo magnetico, quindi – a differenza del multimetro e del metodo dello shunt – non perturba il sistema di cui si vuole misurare la corrente. Si tratta, in sostanza, dello stesso sistema di misurazione adottato dalle pinze amperometriche, ma con il vantaggio di potersi interfacciare a un PC.

In questa parte dell’articolo vedremo come misurare la corrente continua (DC) e poi alternata (AC) usando il sensore di corrente lineare Acs712 (acquistabile ad esempio qui) basato sull’effetto Hall e una scheda Arduino Uno. L’Acs712 può misurare la corrente (DC o AC) con precisione, se gestito correttamente. Si noti, infatti, che molti blog su internet per interfacciare il sensore di corrente Acs712 con Arduino e altri microcontrollori misurano la corrente con formule (derivate dal sensore di corrente Acs712) che non sono precise.

Descrizione dei terminali del sensore Acs712 (in alto), piedinatura del relativo chip (in basso a sinistra) e (in basso a destra) un esempio di applicazione tipica del chip.

Collega il sensore in serie al sistema di cui desideri misurare la corrente. In pratica, taglia il cavo del circuito e collega un’estremità del cavo a IP+ e l’altra a IP-. Ricorda che la corrente può essere misurata solo in serie. Quindi non collegare mai il sensore in parallelo, perché potresti danneggiarlo. Invece, Vout è il pin di uscita in tensione: l’Acs712, infatti, emette su tale pin un segnale di tensione analogico in corrispondenza di qualsiasi variazione di corrente tra i pin IP + e IP-.

Vout (Q) è l’uscita del dispositivo quando la corrente primaria è zero. Per una tensione di alimentazione uni-polare, rimane nominalmente a Vcc / 2. Quindi, Vcc = 5 V si traduce in Vout (Q) = 2,5 V. Se l’Acs712 funziona su 5V (cioè Vcc = 5V) e la corrente di ingresso (cioè fra IP+ e IP-) è 0, Vout sarà 2,5 V, poiché 2,5 V è la tensione di base all’ingresso di 5V, e qualsiasi cambiamento nella corrente di ingresso porterà a cambiamenti nella tensione di uscita. Vout diminuisce quando la corrente inizia a scorrere.

Collegamento del sensore Acs712 per misurare una corrente DC.

L’Acs712 è disponibile sul mercato in tre possibile versioni:

  • ACS712ELCTR-05B-T: può misurare la corrente da 5 a -5 Ampere. Dove la variazione di 185 mV nella tensione di uscita dallo stato iniziale rappresenta una variazione di 1 Ampere nella corrente di ingresso (quindi una variazione di 10 mA produce una variazione di 1,85 mV);
  • ACS712ELCTR-20A-T: può misurare una corrente da 20 a -20 Ampere. Dove la variazione di 100 mV nella tensione di uscita dallo stato iniziale rappresenta una variazione di 1 Ampere nella corrente di ingresso (quindi una variazione di 10 mA produce una variazione di 1,00 mV);
  • ACS712ELCTR-30A-T: può misurare una corrente da 30 a -30 Ampere. Dove la variazione di 66 mV nella tensione di uscita dallo stato iniziale rappresenta una variazione di 1 Ampere nella corrente di ingresso (quindi una variazione di 10 mA produce una variazione di 0,66 mV).

Dunque, questo sensore fornisce 1,85 mV di variazione per ogni variazione di 10 mA, mentre il metodo dello shunt illustrato in precedenza (se non amplificato con un’operazionale) per 1 A fornisce 10 mV, ovvero per 10 mA fornisce 0,1 mV. Dunque, il sensore di Hall ha la risoluzione migliore fra i tre metodi (1-Shunt, 2-Shunt + amplificatore x10, 3-Sensore di Hall). Pertanto, rappresenta in generale la soluzione preferibile, sebbene richieda tipicamente l’uso di un PC interfacciato ad Arduino.

Sul mercato sono disponibili sensori di corrente Acs712 facili da installare e le connessioni sono abbastanza semplici. Hanno tre piedini. Due sono pin di alimentazione Vcc e Gnd. Il terzo è il pin di uscita. È presente anche un connettore a 2 poli per inserire il filo del dispositivo di cui è necessario misurare la corrente. Nel codice di seguito trovi la formula per misurare la corrente continua (DC) con questo sensore di corrente. Puoi quindi copiare tale codice sul tuo Arduino e modificarlo a piacimento.

Il codice per misurare correnti DC con il sensore Acs712 è scaricabile da qui.

Misurazioni in AC con sensore di Hall e Arduino

Il sensore di corrente Acs712 può misurare sia la corrente continua (DC) che quella alternata (AC). In altre parole, la corrente misurata viene misurata in due direzioni. Ciò significa che se campioniamo abbastanza velocemente e abbastanza a lungo, siamo sicuri di trovare il picco in una direzione e il picco in un’altra direzione. La formula che ho mostrato, però, è solo per la misurazione della corrente continua. Non è quindi possibile utilizzarla per misurare la corrente alternata.

Con entrambi i picchi noti, è questione di conoscere la forma della forma d’onda per calcolare la corrente. Nel caso della rete elettrica di casa (che è a 50 Hz) e della corrente alternata a bassa tensione (che ha la medesima frequenza), sappiamo che la forma d’onda è un’onda sinusoidale. Ciò ci permette di applicare una formula elettronica di base per ottenere il risultato cercato. Pertanto, non è difficile modificare il codice per permettere misurazioni di corrente alternata con il sensore Acs712.

Nella maggior parte dei casi, un’espressione della corrente alternata si troverà in un valore noto come RMS (Root Mean Square) o “valore efficace”. Per utilizzare il sensore di corrente ACS712 per misurare la corrente AC, è importante capire come calcolare un valore di corrente RMS dalle letture del dispositivo. La formula che viene applicata qui per determinare il valore efficace è molto semplice ed è presente in qualsiasi manuale di base sull’elettricità o sull’elettronica:

La formula per calcolare la tensione efficace (RMS) dalla tensione di picco.

Con un Acs712, le misurazioni di corrente vengono riportate con un’uscita di tensione. Noi semplicemente calcoleremo i volt RMS e applicheremo il fattore di scala dell’Acs712. La conversione per un’onda sinusoidale con offset a 0 V (come la tensione di rete) viene eseguita come segue: (1) Trova la tensione da picco a picco (Vpp); (2) Dividi la tensione picco-picco per due per ottenere la tensione di picco; (3) Moltiplica la tensione di picco per 0,707 per ottenere la tensione efficace (Vrms).

Una volta calcolata la tensione RMS, è sufficiente moltiplicare per il fattore di scala del particolare Acs712 usato per ottenere il valore RMS della corrente che viene misurata. Questo metodo di misurazione è utilizzabile per tutte le correnti alternate (0-5 A, 0-20 A, 0-30 A) previste dal modello di sensore scelto fra i tre disponibili. Si noti che, a differenza del metodo dello shunt, le tensioni in uscita dal sensore sono sempre positive, essendo riferite alla tensione di 2,5 V (che si ha con corrente 0 A).

I valori forniti dall’Acs712 cambiano costantemente durante la misurazione della corrente AC. Per assicurarti di essere arrivato molto vicino alla ricerca dei picchi, devi campionare abbastanza velocemente e abbastanza a lungo. Dato che l’alimentazione di rete ha una frequenza di 50 Hz, Arduino sarà abbastanza veloce a condizione che esegua campionamenti consecutivi con un’interruzione minima o nulla. Inoltre, devi scegliere un Acs712 adatto per la quantità di corrente richiesta dal tuo carico.

Come connettere i componenti per misurare una corrente con il sensore Acs712.

Collega i componenti come mostrato nello schema qui sopra. Dopodiché copia, incolla e carica il codice qui sotto, che puoi scaricare dal link indicato nella didascalia. Dai anche un’occhiata a come faccio una chiamata alla funzione ‘getVPP’ dal loop principale. In questa funzione, prendo campioni AC interrotti per un secondo mentre registro i valori massimo e minimo. Da ciò calcolerò la tensione picco-picco misurata. Ho trovato ciò estremamente efficace per la frequenza di rete (50 Hz).

L’inizio dello sketch per misurare la corrente con il sensore Acs712  e che puoi scaricare per intero (per copiarlo in Arduino) da qui.