I am using Arduino Uno for measuring sensor voltages. I am using multiplexer to switch between different sensors. The readings measured in the range of 800-900 mv are accurate, but at low millivolts (at about 20 mv) they are erratic. I read repeatedly to get average of 20 values. I get values such as 1.3, 1,4, 2,0, 3.8 etc. Can any one help on why it is happening and how to avoid it.

Additional information: I am using reference voltage of 1.25 volt for better resolution. I tried having delay between two readings, though there is some improvement, still the problem persists.

I appreciate the help by experts. Thanks

  • May be this is because the voltages that you are trying to measure are way below the noise floor and the arduino is measuring the noise from the pin.
    – Aswin P J
    Apr 24 '16 at 16:49
  • Noise problems always need multiple approaches / attacks: 1) Scope it to see what is any real noise needs to be dealt with. 2) Dive into the Atmel spec to see if the ADC can actually make such a measurement. 3) Use exponential smoothing and play with the alpha constant. 4) Try a different power supply or try something clean like a battery.
    – st2000
    Apr 24 '16 at 17:09
  • You need a stable power-supply. You need a stable measuring voltage. You could try adding the small capacitor to the output of the thing you try to measure. You could try using the ADC_sleep mode on the ATMega328. This will sleep the MCU during the measurement, keeping noise down.
    – Gerben
    Apr 24 '16 at 18:29
  • Addition to the other comments, if that low voltages are common in your project, maybe you are using wheat-stone bridges with strain gauges or similar sensors, it might be the best option to use a good low noise instrumental amplifier between the sensor and the multiplexer. This setup will give you manageable voltage levels.
    – Sener
    Apr 11 '17 at 8:35

You are almost certainly running into the noise floor for your setup. When your target signal is a very low voltage your signal to noise ratio (SNR) is small. Because it is the noise floor setting the ADC for better resolution didn't help much. There are many ways to deal with noise. If your signal is "slow" and your noise is random you can try oversampling. If the noise is from the power supply you can add filtering on the input to your sensor. If you have done those and still want to reduce noise more you can try adding shielding to your device/wires.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.