Utilizzo di un sensore di corrente Allegro ACS712 CC/CA con codice Arduino
In questo tutorial impareremo come utilizzare il sensore di corrente Allegro ACS712 per misurare sia la corrente alternata (AC) che la corrente continua (DC) con un Arduino. Il sensore ACS712 fornisce in uscita una tensione proporzionale alla corrente che lo attraversa, permettendoci di leggere e visualizzare facilmente i valori di corrente sul monitor seriale dell'Arduino. Questo progetto è ideale per chi desidera monitorare la corrente in varie applicazioni, come alimentatori o sistemi a batteria.

Costruiremo un semplice circuito che collega il sensore ACS712 all'Arduino e poi scriveremo un programma per leggere l'uscita del sensore. Il risultato atteso è avere letture di corrente in tempo reale visualizzate sul monitor seriale. Per chiarimenti sull'implementazione, assicurati di controllare il video (nel video a 02:00).
Hardware spiegato
Il sensore di corrente Allegro ACS712 è un modulo compatto che può misurare correnti fino a 30 A, a seconda della versione scelta. Ha tre pin: VCC per l'alimentazione, GND per la massa, e un pin di uscita che fornisce la tensione corrispondente alla corrente misurata. Il sensore utilizza il principio dell'effetto Hall, in cui la corrente che scorre attraverso un conduttore genera un campo magnetico. Questo campo viene rilevato e convertito in una tensione, la quale viene poi inviata all'Arduino.
Il modulo è disponibile in diverse correnti nominali (5A, 20A e 30A) e fornisce livelli di tensione rispettivamente di 185 mV/A, 100 mV/A e 66 mV/A. Ciò significa che per ogni ampere di corrente che attraversa il sensore si ottiene una corrispondente tensione di uscita che può essere letta e elaborata. Questa caratteristica lo rende versatile per varie applicazioni.
Dettagli della scheda tecnica
| Produttore | Allegro Microsystems |
|---|---|
| Numero di parte | ACS712ELCTR-30A-T |
| Tensione logica/I/O | 4,5-5,5 V |
| Tensione di alimentazione | 5 V |
| Corrente di uscita (per canale) | 30 A massimo |
| Linee guida sulla frequenza PWM | Non applicabile |
| Soglie logiche di ingresso | N/D |
| Caduta di tensione / RDS(on) / saturazione | 1.2 mΩ |
| Limiti termici | Massimo 150 °C |
| Pacchetto | TO-220 |
| Note / varianti | Disponibile in 5A, 20A e 30A |
- Assicurarsi che il cablaggio sia corretto per evitare cortocircuiti.
- Usare un filo del calibro appropriato per le correnti nominali (12 AWG per 30 A).
- Monitorare la temperatura del modulo durante il funzionamento.
- Prendi in considerazione l'aggiunta di un dissipatore di calore per applicazioni ad alta corrente.
- Calibra l'uscita del sensore in base alla tua applicazione specifica.
Istruzioni di cablaggio

Per collegare il sensore Allegro ACS712 al tuo Arduino, inizia collegando il pin VCC dell'ACS712 al pin 5V dell'Arduino. Successivamente, collega il pin GND del sensore a uno dei pin GND dell'Arduino. Il pin di uscita dell'ACS712 dovrebbe essere collegato al pin di ingresso analogico A0 dell'Arduino.
Per la misurazione della corrente, collega il carico in serie con il sensore. Ciò significa che il filo positivo della tua sorgente di alimentazione deve essere collegato a uno dei terminali di ingresso del sensore di corrente, mentre l'altro terminale va collegato al carico. L'altro lato del carico deve ritornare alla sorgente di alimentazione, completando il circuito. Assicurati di utilizzare una sezione di filo adeguata per la corrente che stai misurando per evitare il surriscaldamento.
Esempi di codice e guida passo passo
Il seguente frammento di codice inizializza il pin analogico e configura il monitor seriale:
#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC = 5.0; // supply voltage is from 4.5 to 5.5V. Normally 5V.
Qui definiamoVINCome il pin di ingresso analogico a cui è collegata l'uscita del sensore. Impostiamo anche la tensione di alimentazioneVCCa 5 V.

