Arduino Sıcaklık Sensörü Çeşitleri: 8 Sensör Karşılaştırması
Arduino sıcaklık sensörü çeşitleri: DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675 ve MLX90614 karşılaştırması; doğruluk, aralık, kablo, fiyat tablosu.
Arduino sıcaklık sensörü çeşitleri arasında doğru seçimi yapmak, ilk bakışta sanıldığından çok daha önemlidir: aynı odada duran bir DHT11 ile bir DS18B20 arasında 2 °C fark görmek de, 300 °C'lik bir fırını yanlış sensörle ölçmeye çalışıp sensörü eritmek de mümkündür. Hobi elektroniğinde en çok kullanılan sekiz sıcaklık sensörü vardır: DHT11, DHT22, DS18B20, LM35, NTC termistör, BME280, MAX6675 (K tipi termokupl) ve MLX90614 (temassız kızılötesi). Her biri farklı bir ölçüm aralığı, doğruluk, bağlantı şekli ve fiyatla gelir. Hangisinin doğru olduğu ise ne ölçeceğine bağlıdır: oda havası mı, su mu, fırın mı, yoksa dokunamadığın, dönen bir motor mu?
Bu rehberde sekiz sensörü iki büyük tabloda yan yana koyuyoruz: ölçüm aralığı, doğruluk, çözünürlük, okuma hızı, arayüz, besleme gerilimi, kablo uzunluğu ve göreceli fiyat. Ardından her birinin nasıl çalıştığını, güçlü ve zayıf yanlarını, Arduino Uno, ESP32 ve Raspberry Pi Pico bağlantılarını, NTC, MAX6675 ve MLX90614 için örnek kodları, üç sensörü aynı anda yarıştıran bir test düzeneğini ve hangi projede hangisini seçmen gerektiğini bulacaksın. Sensörlerin çoğu için ayrıntılı kullanım yazılarımız da var; bağlantılarını ilgili bölümlere ekledik.





