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.
| Özellik | Arduino Uno (ATmega328P) | ADS1115 | ADS1015 |
|---|---|---|---|
| Çözünürlük | 10 bit | 16 bit | 12 bit |
| Kanal | 6 tek uçlu | 4 tek uçlu / 2 diferansiyel | 4 tek uçlu / 2 diferansiyel |
| En yüksek hız | Yaklaşık 10.000 örnek/s | 860 örnek/s | 3300 örnek/s |
| Kazanç (PGA) | Yok | 6 kademe | 6 kademe |
| Referans | Besleme (5 V) ya da dahili 1,1 V | Dahili, beslemeden bağımsız | Dahili |
| Bağlantı | Doğrudan pin | I2C (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 V | 0,1875 mV |
| GAIN_ONE | ±4,096 V | 0,125 mV |
| GAIN_TWO | ±2,048 V | 0,0625 mV |
| GAIN_FOUR | ±1,024 V | 0,03125 mV |
| GAIN_EIGHT | ±0,512 V | 0,015625 mV |
| GAIN_SIXTEEN | ±0,256 V | 0,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 |
|---|---|
| GND | 0x48 |
| VDD | 0x49 |
| SDA | 0x4A |
| SCL | 0x4B |
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:
- Arduino IDE'de Kütüphane Yöneticisi'ni açın, "Adafruit ADS1X15" kütüphanesini kurun.
- Modülü yukarıdaki tabloya göre bağlayın; ADDR'yi GND'ye verin.
- Deneme için bir 10K potansiyometre bağlayın: uçları 5V ve GND'ye, orta ucu A0'a.
- Aşağıdaki kodu yükleyin ve seri monitörü 9600 baud'da açın.
- 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.
