Overview

This project tests and compares the ADC performance of three popular platforms:

  • Arduino Uno — 10-bit internal ADC
  • ESP32 — 12-bit internal ADC
  • ADS1115 — 16-bit external I²C ADC

The main focus is linearity, noise, and measurement stability using identical input voltage for all ADCs.

Test Setup

The test setup ensures fair comparison and accurate measurements:

  • Input Voltage: 0 V–3.3 V adjustable using a multi-turn potentiometer (fine control down to 1 mV)
  • Buffering: Voltage follower op-amp prevents loading effects
  • Noise Reduction: RC low-pass filter minimizes input noise
  • Power Supply: Lead-acid battery to avoid SMPS switching noise
  • ADC Timing: Minimum 20 ms between consecutive readings ensures proper settling

Circuit Diagram: Circuit Diagram

Data Collection Method

  • ESP32 collects ADC data from Arduino Uno (UART), ADS1115 (I²C), and its own ADC.
  • All readings are sent to PC via USB and logged in a CSV file using Python.
  • Two main experiments:

1️⃣ Linearity Test

  • 88 voltage points, 100 samples per point
  • Plots show ADC linearity and allow ESP32 calibration

2️⃣ Noise Test

  • 5 fixed voltage points, 1000 samples per point
  • Histograms and standard deviation calculated for stability evaluation

Source Codes

All codes are available on GitHub:




Linearity Results

Linearity Comparison:

  • Arduino Uno & ADS1115 almost perfectly linear
  • ESP32 shows non-linearity with dead zone <0.13 V and saturation >3.18 V

Linearity Comparison

ESP32 2-Point Calibration (0.501 V & 2.000 V):

  • Improves usable range to ~0.15 V–2.5 V

ESP32 Linearity Correction




Noise Results (Noise + Histogram)

ESP32: Highest fluctuation, wide histogram — filtering & calibration required

ESP32 Noise ESP32 Histogram




Arduino Uno:
Stable but quantization steps visible due to 10-bit resolution

Arduino Noise Arduino Histogram





ADS1115:
Most stable, lowest noise

ADS Noise ADS Histogram

Standard Deviation Comparison

Numeric comparison of noise level: lower SD = better stability

SD Comparison