DS18B20 Sıcaklık Sensörü: Arduino, ESP32 ve Pico ile Kullanımı
DS18B20 Arduino bağlantısı: 1-Wire, 4,7 kΩ pull-up, su geçirmez prob, aynı pinde birden fazla sensör, OneWire ve DallasTemperature kodu, ESP32 ve Pico örneği.
DS18B20, Arduino ile sıcaklık ölçmenin en doğru ve en esnek yollarından biri olan dijital bir sıcaklık sensörüdür. −55 °C ile +125 °C arasını ölçer, −10 °C ile +85 °C aralığında ±0,5 °C doğruluk sunar ve sonucu analog bir gerilim olarak değil, doğrudan dijital bir sayı olarak gönderir. Bu yüzden uzun kablolarda bile değer bozulmaz. En büyük kozu ise 1-Wire haberleşmesidir: tek bir veri pinine onlarca DS18B20 bağlayıp her birini kendi benzersiz adresiyle ayrı ayrı okuyabilirsin.
Bu yazıda DS18B20'nin nasıl çalıştığını, 1-Wire hattının mantığını, neden mutlaka 4,7 kΩ'luk bir pull-up direnci gerektiğini, su geçirmez prob sürümünü ve kablo renklerini öğreneceksin. Ardından OneWire ve DallasTemperature kütüphaneleriyle tek sensör ve çoklu sensör kodlarını, ESP32'de programı bekletmeden okumayı ve Raspberry Pi Pico'da MicroPython ile kullanımı adım adım göreceğiz. Yazının sonunda sık karşılaşılan −127 °C ve 85 °C hatalarının sebeplerini ve çözümlerini bulacaksın.

