Рассчитать напряжение батареи (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.
Любые предложения, почему это происходит и как я могу это сделать, чтобы достичь наиболее точного значения?
@user3201500, 👍0
1 ответ
Все было правильно, и моя схема тоже хороша. Единственная разница, которую я нашел, заключается в следующей строке:
temp = (analogvalue * 3.3) / 1024.0;
Что должно быть
temp = (analogvalue * 1.0) / 1024.0;
Мы умножаем, потому что ссылаемся на напряжение из схемы делителя напряжения как на 1 вольт.
Сделав это, я получаю точные значения напряжения батареи, которые затем преобразую в процент.
Спасибо!
- NodeMCU 1.0 автоматически сбрасывается через некоторое время
- ESP8266 Arduino Json object array десериализация в структуру
- Как назначить точке доступа ESP8266 имя хоста, которое может быть разрешено станциями?
- esp32 Stack canary watchpoint срабатывает
- Ошибка при загрузке «Произошла фатальная ошибка esptool.py: тайм-аут записи»
- ESP32S v1.1 NodeMCU vs ESP32 DevKitV1
- esp32-cam публикует изображение в mqtt
- WS2812 — сначала белые, а затем ближе к концу становятся красными/желтыми/оранжевыми.