Problem with battery level value



  • Good morning,
    Congratulations for this fantastic project ; are my first steps with Arduino and I have a litle problem with battery monitor on Arduino Pro Mini 5V, I use the sketch and instructions find in this page http://www.mysensors.org/build/battery , but the value read in pin A0 is always 1023, i have try othe analog pin with the same result
    In touch point however the value is 1,4 /1,5 measured with digital multimeter, in pin a0 the value is the same.
    The sensor is powered from 4 AA battery 1,5V .
    I do not understand where wrong.

    Sorry for the English is not perfect

    Thanks
    Mattia



  • @Mattia-Reggiani

    In the sketch a internal voltage reference of 1.1 V is used. This means that if a value of 1.1V or higher is measured at the A0 input, you'll read the max int value, which is 1023.

    Two options :

    1. Change the voltage divider to get maximum of 1.1 V if the batteries supply app. 6 V (4x1.5 V). instead of the 470k you could use 230k or instead of the 1M you could use 2M.

    or
    2. don't use the internal reference of 1.1V.

    I would go for the first option.

    some additional info on the internal voltage reference of the arduino to be found here

    Note that 4x1.5 VDC is 6 VDC, with a fresh set of batteries possibly higher. you probably connect it to the raw input, so that the step down converter build on the pro-mini will do its work.

    Succes!

    Boozz



  • @boozz
    Many Thanks, now I understand but I still have doubts, in the skecth i have change this
    float batteryV = sensorValue * 0.003363075;
    in
    float batteryV = sensorValue * 0.00575035;

    because if I understand it ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
    in my case is ((1+0,23)/0,23)*1,1 = 5,88 and after 5,88/1023 = 0,0057478
    Now, however with new battery the output is

    99
    Battery Voltage: 0.57 V
    Battery percent: 9 %
    😞

    The code i used is
    // get the battery Voltage
    int sensorValue = analogRead(BATTERY_SENSE_PIN);
    Serial.println(sensorValue);
    // 1M, 470K divider across battery and using internal ADC ref of 1.1V
    // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
    // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
    // 3.44/1023 = Volts per bit = 0.003363075
    float batteryV = sensorValue * 0.00575035;
    int batteryPcnt = sensorValue / 10;

    Thanks
    Mattia


  • Hero Member

    Did you change the divider?

    In my temperature sensor i measure the battery level with:

    R1: 1 MOhm
    R2: 220 kOHM

    float batteryV = sensorValue * 6.1 / 1023;
    

    With an input voltage of 7.2 V the dividers gives 1.1 V (1023) on the analog input.

    Don't forget to place a capacitor between AREF & GND to stabilize the measurement.



  • @Mattia-Reggiani
    As TimO already asked: did you change the divider? (replace the resistor 470k into a resistor 220k or the 1M into 2M)? it's essential.

    Boozz



  • I have change R1 to 2M and R2 470k , I think to have some problem with resistors, tomorrow will buy new resistors and try again from scratch.

    Thanks for your help
    Mattia



  • I have rebuild the dividers with R1 1M ohm and R2 220k ohm, i have try with pin A1 and A0 and have strange value

    990
    Battery Voltage: 5.59 V
    Battery percent: 99 %

    1023
    Battery Voltage: 5.78 V
    Battery percent: 102 %

    First read is correct, but after this all other value have value 1023, if use multimeter on R1 and R2 have a value of 0,93 on touch point have 0,93 and on the Pin A0 or A1 have the same value.
    It is possible that Arduino read the wrong value ?


  • Hero Member

    Did you place a capacitor between AREF and GND?



  • @TimO
    Sorry, but Whatsapp is AREF? Is the Pin thai I use to measure the battery voltage (A0) ? Bcause on Google i find some Arduino Board with AREF pin but my Arduino mini pro has not that pin.

    Thanks
    Mattia


  • Hero Member

    Oh, I'm sorry, at the Arduino pro mini there already is a capacitor between AREF & GND, so don't worry about it.

    Here is my working example, a sensor for humidity, temperature and status of the battery:

    link text

    It's basically:

    line 30: with "analogReference("INTERNAL)", did you call that?

    The function in line 70 measures the battery status.



  • @TimO @boozz
    Finally there I did, the problem was due by the resistances; I bought the new resistors
    2M Ohm and 470k Ohm and now works correctly.

    Thank you all for your support and for your patience

    (Now I have a little more knowledge on electronics 🙂 )

    Mattia



  • @Mattia-Reggiani
    Good to see that you solved it and learned by doing. Congrats!

    Boozz


Log in to reply
 

Suggested Topics

0
Online

11.4k
Users

11.1k
Topics

112.7k
Posts