hallo allemaal
ik heb een vraagje
ik maak een monitor om een 4,6 volt batterij te bewaken via blynk
en daar heb ik een volt gauge en een percentage gauge
maar dat werkt wel maar de volt waarde zou ik wat constanter willen dat je een noch presiezere
percentage hebt ik gebruike een ESP32 en om het te monitoren gebruik ik een tp4056 charging module daar heb ik een spannings deler tussen de ESP32 en tp4056 van twee weerstanden van 100k en ik meet de voltage via de aneloge pin 34
en hier bij de code wat ik heb
/* Fill in information from your Blynk Template here */
/* Read more: https://bit.ly/BlynkInject */
#define BLYNK_TEMPLATE_ID "ssid"
#define BLYNK_TEMPLATE_NAME "naam project"
#define BLYNK_FIRMWARE_VERSION "0.1.0"
#define BLYNK_PRINT Serial
//#define BLYNK_DEBUG
#define APP_DEBUG
// Uncomment your board, or configure a custom board in Settings.h
#define USE_ESP32_DEV_MODULE
//#define USE_ESP32C3_DEV_MODULE
//#define USE_ESP32S2_DEV_KIT
//#define USE_WROVER_BOARD
//#define USE_TTGO_T7
//#define USE_TTGO_T_OI
#include "BlynkEdgent.h"
float voltage;
int bat_percentage;
int analogInPin = 34; // Analog input pin
int sensorValue;
float calibration = 4.36; // Check Battery voltage using multimeter & add/subtract the value
void setup()
{
Serial.begin(115200);
delay(100);
BlynkEdgent.begin();
}
void loop() {
BlynkEdgent.run();
sensorValue = analogRead(analogInPin);
voltage = (((sensorValue * 4.6) / 1024) * 2 + calibration); //multiply by two as voltage divider network is 100K & 100K Resistor
bat_percentage = mapfloat(voltage, 1.0, 4.6, 0, 100); //2.8V as Battery Cut off Voltage & 4.2V as Maximum Voltage
if (bat_percentage >= 100)
{
bat_percentage = 100;
}
//if (bat_percentage )
if (bat_percentage <= 0)
{
bat_percentage = 0;
}
//send data to blynk
Blynk.virtualWrite(V3, voltage); // for battery voltage
Blynk.virtualWrite(V4, bat_percentage); // for battery percentage
delay(5000);
//Print data on serial monitor
Serial.print("Analog Value = ");
Serial.println(sensorValue);
Serial.print("Output Voltage = ");
Serial.println(voltage);
Serial.print("Batterij Percentage = ");
Serial.println(bat_percentage);
Serial.println();
Serial.println("****************************");
Serial.println();
delay(1000);
if (bat_percentage <=30)
{
Serial.println("Batterij level below 30%, Charge battery on time");
//send notification
Blynk.logEvent("batterij laag", "Batterij percentage is laag.... zet hem aan het stroom") ;
delay(5000);
}
}
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
vriendelijke groet jarno