Lithium battery check with ESP32: voltage divider problem

Home Forums esp32 Lithium battery check with ESP32: voltage divider problem

Tagged: 

Viewing 2 reply threads
  • Author
    Posts
    • #29890
      Sid
      Participant

        Hi Renzo,

        This is off-topic but I don’t know where else to turn.

        I want to monitor the battery voltage of this LoRa node. My understanding is that the Li-ion batteries charge at 4.2v so I’m sending that max voltage through a voltage divider to a (3.3v) ADC pin on the ESP32. Strangely (to me) the ADC is returning 4095 always, no matter what the source voltage is. Can you see what I’m doing wrongly? Thanks.

        `int ADCvalue;
        const int ADC = 25; // battery voltage pin

        void setup() {
        // put your setup code here, to run once:
        Serial.begin(9600);
        delay(500);
        pinMode(ADC, INPUT);
        pinMode(ADC, INPUT_PULLDOWN);
        }

        void loop() {
        ADCvalue = analogRead(ADC);
        Serial.print(ADCvalue); Serial.print(” “);
        float batVoltage = ADCvalue * 4.2 / 4096; // get battery voltage
        Serial.println(batVoltage);
        delay(1000);
        }’

      • #29925
        Renzo Mischianti
        Keymaster

          Hi Sid,
          for my projects, I use this function

          
          float getBatteryVoltage(){
              //************ Measuring Battery Voltage ***********
              float sample1 = 0;
           
              for (int i = 0; i < 100; i++) {
                  sample1 = sample1 + analogRead(A0); //read the voltage from the divider circuit
                  delay(2);
              }
              sample1 = sample1 / 100;
              DEBUG_PRINT(F("AnalogRead..."));
              DEBUG_PRINTLN(sample1);
              float batVolt = (sample1 * 3.3 * (BAT_RES_VALUE_VCC + BAT_RES_VALUE_GND) / BAT_RES_VALUE_GND) / 1023;
           
              int bvI = batVolt * 100;
              batVolt = (float)bvI/100;
              return batVolt;
          }
          

          Where
          BAT_RES_VALUE_VCC is the resistor value of VCC part
          BAT_RES_VALUE_GND is the resistor value of GND part
          3.3 is the reference voltage of the ESP8266
          and 1023 is the divider of the analog pin.

          I use 20k and 10k resistor.

          I do multiple reads to be sure that the reading is correct without voltage oscillation.
          Bye Renzo

        • #29926
          Renzo Mischianti
          Keymaster

            But I think it’s not safe to connect the output battery directly to the ESP32. It’s better to use a step-up and connect to the 5v (and use this for the ESP32 and LoRa module).

            I usually do this: I use a TP4056 to charge the 18650 battery, a step-up to convert the battery’s voltage to a fixed 5v, and from there, I power both the Arduino and the LoRa device (do not power at 3.3v as it reduces the range).

            Here you can find a detail.
            Emergency power bank homemade

            Bye Renzo

            • #29934
              Sid
              Participant

                Thank you Renzo, very helpful.

          Viewing 2 reply threads
          • You must be logged in to reply to this topic.
          Exit mobile version