 I have a project that is controlling several relays while reading voltages from a lead acid battery. The voltage read pin is reading off of a voltage divider that drops the lead acid battery voltage of 12.8 or so down to 4.40. My total impedance is 10.4 kOhms for the voltage divider, with a theoretical ratio of (3.6/(3.6+6.8 )) = 0.346

Oddly enough while the voltage divider is reading almost exactly what it should in theory at 4.40 on my multimeter, the arduino ADC pin is returning a value significantly higher at 4.73. This sounds minimal, but that difference extrapolates a battery voltage of 13.67 instead of a correct reading of 12.8.

Oddly enough, the voltage read pin seems to increase as digital pins are turned on in sequence in output mode. Specifically, as each of four digital pins running a set of four relays are turned on the measured voltage increases by 70 mV. Meanwhile, the voltage divider is still showing a correct value of 4.40 V on a multimeter, while the arduino ADC voltage has increased to almost 5 Volts.

I understand that the Arduino ADC was recommended for source impedances of 10k or less, but why does it change its readings when the rest of the arduino is under load?

It seems you forgot to post a schematic of your setup.

What is the actual value of the 5V supply of your Arduino? If that's lower than 5V your reading will be higher. If powered over USB it'll be more like 4.5V.

You should make a voltage divider to bring down the voltage to about 1V and read it using the built-in 1.1V reference. The actual value has a 10% tolerance so you have to calibrate but it's very stable.

wvmarle: It seems you forgot to post a schematic of your setup.

What is the actual value of the 5V supply of your Arduino? If that's lower than 5V your reading will be higher. If powered over USB it'll be more like 4.5V.

You should make a voltage divider to bring down the voltage to about 1V and read it using the built-in 1.1V reference. The actual value has a 10% tolerance so you have to calibrate but it's very stable.

I was working over usb (and a long one too, so probably a considerable voltage drop), but I found the same issues when I switched and plugged in the barrel plug power source which is running off of the battery, stepped down by a buck converter to 5V exactly (tested and confirmed under load to be exactly 5.00).

Oddly enough though, the 5V rails on my breakout board show something like 3.6-4.2 V while in operation. Is it possible that the voltage being lowered to 5V on the barrel plug is not supplying enough power to keep the arduinos internal voltage high enough?

Im not following your post about 1V reference. AFAIK, the two major components to reading an ADC are the line carrying the voltage (4.4V in this case) and a common ground to use as the reference. If I use a voltage divider that steps down to 1V, Im gonna lose almost all of my resolution (already at 15% of battery capacity at best).

Ill try to post a picture of my layout in a bit

Sounds like high impedance power and ground lines. No conductor is zero ohms as no insulator has infinite impedance. It could also be as simple as the ground of the battery is not connected to the Arduino. Double check your wiring.

fa0:
Oddly enough, the voltage read pin seems to increase as digital pins are turned on in sequence in output mode. Specifically, as each of four digital pins running a set of four relays are turned on the measured voltage increases by 70 mV. Meanwhile, the voltage divider is still showing a correct value of 4.40 V on a multimeter, while the arduino ADC voltage has increased to almost 5 Volts.

The ADC doesn’t measure voltage as such, it measures the ratio between the analog pin voltage and the analog reference voltage (Vcc by default, but can be changed using the analogReference() call). If Vcc isn’t rock-steady at exactly 5V, the analog readings will vary as the 5V supply is loaded down, but it will get the ratios right.