can arduino read Millivolt values from analog input


I have to read analog values from pressure sensor omega PX26.

It's max out is 16mv. I'm wondering if arduino can read milli volt value changes like 5,6 milli volts.

Thank you.

No, not really.
If you would try it, you can get an indication for the pressure, but it won't be accurate at all.
The output of the sensor is a bridge output. When used with 5V, I think both output pins are near 2.5V.
Therefor the internal reference can not be used, and the 5V is used as reference with a theoritical resolution of 5mV.
Both outputs should go to an analog input, and use averaging in software. Maybe you can get near the 5mV resolution.

Some microcontrollers on the Arduino boards are able to turn on an internal differential amplifier, and with a programmable gain. That way you can achieve 1mV or perhaps 0.1mV resolution. But I don't know how to program that, I have never used it.

Well since you are using 5V aRef it might be harder to read the values since its max is 16mv.

So a way to solve this is to use the internal Ref of 1.1v from the Arduino intstead of 5v.

Depending on your arduino board you will need to add analogReference(INTERNAL); into your setup() function to enable the internal 1.1V.

Karma to you, agrey. Some day Karma may show here again.

@rustyrockets, please do not cross-post. Threads merged.

There is some code here for the internal differential amplifier :
for the Arduino Leonardo (ATmega32U4).
It shows how to set it up and it has a function "analogReadDiff()".

Here is more code :

Does the voltage reference have any influence on the differential mode ?

Which Arduino compatible microcontrollers support it ?
ATmega2560 (Arduino Mega 2560)
ATmega32U4 (Arduino Leonard and Micro)

I'm using an op amp to amplify the out put, for an input of 3.5mv of the pressure sensor ( I'm using a voltage divider to cause this millivolt changes for testing the instrumental amp circuit) I get a output amplified voltage of 0.769v
So would arduino Mega 2560 be able to read the value from a analog pin ?
I'm using simulink to read the values. So would the output of something 3.5mv amplified to 0.769v be enough or should I amplify it more?

That's enough.

The ATmega2560 can be set to 1.1V internal reference, and the ATmega32U4 to 2.56V internal reference.

When the internal reference is for example set to 1.1V, that means that the 10-bit range is from 0 to 1.1V.


I'm not using arduino programming so I'm not sure if i could set the reference in matlab. I'm using simulink to use and a arduino board for my project.

So say I connect the analog pin from the out put carrying 0.769v to a analog pin say pin 4.
Would simulink be able to read a proper bit value?
or if im using arduino if i dont mess around with the ref, would arduino be able to read it for the same pin 4

Simulating all the milli voltage ranges with my amp for something like8.6 i get it amplified to 1.823V, I'm sure I could read a value like that, but what about values less than that like 0.536v or something?

The OpAmp should be able to output from as low as 0.0V for maximum accuracy.

If the internal reference is 2.56V, and the input is maximum 0.536V, it is in theory between 7 and 8 bits accuracy. Since only 1/5 of the total range is used.

I did not understand, sorry I'm kinda new to all this lingo ( electronically speaking) so could you please explain?

What do you not understand ?

The normal Arduino boards, like the Uno, Mega, Lenardo and so on have a 10-bits ADC. That is a value from 0 up to 1023.

When the default reference of 5V is used, the value 0 is for 0V and the value 1023 is for 5V.
When the internal reference of 1.1V is selected, the value 0 is for 0V and the value 1023 is for 1.1V.

The voltage reference is the range for the 10-bit ADC.

1 Like

I would be using 5v right? Cos my range of voltages i get exceeds 1.1
is this right?

Yes, if the input gets higher than 1.1V (or 2.56V for the ATmega32U4), you have to use the 5V reference.

An OpAmp that has input of 2.50V, can have an output closer to 0V.
The INA125 is often used with a differential input from a sensor with bridge output. It works at 5V, and the ouput starts at 0.4V.

With 5V reference, the resolution is only 5mV. You have to solve everything else with an OpAmp.
If you want really good resolution, don't use an OpAmp, but a better ADC chip, like this one : Or maybe one that has more gain, this ADC chip has only 16x gain.

Hi peter, Did you understand what my problem was. Seems like you are the only person trying to help me out there, I thought it would be better If i could explain my problem here.

Ok let me try to explain , it would be great if you would help me with this.

So i amplified the sensor output as I told you px26 from milli volts to volts so now for something like 8mv, i amplified it to say ~2 volts.
So for say 16 volts which is the max it gives ~4 volts amp.
so say for 1mv its giving me about ~0.325mv after being amplified. So what im trying to figure is if i connect this to a analog pin like 4, would i be able to read this change that just 0.325. and 2milli votl is like 0.468. so this difference? which is ~0.100 difference.

And also im using a differential pressure sensor for sensing a flow over a valve of sides A and B, if you know anything about them, what if i have a negative pressure I mean if A> B gives me a positive voltage , what if B>A and what kind of voltage value should i anticipate. I don't really know much of electronics I'm trying to read up as much as I can.

Could you help me out clear these questions. Dont use much of electronic or arduino lingo , which is hard for me to understand.

Thanks & Regards

I think those sensors will also work with 5V. I don't know if they will be linear with 5V, but you can start with 5V, that is safer.

With 5V as reference, the 10-bit ADC outputs a number of 0...1023. That means about 5mV step.
A voltage of 325mV would be a ADC value of 66.
A voltage of 468mV would be a ADC value of 96.
So yes, the Arduino can see the difference between 99 and 96.

To measure a flow, you need a very sensitive differential pressure sensor.
When one input is higher or lower than other, that is no problem. In the sketch some calculations are needed, that can calculate the flow and fix any offset and so on.

There are also digital pressure sensor, or analog pressure sensors with 0...5V output range.

I think you need to build something and see for yourself how it is :sunglasses:

the instrumental amp im using doesnt work with a single sided connection, so i had to create a virtual ref ground, as shown in the figure.

so for the given amplification i get the input amplified to the output, but one i hit around 8mv, there is no gain in the output.

And also like i said the diff sensor gives me reading of both sides of the flow, so how does that effect the electrical out put given out as a reading.

Where is the figure ? :o

I think you are making it hard on yourself, it might be easier with another sensor and another opamp.

The differential sensor for the flow is probably also a bridge sensor, with -out and +out. They are used in the same way. The output of the opamp will be the difference between the input pressure and the output pressure.
But that is relative, the actual pressure at the input and output of the flow is not known.