Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Industriële technologie

ADS1115 16-bit ADC: Handleiding voor Arduino & Raspberry Pi

Wat is de ADS1115?

De ADS1115 (Texas Instruments) is een 16-bit, 4-kanaals analoge-naar-digitale converter (ADC) met I2C-interface. Het biedt programmeerbare winst (PGA), differentiële ingangen, lage stroomverbruik en hoge precisie – ideaal voor batterijmonitoring, sensoren, meetapparatuur en audio. Veel gebruikt op breakout-borden (Adafruit, Waveshare, generiek).

Kenmerken

  • Resolutie: 16 bit (65536 stappen)
  • Kanalen: 4 single-ended (A0-A3) OF 2 differentieel (A0-A1, A2-A3)
  • PGA (Programmeerbare Winst): 2/3×, 1×, 2×, 4×, 8×, 16× → invoerbereik ±6,144 V tot ±0,256 V
  • Sample rate: 8 – 860 SPS (instelbaar)
  • I2C: Standaard (100 kHz), Fast (400 kHz), High-speed (3,4 MHz)
  • Adressen: 0x48 (ADDR→GND), 0x49 (ADDR→VDD), 0x4A (ADDR→SDA), 0x4B (ADDR→SCL)
  • Voeding: 2,0 – 5,5 V (I/O tolerant tot VDD+0,3V)
  • Stroom: ~150 µA actief, 0,5 µA power-down
  • Temperatuur: -40 °C tot +125 °C

Pinout (Breakout Bord)

PinFunctie
VDDVoeding 2,0-5,5V
GNDMassa
SCLI2C Klok
SDAI2C Data
ADDRI2C Adres selectie (zie tabel)
A0-A3Analoge ingangen
ALRTAlarm/Comparator uitgang (open-drain)

Aansluiten op Arduino (UNO/Nano/ESP32)

ADS1115      Arduino (5V logica)
VDD    →     5V
GND    →     GND
SCL    →     A5 (UNO/Nano) / GPIO22 (ESP32)
SDA    →     A4 (UNO/Nano) / GPIO21 (ESP32)
ADDR   →     GND (adres 0x48)
A0     →     Sensor signaal (bijv. spanningssensor)

Let op: ADS1115 is 5V tolerant op I2C pinnen als VDD=5V. Bij 3,3V MCU (ESP32): voed ADS1115 met 3,3V of gebruik level shifter op SDA/SCL.

Arduino Bibliotheek & Basis Code

Bibliotheek: Adafruit ADS1X15 (Arduino IDE → Bibliotheken beheren → Zoek "ADS1X15" → Installeer Adafruit versie).

#include 
#include 

Adafruit_ADS1115 ads(0x48);  // ADDR → GND

void setup() {
  Serial.begin(115200);
  Wire.begin();
  if (!ads.begin()) {
    Serial.println("ADS1115 niet gevonden! Check aansluiting/adres.");
    while (1);
  }
  // Optioneel: PGA instellen (default = 1x, ±4.096V)
  // ads.setGain(GAIN_TWOTHIRDS); // ±6.144V (1 bit = 0.1875 mV)
  // ads.setGain(GAIN_ONE);       // ±4.096V (1 bit = 0.125 mV)  DEFAULT
  // ads.setGain(GAIN_TWO);       // ±2.048V (1 bit = 0.0625 mV)
  // ads.setGain(GAIN_FOUR);      // ±1.024V (1 bit = 0.03125 mV)
  // ads.setGain(GAIN_EIGHT);     // ±0.512V (1 bit = 0.015625 mV)
  // ads.setGain(GAIN_SIXTEEN);   // ±0.256V (1 bit = 0.0078125 mV)
  
  // Optioneel: Sample rate
  // ads.setDataRate(RATE_ADS1115_860SPS); // Default 128 SPS
}

void loop() {
  // Single-ended lezing kanaal 0
  int16_t raw = ads.readADC_SingleEnded(0); // 0-3 voor A0-A3
  float voltage = ads.computeVolts(raw);    // Rekening houdend met gain
  
  Serial.print("Raw: "); Serial.print(raw);
  Serial.print("  Spanning: "); Serial.print(voltage, 4); Serial.println(" V");
  
  // Differentieel lezen (A0 - A1)
  // int16_t diff = ads.readADC_Differential_0_1();
  // float diffV = ads.computeVolts(diff);
  
  delay(500);
}

Spanningsdeler voor Hogere Spanningen (Bijv. 0-24V Batterij)

ADS1115 max invoer = VDD + 0,3V. Voor 24V meting: spanningsdeler naar ±4,096V bereik (GAIN_ONE).

Batterij + ──→ [R1 = 47kΩ] ──→ [R2 = 10kΩ] ──→ GND
                    │
                    └──→ A0 (ADS1115)

