首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Arduino IDE中将4.15V锂离子电池的电池电压转换成电池百分比?(我在做某种LED电池指示器)

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

Stack Overflow用户
提问于 2019-05-23 01:12:45
回答 3查看 12.7K关注 0票数 6

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

在Arduino IDE中,我找不到任何好的资源。(如果你们有链接的话)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-26 20:05:23

实际上,你不能做太多的非线性行为,你可以测量你的最大和最小电压和计算电池百分比的基础上。下面我创建了一个函数,返回电池电平的百分比。记住根据你的电池电压水平编辑battery_maxbattery_min

此外,我建议您创建一个电阻分配器电路,以降低电压水平,因为如果您的输入电源下降,Arduino将直接从模拟输入,这是不可取的。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2019-05-23 05:50:26

我正在处理这张桌子:

4.2伏特100% 4.1约90% 4.0约80% 3.9约60% 3.8约40% 3.7约20% 3.6为实际目的而空置。

这意味着,如果电池的容量下降到60%,电压就会降到3.9伏以下。

这张桌子来自一个德国网站,所以我想这个链接不会有帮助。

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

票数 5
EN

Stack Overflow用户

发布于 2022-07-27 01:27:06

我想找出范围从4.2 (完全充电,100%)到3.6 (死亡,0%)的百分比,这是我想出的解决方案。

TinkerCad上的工作实例

代码语言:javascript
运行
复制
void loop() {
  float vPow = 5.0;
  float r1 = 100000;
  float r2 = 10000;

  float v = (analogRead(A0) * vPow) / 1024.0;
  float v2 = v / (r2 / (r1 + r2));
  
  float top = 4.2;
  float bottom = 3.6;
  float range = top - bottom;
  float rangeVolts = v2 - bottom;
  int percent = (rangeVolts / range) * 100;
  
  if(percent > 100){
    percent = 100;
  }
  if(percent < 0) {
    percent = 0;
  }
  
  Serial.print("percent ");
  Serial.println(percent);
  
  delay(1000);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56266857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档