如何在 Arduino IDE 中将 4.15V 锂离子电池的电池电压转换为电池百分比? (我正在制作某种 LED 电池指示器)
How do I convert battery voltage into battery percentage on a 4.15V Li-Ion Battery in an Arduino IDE? (I am making some kind of LED Battery Indicator)
我知道 4.15V 锂离子电池的放电不是线性的,所以我想在我的代码中应用一些方程式来显示正确的电池百分比。
我在 Arduino IDE 中找不到任何好的资源来做这件事。 (帮助 link 如果你们有)
我正在使用这个 table:
4.2 volts 100%
4.1 about 90%
4.0 about 80%
3.9 about 60%
3.8 about 40%
3.7 about 20%
3.6 empty for practical purposes.
这意味着如果该电池容量下降到 60%,则电压将下降到 3.9 伏以下。
table 来自德国站点,所以我想 link 不会有帮助。
编辑:
我找到了这个英语 link:Battery charge
实际上,您不能对非线性行为做太多事情,您只需要测量最大和最小电压并据此计算电池电量百分比。下面我创建了一个 returns 电池电量百分比的函数。请记住根据您的电池电压水平编辑 battery_max
和 battery_min
。
此外,我建议您创建一个电阻分压器电路来降低电压水平,因为如果您的输入电源下降,Arduino 会直接从模拟输入供电,这是不受欢迎的。
int battery_pin = A3;
float battery_read()
{
//read battery voltage per %
long sum = 0; // sum of samples taken
float voltage = 0.0; // calculated voltage
float output = 0.0; //output value
const float battery_max = 4.20; //maximum voltage of battery
const float battery_min = 3.0; //minimum voltage of battery before shutdown
for (int i = 0; i < 500; i++)
{
sum += analogRead(battery_pin);
delayMicroseconds(1000);
}
// calculate the voltage
voltage = sum / (float)500;
// voltage = (voltage * 5.0) / 1023.0; //for default reference voltage
voltage = (voltage * 1.1) / 1023.0; //for internal 1.1v reference
//round value by two precision
voltage = roundf(voltage * 100) / 100;
Serial.print("voltage: ");
Serial.println(voltage, 2);
output = ((voltage - battery_min) / (battery_max - battery_min)) * 100;
if (output < 100)
return output;
else
return 100.0f;
}
void setup()
{
analogReference(INTERNAL); //set reference voltage to internal
Serial.begin(9600);
}
void loop()
{
Serial.print("Battery Level: ");
Serial.println(battery_read(), 2);
delay(1000);
}
我知道 4.15V 锂离子电池的放电不是线性的,所以我想在我的代码中应用一些方程式来显示正确的电池百分比。
我在 Arduino IDE 中找不到任何好的资源来做这件事。 (帮助 link 如果你们有)
我正在使用这个 table:
4.2 volts 100%
4.1 about 90%
4.0 about 80%
3.9 about 60%
3.8 about 40%
3.7 about 20%
3.6 empty for practical purposes.
这意味着如果该电池容量下降到 60%,则电压将下降到 3.9 伏以下。
table 来自德国站点,所以我想 link 不会有帮助。
编辑: 我找到了这个英语 link:Battery charge
实际上,您不能对非线性行为做太多事情,您只需要测量最大和最小电压并据此计算电池电量百分比。下面我创建了一个 returns 电池电量百分比的函数。请记住根据您的电池电压水平编辑 battery_max
和 battery_min
。
此外,我建议您创建一个电阻分压器电路来降低电压水平,因为如果您的输入电源下降,Arduino 会直接从模拟输入供电,这是不受欢迎的。
int battery_pin = A3;
float battery_read()
{
//read battery voltage per %
long sum = 0; // sum of samples taken
float voltage = 0.0; // calculated voltage
float output = 0.0; //output value
const float battery_max = 4.20; //maximum voltage of battery
const float battery_min = 3.0; //minimum voltage of battery before shutdown
for (int i = 0; i < 500; i++)
{
sum += analogRead(battery_pin);
delayMicroseconds(1000);
}
// calculate the voltage
voltage = sum / (float)500;
// voltage = (voltage * 5.0) / 1023.0; //for default reference voltage
voltage = (voltage * 1.1) / 1023.0; //for internal 1.1v reference
//round value by two precision
voltage = roundf(voltage * 100) / 100;
Serial.print("voltage: ");
Serial.println(voltage, 2);
output = ((voltage - battery_min) / (battery_max - battery_min)) * 100;
if (output < 100)
return output;
else
return 100.0f;
}
void setup()
{
analogReference(INTERNAL); //set reference voltage to internal
Serial.begin(9600);
}
void loop()
{
Serial.print("Battery Level: ");
Serial.println(battery_read(), 2);
delay(1000);
}