Search Code

Použitie Allegro ACS712 DC/AC prúdového senzora s Arduino kódom

Použitie Allegro ACS712 DC/AC prúdového senzora s Arduino kódom

V tomto návode sa naučíme, ako používať prúdový senzor Allegro ACS712 na meranie striedavého aj jednosmerného prúdu s Arduinom. Senzor ACS712 vydáva napätie úmerné prúdu, ktorý ním preteká, čo nám umožňuje jednoducho čítať a zobrazovať hodnoty prúdu na sériovom monitore Arduina. Tento projekt je ideálny pre tých, ktorí chcú monitorovať prúd v rôznych aplikáciách, ako sú napájacie zdroje alebo batériové systémy.

Postavíme jednoduchý obvod, ktorý pripojí senzor ACS712 k Arduinu, a potom napíšeme program na čítanie výstupu senzora. Očakávaným výsledkom sú údaje o prúde v reálnom čase zobrazené na sériovom monitore. Pre objasnenie implementácie si určite pozrite video (vo videu o 02:00).

Vysvetlenie hardvéru

Prúdový senzor Allegro ACS712 je kompaktný modul, ktorý dokáže merať prúd až do 30A, v závislosti od verzie, ktorú si vyberiete. Má tri piny: VCC pre napájanie, GND pre uzemnenie a výstupný pin, ktorý poskytuje napätie zodpovedajúce nameranému prúdu. Senzor využíva Hallov efekt, kde prúd prechádzajúci vodičom generuje magnetické pole. Toto pole je detegované a prevedené na napätie, ktoré sa potom posiela do Arduina.

Modul je dostupný v rôznych prúdových rozsahoch (5A, 20A a 30A) a vydáva úrovne napätia 185 mV/A, 100 mV/A a 66 mV/A. To znamená, že za každý ampér prúdu pretekajúceho senzorom získate zodpovedajúci napäťový výstup, ktorý môžete čítať a spracovávať. Táto funkcia ho robí univerzálnym pre rôzne aplikácie.

Podrobnosti z datasheetu

VýrobcaAllegro Microsystems
Označenie dieluACS712ELCTR-30A-T
Logické/IO napätie4,5–5,5 V
Napájacie napätie5 V
Výstupný prúd (na kanál)30 A max
Odporúčanie pre PWM frekvenciuN/A
Logické prahové hodnoty vstupuN/A
Pokles napätia / RDS(on) / saturácia1,2 mΩ
Tepelné limity150 °C max
PuzdroTO-220
Poznámky / variantyDostupné v 5A, 20A a 30A

  • Zabezpečte správne zapojenie, aby nedošlo k skratu.
  • Použite vodiče s vhodným prierezom pre prúdové hodnoty (12 AWG pre 30A).
  • Sledujte teplotu modulu počas prevádzky.
  • Zvážte pridanie chladiča pre aplikácie s vyšším prúdom.
  • Kalibrujte výstup senzora podľa vašej konkrétnej aplikácie.

Pokyny na zapojenie

Arduino wiring for Allegro ACS712 current sensor

Na zapojenie senzora Allegro ACS712 k Arduinu začnite pripojením pinu VCC senzora ACS712 na pin 5V na Arduine. Potom pripojte pin GND senzora na jeden z pinov GND na Arduine. Výstupný pin ACS712 by mal byť pripojený na analógový vstupný pin A0 na Arduine.

Na meranie prúdu pripojte záťaž do série so senzorom. To znamená, že kladný vodič z vášho napájacieho zdroja by mal ísť do jedného zo vstupných terminálov prúdového senzora, zatiaľ čo druhý terminál sa pripojí k záťaži. Druhá strana záťaže by sa mala vrátiť k napájaciemu zdroju, čím sa dokončí obvod. Uistite sa, že používate vodiče s vhodným prierezom pre prúd, ktorý meriate, aby nedošlo k prehriatiu.

Príklady kódu a vysvetlenie

Nasledujúci úryvok kódu inicializuje analógový pin a nastaví sériový monitor:

#define VIN A0 // definuje pin A0 Arduina ako napäťový vstup (V in)
const float VCC = 5.0; // napájacie napätie je od 4,5 do 5,5V. Normálne 5V.

Tu definujeme VIN ako analógový vstupný pin, na ktorý je pripojený výstup senzora. Tiež nastavíme napájacie napätie VCC na 5V.

Vo funkcii loop čítame napätie zo senzora ACS712 a vypočítame prúd:

float voltage_raw = (5.0 / 1023.0) * analogRead(VIN); // Prečítanie napätia zo senzora
float current = voltage / sensitivity[model]; // Výpočet prúdu na základe citlivosti

Tu čítame surové napätie zo senzora a prevádzame ho na skutočný prúd pomocou poľa citlivosti na základe modelu použitého senzora.

Nakoniec vytlačíme hodnoty prúdu na sériový monitor:

if (abs(current) > cutOffLimit) {
    Serial.print("V: ");
    Serial.print(voltage, 3); // vytlačí napätie s 3 desatinnými miestami
    Serial.print("V, I: ");
    Serial.print(current, 2); // vytlačí prúd s 2 desatinnými miestami
    Serial.println("A");
} else {
    Serial.println("No Current");
}

Táto časť skontroluje, či prúd prekračuje definovaný limit cutoff, a vytlačí hodnoty napätia a prúdu na sériový monitor. Ak je prúd pod prahom, vypíše "No Current".

Pre celý kód sa obráťte na kód načítaný pod článkom.

Demonštrácia / Čo očakávať

Keď spustíte kód a napájate obvod, mali by ste vidieť hodnoty prúdu zobrazené na sériovom monitore. Pri úprave záťaže by sa hodnoty mali zodpovedajúcim spôsobom meniť, za predpokladu, že prúd je nad limitom cutoff. Buďte opatrní s teplotou senzora, najmä pri prevádzke blízko jeho maximálnych hodnôt.

Images

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
Language: 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);
}

Resources & references

No resources yet.

Files📁

Datasheet (pdf)

Fritzing File