DS18B20 nedir, nasıl çalışır?
DS18B20'nin içinde bir sıcaklık algılayıcı, bir analog-dijital dönüştürücü, küçük bir bellek (scratchpad) ve fabrikada yazılmış 64 bitlik benzersiz bir seri numarası bulunur. Mikrodenetleyici ölçüm komutunu gönderdiğinde sensör sıcaklığı ölçer, sonucu iki baytlık bir sayı olarak belleğine yazar ve okunmayı bekler. Ölçümü sensörün kendisi yaptığı için Arduino'nun analog girişine, referans gerilimine ya da kablo direncine bağlı bir hata oluşmaz. NTC termistörde olduğu gibi kalibrasyon tablosu ya da formül de gerekmez: okuduğun değer doğrudan santigrat derecedir.
| Özellik | Değer |
|---|---|
| Ölçüm aralığı | −55 °C … +125 °C |
| Doğruluk | ±0,5 °C (−10 °C … +85 °C arasında) |
| Çözünürlük | 9–12 bit arası seçilebilir (0,5 °C … 0,0625 °C) |
| Besleme gerilimi | 3,0–5,5 V (Arduino, ESP32 ve Pico ile uyumlu) |
| Akım | Ölçüm sırasında yaklaşık 1 mA, beklemede 1 µA'in altında |
| Haberleşme | 1-Wire (tek veri hattı + GND) |
| Adres | 64 bit ROM kodu; aile kodu 0x28 |
| Kılıf | TO-92 (3 bacak) ya da paslanmaz çelik su geçirmez prob |
Sensörün çözünürlüğünü yazılımla seçebilirsin. Çözünürlük arttıkça ölçüm adımı incelir ama dönüşüm süresi uzar. Varsayılan ayar 12 bittir ve çoğu proje için en doğru seçimdir; çok hızlı okuma gereken durumlarda 9 ya da 10 bite inebilirsin.
| Çözünürlük | Ölçüm adımı | En uzun dönüşüm süresi |
|---|---|---|
| 9 bit | 0,5 °C | 93,75 ms |
| 10 bit | 0,25 °C | 187,5 ms |
| 11 bit | 0,125 °C | 375 ms |
| 12 bit (varsayılan) | 0,0625 °C | 750 ms |
1-Wire nedir? Tek kabloyla haberleşme
1-Wire, adından da anlaşılacağı gibi veriyi tek bir hat üzerinden taşıyan bir haberleşme protokolüdür; toprak (GND) hattı ise ortaktır. Hatta bir yönetici (Arduino) ve bir ya da daha fazla bağımlı cihaz (DS18B20) bulunur. Hat boştayken bir pull-up direnci onu HIGH seviyesinde tutar. Konuşmak isteyen taraf hattı kısa sürelerle LOW'a çeker; bitler, bu LOW darbelerinin mikrosaniye düzeyindeki uzunluğuyla kodlanır. Her haberleşme bir reset darbesiyle başlar, sensörler de bir “buradayım” darbesiyle cevap verir.
Hiçbir cihaz hattı HIGH'a zorlamadığı için (açık kollektör / open-drain yapı) aynı hatta istediğin kadar sensör takabilirsin ve çakışma olmaz. Yönetici önce arama komutuyla hattaki tüm 64 bitlik adresleri bulur, sonra istediği sensörü adresiyle seçerek onunla konuşur. Bu sayede beş ayrı noktadaki sıcaklığı ölçmek için beş pin değil, yalnızca bir pin harcarsın.
DS18B20, DHT11, DHT22 ve NTC karşılaştırması
| Özellik | DS18B20 | DHT11 | DHT22 | NTC termistör |
|---|---|---|---|---|
| Sıcaklık aralığı | −55 … +125 °C | 0 … 50 °C | −40 … +80 °C | Yaklaşık −40 … +125 °C (modele göre) |
| Doğruluk | ±0,5 °C | ±2 °C | ±0,5 °C | Kalibrasyona bağlı |
| Çıkış | Dijital (1-Wire) | Dijital (tek hat) | Dijital (tek hat) | Analog (değişen direnç) |
| Nem ölçümü | Yok | Var | Var | Yok |
| Su geçirmez sürüm | Var (paslanmaz prob) | Yok | Yok | Var (prob) |
| Aynı pinde birden fazla sensör | Var | Yok | Yok | Yok |
Kısacası nem de ölçmen gerekiyorsa DHT11 ya da DHT22 doğru seçimdir. Suyun, toprağın, bir borunun ya da dondurucunun sıcaklığını ölçeceksen, birden fazla noktayı tek pinle izlemek istiyorsan ya da sıfırın altındaki sıcaklıklarla çalışacaksan DS18B20 rakipsizdir.
DS18B20 pinleri ve kablo renkleri
| Pin | TO-92 (düz yüz sana bakarken) | Su geçirmez prob kablosu | Görevi |
|---|---|---|---|
| GND | 1 (sol) | Siyah | Toprak |
| DQ | 2 (orta) | Sarı (bazı problarda beyaz) | 1-Wire veri hattı |
| VDD | 3 (sağ) | Kırmızı | 3,0–5,5 V besleme |
DS18B20 bağlantısı: Arduino Uno, ESP32 ve Pico
| DS18B20 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| VDD (kırmızı) | 5V | 3V3 | 3V3(OUT), pin 36 |
| GND (siyah) | GND | GND | GND, pin 38 |
| DQ (sarı) | D2 | GPIO 4 | GP22, pin 29 |
| 4,7 kΩ pull-up | DQ ile 5V arasına | DQ ile 3V3 arasına | DQ ile 3V3 arasına |
Pull-up direnci bu devrenin olmazsa olmazıdır. 1-Wire hattındaki cihazlar hattı yalnızca LOW'a çekebilir; hattı HIGH'a geri taşıyan şey bu dirençtir. Direnç yoksa hat havada kalır, sensör bulunamaz ve kütüphane −127 °C döndürür. 4,7 kΩ değeri hem hattı yeterince hızlı yükseltir hem de akımı düşük tutar: hat LOW iken Ohm kanunuyla I = 5 V / 4700 Ω ≈ 1,06 mA akar. Dört bantlı bir 4,7 kΩ direncin renkleri sarı, mor, kırmızı ve altındır; emin olmak için renk kodu aracını kullanabilirsin. Bazı DS18B20 modüllerinde (küçük bir kart üzerinde sensör, direnç ve LED) bu direnç zaten takılıdır; o zaman ayrıca eklemene gerek yoktur.
Kütüphaneleri kurmak
- Arduino IDE'de Araçlar > Kütüphaneleri Yönet menüsünü aç.
- Arama kutusuna DallasTemperature yaz ve Miles Burton'ın kütüphanesini kur.
- Kurulum sırasında bağımlılıklar sorulduğunda Install all seç; böylece Paul Stoffregen'in OneWire kütüphanesi de kurulur. Sormazsa OneWire'ı ayrıca arayıp kur.
- İstersen Dosya > Örnekler > DallasTemperature > Simple örneğini açıp pin numarasını kendi devrene göre değiştirerek dene.
İlk kod: tek DS18B20 ile sıcaklık okuma
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2 // DS18B20 veri pini (DQ) / data pin (DQ)
5
6OneWire oneWire(ONE_WIRE_BUS); // 1-Wire hattı / 1-Wire bus
7DallasTemperature sensors(&oneWire); // sensör kütüphanesi / sensor library
8
9void setup() {
10 Serial.begin(9600);
11 sensors.begin(); // hattaki sensörleri bul / find sensors on the bus
12 Serial.print(F("Sensor sayisi / Sensor count: "));
13 Serial.println(sensors.getDeviceCount());
14}
15
16void loop() {
17 sensors.requestTemperatures(); // ölçümü başlat, bitmesini bekle / start conversion and wait
18 float tempC = sensors.getTempCByIndex(0); // ilk sensörün sıcaklığı / first sensor's temperature
19
20 if (tempC == DEVICE_DISCONNECTED_C) { // -127: sensör yanıt vermedi / sensor did not respond
21 Serial.println(F("Hata: sensor yok / Error: no sensor"));
22 } else {
23 Serial.print(F("Sicaklik / Temperature: "));
24 Serial.print(tempC, 2);
25 Serial.println(F(" C"));
26 }
27 delay(1000);
28}| Fonksiyon | Ne yapar? |
|---|---|
| sensors.begin() | 1-Wire hattını tarar ve bulunan sensörleri kaydeder |
| sensors.getDeviceCount() | Hatta bulunan sensör sayısını verir |
| sensors.requestTemperatures() | Hattaki tüm sensörlere ölçüm komutu gönderir ve varsayılan olarak bitmesini bekler |
| sensors.getTempCByIndex(0) | Sıradaki ilk sensörün sıcaklığını santigrat olarak döndürür |
| sensors.getTempFByIndex(0) | Aynı değeri Fahrenheit olarak döndürür |
| sensors.setResolution(12) | Çözünürlüğü 9–12 bit arasında ayarlar |
| DEVICE_DISCONNECTED_C | Sensör yanıt vermediğinde dönen değer: −127 |
Seri monitörü 9600 baud'a ayarladığında her saniye “Sicaklik / Temperature: 23.44 C” gibi bir satır görürsün. Değerin sonundaki rakamların 0,0625'in katları olarak değiştiğini fark edeceksin; bu, 12 bitlik çözünürlüğün adımıdır. Sensörü parmaklarının arasında tuttuğunda sıcaklığın birkaç saniye içinde yükseldiğini görmelisin. Seri ekranda −127 görüyorsan sensör hiç bulunamıyordur; 85 görüyorsan sensör bulunmuş ama ölçüm henüz tamamlanmadan okunmuştur. Her iki durumun çözümü yazının sonundaki tabloda.
Birden fazla DS18B20'yi aynı pinde kullanmak
Birden fazla sensör bağlamak için hepsinin VDD, GND ve DQ uçlarını paralel bağlaman yeterlidir; tüm hat için tek bir 4,7 kΩ pull-up direnci kullanılır. getTempCByIndex() ile okumak kolaydır, ama sıra sensörleri taktığın sıraya göre değil, adreslerine göre belirlenir. Bir sensörü değiştirdiğinde sıra da değişebilir. Bu yüzden kalıcı projelerde her sensörü kendi adresiyle okumak gerekir. Aşağıdaki kod hattaki tüm sensörleri bulur, adreslerini yazar ve her birinin sıcaklığını adresine göre okur:
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4#define ONE_WIRE_BUS 2 // tüm sensörler aynı pinde / all sensors on the same pin
5
6OneWire oneWire(ONE_WIRE_BUS);
7DallasTemperature sensors(&oneWire);
8DeviceAddress addr; // 8 baytlık sensör adresi / 8-byte sensor address
9int count = 0;
10
11void printAddress(const DeviceAddress a) {
12 for (uint8_t i = 0; i < 8; i++) {
13 Serial.print(F("0x"));
14 if (a[i] < 0x10) Serial.print('0'); // tek haneyi sıfırla tamamla / pad single digit
15 Serial.print(a[i], HEX);
16 if (i < 7) Serial.print(F(", "));
17 }
18}
19
20void setup() {
21 Serial.begin(9600);
22 sensors.begin();
23 count = sensors.getDeviceCount(); // hatta kaç sensör var? / how many sensors on the bus?
24 Serial.print(F("Sensor sayisi / Sensor count: "));
25 Serial.println(count);
26 sensors.setResolution(12); // hepsi 12 bit (0,0625 C) / all 12-bit (0.0625 C)
27}
28
29void loop() {
30 sensors.requestTemperatures(); // tüm sensörler aynı anda ölçer / all sensors convert at once
31 for (int i = 0; i < count; i++) {
32 if (!sensors.getAddress(addr, i)) continue; // adresi al / get the address
33 Serial.print(F("Sensor "));
34 Serial.print(i);
35 Serial.print(F(" { "));
36 printAddress(addr);
37 Serial.print(F(" }: "));
38 Serial.print(sensors.getTempC(addr), 2); // adrese göre oku / read by address
39 Serial.println(F(" C"));
40 }
41 Serial.println();
42 delay(2000);
43}Kodu bir kez çalıştırıp her sensörü sırayla ısıtarak (örneğin avucunda tutarak) hangi adresin hangi noktaya ait olduğunu bul. Sonra seri ekranda gördüğün adresi koduna sabit olarak yaz: DeviceAddress suSensoru = {0x28, 0xFF, 0x64, 0x1E, 0x0F, 0x16, 0x03, 0x90}; gibi bir satır ekleyip sensors.getTempC(suSensoru) ile oku. Adresin ilk baytı DS18B20'lerde her zaman 0x28'dir, son bayt ise adresin doğruluğunu kontrol eden CRC değeridir. Böylece sensörlerin sırası ne olursa olsun “su”, “dış ortam” ya da “kazan” değerleri hep doğru yerden gelir.
ESP32 ile DS18B20: programı bekletmeden okumak
DS18B20 ESP32 ile aynı OneWire ve DallasTemperature kütüphaneleriyle çalışır. Veri hattı için GPIO 4 iyi bir seçimdir. GPIO 34–39'u kullanma, çünkü bu pinler yalnızca giriştir ve 1-Wire hattını LOW'a çekemez; açılış sırasında seviyesi önemli olan GPIO 0, 2, 12 ve 15'ten de kaçın. Sensörü ve pull-up direncini mutlaka 3V3 pinine bağla: pull-up direncini 5 V'a bağlarsan ESP32'nin pinine 5 V uygulamış olursun.
requestTemperatures() varsayılan olarak 12 bitte 750 ms bekler. Bu sürede kart başka hiçbir iş yapamaz; web sunucusu, butonlar ya da ekran donar. Çözüm, setWaitForConversion(false) ile beklemeyi kapatmak ve sonucu millis() ile 750 ms sonra okumaktır. Aşağıdaki ESP32 kodunda LED sıcaklık ölçülürken de takılmadan yanıp sönmeye devam eder:
1#include <OneWire.h>
2#include <DallasTemperature.h>
3
4const int ONE_WIRE_PIN = 4; // ESP32 GPIO 4 (DQ)
5const int LED_PIN = 2; // dahili LED (çoğu kartta) / onboard LED (most boards)
6
7OneWire oneWire(ONE_WIRE_PIN);
8DallasTemperature sensors(&oneWire);
9
10unsigned long requestTime = 0;
11unsigned long lastBlink = 0;
12bool converting = false;
13
14void setup() {
15 Serial.begin(115200);
16 pinMode(LED_PIN, OUTPUT);
17 sensors.begin();
18 sensors.setResolution(12);
19 sensors.setWaitForConversion(false); // requestTemperatures() beklemesin / do not block
20}
21
22void loop() {
23 unsigned long now = millis();
24
25 if (!converting) {
26 sensors.requestTemperatures(); // ölçümü başlat, hemen dön / start and return at once
27 requestTime = now;
28 converting = true;
29 }
30
31 if (converting && now - requestTime >= 750) { // 12 bit için 750 ms / 750 ms for 12-bit
32 float t = sensors.getTempCByIndex(0);
33 if (t == DEVICE_DISCONNECTED_C) {
34 Serial.println("Sensor yok / No sensor");
35 } else {
36 Serial.printf("Sicaklik / Temperature: %.2f C\n", t);
37 }
38 converting = false; // bir sonraki ölçüme geç / move to the next reading
39 }
40
41 if (now - lastBlink >= 250) { // bu arada LED yanıp söner / meanwhile the LED blinks
42 lastBlink = now;
43 digitalWrite(LED_PIN, !digitalRead(LED_PIN));
44 }
45}Bu kalıp Wi-Fi projelerinde özellikle önemlidir: ESP32 bir yandan sıcaklık ölçerken bir yandan web sayfası sunabilir, verileri internete gönderebilir ya da bir ekranı güncelleyebilir. ESP32'yi yeni tanıyorsan pin seçimi ve kurulum için ESP32 Nedir? yazısına göz at; kartının pin haritasını da Pinout aracında bulabilirsin.
Raspberry Pi Pico ve MicroPython ile DS18B20
Raspberry Pi Pico'nun MicroPython yazılımında onewire ve ds18x20 modülleri hazır gelir; ek dosya yüklemene gerek yoktur. Sensörü 3V3(OUT) pinine, GND'ye ve veri hattını GP22'ye bağla, DQ ile 3V3 arasına yine 4,7 kΩ pull-up takmayı unutma. Pico'nun dahili pull-up dirençleri 1-Wire için fazla zayıftır.
1from machine import Pin
2import onewire, ds18x20, time, binascii
3
4ds_pin = Pin(22) # DQ -> GP22 (fiziksel pin 29 / physical pin 29)
5sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
6
7roms = sensor.scan() # hattaki sensör adresleri / sensor addresses on the bus
8print("Sensor sayisi / Sensor count:", len(roms))
9
10while True:
11 sensor.convert_temp() # hepsi aynı anda ölçer / all sensors convert at once
12 time.sleep_ms(750) # 12 bit dönüşüm süresi / 12-bit conversion time
13 for rom in roms:
14 t = sensor.read_temp(rom) # adrese göre oku / read by address
15 print(binascii.hexlify(rom).decode(), "{:.2f} C".format(t))
16 time.sleep(2)scan() hattaki tüm sensörlerin 8 baytlık adreslerini bir liste olarak döndürür. convert_temp() hattaki bütün sensörlere aynı anda ölçüm komutu gönderir; bu yüzden ardından 750 ms beklemek gerekir. read_temp(rom) ise adresi verilen sensörün sıcaklığını santigrat olarak okur. Liste boş dönüyorsa önce pull-up direncini ve pin numarasını kontrol et. Pico ile yeni tanışıyorsan MicroPython kurulumu için Raspberry Pi Pico Nedir? yazısına bakabilirsin.
Su geçirmez DS18B20 prob
DS18B20'nin en çok kullanılan biçimi, yonganın paslanmaz çelik bir borunun içine yerleştirilip reçineyle kapatıldığı su geçirmez probdur. Genellikle 6 mm çapında, 50 mm uzunluğunda bir uç ve 1 metrelik (2, 3 ve 5 metrelik sürümleri de var) üç telli bir kablodan oluşur. Akvaryum, su deposu, sıcak su kazanı, toprak, buzdolabı ve dondurucu ölçümleri için idealdir. Çelik ucu kaynar suya kısa süre daldırabilirsin; ancak kablo çoğunlukla PVC olduğu için kabloyu ve ek yerini uzun süre 85–100 °C'nin üzerinde tutma. Prob kılıfı ısının sensöre ulaşmasını yavaşlattığı için ani sıcaklık değişimlerinde değerin oturması birkaç saniyeden birkaç on saniyeye kadar sürebilir.
Piyasada çok sayıda kopya DS18B20 bulunur. Bunların bir kısmı belirtilen doğruluğu tutturamaz ya da parazit besleme modunda çalışmaz. İki sensörü aynı bardak suya daldırıp okumalarını karşılaştırmak, sensörünün güvenilir olup olmadığını anlamanın basit bir yoludur. Fark 0,5 °C'den büyükse kodda küçük bir düzeltme değeri (offset) kullanabilirsin.
DS18B20 ile proje fikirleri
- Akvaryum termostatı: Su geçirmez prob ve bir röle modülü ile ısıtıcıyı aç-kapa; histerezis ile suyu 25–26 °C arasında tut.
- Çok noktalı sıcaklık izleme: Tek pine beş sensör bağlayıp oda, dış ortam, buzdolabı ve kazanın gidiş-dönüş suyunu aynı anda izle.
- OLED termometre: Sıcaklığı OLED ekranda büyük rakamlarla, günün en düşük ve en yüksek değeriyle birlikte göster.
- LCD'li sıcaklık göstergesi: İki sensörün değerini I2C LCD ekranın iki satırına yazdır.
- Wi-Fi sıcaklık sayfası: ESP32 ile ölçtüğün sıcaklığı telefondan açılan bir web sayfasında canlı izle.
- Sera kontrolü: Toprak sıcaklığını DS18B20 ile, toprak nemini toprak nem sensörüyle ölçüp sulamaya karar ver.
Sık hatalar ve çözümleri
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| Sıcaklık −127 °C | Sensör bulunamadı: pull-up yok, kablo kopuk, yanlış pin ya da VDD-GND ters | 4,7 kΩ direnci ve bağlantıları kontrol et; getDeviceCount() 0 mı bak |
| Sıcaklık hep 85 °C | Ölçüm bitmeden okundu ya da besleme yetersiz (85 °C açılış değeridir) | requestTemperatures() sonrası dönüşüm süresini bekle; VDD'yi doğrudan besle |
| Sensör sayısı 0 | DQ'da pull-up yok ya da kodda yanlış pin numarası var | Pin numarasını ve direnci kontrol et, kabloları kısa tut |
| Sensör çok ısınıyor | VDD ve GND ters bağlanmış | Gücü hemen kes, bacak sırasını düzelt |
| Değer ara sıra −127 oluyor | Uzun kablo, zayıf pull-up ya da gürültü | Pull-up'ı 2,2–3,3 kΩ'a düşür, bükümlü kablo kullan, hatalı okumayı kodda atla |
| Sensörlerin sırası değişti | Index sırası adreslere göre belirlenir, montaja göre değil | Her sensörü adresiyle oku: getTempC(adres) |
| Program takılıyor, buton geç tepki veriyor | requestTemperatures() her ölçümde 750 ms bekletiyor | setWaitForConversion(false) ve millis() kullan |
DS18B20; dayanıklılığı, su geçirmez probu ve tek pine çok sayıda sensör bağlanabilmesiyle hobi elektroniğinin en kullanışlı sıcaklık sensörlerinden biridir. Ölçtüğün sıcaklığı bir ekrana yazdırabilir, bir röleyle ısıtıcı ya da fan sürebilir, ESP32 ile internete taşıyabilirsin. BlueGrays uygulamasında DHT11 ve NTC ile sıcaklık ölçümü, I2C LCD ekran, ESP32 sıcaklık kaydedici ve akıllı sulama projelerini Arduino ve ESP32 için adım adım devre şeması ve kodlarıyla bulabilirsin.
Sıkça sorulan sorular
DS18B20 için hangi direnç kullanılır?
DS18B20'nin veri hattı (DQ) ile besleme (VDD) arasına 4,7 kΩ'luk bir pull-up direnci takılır. Aynı hatta kaç sensör olursa olsun tek bir direnç yeterlidir. Kablo 10 metreyi aşıyorsa direnci 2,2–3,3 kΩ'a düşürmek haberleşmeyi daha kararlı hale getirir.
DS18B20 neden −127 derece gösteriyor?
−127, DallasTemperature kütüphanesinin sensörden yanıt alamadığında döndürdüğü hata değeridir. En sık sebepler pull-up direncinin olmaması, yanlış pin numarası, kopuk ya da gevşek kablo ve VDD ile GND'nin ters bağlanmasıdır. Önce getDeviceCount() ile sensörün bulunup bulunmadığını kontrol et.
DS18B20 neden 85 derece gösteriyor?
85 °C, DS18B20'nin açılıştaki varsayılan bellek değeridir. Sıcaklık okunduğu hâlde ölçüm henüz tamamlanmamışsa ya da sensör ölçüm sırasında yeterli enerji alamamışsa bu değer görünür. Ölçüm komutundan sonra dönüşüm süresini beklemek ve sensörü VDD pininden doğrudan beslemek sorunu çözer.
Bir Arduino pinine kaç tane DS18B20 bağlanabilir?
Her DS18B20'nin benzersiz 64 bitlik bir adresi olduğu için teoride tek pine çok sayıda sensör bağlanabilir. Pratikte 10–20 sensöre kadar sorun yaşanmaz; daha fazlası için kablo uzunluğu, pull-up değeri ve besleme dikkatle seçilmelidir. Tüm sensörler aynı veri hattını ve tek bir pull-up direncini paylaşır.
DS18B20 su geçirmez mi?
Çıplak TO-92 kılıflı DS18B20 su geçirmez değildir. Paslanmaz çelik boru içindeki prob sürümü ise suya ve diğer sıvılara daldırılabilir ya da toprağa gömülebilir. Prob kablosu çoğunlukla PVC olduğundan kablo ve ek yerinin uzun süre yüksek sıcaklıkta kalmamasına dikkat etmek gerekir.
DS18B20 mi DHT22 mi daha iyi?
İkisi de ±0,5 °C doğruluk sunar, ama farklı işler için tasarlanmıştır. DHT22 sıcaklığın yanında nemi de ölçer ve oda ortamı için idealdir. DS18B20 ise nem ölçmez ama −55 °C'ye kadar iner, su geçirmez prob olarak bulunur ve tek pine birden fazla sensör bağlanmasına izin verir.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
DHT11 İle Sıcaklık Ve Nem
DHT11 sensörü ile ortam sıcaklığı ve nem değerini ölçerek I2C LCD ekranda gösteren proje. Dijital sıcaklık/nem sensörü kullanımını öğretir.

NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü
NTC termistör ile ortam sıcaklığını ölçüp I2C LCD ekranda Celsius cinsinden gösteren proje. Steinhart-Hart denklemi ile analog değerden sıcaklık hesaplamayı öğretir.

ESP32 DHT22 Sıcaklık ve Nem (LCD Ekranlı)
DHT22 sensörü ile ortam sıcaklığını ve nem oranını ölçüp 16x2 I2C LCD ekranda gerçek zamanlı olarak gösteren bir projedir. Adafruit DHT kütüphanesi kullanılarak tek kablo (one-wire) protokolü ile sensörden veri okunur. Bu proje, IoT hava istasyonu, akıllı ev otomasyonu veya seralarda ortam takip sistemlerinin temelini oluşturur. ESP32'nin GPIO 4 pini üzerinden DHT22 ile haberleşme sağlanır.

ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)
ESP32 ile zamanlı sıcaklık ve nem kayıt sistemi kur! Bu projede DHT22 sensörü ile her 10 saniyede sıcaklık/nem okuyup DS1307 RTC modülünden aldığın gerçek zaman etiketiyle microSD karta CSV formatında kaydediyoruz. OLED ekranda büyük font ile son sıcaklık değeri, nem yüzdesi, timestamp ve toplam kayıt sayısı canlı gösterilir. SD kart üzerindeki `/temp_log.csv` dosyası Excel/Google Sheets/Python pandas ile açılıp analiz edilebilir — sera monitörü, ev/oda sıcaklık takibi, laboratuvar veri toplama,

