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
| Vervaardiger | Allegro Microsystems |
|---|---|
| Deelnommer | ACS712ELCTR-30A-T |
| Logika/IO-spanning | 4.5–5.5 V |
| Toevoerspanning | 5 V |
| Uitsetstroom (per kanaal) | 30 A maks |
| PWM-frekwensie riglyne | N/A |
| Inset logika-drempels | N/A |
| Spanningsval / RDS(on) / versadiging | 1.2 mΩ |
| Termiese limiete | 150 °C maks |
| Pakket | TO-220 |
| Notas / variante | Beskikbaar 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

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.
/*
*
* 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)
-
Allegro ACS712 AC/DC 4A, 20A, 30A Stroomsensor Datablad
robojax-allegro_ACS712_current_sensor.pdf0.65 MB
Fritzing-lêer
-
Allegre ACS712 Stroomsensor
Allegreo ACS712 Current Sensor.fzpz0.03 MB