ADS1115 16-Bit ADC with an Arduino Uno

A 16-bit, four-input I2C analog-to-digital converter with a programmable gain amplifier, from ±0.256 V to ±6.144 V full scale.

ADS1115 16-Bit ADC, A 16-bit, four-input I2C analog-to-digital converter with a programmable gain amplifier, from ±0.256 V to ±6.144 V full scale.
In short

On an Arduino Uno the ADS1115 runs from 5V, so the module's pull-ups hold SDA and SCL at the Uno's own 5 V logic level and its inputs can span 0 to 5 V on the ±6.144 V range. It sits on the Uno's I2C pins (A4 and A5, repeated beside AREF) and replaces the Uno's 10-bit ADC with 16 bits.

Wiring the ADS1115 16-Bit ADC to the Arduino Uno

Pin by pin.

ADS1115 16-Bit ADCArduino Uno
VDD5V
GNDGND
SDASDA
SCLSCL

What to know on the Arduino Uno

  • With VDD = 5 V, GAIN_TWOTHIRDS (±6.144 V) covers a 0 to 5 V signal at 187.5 µV per bit, against about 4.9 mV per count for the Uno's own 10-bit analogRead().TI ADS111x datasheet SBAS444E, p. 15; Microchip ATmega328P datasheet DS40002061B, p. 2
  • I2C uses A4 (SDA) and A5 (SCL) on the Uno, so those two analog inputs are lost; only A0 to A3 remain for analogRead() while the ADS1115 is wired.Arduino UNO R3 datasheet, p. 10
  • Even at ±6.144 V the inputs may not exceed VDD + 0.3 V, which is 5.3 V on the Uno's 5 V. A 12 V battery or any signal above that needs a resistor divider first.TI ADS111x datasheet SBAS444E, p. 4
  • The ALRT pin is open drain with a pull-up on the module. Wire it to D2 or D3, the Uno's two external interrupt pins, to be told when a conversion is ready instead of polling.TI ADS111x datasheet SBAS444E, p. 17; Arduino language reference, attachInterrupt()

ADS1115 16-Bit ADC code for the Arduino Uno

Compiled for arduino:avr:uno on 2026-10-30.

Libraries: adafruit/Adafruit ADS1X15
// ADS1115 16-Bit ADC on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/ads1115-adc/arduino-uno
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;

void setup() {
  Serial.begin(115200);
  if (!ads.begin(0x48)) {
    Serial.println("ADS1115 not found: check VDD, SDA/SCL and the ADDR wiring");
    while (true) delay(10);
  }
  ads.setGain(GAIN_TWOTHIRDS);
}

void loop() {
  int16_t pot = ads.readADC_SingleEnded(0);
  int16_t tmp = ads.readADC_SingleEnded(1);
  float potV = ads.computeVolts(pot);
  float tempC = (ads.computeVolts(tmp) - 0.5f) * 100.0f;   // TMP36: 0.5 V at 0 °C, 10 mV/°C
  Serial.print("pot "); Serial.print(potV, 4); Serial.print(" V  ");
  Serial.print("temp "); Serial.print(tempC, 2); Serial.println(" C");
  delay(500);
}

ADS1115 16-Bit ADC on the Arduino Uno: questions

Should I power the ADS1115 from 5V or 3.3V on an Arduino Uno?

From 5V. The chip runs from 2.0 V to 5.5 V (TI datasheet, p. 1) and the module's 10 kΩ pull-ups go to VDD, so 5 V matches the Uno's I2C levels and lets the inputs read up to 5 V.

How much better is the ADS1115 than the Uno's analogRead()?

The Uno's ADC is 10 bits, about 4.9 mV per step on 5 V. The ADS1115 at ±6.144 V resolves 187.5 µV per bit, and down to 7.8125 µV at ±0.256 V for small signals such as shunts (TI datasheet, p. 15).

Which Uno pins does the ADS1115 use?

SDA on A4 and SCL on A5, or the SDA and SCL pins beside AREF, which are the same signals (Arduino UNO R3 datasheet, p. 10). ADDR left open gives address 0x48.

Keep going

For AI assistants

This guide as plain Markdown. /components/ads1115-adc/arduino-uno.md

What will you build with it?