I2C İle LCD Ekran Kullanımı
I2C modülü sayesinde sadece 2 kablo (SDA, SCL) ile LCD ekranı kontrol ederek mesaj yazdıran proje. I2C protokolü ile pin tasarrufu sağlamayı öğretir.

ESP32 I2C LCD Ekran (16x2)
Bu projede 16x2 karakter LCD ekranı I2C protokolü üzerinden ESP32'ye bağlayarak metin görüntülüyoruz. I2C sayesinde sadece 2 data pini (SDA ve SCL) ile ekranı kontrol edebiliyoruz; klasik paralel bağlantıdaki 6+ pin israfı ortadan kalkıyor. Kod ilk satıra sabit bir mesaj, ikinci satıra ise her saniye artan bir sayaç yazdırıyor. Ayrıca başlangıçta I2C tarayıcı çalıştırarak ekranın adresini Serial Monitor'a yazdırıyoruz (genelde 0x27 veya 0x3F).

Dot Matrix Saat, Takvim ve Hava İstasyonu (MAX7219, DS1307)
DS1307 RTC modülü ve DHT22 sıcaklık-nem sensörü ile gerçek zamanlı verileri MAX7219 8x32 dot matrix LED ekranda gösteren bir projedir. Ekranda sıcaklık Celsius ve Fahrenheit olarak, nem oranı, saat, g

ESP 32 Akıllı Bitki Sulama Sistemi
Bu projede ESP32 ve toprak nem sensörü kullanılarak otomatik bitki sulama sistemi geliştirilmiştir. Sensör toprağın nem seviyesini sürekli ölçer. Nem belirlenen seviyenin altına düştüğünde ESP32 röleyi aktif ederek su pompasını çalıştırır ve bitkiyi sular. Toprak yeterince nemli olduğunda pompa otomatik olarak durur. Bu proje sayesinde bitkiler düzenli olarak sulanabilir ve su tasarrufu sağlanabilir. _______________________________ Bağlantılar Nem Sensörü Sensör ESP32 VCC 3.3V GND GND AO GPIO34
Diğer yazılar
DS18B20 dijital sıcaklık sensörünü 4,7 kΩ pull-up ile bağlamayı, su geçirmez probu kullanmayı, tek pinde birden fazla sensör okumayı ve Arduino, ESP32 ve Pico kodlarını adım adım öğren.

