Boost Arduino ADC Accuracy with the 1.1 V Internal Reference
Using the 1.1 V internal reference on an Arduino boosts ADC resolution from ~4.9 mV to ~1.1 mV per count. Pair it with a 5:1 voltage divider, add a 0.1 µF capacitor, and you can read a 0‑5 V sensor with roughly 4.5× more precision—perfect for temperature probes and precision analog work.
10 Jul 2025, 23:22 UTC

Why the 5 V Default ADC Scale Isn’t Enough
When you read a 0‑5 V sensor with an Arduino Uno, the 10‑bit ADC gives you a raw value from 0 to 1023. That translates to about 4.9 mV per count. For many hobbyist projects it’s fine, but when you need sub‑millivolt precision—say, measuring a temperature probe that changes 10 mV per degree—you’ll hit the ADC’s resolution limit.
The 1.1 V Internal Reference as a Resolution Boost
The AVR microcontroller on the Uno ships with a 1.1 V band‑gap reference that can be selected with analogReference(INTERNAL). Switching the ADC’s full‑scale range from 5 V to 1.1 V turns the 4.9 mV step into roughly 1.1 mV per step—almost five times finer resolution. If you keep the sensor’s 0‑5 V output, you must first bring it into the 0‑1.1 V window with a voltage divider.
Designing a Safe Voltage Divider
The divider must not exceed the 1.1 V limit. A 5:1 ratio (e.g., 100 kΩ on the high side and 20 kΩ on the low side) scales 5 V down to 1 V. The divider’s source impedance should stay below 10 kΩ to avoid loading the ADC’s sample‑and‑hold capacitor. If you can’t meet that, add a small capacitor (~0.1 µF) from the ADC pin to ground to hold the charge during conversion.
| Resistor (High) | Resistor (Low) | Ratio | Resulting 5 V → 1.0 V |
|---|---|---|---|
| 100 kΩ | 20 kΩ | 5:1 | 1.0 V |
Putting It All Together in Code
// Pin assignment
const uint8_t sensorPin = A0; // ADC input
void setup() {
Serial.begin(115200);
// Select the internal 1.1 V reference
analogReference(INTERNAL);
}
void loop() {
// Read raw ADC value (0‑1023)
uint16_t raw = analogRead(sensorPin);
// Convert to voltage on the divider (0‑1.1 V)
float vDivider = raw * (1.1 / 1023.0);
// Scale back to the original 0‑5 V range
float vSensor = vDivider * 5.0; // 5× the divider ratio
Serial.print("ADC raw: ");
Serial.print(raw);
Serial.print(" | Sensor voltage: ");
Serial.print(vSensor, 3); // 3 decimal places
Serial.println(" V");
delay(500);
}
Run this sketch once the divider is wired between the sensor output and ground, with the high resistor connected to the sensor and the low resistor to the Arduino’s A0 pin. The analogReference(INTERNAL) call must appear before any analogRead; otherwise the ADC will use the default 5 V rail.
What You’ll Notice
- Resolution improves from ~4.9 mV to ~1.1 mV per count.
- Noise can increase if the divider’s source impedance is high; the 0.1 µF capacitor helps.
- Temperature drift: the 1.1 V reference can shift by ~5 % per 50 °C. Over a 30 °C range, expect ~3 % change.
Trade‑Offs and Limits
The internal reference is convenient, but it’s only accurate to ±1 % and drifts with temperature. If your application demands better than 1 % accuracy—think precision analog instrumentation—you’ll need an external reference (e.g., a 1.024 V precision IC) and analogReference(EXTERNAL). Also, the ADC input must never exceed 1.1 V when the internal reference is selected; otherwise you risk damaging the pin.
How to Verify the Improvement
- Use a calibrated 0‑5 V signal generator or a known voltage divider.
- Read the ADC value with the internal reference and scale back to volts.
- Compare the result to a multimeter reading. The difference should be within the expected ±1 % of the 1.1 V reference plus divider tolerances.
- Repeat the measurement at two temperatures (e.g., 20 °C and 70 °C) to observe the ~5 % drift.
Practical Takeaway
For most hobbyist projects that need a few extra bits of precision, wiring a 5:1 voltage divider and selecting the internal 1.1 V reference is the quickest way to squeeze more resolution out of the Arduino’s ADC. Just remember the temperature drift and keep the divider’s impedance low—or add a small capacitor—to keep the readings clean.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.