Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza

ADS1115 ADC Modülü: Arduino ile 16 Bit Analog Okuma

ADS1115 ADC Modülü: Arduino ile 16 Bit Analog Okuma
Kısa cevap

ADS1115, Arduino'nun 10 bitlik analog girişinin yetmediği yerde kullanılan, I2C ile bağlanan 16 bitlik ve 4 kanallı bir analog-dijital dönüştürücüdür (ADC). Programlanabilir kazancı sayesinde ±0,256 V ile ±6,144 V arasında ölçüm aralığı seçilir, saniyede 860 örneğe kadar ölçer ve ADDR pini ile 0x48-0x4B adreslerinden birini alır.

ADS1115 ADC modülü, Arduino'nun dahili analog girişinden çok daha ince ölçüm gereken projelerde kullanılır: pil gerilimi izleme, termistörle hassas sıcaklık ölçümü, akım şöntü ve küçük sensör sinyalleri bunların başında gelir. Bu yazıda ADS1115'in ne olduğunu, kazanç (PGA) ayarının nasıl seçildiğini, Arduino'ya bağlantısını, örnek kodu ve hatalı ölçümün yaygın nedenlerini anlatıyoruz. Arduino ile analog ölçüm yapan hobiciler, öğrenciler ve teknisyenler için hazırlanmıştır.

ADS1115 nedir?

ADS1115, Texas Instruments'ın ürettiği, 16 bit çözünürlüklü, dahili referanslı ve programlanabilir kazanç yükselteçli (PGA) bir delta-sigma analog-dijital dönüştürücü entegresidir. Dört girişi vardır: dördü tek uçlu (her biri GND'ye göre) ya da ikisi diferansiyel (A0-A1 ve A2-A3 çiftleri) olarak okunabilir. 2,0-5,5 V ile beslenir ve mikrodenetleyiciyle I2C üzerinden haberleşir.

Piyasadaki ADS1115 16 bit 4 kanal ADC modülü, entegreyi SDA ve SCL pull-up dirençleri ve dekuplaj kondansatörüyle birlikte küçük bir karta taşır. Modülde genellikle VDD, GND, SCL, SDA, ADDR, ALRT ve A0-A3 olmak üzere 10 pin bulunur. I2C'nin temellerini I2C nedir ve Arduino ile nasıl kullanılır yazımızda anlattık.

ADS1115, Arduino'nun analog girişinden ne kadar hassas?

ADS1115, Arduino Uno'nun 10 bitlik ADC'sine göre yaklaşık 32-64 kat daha küçük adımlarla ölçer. Uno 0-5 V aralığını 1024 adıma böler ve bir adım yaklaşık 4,9 mV'tur; ADS1115 ±4,096 V aralığında bir adımı 0,125 mV'a, en hassas aralıkta 0,0078 mV'a indirir.

ÖzellikArduino Uno (ATmega328P)ADS1115ADS1015
Çözünürlük10 bit16 bit12 bit
Kanal6 tek uçlu4 tek uçlu / 2 diferansiyel4 tek uçlu / 2 diferansiyel
En yüksek hızYaklaşık 10.000 örnek/s860 örnek/s3300 örnek/s
Kazanç (PGA)Yok6 kademe6 kademe
ReferansBesleme (5 V) ya da dahili 1,1 VDahili, beslemeden bağımsızDahili
BağlantıDoğrudan pinI2C (0x48-0x4B)I2C (0x48-0x4B)

Hız gerekiyorsa ADS1015, hassasiyet gerekiyorsa ADS1115 seçilir. ADS1115'in veri hızı 8, 16, 32, 64, 128, 250, 475 ve 860 örnek/s kademelerinden biri olarak ayarlanır; düşük hız daha az gürültü demektir.

PGA kazancı nasıl seçilir?

Kazanç, ölçeceğiniz en yüksek gerilimi kapsayan en küçük aralık olarak seçilir. Örneğin sinyaliniz en fazla 1,8 V ise ±2,048 V aralığı (GAIN_TWO) hem taşmayı önler hem de en ince adımı verir.

Adafruit kütüphanesi ayarıTam ölçek aralığıBir adım (ADS1115)
GAIN_TWOTHIRDS (kütüphane varsayılanı)±6,144 V0,1875 mV
GAIN_ONE±4,096 V0,125 mV
GAIN_TWO±2,048 V0,0625 mV
GAIN_FOUR±1,024 V0,03125 mV
GAIN_EIGHT±0,512 V0,015625 mV
GAIN_SIXTEEN±0,256 V0,0078125 mV

Önemli: ±6,144 V aralığı, girişe 6 V uygulayabileceğiniz anlamına gelmez. TI veri sayfasına göre analog girişler GND - 0,3 V ile VDD + 0,3 V arasında kalmalıdır. Modülü 5 V ile beslediğinizde en fazla 5 V, 3,3 V ile beslediğinizde en fazla 3,3 V ölçün. Daha yüksek gerilimler için gerilim bölücü kullanın.

ADS1115 Arduino'ya nasıl bağlanır?

ADS1115 Arduino Uno'ya dört kabloyla bağlanır: VDD → 5V, GND → GND, SCL → A5 ve SDA → A4. ADDR pini GND'ye bağlıyken adres 0x48'dir; ölçülecek sinyal A0-A3 girişlerine, sinyalin toprağı ise ortak GND'ye bağlanır.

ADDR pini bağlantısıI2C adresi
GND0x48
VDD0x49
SDA0x4A
SCL0x4B
ADS1115 ADC modülü Arduino Uno bağlantı şeması: modülün VDD ucu Arduino 5V pinine, GND ucu GND'ye, SDA ucu A4 pinine, SCL ucu A5 pinine bağlı; ADDR pini modül tarafında GND'ye köprülenmiş ve adres 0x48; ALRT pini boş; A0 girişine 10K potansiyometrenin orta ucu bağlı, potansiyometrenin diğer uçları 5V ve GND'ye gidiyor; solda ADDR bağlantısına göre adres tablosu: GND 0x48, VDD 0x49, SDA 0x4A, SCL 0x4B; altta girişlerin GND - 0,3 V ile VDD + 0,3 V arasında kalması gerektiği ve yüksek gerilimde gerilim bölücü kullanılması uyarısı
VDD 5V'a, GND GND'ye, SDA A4'e, SCL A5'e bağlanır; ADDR GND'de iken adres 0x48 olur. Girişlere besleme geriliminden yüksek gerilim vermeyin.

Dört farklı adres sayesinde aynı I2C hattına dört ADS1115 bağlanarak 16 tek uçlu kanal elde edilir. ADDR pinini boş bırakmayın; adres belirsiz kalabilir. Örneklerimizde Arduino Uno R3 kullandık; 3,3 V'luk bir ESP32 geliştirme kartı ile modülü 3V3'ten besleyip SDA'yı GPIO21'e, SCL'yi GPIO22'ye bağlayabilirsiniz.

ADS1115 Arduino ile nasıl okunur?

ADS1115'i okumanın en kolay yolu Adafruit_ADS1X15 kütüphanesidir: kütüphaneyi kurar, kazancı ayarlar ve readADC_SingleEnded() ile kanalı okursunuz. Adımlar şöyledir:

  1. Arduino IDE'de Kütüphane Yöneticisi'ni açın, "Adafruit ADS1X15" kütüphanesini kurun.
  2. Modülü yukarıdaki tabloya göre bağlayın; ADDR'yi GND'ye verin.
  3. Deneme için bir 10K potansiyometre bağlayın: uçları 5V ve GND'ye, orta ucu A0'a.
  4. Aşağıdaki kodu yükleyin ve seri monitörü 9600 baud'da açın.
  5. Potansiyometreyi çevirin; ham değer ve volt değeri ekranda değişmelidir.
#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;

void setup() {
  Serial.begin(9600);
  if (!ads.begin(0x48)) {
    Serial.println("ADS1115 bulunamadi");
    while (1);
  }
  ads.setGain(GAIN_TWOTHIRDS);  // +/-6,144 V, 5 V'a kadar sinyal icin
}

void loop() {
  int16_t ham = ads.readADC_SingleEnded(0);
  float volt = ads.computeVolts(ham);
  Serial.print("A0: ");
  Serial.print(ham);
  Serial.print("  ");
  Serial.print(volt, 4);
  Serial.println(" V");
  delay(500);
}

Tek uçlu okumada değer 0 ile 32767 arasında çıkar; işaret biti yalnızca diferansiyel ölçümde kullanıldığı için tek uçlu ölçüm fiilen 15 bittir. Diferansiyel okuma için readADC_Differential_0_1() ya da readADC_Differential_2_3() kullanılır.

Tek uçlu ve diferansiyel ölçüm arasındaki fark nedir?

Tek uçlu ölçüm bir girişi GND'ye göre okur ve yalnızca pozitif gerilim verir; diferansiyel ölçüm iki giriş arasındaki farkı okur, negatif farkı da gösterir ve tam 16 bit çözünürlük sağlar. Diferansiyel ölçüm, iki kabloya aynı anda binen gürültüyü de büyük ölçüde bastırır.

Akım şöntü üzerindeki birkaç milivoltluk düşümü ya da bir köprü sensörünün çıkışını ölçerken diferansiyel mod ve yüksek kazanç (GAIN_SIXTEEN) kullanılır. Bu durumda bile her iki giriş GND ile VDD arasında kalmalıdır. Yük hücresi gibi çok küçük sinyaller için ise 24 bitlik HX711 daha uygundur; ayrıntılar loadcell ve HX711 ile dijital terazi yazımızda.

Ölçümler neden hatalı ya da oynak çıkar?

Oynak ve hatalı ölçümlerin en yaygın nedeni ortak toprak eksikliği, yanlış kazanç seçimi ya da yüksek dirençli kaynaktır. Aşağıdaki kontrolleri sırayla yapın:

  • Ortak GND: Ölçülen devrenin GND'si modülün GND'sine bağlı olmalıdır.
  • Taşma: Değer 32767'de sabitleniyorsa kazanç aralığı küçüktür; bir kademe büyütün.
  • Gerilim bölücü: 12 V akü için 47 kΩ ve 10 kΩ dirençli bölücü 12 V'u yaklaşık 2,1 V'a indirir; gerçek gerilim = okunan × 57 / 10. Bölücü dirençlerini çok büyük seçmeyin.
  • Gürültü: Veri hızını 128 ya da daha düşük tutun, birkaç okumanın ortalamasını alın, sinyal kablosunu kısa tutun.
  • I2C: Modül bulunamıyorsa I2C tarayıcı koduyla adresi kontrol edin.

Hazır bölücülü çözüm isteyenler voltaj sensörü modülü yazımıza da bakabilir. Termistörlü ölçümde su geçirmez 10K NTC sensör ile 10 kΩ sabit dirençten oluşan bölücü, ADS1115 ile Arduino'nun kendi girişine göre çok daha ince sıcaklık adımları verir.

Sık sorulan sorular

ADS1115 kaç volt ölçer?

ADS1115 girişleri en fazla besleme gerilimi kadar, yani 5 V beslemede 5 V, 3,3 V beslemede 3,3 V ölçer. ±6,144 V gibi tam ölçek değerleri yalnızca hesaplama aralığıdır; girişe beslemeden 0,3 V fazlası verilmemelidir. Daha yüksek gerilimler gerilim bölücüyle düşürülür, negatif gerilim ise yalnızca diferansiyel farkta okunur.

ADS1115'in I2C adresi nedir?

ADS1115'in I2C adresi ADDR pinine göre 0x48 (GND), 0x49 (VDD), 0x4A (SDA) ya da 0x4B (SCL) olur. Çoğu modülde ADDR bir dirençle GND'ye çekildiği için varsayılan adres 0x48'dir. Adresi doğrulamak için I2C tarayıcı kodu yükleyip seri monitördeki listeye bakabilirsiniz.

ADS1115 ESP32 ile çalışır mı?

Evet, ADS1115 ESP32 ile sorunsuz çalışır ve ESP32'nin doğrusal olmayan dahili ADC'sine göre çok daha tutarlı sonuç verir. Modülü 3V3'ten besleyin, SDA'yı GPIO21'e, SCL'yi GPIO22'ye bağlayın. 3,3 V beslemede girişlere 3,3 V'tan yüksek gerilim uygulamayın.

ADS1115 ile ADS1015 arasındaki fark nedir?

İki entegre aynı pin dizilişine ve adres yapısına sahiptir; ADS1115 16 bit ve en fazla 860 örnek/s, ADS1015 ise 12 bit ve en fazla 3300 örnek/s ölçer. Hassas ve yavaş değişen sinyallerde ADS1115, hızlı değişen sinyallerde ADS1015 tercih edilir. Kütüphanede yalnızca nesne tipi değişir.

ALRT pini ne işe yarar?

ALRT (ALERT/RDY) pini, ölçüm bittiğinde ya da ayarlanan eşik aşıldığında sinyal veren açık drenaj bir çıkıştır. Basit projelerde kullanılmaz ve boş bırakılabilir. Kullanılacaksa bir pull-up direnciyle Arduino'nun bir kesme pinine bağlanır; böylece sürekli okuma yerine yalnızca yeni veri hazır olduğunda okuma yapılır.

Özet

  • ADS1115, I2C ile bağlanan 16 bitlik, 4 tek uçlu ya da 2 diferansiyel kanallı bir ADC'dir; 8-860 örnek/s hızında ölçer.
  • Kazanç, sinyalin en yüksek değerini kapsayan en küçük aralık olarak seçilir (±0,256 V ile ±6,144 V arası).
  • Girişlere hiçbir kazançta beslemeden yüksek gerilim uygulanmaz; yüksek gerilim için bölücü kullanılır.
  • ADDR pini GND, VDD, SDA ya da SCL'ye bağlanarak 0x48-0x4B adresleri seçilir; bir hatta dört modül çalışır.
  • Tek uçlu ölçüm fiilen 15 bittir; tam 16 bit ve gürültü bastırma için diferansiyel ölçüm kullanılır.

Bu yazıdaki ürünler

Diğer yazılar

12 Kasım 20268 dk okuma

AMG8833 Termal Kamera Sensörü: 8x8 Isı Haritası Rehberi

AMG8833, Panasonic Grid-EYE ailesinden 8x8 = 64 pikselli bir termopil kızılötesi dizi sensörüdür. 0-80 °C aralığındaki yüzeylerin sıcaklığın...

Devamını oku →
12 Kasım 20268 dk okuma

MT6701 Manyetik Encoder: 14 Bit Açı Sensörü Rehberi

MT6701, MagnTek'in ürettiği, dönen bir mıknatısın açısını Hall algılayıcılarla temassız ölçen 14 bitlik manyetik açı sensörüdür. Açıyı I2C y...

Devamını oku →
12 Kasım 20267 dk okuma

MG90S ve SG90 Servo Farkı: Tork, Dişli ve Seçim Rehberi

MG90S ile SG90 arasındaki temel fark dişlilerdir: MG90S metal, SG90 plastik dişli kullanır. İkisi de aynı boyda mikro servodur ve 4,8 V'ta y...

Devamını oku →
12 Kasım 20267 dk okuma

C5198 ve A1941 Transistör: Değerler, Bacaklar ve Muadil

C5198 (2SC5198), Toshiba'nın ses amplifikatörü çıkış katı için ürettiği 140 V, 10 A ve 100 W değerli NPN güç transistörüdür; PNP eşi A1941'd...

Devamını oku →
12 Kasım 20267 dk okuma

ZB2L3 Pil Kapasite Test Cihazı: Bağlantı ve Kullanım

ZB2L3 pil kapasite test cihazı, pili harici bir yük direnci üzerinden ayarladığınız sonlandırma gerilimine kadar boşaltıp gerçek kapasiteyi...

Devamını oku →
12 Kasım 20266 dk okuma

TC4427 MOSFET Sürücü: Pinout, Bağlantı ve TC4426 Farkı

TC4427, Microchip'in iki kanallı, evirmeyen (non-inverting) ve 1,5 A tepe akımlı MOSFET sürücü entegresidir. 4,5-18 V ile beslenir ve Arduin...

Devamını oku →