Sıcaklık sensörü seçerken neye bakmalısın?
Sensörleri karşılaştırmadan önce veri sayfalarındaki terimleri doğru okumak gerekir. En sık karıştırılan ikili doğruluk ile çözünürlüktür. Doğruluk, okuduğun değerin gerçek sıcaklığa ne kadar yakın olduğunu söyler; çözünürlük ise sensörün ayırt edebildiği en küçük adımdır. BME280 sıcaklığı 0,01 °C'lik adımlarla verir ama doğruluğu ±1 °C civarındadır; yani ekranda gördüğün 23,47 °C'nin son iki hanesi küçük değişimleri izlemek için işe yarar, gerçek sıcaklığı o hassasiyette söylemez. Seçim yaparken şu yedi ölçüte bak:
- Ölçüm aralığı: Sensör ölçmek istediğin en düşük ve en yüksek sıcaklığı rahatça kapsamalı. DHT11 sıfırın altını göremez; buzdolabı için DS18B20, fırın için termokupl gerekir.
- Doğruluk: Oda termometresi için ±2 °C kabul edilebilir, akvaryum ya da kuluçka makinesi için ise ±0,5 °C gerekir.
- Arayüz: Analog sensörler bir ADC pini, dijital sensörler bir ya da birkaç dijital pin ve çoğu zaman bir kütüphane ister. Kartında kaç pinin boşta olduğu, kaç sensör bağlayabileceğini belirler.
- Kablo uzunluğu: Sensör karttan 5 metre uzakta, bahçede ya da su deposunun dibinde olacaksa analog ve I2C sensörler zorlanır; 1-Wire ve DHT'nin tek hatlı protokolü uzun mesafeye çok daha iyi dayanır.
- Tepki süresi: Çelik kılıflı bir prob ya da plastik gövdeli bir DHT, ani bir sıcaklık değişimini ancak saniyeler, hatta dakikalar içinde yakalar; çıplak, küçük bir NTC ise çok daha hızlıdır.
- Ek ölçümler: Nem de lazımsa DHT22 ya da BME280, basınç ve irtifa da lazımsa BME280 tek modülde işini görür.
- Besleme gerilimi: 3,3 V ile çalışan ESP32 ve Pico'da, LM35 gibi en az 4 V isteyen sensörlere ve ADC girişine 3,3 V'tan yüksek gerilim gelmemesine dikkat etmelisin.
8 sıcaklık sensörü karşılaştırma tablosu
İlk tablo ölçüm performansını, ikincisi bağlantı ve maliyet tarafını özetler. Değerler veri sayfalarından alınmıştır; doğruluk, aksi belirtilmedikçe oda sıcaklığı civarı içindir ve aralığın uçlarına doğru büyür.
| Sensör | Ölçüm aralığı | Doğruluk | Çözünürlük | Okuma hızı |
|---|---|---|---|---|
| DHT11 | 0 … +50 °C | ±2 °C | 1 °C | Saniyede 1 |
| DHT22 (AM2302) | −40 … +80 °C | ±0,5 °C | 0,1 °C | 2 saniyede 1 |
| DS18B20 | −55 … +125 °C | ±0,5 °C (−10 … +85 °C arası) | 0,0625 °C (12 bit) | 750 ms (12 bit), 94 ms (9 bit) |
| LM35DZ | 0 … +100 °C (LM35: −55 … +150 °C) | Tipik ±0,6 °C, garanti ±1,5 °C | Uno'da 0,49 °C (5 V ref.), 0,11 °C (1,1 V ref.) | Anlık (ADC hızında) |
| NTC 10 kΩ, B 3950 | −40 … +125 °C (cam kılıflılar ≈ 300 °C) | 25 °C'de ±0,25 °C (%1'lik) … ±1 °C (%5'lik) | Uno'da oda sıcaklığında ≈ 0,1 °C | Anlık (ADC hızında) |
| BME280 | −40 … +85 °C | ±0,5 °C (25 °C), ±1 °C (0 … 65 °C) | 0,01 °C | Saniyede onlarca |
| MAX6675 + K tipi termokupl | 0 … +1023,75 °C | Birkaç °C (dönüştürücü ≈ ±2 °C, soğuk uç ±3 °C'ye kadar) | 0,25 °C | Saniyede ≈ 4 (0,22 s dönüşüm) |
| MLX90614 | Nesne −70 … +380 °C, ortam −40 … +125 °C | ±0,5 °C (oda sıcaklığı civarı) | 0,02 °C | Saniyede birkaç kez |
| Sensör | Arayüz | Besleme | Kablo uzunluğu | Ek ölçüm | Göreceli fiyat |
|---|---|---|---|---|---|
| DHT11 | Tek hatlı dijital, 1 pin | 3–5,5 V | 20 m'ye kadar | Nem | Çok düşük |
| DHT22 | Tek hatlı dijital, 1 pin | 3,3–6 V | 20 m'ye kadar | Nem | Orta |
| DS18B20 | 1-Wire, 1 pinde çok sensör | 3,0–5,5 V | Onlarca metre | Yok | Düşük |
| LM35 | Analog, 1 ADC pini | 4–30 V | Kısa, ≈ 1 m (uzunda önlem gerekir) | Yok | Düşük |
| NTC | Analog, bölücüyle 1 ADC pini | Bölücüden 3,3 ya da 5 V | Birkaç metre | Yok | En düşük |
| BME280 | I2C (2 pin) ya da SPI | Yonga 1,71–3,6 V; regülatörlü modül 5 V | Kısa, 50 cm altı | Nem ve basınç | Orta |
| MAX6675 | SPI, 3 pin (yalnız okuma) | 3,0–5,5 V | Termokupl teli metrelerce uzatılabilir | Yok | Orta |
| MLX90614 | I2C (SMBus), 2 pin | 3 V ya da 5 V sürümü (modülde regülatör olabilir) | Kısa (I2C); ölçüm temassız | Ortam sıcaklığı | Yüksek |
DHT11 ve DHT22: sıcaklık ve nemi birlikte ölçenler
DHT sensörlerinin plastik kafesinin içinde bir nem algılayıcı (DHT11'de dirençli, DHT22'de kapasitif), bir termistör ve ölçümleri dijitale çeviren küçük bir denetleyici bulunur. Sensör sonucu tek bir veri hattından 40 bitlik bir paket olarak gönderir: 16 bit nem, 16 bit sıcaklık ve 8 bit sağlama toplamı. Bu protokol 1-Wire değildir, üreticinin kendine özgü tek hatlı protokolüdür; bu yüzden her DHT ayrı bir pin ister. DHT11 ucuzdur ve oda sıcaklığı için yeterlidir, ama 0–50 °C aralığı ve ±2 °C hatası onu dış mekân ve hassas işler için zayıf bırakır. DHT22 (AM2302) aynı bağlantıyla −40 ile +80 °C arasını ±0,5 °C doğrulukla ölçer ve nemi %0–100 aralığında verir; karşılığında iki saniyede yalnızca bir ölçüm yapabilir. İkisinin de ortak zayıflığı yavaşlıktır: kafesin içindeki hava ortamla dengeye gelene kadar değişimi geç gösterirler. Bağlantı, kütüphane kurulumu ve kodlar için DHT11 Sıcaklık ve Nem Sensörü yazısına bak; aynı kod DHT22 için tek kelime değiştirilerek çalışır.
DS18B20: su geçirmez, dayanıklı ve tek pine çok sensör

DS18B20, sıcaklığı yonganın içinde ölçüp 9–12 bit arası seçilebilir çözünürlükte dijital bir sayı olarak gönderen bir sensördür. −55 ile +125 °C arasını ölçer, −10 ile +85 °C arasında ±0,5 °C doğruluk sunar ve 1-Wire protokolü sayesinde tek bir veri pinine onlarca sensör bağlanabilir; her birinin fabrikada yazılmış 64 bitlik benzersiz bir adresi vardır. Paslanmaz çelik kılıflı su geçirmez prob sürümü akvaryum, su deposu, kombi tesisatı, toprak ve dondurucu ölçümlerinde rakipsizdir. Tek gereksinimi, veri hattı ile besleme arasına takılan 4,7 kΩ'luk pull-up direncidir; bu direnç yoksa kütüphane −127 °C döndürür. 12 bit modunda bir ölçüm 750 ms sürdüğü için hızlı değişen bir sıcaklığı izlerken çözünürlüğü düşürmek gerekebilir. Çoklu sensör kodu ve ESP32'de programı bekletmeden okuma yöntemi DS18B20 Sıcaklık Sensörü yazısında.
LM35: kütüphanesiz, en basit analog sensör
LM35 sıcaklığı doğrudan gerilime çevirir: çıkışı her derece için 10 mV artar, 25 °C'de 250 mV verir. Kütüphane gerekmez; sıcaklık = analogRead × 5,0 / 1024 × 100 formülüyle sonucu bulursun. Bu basitlik onu ADC'yi öğrenmek için mükemmel bir başlangıç yapar. Zayıf yanları da buradan gelir: Arduino Uno'nun 10 bitlik ADC'si 5 V referansla yalnızca yaklaşık 0,49 °C'lik adımlar verir, USB'den gelen 5 V'taki her sapma doğrudan sıcaklığa yansır ve kablo uzadıkça çıkış parazit toplar. Piyasadaki LM35'lerin çoğu LM35DZ'dir ve yalnızca 0–100 °C için garanti edilir. Ayrıca en az 4 V besleme istediği için ESP32 ve Pico'da 5 V pininden beslenmelidir. 3,3 V'luk kartlarda daha pratik bir analog seçenek TMP36'dır: 2,7–5,5 V ile çalışır, −40 ile +125 °C arasını ölçer ve çıkışı yine 10 mV/°C'dir; ancak 0 °C'de 500 mV verdiği için formül sıcaklık = (V − 0,5) × 100 olur. Tipik doğruluğu 25 °C'de ±1 °C, tüm aralıkta ±2 °C'dir. 1,1 V dahili referansla adımı 0,11 °C'ye indirmeyi LM35 Sıcaklık Sensörü yazısında adım adım anlattık; ADC'nin mantığını ise analog-dijital dönüşüm yazısında bulabilirsin.
NTC termistör: en ucuz ve en hızlı sensör
NTC (Negative Temperature Coefficient) termistör, sıcaklık arttıkça direnci azalan bir dirençtir. Hobi projelerinde en yaygın olanı 25 °C'de 10 kΩ olan ve B katsayısı 3950 K olan modeldir. Arduino direnci doğrudan ölçemediği için NTC, sabit bir dirençle birlikte bir gerilim bölücü kurularak bağlanır ve orta noktadaki gerilim analog pinden okunur. Bu devrenin güzel bir yanı vardır: bölücü, ADC'nin referansıyla aynı 5 V'tan beslendiğinde ölçüm oranlıdır; besleme gerilimi 4,8 ya da 5,1 V olsa bile sonuç değişmez. Bölücüdeki gerilimleri gerilim bölücü aracıyla kolayca hesaplayabilirsin.
NTC'nin direnci sıcaklıkla doğrusal değil, üstel olarak değişir; bu yüzden LM35'teki gibi tek bir çarpanla sonuç bulunmaz. Pratikte Beta denklemi kullanılır: 1/T = 1/T0 + (1/B) × ln(R/R0). Burada T Kelvin cinsinden sıcaklık, T0 = 298,15 K (25 °C), R0 = 10 kΩ ve B = 3950'dir. Oda sıcaklığında duyarlılık çok yüksektir: B/T² formülüne göre her derecede direnç yaklaşık %4,4 değişir. Bu yüzden %1 toleranslı bir NTC 25 °C'de yalnızca ±0,25 °C civarında hata yapar; aralığın uçlarına doğru ise B katsayısının toleransı da devreye girer ve hata büyür. Geniş aralıkta daha doğru sonuç için üç noktalı Steinhart-Hart denklemi kullanılır; ayrıntılar NTC termistör yazısında.
1const int NTC_PIN = A1; // bölücünün orta noktası / divider midpoint
2const float R_FIXED = 10000.0; // 5V ile A1 arasındaki direnç / resistor between 5V and A1
3const float R0 = 10000.0; // NTC'nin 25 °C'deki direnci / NTC resistance at 25 °C
4const float BETA = 3950.0; // B katsayısı (veri sayfası) / B coefficient (datasheet)
5const float T0 = 298.15; // 25 °C Kelvin cinsinden / 25 °C in kelvin
6const int SAMPLES = 16; // ortalama için ölçüm sayısı / samples to average
7
8void setup() {
9 Serial.begin(9600);
10}
11
12void loop() {
13 long sum = 0;
14 for (int i = 0; i < SAMPLES; i++) {
15 sum += analogRead(NTC_PIN);
16 delay(2);
17 }
18 float adc = sum / (float)SAMPLES;
19
20 if (adc < 1.0 || adc > 1022.0) { // kopuk ya da kısa devre / open or shorted
21 Serial.println(F("NTC baglantisini kontrol et / Check the NTC wiring"));
22 delay(1000);
23 return;
24 }
25
26 float r = R_FIXED * adc / (1023.0 - adc); // NTC direnci (ohm) / NTC resistance (ohm)
27 float invT = 1.0 / T0 + log(r / R0) / BETA; // Beta denklemi / Beta equation
28 float tempC = 1.0 / invT - 273.15; // Kelvin -> °C
29
30 Serial.print(F("R: "));
31 Serial.print(r, 0);
32 Serial.print(F(" ohm Sicaklik / Temp: "));
33 Serial.print(tempC, 1);
34 Serial.println(F(" C"));
35 delay(1000);
36}Bu devrede 10 kΩ'luk sabit direnç 5V ile A1 arasında, NTC ise A1 ile GND arasında durur. Sıcaklık arttıkça NTC'nin direnci, dolayısıyla A1'deki gerilim düşer. Kod ham değerden önce NTC'nin direncini, sonra Beta denklemiyle Kelvin cinsinden sıcaklığı bulur ve santigrata çevirir; 16 ölçümün ortalaması ADC gürültüsünü dörtte birine indirir. Oda sıcaklığında Uno'nun bir ADC adımı yaklaşık 0,09 °C'ye karşılık gelir, yani çözünürlük LM35'in 5 V referanslı okumasından beş kat iyidir. Hazır NTC modüllerinde (örneğin KY-013) sabit direncin hangi tarafta olduğu karttan karta değişir; sıcak bir nesneye dokundurduğunda okunan sıcaklık düşüyorsa direnç formülünü ters çevir: r = R_FIXED × (1023 − adc) / adc.
BME280: sıcaklık, nem ve basınç tek modülde
Bosch'un BME280'i, yalnızca 2,5 × 2,5 mm'lik bir yongada sıcaklık, bağıl nem ve hava basıncını ölçer; I2C (0x76 ya da 0x77 adresi) ya da SPI ile haberleşir. Sıcaklıkta 0,01 °C çözünürlük, 25 °C'de ±0,5 °C ve 0–65 °C arasında ±1 °C doğruluk sunar, saniyede onlarca ölçüm yapabilir ve uykuda 1 µA'in çok altında akım çeker. Bu özellikleriyle pille çalışan hava istasyonları için idealdir. Yonganın kendisi 3,6 V'un üstünü kaldırmaz: 6 pinli mor modüller çoğunlukla yalnızca 3,3 V içindir, 4 pinli regülatörlü modüller ise 5 V'a bağlanabilir. Sürekli ölçüm yaptığında yonga biraz ısınır ve sıcaklığı birkaç onda bir derece yüksek gösterebilir; hava ölçümü için zorlamalı (forced) modda, dakikada birkaç ölçüm yeterlidir. I2C hattının nasıl çalıştığını I2C nedir yazısında anlattık.
MAX6675 ve K tipi termokupl: 1000 °C'ye kadar
Termokupl, uçları birbirine kaynatılmış iki farklı metal telden oluşur. Kaynak noktası (sıcak uç) ile tellerin cihaza bağlandığı nokta (soğuk uç) arasındaki sıcaklık farkı, tellerde çok küçük bir gerilim oluşturur; K tipi termokuplda bu, derece başına yaklaşık 41 µV'tur. Bu kadar küçük bir gerilimi Arduino'nun ADC'si okuyamaz, üstelik soğuk ucun sıcaklığını da bilmek gerekir. MAX6675 bu iki işi birden yapar: termokupl gerilimini yükseltir, kendi sıcaklığını ölçerek soğuk uç kompanzasyonu uygular ve sonucu 12 bit, 0,25 °C çözünürlükte SPI üzerinden verir. Ölçüm aralığı 0 ile +1023,75 °C arasıdır; lehim havyası, pizza fırını, mangal, seramik fırını ve egzoz gibi diğer sensörlerin dayanamayacağı yerler için tek seçenektir.
MAX6675'in sınırlarını da bilmelisin: 0 °C'nin altını ölçemez; dönüştürücünün kendi hatası 0–700 °C arasında yaklaşık ±2 °C'dir ve buna soğuk uç kompanzasyonunun ±3 °C'ye varan hatası ile termokupl telinin toleransı eklenir. Yani toplamda birkaç derecelik bir doğruluk beklemelisin; 800 °C'lik bir fırında bu fark önemsizdir. Bir dönüşüm 0,17–0,22 saniye sürdüğü için iki okuma arasında en az 250 ms beklemek gerekir. Eksi sıcaklıklar da gerekiyorsa daha yeni olan MAX31855 (−200 ile +1350 °C, 14 bit) tercih edilir. SPI hattının mantığını SPI nedir yazısında bulabilirsin. Arduino IDE'de Kütüphane Yöneticisi'nden Adafruit'in MAX6675 library kütüphanesini kurduktan sonra aşağıdaki kodu yükle:
1#include "max6675.h"
2
3const int thermoDO = 4; // SO: veri çıkışı / data out
4const int thermoCS = 5; // CS: çip seçimi / chip select
5const int thermoCLK = 6; // SCK: saat / clock
6
7MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);
8
9void setup() {
10 Serial.begin(9600);
11 delay(500); // ilk ölçümü bekle / wait for the first conversion
12}
13
14void loop() {
15 float c = thermocouple.readCelsius();
16 if (isnan(c)) { // D2 biti: termokupl açık / bit D2: thermocouple open
17 Serial.println(F("Termokupl takili degil / Thermocouple not connected"));
18 } else {
19 Serial.print(F("Sicaklik / Temp: "));
20 Serial.print(c, 2);
21 Serial.println(F(" C"));
22 }
23 delay(500); // en az 250 ms bekle / wait at least 250 ms
24}MLX90614: dokunmadan sıcaklık ölçmek
MLX90614, nesnelerin yaydığı kızılötesi ışınımı bir termopil ile algılayan temassız bir sıcaklık sensörüdür. Aynı anda iki değer verir: kendi gövdesinin sıcaklığı olan ortam sıcaklığı (−40 ile +125 °C) ve baktığı yüzeyin sıcaklığı olan nesne sıcaklığı (−70 ile +380 °C). Oda sıcaklığı civarında ±0,5 °C doğruluk ve 0,02 °C çözünürlük sunar; fabrikada kalibre edilmiştir ve I2C (SMBus) üzerinden 0x5A adresiyle haberleşir, hat hızı en fazla 100 kHz olmalıdır. Dönen bir motoru, rulmanı, devre kartında ısınan bir entegreyi ya da ocaktaki tavayı dokunmadan ölçmek için idealdir.
Temassız ölçümün iki püf noktası vardır. Birincisi görüş alanıdır: sensör, görüş konisine giren her şeyin ortalamasını ölçer. En yaygın sürüm olan MLX90614ESF-BAA'nın görüş açısı 90°'dir; bu, 5 cm uzaklıkta yaklaşık 10 cm çaplı bir alanın ortalaması demektir. Küçük bir nesneyi ölçmek için sensörü yaklaştırmalı ya da 35° (BCC) veya 5° (BCI) gibi dar açılı sürümleri seçmelisin. İkincisi emisivitedir (yayınım katsayısı): sensör fabrikada 1,0'a ayarlıdır. Mat boya, plastik, ahşap, deri ve su için bu katsayı 0,9–0,98 arasında olduğundan sonuç doğruya yakındır; parlak metal yüzeyler ise çok az ışınım yaydığı için olduğundan çok daha soğuk görünür. Üzerine mat siyah bant yapıştırmak basit ve etkili bir çözümdür. Kütüphane Yöneticisi'nden Adafruit MLX90614 kütüphanesini kurup şu kodu dene:
1#include <Wire.h>
2#include <Adafruit_MLX90614.h>
3
4Adafruit_MLX90614 mlx = Adafruit_MLX90614();
5
6void setup() {
7 Serial.begin(9600);
8 if (!mlx.begin()) { // varsayılan adres 0x5A / default address 0x5A
9 Serial.println(F("MLX90614 bulunamadi / not found"));
10 while (true) delay(10);
11 }
12 Serial.print(F("Emisivite / Emissivity: "));
13 Serial.println(mlx.readEmissivity(), 2); // fabrika ayarı 1.00 / factory default 1.00
14}
15
16void loop() {
17 Serial.print(F("Ortam / Ambient: "));
18 Serial.print(mlx.readAmbientTempC(), 2); // sensör gövdesi / sensor body
19 Serial.print(F(" C Nesne / Object: "));
20 Serial.print(mlx.readObjectTempC(), 2); // baktığı yüzey / surface in view
21 Serial.println(F(" C"));
22 delay(500);
23}Bağlantı özeti: Arduino Uno, ESP32 ve Raspberry Pi Pico
| Sensör ve pin | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| DHT11 / DHT22: DATA | D2 | GPIO 27 | GP15 |
| DS18B20: DQ (+ 4,7 kΩ pull-up) | D3 | GPIO 4 | GP22 |
| LM35: Vout (besleme 5 V) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| NTC: bölücünün orta noktası | A1 (bölücü 5V'tan) | GPIO 35 (ADC1, bölücü 3V3'ten) | GP27 (ADC1, bölücü 3V3'ten) |
| BME280: SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| MLX90614: SDA / SCL | A4 / A5 (aynı I2C hattı) | GPIO 21 / 22 | GP4 / GP5 |
| MAX6675: SO / CS / SCK | D4 / D5 / D6 | GPIO 19 / 23 / 18 | GP16 / GP17 / GP18 |
| Besleme (VCC) | 5V (6 pinli BME280 için 3.3V) | 3V3 (LM35 için 5V/VIN) | 3V3(OUT) (LM35 için VBUS) |
ESP32 ve Pico 3,3 V ile çalışır; NTC bölücüsünü 3V3'ten beslersen ADC girişine güvenli olmayan bir gerilim gelmez. ESP32'de analog sensörleri yalnızca ADC1 pinlerine (GPIO 32–39) bağla, çünkü ADC2 pinleri Wi-Fi açıkken çalışmaz; DHT ve DS18B20 gibi çift yönlü veri hatları için ise GPIO 34–39'u kullanma, bu pinler yalnızca giriştir. BME280 (0x76) ve MLX90614 (0x5A) farklı adresleri olduğu için aynı iki I2C kablosunu sorunsuz paylaşır. Kartının tüm pinlerini Pinout aracında, pull-up dirençlerinin renk kodlarını da direnç renk kodu aracında bulabilirsin.
ESP32 ile karşılaştırma testi: üç sensör aynı ortamda
Sensörler arasındaki farkı en iyi kendi gözünle görürsün. Aşağıdaki ESP32 kodu DS18B20, DHT22 ve BME280'i aynı anda okur ve sonuçları Arduino IDE'nin Seri Çizici'sinde (Serial Plotter) üç ayrı çizgi olarak gösterir. Sensörleri breadboard üzerinde yan yana, ESP32'den en az 10 cm uzağa yerleştir; ESP32 çalışırken ısınır ve yakınındaki sensörü etkiler. Kod için OneWire, DallasTemperature, DHT sensor library ve Adafruit BME280 kütüphaneleri gerekir.
1#include <OneWire.h>
2#include <DallasTemperature.h>
3#include <DHT.h>
4#include <Wire.h>
5#include <Adafruit_Sensor.h>
6#include <Adafruit_BME280.h>
7
8const int ONE_WIRE_PIN = 4; // DS18B20 DQ (4,7 kΩ pull-up -> 3V3)
9const int DHT_PIN = 27; // DHT22 DATA
10
11OneWire oneWire(ONE_WIRE_PIN);
12DallasTemperature ds(&oneWire);
13DHT dht(DHT_PIN, DHT22);
14Adafruit_BME280 bme; // I2C: SDA GPIO 21, SCL GPIO 22
15bool bmeOk = false;
16
17void setup() {
18 Serial.begin(115200);
19 ds.begin();
20 dht.begin();
21 bmeOk = bme.begin(0x76) || bme.begin(0x77); // iki adresi de dene / try both addresses
22 if (!bmeOk) Serial.println("BME280 bulunamadi / not found");
23}
24
25void loop() {
26 ds.requestTemperatures(); // 12 bitte ~750 ms sürer / takes ~750 ms at 12-bit
27 float tDs = ds.getTempCByIndex(0); // sensör yoksa -127 / -127 if missing
28 float tDht = dht.readTemperature(); // hata olursa NAN / NAN on error
29 float tBme = bmeOk ? bme.readTemperature() : NAN;
30
31 // Seri Çizici için etiket:değer biçimi / label:value format for the Serial Plotter
32 Serial.printf("DS18B20:%.2f,DHT22:%.1f,BME280:%.2f\n", tDs, tDht, tBme);
33 delay(2000); // DHT22 en fazla 2 sn'de bir / DHT22 at most every 2 s
34}Önce birkaç dakika bekle ve çizgilerin birbirinden ne kadar ayrı durduğuna bak: 0,5–1 °C'lik farklar bu sensörlerin doğruluk sınırları içindedir. Sonra yanlarına bir bardak ılık su koy ya da üçüne birden hafifçe üfle. DS18B20 ve BME280 birkaç saniye içinde tepki verir, DHT22'nin çizgisi ise plastik kafesi yüzünden belirgin biçimde geride kalır. BME280 diğerlerinden sürekli birkaç onda bir derece yüksek kalıyorsa bu, yonganın kendi kendini ısıtmasıdır. Bu küçük deney, veri sayfasında yazmayan farkları görmeni sağlar. Ölçümleri uzun süre kaydetmek istersen bir SD kart modülü kullanabilir ya da verileri Google Sheets'e gönderebilirsin.
Raspberry Pi Pico ve MicroPython ile sıcaklık ölçümü
Pico'nun MicroPython yazılımında dht, onewire ve ds18x20 modülleri hazır gelir; DHT ve DS18B20 için Pico'ya ek dosya kopyalaman gerekmez. Ayrıca RP2040 yongasının içinde, ADC'nin 4. kanalına bağlı dahili bir sıcaklık sensörü vardır. Aşağıdaki kod üçünü birlikte okur:
1from machine import Pin, ADC
2import dht, onewire, ds18x20, time
3
4dht22 = dht.DHT22(Pin(15)) # DHT22 DATA -> GP15
5ds = ds18x20.DS18X20(onewire.OneWire(Pin(22))) # DS18B20 DQ -> GP22 (4,7 kΩ pull-up)
6roms = ds.scan() # hattaki sensörler / sensors on the bus
7cpu = ADC(4) # RP2040 dahili sensörü / internal sensor
8
9def cpu_temp():
10 v = cpu.read_u16() * 3.3 / 65535 # ham değer -> volt / raw value -> volts
11 return 27 - (v - 0.706) / 0.001721 # RP2040 veri sayfası formülü / datasheet formula
12
13while True:
14 t_ds = None
15 if roms:
16 ds.convert_temp() # ölçümü başlat / start conversion
17 time.sleep_ms(750) # 12 bit dönüşüm süresi / 12-bit conversion time
18 t_ds = round(ds.read_temp(roms[0]), 2)
19 try:
20 dht22.measure()
21 t_dht, nem = dht22.temperature(), dht22.humidity()
22 except OSError: # okuma hatası / read error
23 t_dht = nem = None
24 print("DS18B20:", t_ds, "DHT22:", t_dht, "Nem / RH:", nem,
25 "Pico:", round(cpu_temp(), 1))
26 time.sleep(2)Dahili sensör ortamın değil yonganın sıcaklığını ölçer; ADC referansındaki küçük sapmalar da sonucu birkaç derece kaydırabilir. Bu yüzden ortam ölçümü için değil, kartın aşırı ısınıp ısınmadığını izlemek için uygundur. DS18B20'nin veri hattına 4,7 kΩ pull-up takmayı unutma; Pico'nun dahili pull-up dirençleri 1-Wire için zayıf kalır. Pico ile yeni tanışıyorsan Raspberry Pi Pico nedir yazısıyla başlayabilirsin.
Hangi proje için hangi sıcaklık sensörü?
| Proje ya da ihtiyaç | Önerilen sensör | Neden? |
|---|---|---|
| İlk proje, oda termometresi | DHT11 | En ucuzu, nemi de verir; oda için ±2 °C yeterli |
| İç ve dış mekân hava istasyonu | BME280 ya da DHT22 | −40 °C'ye iner, nemi verir; BME280 basınç ve irtifa da ölçer |
| Akvaryum, su deposu, kombi suyu | DS18B20 su geçirmez prob | Paslanmaz kılıf, ±0,5 °C, uzun kablo |
| Buzdolabı ve dondurucu | DS18B20 | −55 °C'ye kadar ölçer; DHT11 sıfırın altını göremez |
| Birçok noktada ölçüm (odalar, sera, tesisat) | DS18B20 | Tek pine onlarca sensör, her biri kendi adresiyle |
| Kuluçka makinesi | DHT22 ya da BME280 | 37,5 °C civarında ±0,5 °C ve nem kontrolü birlikte |
| Fırın, mangal, lehim havyası | MAX6675 + K tipi termokupl | 1000 °C'ye kadar dayanır |
| 3D yazıcı nozulu, pil paketi | NTC termistör | Küçük, ucuz ve hızlı; 3D yazıcılarda 100 kΩ cam kılıflı NTC kullanılır |
| Motor, rulman, devre kartı, hareketli parça | MLX90614 | Dokunmadan ölçer |
| ADC ve analog ölçümü öğrenmek | LM35 ya da NTC | Kütüphane gerekmez, formülle çalışır |
Sıcaklık sensörleriyle proje fikirleri
- Akıllı sera: Havanın sıcaklığını ve nemini DHT22 ile, toprağın sıcaklığını DS18B20 probuyla ölç; fanı ve sulamayı bir röle modülüyle yönet. Projenin tamamı için akıllı sera projesi yazısına bak.
- Termostatlı akvaryum ısıtıcısı: Su geçirmez DS18B20 ile suyu 25–26 °C arasında tut; rölenin her küçük değişimde açılıp kapanmaması için 0,5 °C'lik histerezis kullan.
- Pille çalışan hava istasyonu: BME280'i ESP32'nin deep sleep moduyla birleştirip on dakikada bir ölç; sistem aylarca pille çalışsın.
- Pizza fırını ya da mangal termometresi: MAX6675 ve K tipi probla fırın sıcaklığını OLED ekranda büyük rakamlarla göster.
- Temassız motor sıcaklık alarmı: MLX90614 ile bir motorun ya da 3D yazıcı tablasının yüzey sıcaklığını izle, eşik aşılınca buzzer çalsın.
- Ev otomasyonu: Her odadaki sıcaklığı ESP32 ile MQTT üzerinden Home Assistant'a gönder ve kombiyi buna göre yönet.
- Dondurucu bekçisi: DS18B20 ile dondurucunun içi −12 °C'nin üzerine çıkarsa sesli uyarı ver ve değeri I2C LCD ekranda göster.
Sık yapılan hatalar ve çözümleri
| Belirti | Olası sebep | Çözüm |
|---|---|---|
| DHT: nan ya da "Failed to read from DHT sensor!" | Kodda yanlış tip (DHT11/DHT22), pull-up yok ya da çok sık okuma | Tipi düzelt, 10 kΩ pull-up ekle, okumalar arasında 2 saniye bekle |
| DS18B20: −127 °C | Sensör bulunamadı: pull-up yok, kablo ya da pin hatalı | DQ ile VCC arasına 4,7 kΩ tak, bağlantıları kontrol et |
| DS18B20: hep 85 °C | Ölçüm bitmeden okundu ya da besleme yetersiz | Dönüşüm süresini bekle, VDD'yi doğrudan besle |
| LM35: anormal yüksek değer, sensör ısınıyor | Besleme bacakları ters bağlanmış | Gücü hemen kes, bacak sırasını düzelt |
| LM35 ya da NTC: değer sürekli zıplıyor | ADC gürültüsü, uzun kablo, dalgalanan USB beslemesi | Ortalama al, 0,1 µF kondansatör ekle, kabloyu kısalt |
| NTC: ısındıkça sıcaklık düşüyor | Bölücünün yönü kodla uyuşmuyor | Direnç formülünü ters çevir |
| BME280: "Could not find a valid BME280 sensor" | Yanlış adres (0x76/0x77) ya da yonga aslında BMP280 | Adresi değiştir, chip ID'yi oku (0x60 / 0x58) |
| BME280 ya da DHT: 1–3 °C yüksek | Kendi kendini ısıtma, yakındaki ESP32 ya da regülatör | Sensörü karttan uzaklaştır, ölçüm sıklığını azalt, ofset uygula |
| MAX6675: nan | Termokupl takılı değil ya da tel kopuk | Vida bağlantılarını ve probu kontrol et |
| MAX6675: ısındıkça değer düşüyor | Termokupl kutupları ters | + ve − uçlarının yerini değiştir |
| MLX90614: parlak metal çok soğuk görünüyor | Düşük emisivite | Mat siyah bant yapıştır ya da emisiviteyi ayarla |
| MLX90614: küçük nesne yanlış ölçülüyor | Görüş alanı nesneden büyük | Sensörü yaklaştır ya da dar açılı sürüm kullan |
Kısacası oda ve hava ölçümü için DHT22 ya da BME280, su ve soğuk ortamlar için DS18B20, analog ölçümü öğrenmek ve hızlı tepki için LM35 ya da NTC, yüksek sıcaklık için MAX6675, dokunamadığın yüzeyler için ise MLX90614 doğru başlangıç noktasıdır. Diğer sensör türlerini de tanımak istersen Arduino sensörleri rehberine göz atabilirsin. BlueGrays uygulamasında DHT11 ile sıcaklık ve nem ölçümü, NTC ve LCD ekranla termometre, ESP32 ve DHT22 ile LCD'li sıcaklık göstergesi, ESP32 sıcaklık kaydedici ve akıllı sulama projelerini adım adım devre şeması ve kodlarıyla bulabilirsin.
Sıkça sorulan sorular
Arduino için en doğru sıcaklık sensörü hangisi?
Hobi sensörleri arasında oda sıcaklığı civarında en doğru seçenekler ±0,5 °C ile DS18B20, DHT22, BME280 (25 °C'de) ve MLX90614'tür. Kablolu ve su geçirmez ölçüm için DS18B20, nemle birlikte ölçüm için DHT22 ya da BME280 öne çıkar. Sensörü bir kez güvenilir bir termometreyle karşılaştırıp kodda ofset düzeltmesi yapmak, hangisini seçersen seç doğruluğu belirgin biçimde artırır.
DHT11 mi DHT22 mi almalıyım?
Yalnızca oda sıcaklığını ve nemi kabaca izleyeceksen DHT11 yeterlidir. Dış mekân, sıfırın altı ya da ±0,5 °C doğruluk gerekiyorsa DHT22 al; −40 ile +80 °C arasını ölçer ve nemi de daha doğru verir. İkisi aynı kütüphane ve kodla çalışır, kodda yalnızca sensör tipini değiştirirsin.
Suyun sıcaklığını Arduino ile nasıl ölçerim?
Su için en uygun sensör, paslanmaz çelik kılıflı su geçirmez DS18B20 probudur. Probu suya daldırır, veri telini 4,7 kΩ pull-up direnciyle Arduino'nun bir dijital pinine bağlarsın. Kablo ve ek yerleri genellikle uzun süre sıcak su içinde kalmak için tasarlanmadığından yalnızca çelik ucu suya sok.
Arduino ile 500 °C gibi yüksek sıcaklıklar ölçülebilir mi?
Evet. K tipi termokupl ve MAX6675 modülüyle 0 ile yaklaşık 1024 °C arası ölçülebilir. Termokuplun ucu fırının içine girer, MAX6675 modülü ise ısıdan uzakta kalmalıdır. Satın aldığın probun kılıfının ve kablosunun hangi sıcaklığa kadar dayandığını da mutlaka kontrol et.
Arduino ile temassız ateş ölçer yapılabilir mi?
MLX90614 ile Arduino'ya bağlanan temassız bir kızılötesi termometre yapabilirsin; standart sürüm oda sıcaklığı civarında ±0,5 °C doğruluk sunar. Vücut sıcaklığı için tıbbi doğruluk sınıfındaki sürüm (±0,2 °C) ve doğru ölçüm mesafesi gerekir, yine de bu düzenek tıbbi bir cihazın yerini tutmaz. Ölçerken hedef yüzeyin sensörün görüş alanını tamamen doldurmasına dikkat et.
Sıcaklık sensörüm neden olduğundan yüksek gösteriyor?
En sık sebep sensörün yakınındaki ısı kaynaklarıdır: ESP32, voltaj regülatörü ya da güneş ışığı. BME280 gibi sensörler sürekli ölçüm yaptığında kendi kendini de biraz ısıtır. Sensörü karttan 10–15 cm uzaklaştır, ölçüm sıklığını azalt ve kalan sabit farkı güvendiğin bir termometreyle karşılaştırarak kodda düzelt.
Bu yazıdan sonra yapabileceğin projeler
Tüm projeleri gör
DHT11 İle Sıcaklık Ve Nem
Odan kaç derece, hava nemli mi, kuru mu? DHT11 sensörü sıcaklığı ve nemi ölçer, Arduino da bu değerleri iki satırlık LCD ekrana yazar ve birkaç saniyede bir yeniler. Sensöre bir şey olursa ekranda hat

NTC ve 2x16 Lcd Ekran İle Sıcaklık Ölçümü
Ortamın sıcaklığını küçük bir boncuk gibi görünen sensörle ölç. NTC adlı bu parça ısındıkça elektriği daha kolay geçirir; Arduino bu değişimi okuyup bir formülle santigrat dereceye çevirir ve iki satı

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 dakikada bir 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,

Dot Matrix Saat, Takvim ve Hava İstasyonu (MAX7219, DS1307)
Masada ya da duvarda durup saati, tarihi ve odanın havasını sırayla gösteren kayan yazılı bir pano. 8x32 LED ekranda önce sıcaklık hem Celsius hem Fahrenheit olarak, sonra nem, ardından iki noktası he

Akıllı Sulama İstasyonu
Tatile gidince çiçeklerin kurumasın diye kendi kendine sulayan bir bahçıvan. Toprak nem sensörü toprağın ne kadar ıslak olduğunu ölçer; toprak kuruyunca Arduino su pompasını birkaç saniye çalıştırır v

I2C İle LCD Ekran Kullanımı
Arduino'ya kendi ekranını kazandır ve ilk mesajını yazdır. İki satırlık LCD ekran yalnızca birkaç kabloyla bağlanır; önce üst satıra bir selam, ardından alt satıra ikinci bir yazı gelir, ekran temizle
Diğer yazılar
BlueGrays uygulaması
Bu devreyi telefonunda adım adım kur
Devre şeması, kod ve parça listesi tek ekranda. 200'den fazla Arduino, ESP32 ve Pico projesi seni bekliyor.
Telefonunla tara
Kamerayı koda tut; telefonunun uygulama mağazası açılır.
ya da mağazada aç

