Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Measuring battery percentage

    Scheduled Pinned Locked Moved SiPy
    6 Posts 4 Posters 1.3k Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B Offline
      brossingo
      last edited by

      This post is deleted!
      J S 2 Replies Last reply Reply Quote 0
      • J Offline
        jcaron @brossingo
        last edited by

        @brossingo "the results I get don't seem right"... What are you expecting, what are you getting?

        Also:

        • What battery are you measuring?
        • Can you provide your precise cabling (diagram and/or picture)?
        • Did you use an appropriate voltage divider? The ADC only supports voltages up to about 3.5V (if correctly configured, otherwise it's even lower), so if you're measuring a LiPo battery voltage you can't do it directly.
        • Did you correctly set the range of the ADC? The default is 0-1V.

        If you are measuring the battery voltage, you most definitely won't get a charge % directly from that. This has been discussed repeatedly, and again quite recently.

        See https://forum.pycom.io/topic/1690/correct-formula-for-batt-monitoring-on-expansion-board and https://forum.pycom.io/topic/4531/how-to-read-the-battery-level-of-a-pytrack-pysense among many, many others.

        B 1 Reply Last reply Reply Quote 1
        • S Offline
          Steve Williams @brossingo
          last edited by Steve Williams

          @brossingo I use the following code on GPY to get the battery VOLTAGE from a LiPo battery connected to the Expansion Board 3, as % value is not really much use with LiPo batteries..

          Wouldn't be hard to convert the voltage to a percentage.

          # Battery Voltage ADC
          battadc = ADC()
          bat_pin = battadc.channel(pin='P16', attn=ADC.ATTN_11DB)
          batmult = 1.64
          
          def getBatt():
              pycom.rgbled(0x0A0F00)                        # Mid Orange
              bat_vdc = round((bat_pin()/1000) * (batmult), 2)
              if bat_vdc <= 3.40:
                  lowBatt(bat_vdc)
                  battIS = 1
          
              else: battIS = 0
          
              utime.sleep(0.1)
              pycom.rgbled(0x000000)
              return battIS, bat_vdc
          

          I find the voltage returned isn't particularly accurate - especially as the battery is charging - due to a dodgy ADC on the GPY, but is useful as a general guide. The external ADC you use should be better.

          Hope this helps

          1 Reply Last reply Reply Quote 0
          • B Offline
            brossingo @jcaron
            last edited by brossingo

            @jcaron

            I said this because with the Li-ion battery, the measured values are always the same (which is 4.2V), which is the highest, even if I measure it after not having recharged for a long time. On the other hand, I was measuring the level of a battery that, I guess, is a alkaline battery and the values at least tend to fluctuate. This might have something to do with the kind of battery I am working with as you say later.

            • I am measuring a Li-ion 3.7V 1500 mAh 5.6 Wh battery.
            • It is quite hard to join a picture but the cabling is really minimalistic. I only have two cables, one of them connected to the ground and the other to the pin where I'll measure the values, which is P20 in my case.
            • I am not using a voltage divider. As I said, my knowledge on electronics are really bad but I'd be happy to know how useful it'd be to use one and especially why I should use one though.
            • As I said, I'm using a 12 bits ADC, so with values between 0-4095. Also, according to the documentation about the ADC of Pycom, the ADC pin iput range is 0-1.1V. It can be increased up to 3.3V using the highest attenuation of 11 dB but since I'm not using any, I figure I didn't change the range.
              I don't know if these answers are the ones you expected to your questions but I can provide you with further information if needed. I'll also give a look to the links I posted and have never seen before, so thannks for attaching them.
            M J 2 Replies Last reply Reply Quote 0
            • M Offline
              Martinnn @brossingo
              last edited by

              @brossingo Wow... this is funny. You are connecting the battery directly to a port pin?! A fully charged Li ion cell has typically 4.2 V which together with its low impedance should fry the port input immediately (overcurrent in the input protection). It seems though that yours is still alive... the ESP32 is full of surprises!

              1 Reply Last reply Reply Quote 0
              • J Offline
                jcaron @brossingo
                last edited by

                @brossingo Well, if you're not too versed into electronics, you should probably read up a bit before connecting things. As @Martinnn pointed out, connecting things without paying to much attention can lead to frying up hardware.

                Also note that Lithium batteries can be very dangerous. If you handle them incorrectly they can catch fire and/or explode.

                Even if you didn't fry the ESP32, the voltage of a LiPo battery exceeds the maximum voltage with attenuation, and completely blows out the maximum voltage without, which explains why you would get the max reading all the time. You need to use a voltage divider and correctly set attenuation.

                Note that there is already a voltage divider on the expansion board, you should probably use that. There's been ample discussion on the topic in the forum.

                1 Reply Last reply Reply Quote 1

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                • 1 / 1
                • First post
                  Last post

                Pycom on Twitter

                Pycom