Soek Kode

Gebruik van 'n Allegro ACS712 DC/AC Stroomsensor met Arduino-kode

Gebruik van 'n Allegro ACS712 DC/AC Stroomsensor met Arduino-kode

In hierdie tutoriaal gaan ons leer hoe om die Allegro ACS712-stroomsensor te gebruik om beide WS- en GS-stroom met 'n Arduino te meet. Die ACS712-sensor stuur 'n spanning uit wat eweredig is aan die stroom wat daardeur vloei, wat ons in staat stel om die stroomwaardes maklik op die Arduino se reeksmonitor te lees en te vertoon. Hierdie projek is ideaal vir diegene wat stroom in verskeie toepassings wil monitor, soos kragbronne of battery-stelsels.

Ons gaan 'n eenvoudige stroombaan bou wat die ACS712-sensor aan die Arduino koppel, en dan 'n program skryf om die sensor se uitset te lees. Die verwagte uitkoms is om intydse stroomlesings op die reeksmonitor te vertoon. Vir duidelikheid oor die implementering, maak seker om die video te kyk (in video by 02:00).

Hardeware Verduidelik

Die Allegro ACS712-stroomsensor is 'n kompakte module wat stroom tot 30A kan meet, afhangende van die weergawe wat jy kies. Dit het drie penne: VCC vir krag, GND vir grond, en 'n uitsetpen wat die spanning verskaf wat ooreenstem met die gemete stroom. Die sensor gebruik 'n Hall-effek-beginsel, waar die stroom wat deur 'n geleier vloei 'n magnetiese veld genereer. Hierdie veld word opgespoor en omgeskakel na 'n spanning, wat dan na die Arduino gestuur word.

Die module is beskikbaar in verskillende stroomgraderings (5A, 20A, en 30A) en stuur spanningsvlakke van 185 mV/A, 100 mV/A, en 66 mV/A onderskeidelik uit. Dit beteken dat vir elke ampère stroom wat deur die sensor vloei, jy 'n ooreenstemmende spanningsuitset sal kry wat jy kan lees en verwerk. Hierdie eienskap maak dit veelsydig vir verskeie toepassings.

Datablad Besonderhede

VervaardigerAllegro Microsystems
DeelnommerACS712ELCTR-30A-T
Logika/IO-spanning4.5–5.5 V
Toevoerspanning5 V
Uitsetstroom (per kanaal)30 A maks
PWM-frekwensie riglyneN/A
Inset logika-drempelsN/A
Spanningsval / RDS(on) / versadiging1.2 mΩ
Termiese limiete150 °C maks
PakketTO-220
Notas / varianteBeskikbaar in 5A, 20A, en 30A

  • Verseker behoorlike bedrading om kortsluitings te vermy.
  • Gebruik toepaslike draadmeter vir stroomgraderings (12 AWG vir 30A).
  • Monitor die temperatuur van die module tydens werking.
  • Oorweeg om 'n hittesink by te voeg vir hoër stroomtoepassings.
  • Kalibreer die sensoruitset gebaseer op jou spesifieke toepassing.

Bedradingsinstruksies

Arduino wiring for Allegro ACS712 current sensor

Om die Allegro ACS712-sensor aan jou Arduino te bedraad, begin deur die VCC-pen van die ACS712 aan die 5V-pen op die Arduino te koppel. Koppel dan die GND-pen van die sensor aan een van die GND-penne op die Arduino. Die uitsetpen van die ACS712 moet aan die analoog insetpen A0 op die Arduino gekoppel word.

Vir die stroommeting, koppel die las in serie met die sensor. Dit beteken dat die positiewe draad van jou kragbron in een van die stroomsensor se insetterminale moet gaan, terwyl die ander terminal aan die las koppel. Die ander kant van die las moet terugkeer na die kragbron, wat die stroombaan voltooi. Maak seker om toepaslike draadmeter te gebruik vir die stroom wat jy meet om oorverhitting te vermy.

Kode Voorbeelde & Deurloop

Die volgende kodestuk initialiseer die analoogpen en stel die reeksmonitor op:

#define VIN A0 // definieer die Arduino-pen A0 as spanningsinset (V in)
const float VCC = 5.0; // toevoerspanning is van 4.5 tot 5.5V. Normaalweg 5V.

Hier definieer ons VIN as die analoog insetpen waar die sensoruitset gekoppel is. Ons stel ook die toevoerspanning VCC op 5V.

In die lusfunksie lees ons die spanning van die ACS712-sensor en bereken die stroom:

float voltage_raw = (5.0 / 1023.0) * analogRead(VIN); // Lees die spanning van sensor
float current = voltage / sensitivity[model]; // Bereken stroom gebaseer op sensitiwiteit

Hier lees ons die rou spanning van die sensor en skakel dit om na die werklike stroom deur die sensitiwiteitsreeks te gebruik gebaseer op die model van die sensor wat gebruik word.

Laastens druk ons die stroomlesings na die reeksmonitor:

if (abs(current) > cutOffLimit) {
    Serial.print("V: ");
    Serial.print(voltage, 3); // druk spanning met 3 desimale plekke
    Serial.print("V, I: ");
    Serial.print(current, 2); // druk die stroom met 2 desimale plekke
    Serial.println("A");
} else {
    Serial.println("Geen Stroom");
}

Hierdie afdeling kontroleer of die stroom 'n gedefinieerde afsnyperk oorskry, en druk die spanning- en stroomlesings na die reeksmonitor. As die stroom onder die drempel is, stuur dit "Geen Stroom" uit.

Vir die volle kode, verwys asseblief na die kode wat onder die artikel gelaai is.

Demonstrasie / Wat om te Verwag

Wanneer jy die kode laat loop en die stroombaan krag gee, behoort jy stroomlesings op die reeksmonitor te sien vertoon. Soos jy die las aanpas, behoort die lesings dienooreenkomstig te verander, mits die stroom bo die afsnyperk is. Wees versigtig met die temperatuur van die sensor, veral wanneer dit naby sy maksimum graderings werk.

Beelde

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

Hulpbronne en verwysings

Geen hulpbronne nog.

Lêers📁

Datasheet (pdf)

Fritzing-lêer