Nella funzione loop(), leggiamo la tensione dal sensore ACS712 e calcoliamo la corrente:
float voltage_raw = (5.0 / 1023.0) * analogRead(VIN); // Read the voltage from sensor
float current = voltage / sensitivity[model]; // Calculate current based on sensitivity
Qui leggiamo la tensione grezza dal sensore e la convertiamo nella corrente effettiva usando l'array di sensibilità basato sul modello del sensore utilizzato.
Infine, stampiamo le letture di corrente sul monitor seriale:
if (abs(current) > cutOffLimit) {
Serial.print("V: ");
Serial.print(voltage, 3); // print voltage with 3 decimal places
Serial.print("V, I: ");
Serial.print(current, 2); // print the current with 2 decimal places
Serial.println("A");
} else {
Serial.println("No Current");
}
Questa sezione verifica se la corrente supera un limite di cutoff definito e stampa i valori di tensione e corrente sul monitor seriale. Se la corrente è al di sotto della soglia, stampa Nessuna corrente.
Per il codice completo, consultare il codice caricato sotto l'articolo.
Dimostrazione / Cosa aspettarsi
Quando esegui il codice e alimenti il circuito, dovresti vedere le letture di corrente visualizzate sul monitor seriale. Man mano che regoli il carico, le letture dovrebbero cambiare di conseguenza, purché la corrente sia al di sopra del limite di cutoff. Fai attenzione alla temperatura del sensore, specialmente quando operi vicino ai suoi valori massimi.
/*
*
* Arduino Sketch for Allegro ACS712 Current Sensor
* This sensor can measure current at a range of up to 30A.
* It operates with 5V.
* Please watch the video instruction and explanation for this code.
*
* Written by Ahmad Shamshiri on Sunday, June 17, 2018 at 22:06 in Ajax, Ontario, Canada
* for Robojax.com
* View the video instruction at https://youtu.be/DVp9k3xu9IQ
* This code has been downloaded from Robojax.com
*/
#define VIN A0 // define the Arduino pin A0 as voltage input (V in)
const float VCC = 5.0;// supply voltage is from 4.5 to 5.5V. Normally 5V.
const int model = 2; // enter the model number (see below)
float cutOffLimit = 1.01;// set the current which, below that value, doesn't matter. Or set 0.5
/*
"ACS712ELCTR-05B-T",// for model use 0
"ACS712ELCTR-20A-T",// for model use 1
"ACS712ELCTR-30A-T"// for model use 2
The sensitivity array is holding the sensitivity of the ACS712
current sensors. Do not change. All values are from page 5 of the data sheet
*/
float sensitivity[] ={
0.185,// for ACS712ELCTR-05B-T
0.100,// for ACS712ELCTR-20A-T
0.066// for ACS712ELCTR-30A-T
};
const float QOV = 0.5 * VCC;// set quiescent Output voltage of 0.5V
float voltage;// internal variable for voltage
void setup() {
//Robojax.com ACS712 Current Sensor
Serial.begin(9600);// initialize serial monitor
Serial.println("Robojax Tutorial");
Serial.println("ACS712 Current Sensor");
}
void loop() {
//Robojax.com ACS712 Current Sensor
float voltage_raw = (5.0 / 1023.0)* analogRead(VIN);// Read the voltage from sensor
voltage = voltage_raw - QOV + 0.012 ;// 0.000 is a value to make voltage zero when there is no current
float current = voltage / sensitivity[model];
if(abs(current) > cutOffLimit ){
Serial.print("V: ");
Serial.print(voltage,3);// print voltage with 3 decimal places
Serial.print("V, I: ");
Serial.print(current,2); // print the current with 2 decimal places
Serial.println("A");
}else{
Serial.println("No Current");
}
delay(500);
}
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Scheda tecnica (pdf)
-
Allegro ACS712 Sensore di Corrente AC/DC 4A, 20A, 30A Scheda Dati
robojax-allegro_ACS712_current_sensor.pdf0.65 MB
File Fritzing
-
Sensore di corrente Allegre ACS712
Allegreo ACS712 Current Sensor.fzpz0.03 MB