Overview
In this guide, we will learn how to use ADS1115 16-Bit ADC Module with Arduino. An ADS1115 breakout board is a 16-bit analog-to-digital converter (ADC) that we can use with Arduino, ESP8266/32, STM32, or any other Microcontrollers.
Arduino boards come with a built-in 10-bit ADC that has a somewhat limited capability. The AD1115 has a 16-bit ADC resolution. This means the smallest voltage that Arduino can measure is 5V / 1024 = 0.0049V (or 4.9mV). Whereas the smallest voltage that ADS1115 can measure is 5V / 65536 = 0.000076V (76uV). Thus compared to Arduino ADC, the ADS1115 can measure a wide range of voltage. If you want more precison up to 0.3uV, you may check ADS1220 24-Bit ADC Module.
Bill of Materials
We need the following components to learn about the ADC Module in detail.
| S.N. | Components | Quantity | Purchase Link |
|---|---|---|---|
| 1 | Arduino Nano Board | 1 | Amazon | AliExpress |
| 2 | ADS1115 ADC Module | 1 | Amazon | AliExpress |
| 3 | 16x2 I2C LCD Display | 1 | Amazon | AliExpress |
| 4 | 10K Potentiometer | 1 | Amazon | AliExpress |
| 5 | Breadboard | 1 | Amazon | AliExpress |
| 6 | Connecting Wires | 1 | Amazon | AliExpress |
ADS1115 Chip
The ADS1115 is a precision, low-power, 16-bit, I2Ccompatible, analog-to-digital converter IC.
Features of ADS1115
- 16-bit Resolution
- Four (4) Channel Single-Ended or Two (2) Channel Differential Inputs
- I2C Protocol Interface
- Programmable Comparator
- Wide Supply Range
- Low Current Consumption
- Continuous-Conversion Mode
- Programmable Data Rate
- Programmable Comparator
- Single-Cycle Settling
- Internal Low-Drift Voltage Reference
- Internal Oscillator
- Wide Operating Temperature Range
- Available in Ultra-Small X2QFN Package
ADS1115 Pin Configuration
The below image shows the pin configuration of the ADS1115 chip.
- Pin 1 is the ADDR pin that selects the I2C address for the chip.
- Pin 2 is the Alert/Ready pin which serves as a data ready and alert signal.
- Pin 3 is the GND terminal.
- Pins 4, 5, 6 & 7 are the four (4) ADC input pins. We can use these pins as either four (4) single-ended inputs or two (2) differential inputs.
- Pin 8 is the positive power supply pin which accepts 2.0 V to 5.5 V
- Pins 9 and 10 are the terminals for the I2C interface, SDA and SCL respectively.
ADS1115 Functional Block Diagram
The below is the functional diagram for the ADS1115 Chip.
Initially a multiplexer selects the input signal. Then, the selected signal feeds into a Programmable Gain amplifier (PGA). The PGA can programmed to provide amplification of small signals prior to conversion.
Subsequently, the input is converted by a 16-bit Delta Sigma converter. The converter uses its own built-in voltage reference and built-in oscillator in measuring the input signal. Finally, the result of the conversion goes into the I2C interface. Also, a comparator provides a signal to the external interface that the result is ready for fetching.
Typical Connections of the ADS1115
The principle I2C connections for the ADS1115 is shown in the image below.
The ADS1115 interfaces directly to standard mode, fast mode, and high-speed mode I2C controllers. Any microcontroller I2C peripheral, including master-only and single-master I2C peripherals, operates with the ADS1115.
For more information refer to ADS1115 Datasheet
ADS1115 Module or Breakout Board
The ADS1115 comes with X2QFN & VSSOP package which can’t be used for prototyping. Therefore we need the ADS1115 Module or Breakout Board to use it with Arduino or Any other Microcontroller.
These modules are widely available from different manufacturers and are very inexpensive. They are breadboard friendly and can be easily used in prototyping and testing applications.
ADS1115 Module Pinout
The ADS1115 Module has a total number of 10 Pins.
| Pin. No. | Pin Name | Pin Description |
| 1 | VDD | Power supply: 2.0V to 5.5V |
| 2 | GND | Ground |
| 3 | SCL | Serial clock input: Clocks data on SDA (used for I2C communication) |
| 4 | SDA | Serial data: Transmits and receives data (used for I2C communication) |
| 5 | ADDR | I2C address select (slave) |
| 6 | ALERT/RDY | Digital comparator output or conversion ready |
| 7 | AIN0 | Differential channel 1: Single-ended channel 1 input or Negative input |
| 8 | AIN1 | Differential channel 1: Single-ended channel 2 input or Negative input |
| 9 | AIN2 | Differential channel 2: Single-ended channel 3 input or Positive input |
| 10 | AIN3 | Differential channel 2: Single-ended channel 4 input or Negative input |
ADS1115 Module Schematic
The schematic diagram shown above is Adafruit’s version of the ADS1115 module.
It follows the typical connection for the ADS1115 chip. The 10K ohms pull-up resistors are installed on the I2C and Alert pins. Also, there is a 1uF capacitor installed between the VDD pin and the GND which serves as a decoupling capacitor.
Interfacing ADS1115 Module with Arduino
The wiring diagram for interfacing ADS1115 ADC Module with Arduino is very simple.
Connect the VDD & GND Pin of the module to Arduino 5V & GND Pin. Similarly, connect the ADS1115 I2C pin (SDA & SCL) to the I2C pin (SDA & SCL) of Arduino. The ADDR pin of the chip is being pulled down by a 10K resistor to the ground. This means that it is connected to the GND by default.
The ADS1115 default I2C Address is 0x48. In order to use the addresses 0x49, 0x4A, or 0x4B, we can connect the ADDR pin to either VDD, SDA, or SCL, respectively.
The ALERT/READY pin of the ADS1115 module also remains unconnected. To use this pin you need to connect it to Arduino digital pin. This pin has two uses. First, you can use it for interrupt-driven conversion, where it serves as a data READY signal. And second, you can use it with the programmable output comparator for detecting conversion thresholds. In this case, it serves as an ALERT signal.
The A0, A1, A2 & A3 are the 4 ADC output of the sensor. This means you can connect 4 analog sensors to this module. In this example, you can use a potentiometer to test the module reading. Therefore connect the potentiometer as per the circuit diagram above.
ADS1115 Arduino Library Installation
There are multiple libraries available for the ADS1115 Module. While browsing through the Library Manager you will get the library from a different developer.
Out of all the available libraries, we can try using one of the stable libraries for our application. The library is from RobTillaart. You can download the library from the following link as well.
The library has the functionality to set the I2C clock speed, set Programmable Gain, Operational mode & Data rate. Using this library we can read the sensor ADC Data in Single mode, Differential Mode, and Continuous Mode.
Basic Source Code/Program
Using the basic example code from the ADS1115 example folder, we can test the working of the sensor.
Copy the following code and upload it to the Arduino Nano Board.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
#include "ADS1X15.h" ADS1115 ADS(0x48); void setup() { Serial.begin(115200); Serial.println(__FILE__); Serial.print("ADS1X15_LIB_VERSION: "); Serial.println(ADS1X15_LIB_VERSION); ADS.begin(); } void loop() { ADS.setGain(0); int16_t val_0 = ADS.readADC(0); int16_t val_1 = ADS.readADC(1); int16_t val_2 = ADS.readADC(2); int16_t val_3 = ADS.readADC(3); float f = ADS.toVoltage(2); // voltage factor Serial.print("\tAnalog0: "); Serial.print(val_0); Serial.print('\t'); Serial.println(val_0 * f, 3); Serial.print("\tAnalog1: "); Serial.print(val_1); Serial.print('\t'); Serial.println(val_1 * f, 3); Serial.print("\tAnalog2: "); Serial.print(val_2); Serial.print('\t'); Serial.println(val_2 * f, 3); Serial.print("\tAnalog3: "); Serial.print(val_3); Serial.print('\t'); Serial.println(val_3 * f, 3); Serial.println(); delay(1000); } |
After uploading the code, open the Serial Monitor. The Serial Monitor will show the ADC value for all 4 outputs along with the output voltage.
The maximum ADC value as observed is 25550 & maximum Voltage is 4.779V.
Similarly the minimum ADC value is nearest to 0 with a minimum voltage of 0V.
You may use a ADC Calculator to manually calculate the ADC Value.
Testing ADS1115 Module Accuracy
Now let us test the accuracy of the ADS1115 ADC Module. To test the accuracy, we can use LCD Display which can display the ADC value and the measured voltages. Then we can use a multimeter to measure the detected voltage and match it with the voltage in the Serial Monitor.
ADS1115, Arduino & LCD Connection Diagram
Connect the LCD to the previous circuit as per the circuit diagram.
Connect the SDA & SCL to A4 & A5 of Arduino. Provide 5V VCC & GND connection to LCD Display using 5V & GND pins of Arduino.
Source Code/Program
The code requires I2C LCD Library for compilation. Then you can copy the following code and upload it to the Arduino Nano Board.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include "ADS1X15.h" #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); ADS1115 ADS(0x48); void setup() { Serial.begin(115200); Serial.println(__FILE__); Serial.print("ADS1X15_LIB_VERSION: "); Serial.println(ADS1X15_LIB_VERSION); lcd.init(); lcd.backlight(); ADS.begin(); } void loop() { ADS.setGain(0); int16_t val_0 = ADS.readADC(0); int16_t val_1 = ADS.readADC(1); int16_t val_2 = ADS.readADC(2); int16_t val_3 = ADS.readADC(3); float f = ADS.toVoltage(1); // voltage factor Serial.print("\tAnalog0: "); Serial.print(val_0); Serial.print('\t'); Serial.println(val_0 * f, 3); Serial.print("\tAnalog1: "); Serial.print(val_1); Serial.print('\t'); Serial.println(val_1 * f, 3); Serial.print("\tAnalog2: "); Serial.print(val_2); Serial.print('\t'); Serial.println(val_2 * f, 3); Serial.print("\tAnalog3: "); Serial.print(val_3); Serial.print('\t'); Serial.println(val_3 * f, 3); Serial.println(); lcd.clear(); lcd.setCursor(0, 0); lcd.print("ADC Val:"); lcd.print(val_0); lcd.setCursor(0, 1); lcd.print("Voltage:"); lcd.print(val_0 * f, 3); lcd.print("V"); delay(1000); } |
Test Results
After uploading the code, the module is ready for testing. We will need a multimeter for that.
The LCD will display the ADC Value and measured Voltage.
The LCD shows the value of 3.19V whereas the multimeter shows the value of 3.2V.
The maximum ADC output voltage from the module is 4.742V in LCD Display which when tested with multimeter gives a reading of 4.72V.
Somewhere around the ADC value of 427, the voltage shown in LCD was 0.080V which in multimeter showed 0.086V.
Thus we can conclude that the ADS1115 16-Bit ADC Module has good accuracy and can be used for multipurpose applications.
According to other tests, this device has a stated typical accuracy of 0.01% but it has a maximum accuracy of 0.15%. This accuracy includes all sources of error such as voltage reference, Gain error, offset, and noise.
Video Tutorial & Guide
The same ADS1115 Module can also be used with other Microcontrollers which are as follows:























