如何在 Arduino IDE 中将 4.15V 锂离子电池的电池电压转换为电池百分比?(我正在制作某种 LED 电池指示器)

coy*_*dha 6 battery arduino batterylevel esp32

我知道 4.15V 锂离子电池的电池放电不是线性的,因此我想要一些可以在代码中应用的方程式来显示正确的电池百分比。

我找不到任何关于在 Arduino IDE 中执行此操作的好资源。(如果有的话帮忙提供一下链接)

Mik*_*ike 5

我正在使用这张表:

4.2 伏 100%
4.1 约 90%
4.0 约 80%
3.9 约 60%
3.8 约 40%
3.7 约 20%
3.6 实际用途为空。

这意味着,如果该电池容量下降至 60%,电压将下降至 3.9 伏以下。

该表来自德国网站,所以我想该链接不会有帮助。

编辑:我找到了这个英文链接:电池充电


M. *_* R. 5

事实上,你对非线性行为无能为力;您可以测量最大和最小电压,并据此计算电池百分比。下面我创建了一个返回电池电量百分比的函数。请记住根据您的电池电压水平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);
}
Run Code Online (Sandbox Code Playgroud)