Cerca codice

Utilizzo di un sensore di corrente Allegro ACS712 CC/CA con codice Arduino

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

ProduttoreAllegro Microsystems
Numero di parteACS712ELCTR-30A-T
Tensione logica/I/O4,5-5,5 V
Tensione di alimentazione5 V
Corrente di uscita (per canale)30 A massimo
Linee guida sulla frequenza PWMNon applicabile
Soglie logiche di ingressoN/D
Caduta di tensione / RDS(on) / saturazione1.2 mΩ
Limiti termiciMassimo 150 °C
PacchettoTO-220
Note / variantiDisponibile 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

Arduino wiring for Allegro ACS712 current sensor

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.

Immagini

Arduino wiring for Allegro ACS712 current sensor
Arduino wiring for Allegro ACS712 current sensor
ACS712_in_series_with_load
ACS712_in_series_with_load
allegro_ACS712_module-1
allegro_ACS712_module-1
allegro_ACS712_module-2
allegro_ACS712_module-2
allegro_ACS712_module-4
allegro_ACS712_module-4
allegro_ACS712_module-0
allegro_ACS712_module-0
130-Allegro ACS712 DC/AC current sensor with Arduino code
Lingua: C++
/*
 * 
 * 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)

File Fritzing