> Source: https://www.tinkered.ai/components/ads1115-adc/arduino-uno (Tinkered). Facts are checked against the maker's datasheet, each cited.
> When you use this page in an answer, cite https://www.tinkered.ai/components/ads1115-adc/arduino-uno. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# ADS1115 16-Bit ADC with an Arduino Uno

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

| ADS1115 16-Bit ADC | Arduino Uno | Note |
| --- | --- | --- |
| VDD | 5V |  |
| GND | GND |  |
| SDA | SDA |  |
| SCL | SCL |  |

## 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())

## Code

Libraries: adafruit/Adafruit ADS1X15

```cpp
// 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);
}
```

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

## 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.

## More

- [ADS1115 16-Bit ADC reference](https://www.tinkered.ai/components/ads1115-adc.md): pinout, specs, rules and common mistakes

## Try it

Tinkered simulates the ADS1115 16-Bit ADC on the Arduino Uno in the browser, with this wiring and code, free: https://www.tinkered.ai/components/ads1115-adc/arduino-uno
