Navigation

    M5Stack Community

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    1. Home
    2. Pivert
    P
    • Continue chat with Pivert
    • Start new chat with Pivert
    • Flag Profile
    • Profile
    • Following
    • Followers
    • Blocks
    • Topics
    • Posts
    • Best
    • Groups
    Save
    Saving

    Pivert

    @Pivert

    1
    Reputation
    2
    Posts
    327
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Pivert Follow

    Posts made by Pivert

    • RE: MicroPython unstable ADC readings +/- 5% between reads

      Replying to myself.

      The solution is to read many times, and take the mean.

      8000 reads takes about 31.7s with the default 2ms pause at the end of the UIFlow script, which is good enough for me. (Water level sensor). So I have a value published on mqtt twice/minute.
      From 1000 reads, I get a good accuracy / measures stability.
      Over 4000 reads, there's no visible improvement. I do not have more than 0.25% between 2 measures.

      Some tips & links for other people interested in this kind of sensor reading or ADC :

      • I found the power supply combining both 24v and USB really great for this project : https://www.amazon.fr/gp/product/B09PYMBPLK/
      • https://w4krl.com/esp32-analog-to-digital-conversion-accuracy/
      • https://microcontrollerslab.com/adc-esp32-measuring-voltage-example/

      François

      posted in Micropython
      P
      Pivert
    • MicroPython unstable ADC readings +/- 5% between reads

      Using Arduino, readings were stable, but with Micropython & UIFlow, the ADC is unaccurate with variations up to +/- 5% between each adc0.read()

      Also, when M5Stack is alone, not a single pin connected, I see occasional jumps to raw 150 or more (max 4095) instead of expected steady 0.

      Did you experience similar behaviour ?
      How can we fix this ?

      Context
      M5Stack Core1 + uiflow
      Reading voltage drop by a water pressure sensor with 4-20mA through a 147 Ohms resistance. Power is 24V switching power supply, I added a 4700µF capacitor on the PSU. Reading every 1s.

      Code slice (uiflow)

      adc0 = machine.ADC(35)
      # Maximum attenuation for 0.17 to 3.10V Range
      adc0.atten(machine.ADC.ATTN_11DB)
      
      while True:
        adc_raw = adc0.read()
        label_adcraw.setText(str(adc_raw))
        # Just for info
        # Converts the raw value to the range of the sensor (0-300cm water column pressure)
        # Values adjusted after some testing.
        height = int((((adc_raw - 530) / (3600 - 530)) * 300))
        label_height.setText(str(height))
        wait_ms(1000)
      

      Probably irrelevant details

      • TL-136 Liquid Level Sensor Detector Liquid Level Transmitter 24VDC 4-20mA Signal Output
      • Using independant PSU for the sensor and the M5Stack Core1
      • Using pin 35 for ADC
      posted in Micropython
      P
      Pivert