Рассчитать напряжение батареи (18650 Li-ion) с помощью ESP8266-12E

я пытаюсь рассчитать напряжение батареи с помощью модуля ESP-12E. Я использую схему делителя напряжения, чтобы рассчитать то же самое. Вот как выглядит моя схема:

А вот как выглядит мой код:

float volt =0.0;
float temp=0.0;
float r1=320000.0;
float r2=100000.0;

void setup(){
    Serial.begin(115200);
    Serial.println(String(VoltageCalculator()).c_str());
}

float VoltageCalculator(){
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
  Serial.println(analogRead(A0));
  for(int i = 0;i<=10; i++){
    total = total - readings[readIndex];
    // считывание с датчика:
    readings[readIndex] = analogRead(A0);
    // добавьте показания к общему количеству:
    total = total + readings[readIndex];
    // переход к следующей позиции в массиве:
    readIndex = readIndex + 1;
  
    // если мы находимся в конце массива...
    if (readIndex >= numReadings) {
      // ...обернитесь к началу:
      readIndex = 0;
    }
  
    // вычислить среднее значение:
    float analogvalue = total / numReadings;

    // int analogvalue = analogRead(A0);
    temp = (analogvalue * 3.3) / 1024.0;       
    volt = temp / (r2/(r1+r2));  
  }


  if(DEBUG_ENABLE){
    Serial.println();
    Serial.print("Actual Voltage : ");
    Serial.print(volt);
    Serial.println();
  }
  
  
  float volt_percent;

  if(volt == 3.1){
    volt_percent = 0;
  } else{
    float volt_diff = volt - 3.1;
    volt_percent = (volt_diff/1.1)*100;
    if(DEBUG_ENABLE){
      Serial.println();
      Serial.print("Voltage percentage : ");
      Serial.print(volt_percent);
      Serial.println();
    }
  }
  return volt_percent;
}

Когда я использую эту схему с NodeMCU, она работает очень хорошо, но когда дело доходит до модуля ESP-12E, он не показывает правильное напряжение. on Serial.println(analogRead(A0)); всегда показывает 1024.

Любые предложения, почему это происходит и как я могу это сделать, чтобы достичь наиболее точного значения?

, 👍0


1 ответ


1

Все было правильно, и моя схема тоже хороша. Единственная разница, которую я нашел, заключается в следующей строке:

temp = (analogvalue * 3.3) / 1024.0;

Что должно быть

temp = (analogvalue * 1.0) / 1024.0;

Мы умножаем, потому что ссылаемся на напряжение из схемы делителя напряжения как на 1 вольт.

Сделав это, я получаю точные значения напряжения батареи, которые затем преобразую в процент.

Спасибо!

,