Battery Level Check using Arduino

Hello,

I want to check battery level using Arduino. Arduino is powered by 3.7v Li-Ion Battery. using the same arduino i wanna check level of battery.
Is it possible with Arduino's ADC? Because VCC will be comes down as battery voltage goes down. And ADC is taking Reference voltage from VCC.

Thank You

Hi,

See analogReference() - Arduino Reference

If you use the 1.1V internal reference you would need a resistor voltage divider to bring the 3.7V in range. You will also have to calibrate the result using an external multimeter one time, and adjust result in software.

(Anyone have a specific example?)

deep:
Is it possible with Arduino's ADC?C.

Thank You

Using an Arduino might be better than guessing.

ForLiPo with a nominal 3.7V voltage I found the following table:

Voltage --- Charge state
4.2 V --- 100 %
4.1 V --- 90 %
4.0 V --- 80 %
3.9 V --- 60 %
3.8 V --- 40 %
3.7 V --- 20 %
3,6 V --- 0 %

So measuring the charge state in the 0% to 100% range is as accurate as you can measure accurate voltage in the 3.6V ... 4.2V range.

See reply #3 in this post for how to check the battery voltage against the internal reference, without using external circuitry.

jurs:
Using an Arduino might be better than guessing.

ForLiPo with a nominal 3.7V voltage I found the following table:

Voltage --- Charge state
4.2 V --- 100 %
4.1 V --- 90 %
4.0 V --- 80 %
3.9 V --- 60 %
3.8 V --- 40 %
3.7 V --- 20 %
3,6 V --- 0 %

So measuring the charge state in the 0% to 100% range is as accurate as you can measure accurate voltage in the 3.6V ... 4.2V range.

A significant over simplification I suspect.

You might well have found a 'table' but it does it not look like the 'table' is an invented simplification, is it credible that the discharge is as uniform as the so called table suggests ?

Bear in mind that the Voltage will also vary with discharge rate and temperature and whilst the discharge rate will lower the voltage it does not mean the capacity has fallen also.

I agree that the table in reply #2 is not very useful and even misleading.

Battery capacity is a strong function of discharge/charge history, age, temperature and other factors.

You might look at some of the Sparkfun fuel guage products, and the datasheets for the chips on them.
https://www.sparkfun.com/search/results?term=fuel+guage

Hi, I know it is old topic, but if someone is looking for solution for this, can try code below.

int value = 0;
float voltage;
float perc;

void setup(){
  Serial.begin(9600);
}

void loop(){
  value = analogRead(A0);
  voltage = value * 5.0/1023;
  perc = map(voltage, 3.6, 4.2, 0, 100);
  Serial.print("Voltage= ");
  Serial.println(voltage);
  Serial.print("Battery level= ");
  Serial.print(perc);
  Serial.println(" %");
  delay(500);
}

Note: It works without voltage divider if measured voltage is below 5V. So for 1S li-ion battery it is fine

3 Likes