簡體   English   中英

如何將 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 中找不到任何關於執行此操作的好資源。(如果你們有鏈接,請提供幫助)

我正在使用此表:

4.2伏特100%
4.1約90%
4.0大約80%
3.9約60%
3.8大約40%
3.7約20%
3.6為實用目的而空。

這意味着如果該電池的容量降至60%,則電壓將降至3.9伏以下。

該表來自德國網站,所以我猜這個鏈接無濟於事。

編輯:我發現這個英文鏈接: 電池充電

實際上,你不能對非線性行為做很多事情,你只需要測量你的最大和最小電壓並根據它來計算電池百分比。 下面我創建了一個返回電池電量百分比的函數。 請記住根據電池電壓水平編輯battery_maxbattery_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.2(充滿電,100%)到 3.6(沒電,0%)的百分比,這就是我想出的解決方案。

TinkerCad 上的工作示例

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);
}

https://electronics.stackexchange.com/a/551667上有人寫了一個簡單的數學 function 來計算 3.7 鋰電池的伏特百分比。 看看那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM