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

DS18B20 Sıcaklık Sensörü: Bağlantı, Kod ve Çoklu Sensör

DS18B20 Sıcaklık Sensörü: Bağlantı, Kod ve Çoklu Sensör
Kısa cevap

DS18B20, sıcaklığı tek bir veri hattı (1-Wire) üzerinden dijital olarak bildiren ve −55 °C ile +125 °C arasında ölçüm yapan bir sensördür. Veri hattı ile besleme arasına 4,7 kΩ pull-up direnci bağlanır. Her sensörün kendine özgü 64 bit adresi olduğu için birden fazla DS18B20 aynı pine bağlanıp ayrı ayrı okunabilir.

Akvaryum suyunu, kuluçka makinesinin içini ya da bir soğutucunun yüzeyini ölçmek için en sık kullanılan sensörlerden biri DS18B20'dir. Tek bir pinle çalışır, dijital veri verir ve aynı kabloya birçok sensör bağlanabilir. Bu yazıda DS18B20'nin çeşitlerini, 4,7 kΩ pull-up direncinin görevini, Arduino bağlantısını, birden fazla sensörün okunmasını ve sık görülen hata değerlerini anlatıyoruz.

DS18B20 nedir?

DS18B20, ölçtüğü sıcaklığı 1-Wire adı verilen tek hatlı bir protokolle dijital olarak gönderen, her biri benzersiz 64 bit adrese sahip bir sıcaklık sensörüdür. Analog sensörlerin aksine kablo uzunluğu ve gerilim dalgalanması ölçülen değeri doğrudan değiştirmez.

DS18B20 dijital sıcaklık sensörünün ürün bilgisine göre ölçüm aralığı −55 °C ile +125 °C, −10 °C ile +85 °C arasındaki doğruluğu ±0,5 °C'dir. Çözünürlük 9 bit ile 12 bit arasında seçilebilir ve sensör 3,0V ile 5,5V arasında çalışır. Diğer sıcaklık sensörleriyle genel karşılaştırma için sıcaklık sensörü nasıl çalışır yazımıza bakabilirsiniz.

DS18B20 çeşitleri nelerdir?

DS18B20 üç yaygın biçimde satılır: çıplak TO-92 kılıf, su geçirmez prob ve hazır modül. Üçünün içindeki sensör aynıdır; fark kılıf ve bağlantı kolaylığındadır.

TürGörünümUygun kullanımDikkat
TO-92Üç bacaklı küçük transistör kılıfıBreadboard, devre kartı, ortam sıcaklığıSuya ve neme karşı korumasızdır
Su geçirmez probMetal kılıf ve 1-3 m kabloSu, toprak, akvaryum, dış ortamKablo renklerini satıcı bilgisinden doğrulayın
ModülKlemensli ya da 3 pinli kartHızlı deneme, eğitim setleriKart üzerinde pull-up olup olmadığını kontrol edin

Sıvı içinde ölçüm için DS18B20 su geçirmez sıcaklık sensörü 1 metre ya da daha uzun kablo isteyenler için DS18B20 su geçirmez sensör 3 metre kullanılabilir. Lehim yapmadan denemek isteyenler su geçirmez DS18B20 modülü 3 pin sürümünü seçebilir.

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

DS18B20 Arduino'ya üç kabloyla bağlanır: VDD 5V'a, GND GND'ye, DATA ise D2 pinine; DATA ile 5V arasına da 4,7 kΩ direnç konur. Aşağıdaki adımlar iki su geçirmez probu aynı hatta bağlar.

  1. Kabloların görevini belirleyin. Su geçirmez problarda çoğunlukla kırmızı VDD, siyah GND, sarı DATA'dır; TO-92 kılıfta düz yüz size bakarken bacaklar soldan sağa GND, DATA, VDD sırasındadır.
  2. Birinci sensörün VDD kablosunu Arduino 5V'a, GND kablosunu Arduino GND'ye bağlayın.
  3. DATA kablosunu Arduino'nun D2 pinine bağlayın.
  4. D2 hattı ile 5V arasına bir adet 4,7 kΩ direnç yerleştirin.
  5. İkinci sensörün VDD, GND ve DATA kablolarını birinci sensörün aynı uçlarına paralel bağlayın; ikinci bir direnç eklemeyin.
  6. Örnek kodu yükleyin ve Seri Monitör'de bulunan sensör sayısını kontrol edin.
İki DS18B20 sıcaklık sensörünün aynı hatta Arduino Uno bağlantısı: VDD 5V, DATA D2, GND GND; DATA ile 5V arasında tek 4,7 kΩ pull-up direnci, ikinci prob birinciye paralel
İkinci prob aynı üç kabloya paralel bağlanır; hattın tamamı için tek bir 4,7 kΩ pull-up direnci yeterlidir.

Pull-up için 4,7K 1/4W direnç yeterlidir. ESP32 gibi 3,3V kartlarda VDD'yi ve pull-up direncini 3,3V'a bağlayın. Kablo renkleri üreticiye göre değişebildiği için emin değilseniz satıcının bağlantı bilgisini kontrol edin.

Neden 4,7 kΩ pull-up direnci gerekir?

4,7 kΩ pull-up direnci gerekir, çünkü 1-Wire hattındaki cihazlar hattı yalnızca GND'ye çekebilir; hattı yeniden yüksek seviyeye taşıyan şey bu dirençtir. Direnç yoksa hat havada kalır ve Arduino sensörü bulamaz.

Hattın tamamı için tek bir direnç yeterlidir; her sensöre ayrı direnç konmaz. Kablo uzadıkça hattın kapasitesi artar ve sinyal kenarları yumuşar. Uzun hatlarda sensörleri yıldız biçiminde dağıtmak yerine tek bir hat boyunca sıralamak daha güvenilir sonuç verir. DS18B20 ayrıca VDD'si GND'ye bağlanarak yalnızca iki kabloyla "parazit besleme" modunda da çalışabilir, ancak başlangıç için üç kablolu bağlantı daha az sorun çıkarır.

Birden fazla DS18B20 aynı hatta nasıl okunur?

Aynı hattaki DS18B20'ler, her sensörün benzersiz 64 bit adresi sayesinde ayrı ayrı okunur. Aşağıdaki kod OneWire ve DallasTemperature kütüphaneleriyle hattaki sensörleri sayar, adreslerini yazdırır ve her birinin sıcaklığını okur:

#include <OneWire.h>
#include <DallasTemperature.h>

#define VERI_PINI 2

OneWire hat(VERI_PINI);
DallasTemperature sensorler(&hat);
DeviceAddress adres;

void setup() {
  Serial.begin(9600);
  sensorler.begin();
  int adet = sensorler.getDeviceCount();
  Serial.print("Bulunan sensor: ");
  Serial.println(adet);
  for (int i = 0; i < adet; i++) {
    if (sensorler.getAddress(adres, i)) {
      Serial.print(i); Serial.print(": ");
      for (int b = 0; b < 8; b++) {
        if (adres[b] < 16) Serial.print("0");
        Serial.print(adres[b], HEX);
      }
      Serial.println();
    }
  }
}

void loop() {
  sensorler.requestTemperatures();
  int adet = sensorler.getDeviceCount();
  for (int i = 0; i < adet; i++) {
    float c = sensorler.getTempCByIndex(i);
    Serial.print("Sensor "); Serial.print(i); Serial.print(": ");
    if (c == DEVICE_DISCONNECTED_C) Serial.println("okunamadi");
    else { Serial.print(c, 2); Serial.println(" C"); }
  }
  delay(2000);
}

Sensörlerin sıra numarası kablodaki yerine göre değil adreslerine göre belirlenir. Kalıcı bir projede her sensörün adresini bir kez not alıp kodda getTempC(adres) ile okumak, sensör eklendiğinde sıranın kaymasını önler. Çözünürlük arttıkça dönüşüm süresi uzar: veri sayfasına göre 9 bitte 93,75 ms, 12 bitte 750 ms sürer.

DS18B20 neden −127 ya da 85 °C gösterir?

DS18B20'nin −127 °C göstermesi sensörün yanıt vermediği, 85 °C göstermesi ise ölçüm tamamlanmadan okunduğu anlamına gelir. Her iki değer de gerçek sıcaklık değil, hata işaretidir.

  • −127 °C: Kütüphanenin "bağlı cihaz yok" değeridir. DATA kablosunu, pull-up direncini ve GND bağlantısını kontrol edin.
  • 85 °C: Sensörün açılıştaki varsayılan değeridir. Besleme yetersizse ya da dönüşüm bitmeden okunursa görülür.
  • Sensör sayısı 0: Çoğunlukla pull-up direnci eksiktir ya da DATA yanlış pine takılmıştır.

Tüm DS18B20 seçeneklerini sıcaklık ve nem sensörleri kategorisinde bulabilirsiniz.

Sık sorulan sorular

DS18B20 suya dayanıklı mı?

Yalnızca su geçirmez prob sürümü suya dayanıklıdır; TO-92 kılıflı çıplak DS18B20 su ve nemden korunmalıdır. Prob sürümünde sensör metal bir kılıfın içine yerleştirilip kabloyla birlikte kapatılmıştır. Bu sürüm akvaryum, su deposu ve toprak ölçümlerinde kullanılır. Kablonun prob ile birleştiği noktayı uzun süre suyun altında bırakmamak ömrü uzatır.

DS18B20 kaç metre kabloyla çalışır?

DS18B20 için tek bir kesin kablo uzunluğu sınırı yoktur; erişilebilen mesafe kablo türüne, sensör sayısına ve hat düzenine bağlıdır. Birkaç metrelik hatlar standart 4,7 kΩ dirençle genellikle sorunsuz çalışır. Daha uzun hatlarda bükümlü çift kablo kullanmak, sensörleri tek hat boyunca sıralamak ve okuma hatalarını izleyerek ilerlemek gerekir.

DS18B20 3,3V ile çalışır mı?

Evet, DS18B20 3,0V ile 5,5V arasında çalıştığı için 3,3V ile sorunsuz kullanılır. ESP32 ve ESP8266 gibi 3,3V kartlarda VDD'yi 3,3V pinine bağlayın ve 4,7 kΩ pull-up direncini de 3,3V'a çekin. Bu durumda DATA hattı da 3,3V seviyesinde kalır ve kartın girişine zarar vermez. Kod tarafında herhangi bir değişiklik gerekmez.

Bir hatta kaç DS18B20 bağlanabilir?

Her DS18B20'nin benzersiz 64 bit adresi olduğu için teorik sınır çok yüksektir; pratikte sınırı kablo uzunluğu, besleme ve okuma süresi belirler. Masa üstü projelerde aynı hatta birkaç sensör sorunsuz çalışır. Sensör sayısı arttıkça her ölçüm turu uzar ve hattın kapasitesi büyür. Çok sayıda sensörde hattı iki ayrı pine bölmek iyi bir çözümdür.

DS18B20 ile DHT22 arasındaki fark nedir?

DS18B20 yalnızca sıcaklık ölçer, DHT22 ise sıcaklıkla birlikte bağıl nemi de ölçer. DS18B20'nin su geçirmez prob sürümü vardır ve aynı hatta birçok sensör bağlanabilir; DHT22'de her sensör ayrı pin ister. Sıvı içinde ya da birden fazla noktada sıcaklık ölçecekseniz DS18B20, ortam nemi gerekiyorsa DHT22 seçilir. Ayrıntılar DHT11 ve DHT22 farkı yazımızda.

Özet

  • DS18B20, 1-Wire üzerinden dijital veri veren, −55 °C ile +125 °C arasında ölçen bir sıcaklık sensörüdür.
  • Bağlantı: VDD 5V, GND GND, DATA D2; DATA ile 5V arasında tek bir 4,7 kΩ direnç.
  • Birden fazla sensör aynı üç kabloya paralel bağlanır ve 64 bit adresleriyle ayrı ayrı okunur.
  • −127 °C bağlantı hatasını, 85 °C tamamlanmamış ölçümü gösterir.
  • Sıvı ve dış ortam için su geçirmez prob, breadboard denemeleri için TO-92 ya da modül seçilir.

Bu yazıdaki ürünler

Diğer yazılar