If you use the inbuilt analog to digital capabilities on a Uno, it's capable of 10-bit accuracy, so 1023 steps between 0V and 5V (say) as the input.

That is done by using the analogRead() function (analogRead() reference). Unfortunately for your needs this is too granular giving 5000mV/1023 = 4.9mV per step by default so it might be able to tell you something was present by returning a 1 or a 0 only. Depending on your requirements that might be sufficient, but there is a way of improving this, by setting analogReference(EXTERNAL) first and connecting a 5mV source to the AREF pin on the Uno, redefining the maximum value to 5mV rather than 5V (analogReference() reference page.

I tried to find a note for the minimum functional voltage that AREF can take, and have not been able to find anything. You'll have to try it to see if that's going to work out. For this you'll also need a smooth 5mV reference voltage to connect to AREF - not sure if you have one of those, but it would be possible to construct with a voltage divider.

Another option (and one to take if you don't have a nice smooth 5mV voltage reference to feed in there) is to set the analogReference to INTERNAL which will use 1.1V as the maximum, giving 1.07mV per step so your readings might come back somewhere between 0 and 5.

If you need greater resolution than this, you could choose an external ADC with a higher resolution or perhaps work with an amplifier to increase the output range to 0-5V (say), read it via the Uno's ADC and scale the result in your code back to 0-5mV.

Just some thoughts to start the conversation anyway Geoff

"There is no problem so bad you can't make it worse"- retired astronaut Chris Hadfield

Thank you very much for the information and the explanation. They are very much appreciated it.

I found that the Arduino Due has 12 bits for the input (4096).

However what I haven't been able to figure out if with the Arduino Due can I change the reference voltage to lets say 1 V?

Thank you very much,

Luis

No, that's not possible.

From the datasheet the ADVREF can be 2.4V upto the max analog supply (3.6V) - for 12-bit accuracy, as low as 2.0V for 10-bit accuracy. If you want to use the AREF pin on the Due you have to desolder a resistor-bridge from the board BTW as otherwise its hardwired to the 3.3V supply via a noise-filter circuit.

[ I will NOT respond to personal messages, I WILL delete them, use the forum please ]

I agree that a op amp is your best bet. Analog Devices have some very useful resources online as well as programs that allow you to model ahead of time how well an op amp will perform - ie expected noise, ENOB that can be expected, etc. very very cool

As far as the arduino is concerned, the minimum voltages for the AREF are around 1v, depending on the model. But there is no reason to restrict the voltage range, just use a well-matched op amp and be done with it.

That said, if high speed is not needed, a external ADC with a built in PGA like the MCP 3421 can be pretty compelling.

That is done by using the analogRead() function (analogRead() reference). Unfortunately for your needs this is too granular giving 5000mV/1023 = 4.9mV per step by default so it might be able to tell you something was present by returning a 1 or a 0 only. Depending on your requirements that might be sufficient, but there is a way of improving this, by setting analogReference(EXTERNAL) first and connecting a 5mV source to the AREF pin on the Uno, redefining the maximum value to 5mV rather than 5V (analogReference() reference page.

No, not possible to wire a 5mv voltage to the AREF pin, minimum amount is 1.0vdc per datasheet.