I trying to measure current using ACS712 is not a big problem. Using the datashet I was able to make for DC, a load-free reading is taken, inserted into the formula and the correct current is read, unfortunately for me it is AC. For AC I need to write a slightly more complicated program that I don't know unfortunately, so I'm looking for someone who could help me. I tried and found a code that can be used via arduino for esp32, etc.
my cod for DC
var offset = 2.8365;
var sens = 100;
msg.payload = msg.payload - offset;
msg.payload = (msg.payload*1000/sens);
return msg;
cod for esp 32
/*
Measuring AC Current Using ACS712
www.circuits4you.com
*/
const int sensorIn = A0;
int mVperAmp = 185; // use 100 for 20A Module and 66 for 30A Module
double Voltage = 0;
double VRMS = 0;
double AmpsRMS = 0;
void setup(){
Serial.begin(9600);
}
void loop(){
Voltage = getVPP();
VRMS = (Voltage/2.0) *0.707; //root 2 is 0.707
AmpsRMS = (VRMS * 1000)/mVperAmp;
Serial.print(AmpsRMS);
Serial.println(" Amps RMS");
}
float getVPP()
{
float result;
int readValue; //value read from the sensor
int maxValue = 0; // store max value here
int minValue = 1024; // store min value here
uint32_t start_time = millis();
while((millis()-start_time) < 1000) //sample for 1 Sec
{
readValue = analogRead(sensorIn);
// see if you have a new maxValue
if (readValue > maxValue)
{
/*record the maximum sensor value*/
maxValue = readValue;
}
if (readValue < minValue)
{
/*record the minimum sensor value*/
minValue = readValue;
}
}
// Subtract min from max
result = ((maxValue - minValue) * 5.0)/1024.0;
return result;
}