Uitgang = Vin × (R2 / (R1+R2)) = Vin × 10/57 ≈ Vin × 0,175. 24V → 4,2V (binnen ±4,096V bereik, maar dichtbij limiet). Beter: R1=56k, R2=10k → factor 0,151. 24V → 3,6V. Meetbereik 0-24V, resolutie ≈ 3,6V/32767 ≈ 0,11 mV per bit.

Raspberry Pi Interfacing (Python)

Hardware

ADS1115      Raspberry Pi (3,3V I2C)
VDD    →     3,3V (Pin 1)
GND    →     GND (Pin 6/9/14/20/25/30/34/39)
SCL    →     GPIO 3 (Pin 5, I2C1 SCL)
SDA    →     GPIO 2 (Pin 3, I2C1 SDA)
ADDR   →     GND (0x48)

Activeer I2C: `sudo raspi-config` → Interface Options → I2C → Yes. Reboot.

Python Installatie

sudo apt update && sudo apt install python3-pip git
pip3 install adafruit-circuitpython-ads1x15
# Of systeembreed:
sudo pip3 install adafruit-circuitpython-ads1x15

Python Script

import time
import board
import busio
import adafruit_ads1x15.ads1115 as ADS
from adafruit_ads1x15.analog_in import AnalogIn

i2c = busio.I2C(board.SCL, board.SDA)
ads = ADS.ADS1115(i2c, address=0x48)
# ads.gain = 1  # ±4.096V (default)
# ads.data_rate = 860  # SPS

chan0 = AnalogIn(ads, ADS.P0)  # Single-ended A0
# chan_diff = AnalogIn(ads, ADS.P0, ADS.P1)  # Differentieel A0-A1

while True:
    print(f"Kanaal 0: {chan0.value:>5} raw  {chan0.voltage:.4f} V")
    # print(f"Diff 0-1: {chan_diff.value:>5} raw  {chan_diff.voltage:.4f} V")
    time.sleep(0.5)

Negatieve Spanning Meten

JA, de ADS1115 kan negatieve spanningen meten in differentiële modus (bijv. A0 - A1). Verbind de negatieve bron met A1, positieve met A0, GND gemeenschappelijk. De uitwaarde is dan een signed 16-bit integer (negatief = twee's complement). In single-ended modus is de ingang gerefereerd aan GND → alleen positief ten opzichte van GND.

Veelvoorkomende Toepassingen

  • Batterijmonitoring (spanning, stroom via shunt)
  • Precisie temperatuursensoren (PT100/PT1000 met Wheatstone brug)
  • Lastcel / krachtmeting (HX711 alternatief met hogere resolutie)
  • Audio niveau meting (met AC-koppeling)
  • Industriële 4-20 mA sensoren (shunt weerstand 250Ω → 1-5V)
  • Zonnepaneel monitoring (spanning + stroom)

Tips & Troubleshooting

ProbleemOplossing
I2C scan toont geen apparaatCheck VDD, GND, SDA/SCL, pull-ups (4,7kΩ), adres pin (ADDR)
Waarden springen / ruisVoeg 100nF + 10µF bij VDD, kortere draden, afscherming, lagere sample rate
Negatieve waarden bij single-endedIngang < GND (ruis), of PGA te hoog voor signaal. Check common-mode bereik.
Alle kanalen zelfde waardeMux niet geschakeld (bibliotheek bug), of alle pinnen kortgesloten
ALRT pin werkt nietConfigureer comparator via registers (bibliotheek ondersteunt dit beperkt)

Conclusie

De ADS1115 is een uitstekende, lage-kost 16-bit ADC voor Arduino en Raspberry Pi. Zijn PGA, differentiële ingangen en I2C-interface maken het veelzijdig voor precisiemeting. De Adafruit bibliotheek maakt integratie trivial. Let op: common-mode spanning blijft binnen 0-VDD, gebruik spanningsdelers voor hogere spanningen, en decoupleer de voeding goed voor optimale ruisprestaties.

Industriële technologie

  1. Arduino Mega koppelen aan een NEO‑6M GPS-module: stapsgewijze handleiding
  2. Temperatuur en Vochtigheid met DHT11 op Blynk - Stap-voor-Stap Arduino Tutorial
  3. Bouw IoT-apparaten met Arduino en Octoblu's The Tentacle – geen programmeren vereist
  4. ADXL345 Accelerometer met Arduino: Oriëntatie Tracking Stap-voor-Stap
  5. Rotary encoders met Arduino: werking & stap-voor-stap integratie
  6. PIR Bewegingssensor: Werkprincipe & Arduino Integratie Handleiding
  7. Stapmotor Besturing met Arduino & A4988 Driver – Stap-voor-Stap Handleiding
  8. Industriële IoT: Slimme Magazijntrends Vooruit Gang Maken
  9. Waarom Regelmatig Onderhoud Essentieel Is Voor Zware Machines
  10. Arduino Uitgelegd: Wat Is Het en Hoe Programmeer Je Het?
  11. Edge AI Inferencing meesteren: Een praktische gids voor actionable insights