Panduan · 16 mnt baca

Jenis Sensor Suhu Arduino: Perbandingan 8 Sensor

Perbandingan jenis sensor suhu Arduino: DHT11, DHT22, DS18B20, LM35, NTC, BME280, MAX6675, dan MLX90614 dari sisi akurasi, rentang, pengkabelan, panjang kabel, dan harga.

Memilih di antara berbagai jenis sensor suhu Arduino ternyata lebih penting daripada kelihatannya: DHT11 dan DS18B20 yang diletakkan di ruangan yang sama bisa berbeda 2 °C, dan sangat mungkin sensor meleleh karena kamu mencoba mengukur oven 300 °C dengan sensor yang salah. Ada delapan sensor suhu yang mendominasi dunia elektronika hobi: DHT11, DHT22, DS18B20, LM35, termistor NTC, BME280, MAX6675 (termokopel tipe K), dan MLX90614 (inframerah tanpa kontak). Masing-masing punya rentang pengukuran, akurasi, cara penyambungan, dan harga yang berbeda. Mana yang tepat tergantung pada apa yang mau kamu ukur: udara ruangan, air, oven, atau motor berputar yang tidak bisa kamu sentuh?

Di panduan ini kita menjajarkan kedelapan sensor dalam dua tabel besar: rentang pengukuran, akurasi, resolusi, kecepatan pembacaan, antarmuka, tegangan catu, panjang kabel, dan harga relatif. Setelah itu kamu akan melihat cara kerja masing-masing, kelebihan dan kekurangannya, pengkabelan untuk Arduino Uno, ESP32, dan Raspberry Pi Pico, contoh kode untuk NTC, MAX6675, dan MLX90614, rangkaian uji yang mengadu tiga sensor sekaligus, serta sensor mana yang sebaiknya dipilih untuk proyek apa. Untuk sebagian besar sensor ini kami juga punya tutorial terperinci; tautannya ada di bagian yang terkait.

Modul sensor suhu dan kelembapan DHT11
Modul sensor suhu dan kelembapan DHT11
Modul sensor suhu dan kelembapan DHT22 (AM2302)
Modul sensor suhu dan kelembapan DHT22 (AM2302)
Probe suhu DS18B20 tahan air
Probe suhu DS18B20 tahan air
Modul sensor suhu, kelembapan, dan tekanan BME280
Modul sensor suhu, kelembapan, dan tekanan BME280
Termistor NTC
Termistor NTC

Apa yang perlu diperhatikan ketika memilih sensor suhu?

Sebelum membandingkan sensor, kamu perlu membaca istilah di datasheet dengan benar. Pasangan yang paling sering tertukar adalah akurasi dan resolusi. Akurasi menunjukkan seberapa dekat hasil bacaanmu dengan suhu sebenarnya; resolusi adalah langkah terkecil yang masih bisa dibedakan sensor. BME280 melaporkan suhu dengan langkah 0,01 °C, tapi akurasinya sekitar ±1 °C; jadi dua digit terakhir dari 23,47 °C di layarmu berguna untuk memantau perubahan kecil, tapi tidak memberi tahu suhu sebenarnya setepat itu. Perhatikan tujuh kriteria ini ketika memilih:

  • Rentang pengukuran: Sensor harus mencakup suhu terendah dan tertinggi yang mau kamu ukur dengan leluasa. DHT11 tidak bisa membaca di bawah nol; kulkas butuh DS18B20 dan oven butuh termokopel.
  • Akurasi: ±2 °C masih bisa diterima untuk termometer ruangan, tapi akuarium atau inkubator telur butuh ±0,5 °C.
  • Antarmuka: Sensor analog butuh pin ADC; sensor digital butuh satu atau beberapa pin digital dan biasanya sebuah library. Jumlah pin yang masih kosong di board-mu menentukan berapa banyak sensor yang bisa kamu sambungkan.
  • Panjang kabel: Kalau sensor akan berada 5 meter dari board, di kebun, atau di dasar tangki air, sensor analog dan I2C akan kesulitan; 1-Wire dan protokol satu kabel milik DHT jauh lebih tahan untuk jarak jauh.
  • Waktu respons: Probe berselubung baja atau DHT dalam rumah plastiknya baru menangkap perubahan suhu mendadak setelah beberapa detik, bahkan beberapa menit; NTC kecil yang terbuka jauh lebih cepat.
  • Pengukuran tambahan: Kalau kamu juga butuh kelembapan, DHT22 atau BME280 sudah cukup; kalau butuh tekanan dan ketinggian juga, BME280 mencakup semuanya dalam satu modul.
  • Tegangan catu: Di ESP32 dan Pico yang bekerja di 3,3 V, waspadai sensor seperti LM35 yang butuh minimal 4 V, dan pastikan tidak ada tegangan di atas 3,3 V yang sampai ke input ADC.

Tabel perbandingan 8 sensor suhu

Tabel pertama merangkum performa pengukuran, tabel kedua sisi pengkabelan dan biaya. Nilai-nilainya diambil dari datasheet; kecuali disebutkan lain, akurasi berlaku di sekitar suhu ruangan dan memburuk ke arah ujung rentang.

SensorRentang pengukuranAkurasiResolusiKecepatan pembacaan
DHT110 … +50 °C±2 °C1 °CSekali per detik
DHT22 (AM2302)−40 … +80 °C±0,5 °C0,1 °CSekali setiap 2 detik
DS18B20−55 … +125 °C±0,5 °C (dari −10 sampai +85 °C)0,0625 °C (12-bit)750 ms (12-bit), 94 ms (9-bit)
LM35DZ0 … +100 °C (LM35: −55 … +150 °C)Tipikal ±0,6 °C, dijamin ±1,5 °C0,49 °C di Uno (ref. 5 V), 0,11 °C (ref. 1,1 V)Instan (secepat ADC)
NTC 10 kΩ, B 3950−40 … +125 °C (berselubung kaca ≈ 300 °C)Pada 25 °C: ±0,25 °C (1%) … ±1 °C (5%)≈ 0,1 °C pada suhu ruangan di UnoInstan (secepat ADC)
BME280−40 … +85 °C±0,5 °C (25 °C), ±1 °C (0 … 65 °C)0,01 °CPuluhan kali per detik
MAX6675 + termokopel tipe K0 … +1023,75 °CBeberapa °C (konverter ≈ ±2 °C, sambungan dingin sampai ±3 °C)0,25 °C≈ 4 kali per detik (konversi 0,22 dtk)
MLX90614Objek −70 … +380 °C, lingkungan −40 … +125 °C±0,5 °C (sekitar suhu ruangan)0,02 °CBeberapa kali per detik
SensorAntarmukaCatu dayaPanjang kabelPengukuran tambahanHarga relatif
DHT11Digital satu kabel, 1 pin3–5,5 VSampai 20 mKelembapanSangat murah
DHT22Digital satu kabel, 1 pin3,3–6 VSampai 20 mKelembapanMenengah
DS18B201-Wire, banyak sensor di 1 pin3,0–5,5 VPuluhan meterTidak adaMurah
LM35Analog, 1 pin ADC4–30 VPendek, ≈ 1 m (lebih panjang butuh langkah pencegahan)Tidak adaMurah
NTCAnalog, 1 pin ADC lewat pembagi tegangan3,3 atau 5 V lewat pembagi teganganBeberapa meterTidak adaPaling murah
BME280I2C (2 pin) atau SPIChip 1,71–3,6 V; modul dengan regulator 5 VPendek, di bawah 50 cmKelembapan dan tekananMenengah
MAX6675SPI, 3 pin (hanya baca)3,0–5,5 VKabel termokopel bisa sepanjang beberapa meterTidak adaMenengah
MLX90614I2C (SMBus), 2 pinVersi 3 V atau 5 V (modul bisa punya regulator)Pendek (I2C); mengukur tanpa kontakSuhu lingkunganMahal
Secara kasar, urutan harganya seperti ini: NTC paling murah, disusul DHT11, LM35, dan DS18B20; DHT22 dan BME280 ada di kelas menengah, modul MAX6675 beserta probe termokopelnya sedikit lebih mahal, dan MLX90614 yang paling mahal di daftar ini. Klon sensor murah sangat banyak beredar; terutama untuk DS18B20, LM35, dan BME280, komponen klon bisa saja tidak mencapai akurasi yang tertulis di datasheet. Cara paling sederhana untuk tahu apakah sensormu bisa dipercaya adalah meletakkan dua sensor di titik yang sama lalu membandingkan hasil bacaannya.

DHT11 dan DHT22: suhu dan kelembapan sekaligus

Di dalam kerangka plastik sensor DHT ada elemen kelembapan (resistif di DHT11, kapasitif di DHT22), sebuah termistor, dan pengendali kecil yang mengubah hasil bacaan menjadi data digital. Sensor mengirim hasilnya lewat satu jalur data sebagai paket 40-bit: 16 bit kelembapan, 16 bit suhu, dan checksum 8-bit. Protokol ini bukan 1-Wire, melainkan protokol satu kabel buatan pabrikannya sendiri, jadi setiap DHT butuh pinnya sendiri. DHT11 murah dan cukup untuk suhu ruangan, tapi rentang 0–50 °C dan error ±2 °C membuatnya lemah untuk pemakaian di luar ruangan dan pekerjaan yang butuh ketelitian. Dengan pengkabelan yang sama, DHT22 (AM2302) mengukur dari −40 sampai +80 °C dengan akurasi ±0,5 °C dan melaporkan kelembapan 0–100%; sebagai gantinya, ia hanya bisa membaca sekali setiap dua detik. Keduanya punya satu kelemahan yang sama, yaitu lambat: perubahan baru terlihat belakangan, karena udara di dalam kerangka harus seimbang dulu dengan lingkungannya. Untuk pengkabelan, instalasi library, dan kode, lihat Sensor Suhu dan Kelembapan DHT11; kode yang sama juga berjalan untuk DHT22 cukup dengan mengganti satu kata.

Kalau kamu memakai DHT 4 pin tanpa modul, kamu wajib memasang resistor pull-up 10 kΩ antara jalur data dan VCC; di modul 3 pin resistor ini sudah ada di board-nya. Membaca DHT lebih sering dari setiap dua detik tidak memberimu pengukuran baru: library akan mengembalikan nilai lama atau memberi nan.

DS18B20: tahan air, kokoh, dan banyak sensor di satu pin

Probe suhu DS18B20 tahan air
Probe DS18B20 tahan air: sensor digital di dalam selubung baja tahan karat dengan kabel tiga inti (merah VDD, hitam GND, kuning data).

DS18B20 mengukur suhu di dalam chip dan mengirimkannya sebagai angka digital dengan resolusi yang bisa dipilih dari 9 sampai 12 bit. Sensor ini mengukur dari −55 sampai +125 °C, menawarkan akurasi ±0,5 °C dari −10 sampai +85 °C, dan berkat protokol 1-Wire kamu bisa menyambungkan puluhan sensor ke satu pin data; masing-masing punya alamat 64-bit unik yang ditulis di pabrik. Versi probe tahan airnya dalam selubung baja tahan karat tidak ada tandingannya untuk akuarium, tangki air, pipa pemanas, tanah, dan freezer. Satu-satunya syaratnya adalah resistor pull-up 4,7 kΩ antara jalur data dan catu daya; tanpa resistor ini library akan mengembalikan −127 °C. Dalam mode 12-bit satu konversi butuh 750 ms, jadi kamu mungkin perlu menurunkan resolusinya untuk mengikuti suhu yang berubah cepat. Kode untuk banyak sensor dan cara membacanya di ESP32 tanpa memblokir ada di Sensor Suhu DS18B20.

LM35: sensor analog paling sederhana, tanpa library

LM35 mengubah suhu langsung menjadi tegangan: outputnya naik 10 mV setiap derajat dan memberi 250 mV pada 25 °C. Tidak perlu library; hasilnya kamu dapat dengan rumus suhu = analogRead × 5,0 / 1024 × 100. Kesederhanaan ini membuatnya jadi langkah pertama yang sempurna untuk belajar ADC. Kelemahannya juga berasal dari situ: dengan referensi 5 V, ADC 10-bit di Arduino Uno hanya memberi langkah sekitar 0,49 °C, setiap penyimpangan pada 5 V dari USB langsung masuk ke hasil suhu, dan makin panjang kabelnya, makin banyak derau yang tertangkap output. Kebanyakan LM35 di pasaran adalah LM35DZ yang hanya dijamin untuk 0–100 °C. Sensor ini juga butuh minimal 4 V, jadi di ESP32 dan Pico harus diberi daya dari pin 5 V. Di board 3,3 V, pilihan analog yang lebih praktis adalah TMP36: bekerja di 2,7–5,5 V, mengukur −40 sampai +125 °C, dan outputnya juga 10 mV/°C, tapi karena memberi 500 mV pada 0 °C, rumusnya menjadi suhu = (V − 0,5) × 100. Akurasi tipikalnya ±1 °C pada 25 °C dan ±2 °C di seluruh rentang. Cara memperkecil langkah menjadi 0,11 °C dengan referensi internal 1,1 V kami jelaskan langkah demi langkah di Sensor Suhu LM35, dan cara kerja ADC bisa kamu temukan di konversi analog ke digital.

LM35 dan DS18B20 hadir dalam kemasan TO-92 hitam yang sama dan kelihatan hampir identik, tapi pin catu dayanya terbalik. Sensor yang dipasang terbalik akan terlalu panas untuk disentuh dalam beberapa detik. Begitu pertama kali menyalakan daya, sentuh sensornya dengan jari; kalau mulai panas, segera putuskan daya dan baca tulisan di badannya.

Termistor NTC: sensor paling murah dan paling cepat

Termistor NTC (Negative Temperature Coefficient) adalah resistor yang hambatannya turun ketika suhu naik. Jenis yang paling umum di proyek hobi bernilai 10 kΩ pada 25 °C dengan koefisien B 3950 K. Karena Arduino tidak bisa mengukur hambatan secara langsung, NTC dirangkai sebagai pembagi tegangan bersama sebuah resistor tetap, lalu tegangan di titik tengahnya dibaca di pin analog. Rangkaian ini punya sifat yang menyenangkan: ketika pembagi diberi daya dari 5 V yang sama dengan referensi ADC, pengukurannya bersifat rasiometrik, jadi hasilnya tidak berubah walaupun catu dayanya 4,8 atau 5,1 V. Tegangan pembaginya bisa kamu hitung dengan mudah memakai kalkulator pembagi tegangan.

Hambatan NTC berubah terhadap suhu secara eksponensial, bukan linear, jadi hasilnya tidak bisa didapat dengan satu pengali seperti di LM35. Dalam praktiknya dipakai persamaan Beta: 1/T = 1/T0 + (1/B) × ln(R/R0). Di sini T adalah suhu dalam kelvin, T0 = 298,15 K (25 °C), R0 = 10 kΩ, dan B = 3950. Sensitivitasnya sangat tinggi di suhu ruangan: menurut rumus B/T², hambatannya berubah sekitar 4,4% per derajat. Itulah sebabnya NTC dengan toleransi 1% hanya meleset sekitar ±0,25 °C pada 25 °C; ke arah ujung rentang, toleransi koefisien B ikut berperan dan error-nya membesar. Untuk akurasi yang lebih baik di rentang lebar, dipakai persamaan Steinhart-Hart tiga titik; detailnya ada di termistor NTC.

C++ (Arduino IDE)
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}

Di rangkaian ini resistor tetap 10 kΩ berada antara 5V dan A1, sedangkan NTC antara A1 dan GND. Ketika suhu naik, hambatan NTC turun, begitu juga tegangan di A1. Kode pertama-tama menghitung hambatan NTC dari nilai mentah, lalu suhu dalam kelvin dengan persamaan Beta, kemudian mengubahnya ke Celsius; merata-ratakan 16 pembacaan memangkas derau ADC menjadi seperempatnya. Di suhu ruangan, satu langkah ADC di Uno setara dengan sekitar 0,09 °C, jadi resolusinya lima kali lebih baik daripada LM35 yang dibaca dengan referensi 5 V. Di modul NTC siap pakai (misalnya KY-013), posisi resistor tetapnya berbeda-beda dari satu board ke board lain; kalau hasil bacaan malah turun ketika kamu menyentuhkan benda hangat ke NTC, balik rumus hambatannya: r = R_FIXED × (1023 − adc) / adc.

BME280: suhu, kelembapan, dan tekanan dalam satu modul

BME280 buatan Bosch mengukur suhu, kelembapan relatif, dan tekanan udara di chip yang ukurannya hanya 2,5 × 2,5 mm, dan berkomunikasi lewat I2C (alamat 0x76 atau 0x77) atau SPI. Untuk suhu, sensor ini menawarkan resolusi 0,01 °C dengan akurasi ±0,5 °C pada 25 °C dan ±1 °C dari 0 sampai 65 °C; ia bisa membaca puluhan kali per detik dan arusnya jauh di bawah 1 µA ketika sleep. Karena itu sensor ini ideal untuk stasiun cuaca bertenaga baterai. Chip-nya sendiri tidak tahan lebih dari 3,6 V: modul ungu 6 pin biasanya hanya untuk 3,3 V, sedangkan modul 4 pin yang punya regulator bisa disambungkan ke 5 V. Kalau mengukur terus-menerus, chip-nya sedikit menghangat dan bisa terbaca beberapa persepuluh derajat lebih tinggi; untuk pengukuran cuaca, forced mode dengan beberapa pembacaan per menit sudah cukup. Cara kerja bus I2C kami jelaskan di Apa Itu I2C?.

Sebagian modul yang dijual sebagai BME280 sebenarnya adalah BMP280, yang tidak bisa mengukur kelembapan. Keduanya kelihatan hampir sama; cara pasti untuk membedakannya adalah membaca register ID chip: BME280 mengembalikan 0x60, BMP280 0x58. Dalam kasus itu, contoh sketch dari library Adafruit BME280 akan mencetak “Could not find a valid BME280 sensor”. Kode untuk membaca ID dan solusinya ada di BME280 dan BMP280.

MAX6675 dan termokopel tipe K: sampai 1000 °C

Termokopel terbuat dari dua kawat logam berbeda yang dilas menjadi satu di salah satu ujungnya. Perbedaan suhu antara titik las (sambungan panas) dan titik tempat kawat tersambung ke perangkat (sambungan dingin) menghasilkan tegangan yang sangat kecil di kawat; untuk termokopel tipe K besarnya sekitar 41 µV per derajat. ADC Arduino tidak bisa membaca tegangan sekecil itu, dan kamu juga perlu tahu suhu sambungan dinginnya. MAX6675 mengerjakan keduanya sekaligus: menguatkan tegangan termokopel, menerapkan kompensasi sambungan dingin dengan mengukur suhunya sendiri, dan mengirim hasilnya lewat SPI dengan resolusi 12-bit, 0,25 °C. Rentangnya 0 sampai +1023,75 °C, sehingga inilah satu-satunya pilihan di sini untuk tempat yang tidak bisa ditahan sensor lain, seperti solder, oven pizza, panggangan, tungku keramik, atau knalpot.

Kamu juga perlu tahu batas MAX6675: sensor ini tidak bisa mengukur di bawah 0 °C; error konverternya sendiri sekitar ±2 °C antara 0 dan 700 °C, lalu masih ditambah error kompensasi sambungan dingin hingga ±3 °C dan toleransi kawat termokopelnya. Jadi harapkan akurasi keseluruhan sekitar beberapa derajat; di oven 800 °C perbedaan itu tidak berarti. Satu konversi butuh 0,17–0,22 detik, jadi tunggu minimal 250 ms di antara dua pembacaan. Kalau kamu juga butuh suhu negatif, MAX31855 yang lebih baru (−200 sampai +1350 °C, 14-bit) adalah pilihan yang lebih baik. Cara kerja bus SPI bisa kamu temukan di Apa Itu SPI?. Setelah menginstal library MAX6675 dari Adafruit lewat Library Manager di Arduino IDE, upload kode berikut:

C++ (Arduino IDE)
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}
Kabel termokopel punya polaritas: sambungkan kabel bertanda + dan − ke terminal sekrup dengan tanda yang sama di modul; kalau tertukar, hasil bacaan malah turun ketika probe memanas. Jangan letakkan modul di dekat perangkat yang sedang memanas: karena MAX6675 mengoreksi sambungan dingin memakai suhunya sendiri, setiap kenaikan suhu board langsung masuk ke hasil pengukuran. Kalau probe tidak tersambung atau kawatnya putus, library akan mengembalikan nan.

MLX90614: mengukur suhu tanpa kontak

MLX90614 adalah sensor suhu tanpa kontak yang mendeteksi radiasi inframerah yang dipancarkan benda dengan sebuah termopil. Sensor ini memberi dua nilai sekaligus: suhu lingkungan, yaitu suhu badannya sendiri (−40 sampai +125 °C), dan suhu objek, yaitu suhu permukaan yang sedang ia lihat (−70 sampai +380 °C). Di sekitar suhu ruangan, akurasinya ±0,5 °C dengan resolusi 0,02 °C; sensor ini sudah dikalibrasi di pabrik dan berkomunikasi lewat I2C (SMBus) di alamat 0x5A, dan kecepatan bus-nya tidak boleh lebih dari 100 kHz. Sensor ini ideal untuk mengukur motor yang berputar, bantalan (bearing), chip panas di papan sirkuit, atau wajan di atas kompor tanpa menyentuhnya.

Pengukuran tanpa kontak punya dua trik. Yang pertama adalah bidang pandang (field of view): sensor mengukur rata-rata semua yang ada di dalam kerucut pandangnya. Versi yang paling umum, MLX90614ESF-BAA, punya bidang pandang 90°; artinya dari jarak 5 cm ia merata-ratakan area selebar sekitar 10 cm. Untuk mengukur benda kecil, dekatkan sensornya atau pilih versi bersudut sempit seperti 35° (BCC) atau 5° (BCI). Yang kedua adalah emisivitas: dari pabrik sensor diatur ke 1,0. Untuk cat doff, plastik, kayu, kulit, dan air, koefisiennya antara 0,9 dan 0,98, jadi hasilnya mendekati benar; permukaan logam mengilap justru memancarkan radiasi sangat sedikit dan terlihat jauh lebih dingin daripada sebenarnya. Menempelkan sepotong selotip hitam doff di permukaannya adalah solusi yang sederhana dan efektif. Instal library Adafruit MLX90614 dari Library Manager dan coba kode ini:

C++ (Arduino IDE)
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}
MLX90614 tidak bisa melihat menembus kaca: filter optiknya meloloskan panjang gelombang 5,5–14 µm, dan kaca hampir tidak tembus pada rentang itu. Kalau sensornya kamu arahkan keluar jendela, yang terukur adalah kacanya, bukan suhu di luar. Selain itu, ketika sensor dibawa dari ruangan dingin ke ruangan hangat, hasil bacaannya bisa salah selama beberapa menit sampai badannya mencapai keseimbangan.

Ringkasan pengkabelan: Arduino Uno, ESP32, dan Raspberry Pi Pico

Sensor dan pinArduino UnoESP32Raspberry Pi Pico
DHT11 / DHT22: DATAD2GPIO 27GP15
DS18B20: DQ (+ pull-up 4,7 kΩ)D3GPIO 4GP22
LM35: Vout (catu 5 V)A0GPIO 34 (ADC1)GP26 (ADC0)
NTC: titik tengah pembagiA1 (pembagi dari 5V)GPIO 35 (ADC1, pembagi dari 3V3)GP27 (ADC1, pembagi dari 3V3)
BME280: SDA / SCLA4 / A5GPIO 21 / 22GP4 / GP5
MLX90614: SDA / SCLA4 / A5 (bus I2C yang sama)GPIO 21 / 22GP4 / GP5
MAX6675: SO / CS / SCKD4 / D5 / D6GPIO 19 / 23 / 18GP16 / GP17 / GP18
Catu daya (VCC)5V (3.3V untuk BME280 6 pin)3V3 (5V/VIN untuk LM35)3V3(OUT) (VBUS untuk LM35)

ESP32 dan Pico bekerja di 3,3 V; kalau pembagi NTC kamu beri daya dari 3V3, tidak akan ada tegangan berbahaya yang sampai ke input ADC. Di ESP32, sambungkan sensor analog hanya ke pin ADC1 (GPIO 32–39), karena pin ADC2 tidak berfungsi ketika Wi-Fi menyala; sebaliknya, untuk jalur data dua arah seperti DHT dan DS18B20, hindari GPIO 34–39 karena pin-pin ini hanya bisa jadi input. BME280 (0x76) dan MLX90614 (0x5A) punya alamat berbeda, jadi keduanya bisa berbagi dua kabel I2C yang sama tanpa masalah. Semua pin board-mu bisa kamu temukan di alat Pinout, dan kode warna resistor pull-up di alat kode warna resistor.

Uji perbandingan dengan ESP32: tiga sensor di titik yang sama

Cara terbaik untuk melihat perbedaan antarsensor adalah dengan mata kepalamu sendiri. Kode ESP32 di bawah membaca DS18B20, DHT22, dan BME280 bersamaan dan menampilkan hasilnya sebagai tiga garis terpisah di Serial Plotter Arduino IDE. Letakkan sensor-sensornya berdampingan di breadboard, minimal 10 cm dari ESP32; ESP32 menghangat ketika bekerja dan memengaruhi sensor yang ada di sebelahnya. Kodenya butuh library OneWire, DallasTemperature, DHT sensor library, dan Adafruit BME280.

C++ (Arduino IDE)
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}

Tunggu dulu beberapa menit dan lihat seberapa jauh jarak antargaris: selisih 0,5–1 °C masih dalam batas akurasi sensor-sensor ini. Lalu letakkan segelas air hangat di dekatnya atau tiup ketiganya pelan-pelan. DS18B20 dan BME280 bereaksi dalam beberapa detik, sedangkan garis DHT22 jelas tertinggal karena kerangka plastiknya. Kalau BME280 terus berada beberapa persepuluh derajat di atas yang lain, itu tanda chip-nya memanaskan dirinya sendiri. Eksperimen kecil ini menunjukkan perbedaan yang tidak tertulis di datasheet mana pun. Untuk mencatat hasil bacaan dalam waktu lama, kamu bisa memakai modul kartu SD atau mengirim datanya ke Google Sheets.

Mengukur suhu dengan Raspberry Pi Pico dan MicroPython

Firmware MicroPython untuk Pico sudah dilengkapi modul dht, onewire, dan ds18x20 bawaan, jadi kamu tidak perlu menyalin file tambahan apa pun ke Pico untuk DHT dan DS18B20. Chip RP2040 juga punya sensor suhu internal yang tersambung ke kanal 4 ADC. Kode di bawah membaca ketiganya bersamaan:

MicroPython
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)

Sensor internal mengukur suhu chip, bukan suhu ruangan, dan penyimpangan kecil pada referensi ADC bisa menggeser hasilnya beberapa derajat. Jadi sensor ini bukan untuk mengukur lingkungan, tapi berguna untuk mengecek apakah board-mu kepanasan. Jangan lupa pull-up 4,7 kΩ di jalur data DS18B20; resistor pull-up internal Pico terlalu lemah untuk 1-Wire. Kalau kamu baru mengenal Pico, mulailah dari Apa Itu Raspberry Pi Pico?.

Sensor suhu mana untuk proyek apa?

Proyek atau kebutuhanSensor yang disarankanKenapa?
Proyek pertama, termometer ruanganDHT11Paling murah, juga memberi kelembapan; ±2 °C cukup untuk ruangan
Stasiun cuaca dalam dan luar ruanganBME280 atau DHT22Bisa sampai −40 °C dan memberi kelembapan; BME280 juga mengukur tekanan dan ketinggian
Akuarium, tangki air, air boilerProbe DS18B20 tahan airSelubung baja tahan karat, ±0,5 °C, kabel panjang
Kulkas dan freezerDS18B20Mengukur sampai −55 °C; DHT11 tidak bisa membaca di bawah nol
Mengukur banyak titik (ruangan, rumah kaca, pipa)DS18B20Puluhan sensor di satu pin, masing-masing dengan alamatnya sendiri
Inkubator telurDHT22 atau BME280±0,5 °C di sekitar 37,5 °C plus kendali kelembapan
Oven, panggangan, solderMAX6675 + termokopel tipe KTahan sampai 1000 °C
Hotend printer 3D, battery packTermistor NTCKecil, murah, dan cepat; printer 3D memakai NTC 100 kΩ berselubung kaca
Motor, bantalan, papan sirkuit, bagian yang bergerakMLX90614Mengukur tanpa kontak
Belajar ADC dan pengukuran analogLM35 atau NTCTidak perlu library, cukup dengan rumus

Ide proyek dengan sensor suhu

  • Rumah kaca pintar: Ukur suhu dan kelembapan udara dengan DHT22 dan suhu tanah dengan probe DS18B20; kendalikan kipas dan penyiraman dengan modul relay. Untuk proyek lengkapnya, lihat Proyek Rumah Kaca Pintar.
  • Pemanas akuarium dengan termostat: Jaga suhu air antara 25 dan 26 °C dengan DS18B20 tahan air; pakai histeresis 0,5 °C supaya relay tidak menyala dan mati di setiap perubahan kecil.
  • Stasiun cuaca bertenaga baterai: Gabungkan BME280 dengan mode deep sleep ESP32 dan ukur setiap sepuluh menit supaya sistemnya bisa berjalan berbulan-bulan dengan baterai.
  • Termometer oven pizza atau panggangan: Tampilkan suhu oven dengan angka besar di layar OLED memakai MAX6675 dan probe tipe K.
  • Alarm suhu motor tanpa kontak: Pantau suhu permukaan motor atau bed printer 3D dengan MLX90614 dan bunyikan buzzer ketika melewati ambang.
  • Otomasi rumah: Kirim suhu setiap ruangan ke Home Assistant lewat MQTT dengan ESP32 dan atur pemanas berdasarkan data itu.
  • Penjaga freezer: Dengan DS18B20, bunyikan alarm kalau suhu di dalam freezer naik di atas −12 °C dan tampilkan nilainya di layar LCD I2C.

Kesalahan umum dan cara mengatasinya

GejalaKemungkinan penyebabSolusi
DHT: nan atau “Failed to read from DHT sensor!”Tipe yang salah di kode (DHT11/DHT22), tidak ada pull-up, atau membaca terlalu seringPerbaiki tipenya, tambahkan pull-up 10 kΩ, tunggu 2 detik di antara pembacaan
DS18B20: −127 °CSensor tidak ditemukan: tidak ada pull-up, kabel rusak, atau pin salahPasang 4,7 kΩ antara DQ dan VCC, cek sambungannya
DS18B20: selalu 85 °CDibaca sebelum konversi selesai, atau catu daya kurangTunggu sesuai waktu konversi, beri daya langsung ke VDD
LM35: nilai tinggi tidak wajar, sensor memanasPin catu daya tersambung terbalikSegera putuskan daya dan perbaiki urutan pin
LM35 atau NTC: nilai terus melompatDerau ADC, kabel panjang, catu USB yang naik-turunRata-ratakan pembacaan, tambahkan kapasitor 0,1 µF, perpendek kabel
NTC: suhu turun ketika menghangatArah pembagi tegangan tidak cocok dengan kodeBalik rumus hambatannya
BME280: “Could not find a valid BME280 sensor”Alamat salah (0x76/0x77) atau chip-nya sebenarnya BMP280Ganti alamatnya, baca ID chip (0x60 / 0x58)
BME280 atau DHT: 1–3 °C terlalu tinggiPemanasan sendiri, ESP32 atau regulator di dekatnyaJauhkan sensor dari board, baca lebih jarang, terapkan offset
MAX6675: nanTermokopel tidak tersambung atau kawatnya putusCek terminal sekrup dan probe-nya
MAX6675: nilai turun ketika memanasPolaritas termokopel terbalikTukar kabel + dan −
MLX90614: logam mengilap terbaca sangat dinginEmisivitas rendahTempelkan selotip hitam doff atau atur emisivitasnya
MLX90614: benda kecil terukur salahBidang pandang lebih besar daripada bendanyaDekatkan sensornya atau pakai versi bersudut sempit
Sensor apa pun yang kamu pilih, sumber error terbesar sering kali bukan sensornya sendiri, melainkan tempat kamu meletakkannya. Sensor yang terkena sinar matahari langsung, persis di sebelah regulator tegangan atau ESP32, atau terkurung di dalam kotak tertutup akan mengukur suhu sekelilingnya sendiri, bukan suhu ruangan. Jauhkan sensor dari board, letakkan di tempat yang ada aliran udaranya, bandingkan sekali dengan termometer yang kamu percaya, lalu koreksi selisih tetapnya di kodemu. Untuk menghaluskan nilai yang naik-turun, lihat metode di menyaring data sensor.

Singkatnya: DHT22 atau BME280 untuk ruangan dan cuaca, DS18B20 untuk air dan tempat dingin, LM35 atau NTC untuk belajar pengukuran analog dan respons cepat, MAX6675 untuk suhu tinggi, dan MLX90614 untuk permukaan yang tidak bisa kamu sentuh adalah titik awal yang tepat. Kalau kamu juga ingin mengenal jenis sensor lain, lihat Panduan Sensor Arduino. Di aplikasi BlueGrays kamu akan menemukan skema rangkaian dan kode langkah demi langkah untuk proyek seperti Suhu dan Kelembapan dengan DHT11, Mengukur Suhu dengan NTC dan Layar LCD 2x16, Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD), Pencatat Data Suhu ESP32, dan Stasiun Penyiraman Pintar.

Pertanyaan umum

Sensor suhu mana yang paling akurat untuk Arduino?

Di antara sensor hobi, pilihan paling akurat di sekitar suhu ruangan adalah DS18B20, DHT22, BME280 (pada 25 °C), dan MLX90614, semuanya ±0,5 °C. DS18B20 unggul untuk pengukuran berkabel dan tahan air, DHT22 atau BME280 kalau kamu juga butuh kelembapan. Apa pun pilihanmu, membandingkan sensor sekali dengan termometer yang andal lalu mengoreksi offset-nya di kode akan meningkatkan akurasi secara nyata.

Sebaiknya beli DHT11 atau DHT22?

Kalau kamu hanya ingin memantau suhu dan kelembapan ruangan secara kasar, DHT11 sudah cukup. Kalau butuh pemakaian di luar ruangan, suhu di bawah nol, atau akurasi ±0,5 °C, ambil DHT22; sensor ini mengukur dari −40 sampai +80 °C dan memberi kelembapan yang lebih akurat juga. Keduanya bekerja dengan library dan kode yang sama; kamu cukup mengganti tipe sensor di sketch.

Bagaimana cara mengukur suhu air dengan Arduino?

Sensor terbaik untuk air adalah probe DS18B20 tahan air dalam selubung baja tahan karat. Celupkan probe ke dalam air dan sambungkan kabel datanya ke pin digital Arduino dengan resistor pull-up 4,7 kΩ. Kabel dan sambungannya biasanya tidak dirancang untuk lama terendam air panas, jadi masukkan hanya ujung bajanya ke dalam air.

Apakah Arduino bisa mengukur suhu tinggi seperti 500 °C?

Bisa. Dengan termokopel tipe K dan modul MAX6675 kamu bisa mengukur dari 0 sampai sekitar 1024 °C. Ujung termokopel dimasukkan ke dalam oven, sedangkan modul MAX6675 harus tetap jauh dari panas. Selalu cek sampai suhu berapa selubung dan kabel probe yang kamu beli dirancang untuk bertahan.

Bisakah membuat termometer tanpa kontak dengan Arduino?

Kamu bisa membuat termometer inframerah tanpa kontak yang tersambung ke Arduino dengan MLX90614; versi standarnya menawarkan akurasi ±0,5 °C di sekitar suhu ruangan. Suhu tubuh butuh versi berakurasi medis (±0,2 °C) dan jarak ukur yang tepat, dan meski begitu rangkaian ini tetap tidak menggantikan alat medis. Ketika mengukur, pastikan permukaan target memenuhi seluruh bidang pandang sensor.

Kenapa sensor suhuku terbaca terlalu tinggi?

Penyebab paling umum adalah sumber panas di dekat sensor: ESP32, regulator tegangan, atau sinar matahari. Sensor seperti BME280 juga sedikit memanaskan dirinya sendiri ketika mengukur terus-menerus. Jauhkan sensor 10–15 cm dari board, baca lebih jarang, lalu koreksi selisih tetap yang tersisa di kodemu dengan membandingkannya dengan termometer yang kamu percaya.

Lihat semua proyek
Suhu dan Kelembapan dengan DHT11
#55Menengah

Suhu dan Kelembapan dengan DHT11

Seberapa hangat kamarmu, dan apakah udaranya lembap atau kering? Sensor DHT11 mengukur suhu dan kelembapan, dan Arduino menulis nilainya di layar LCD dua baris, diperbarui setiap beberapa detik. Jika

4.7(47)
73
Mengukur Suhu dengan NTC dan Layar LCD 2x16
#44Pemula
Premium

Mengukur Suhu dengan NTC dan Layar LCD 2x16

Ukur suhu di sekitarmu dengan sensor yang mirip manik-manik kecil. Komponen bernama NTC ini makin mudah dilewati listrik ketika makin hangat; Arduino membaca perubahan itu, mengubahnya menjadi derajat

4.5(33)
44
Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD)
#117Menengah

Suhu dan Kelembapan DHT22 ESP32 (dengan Layar LCD)

Proyek ini mengukur suhu dan kelembapan sekitar dengan sensor DHT22 dan menampilkan datanya secara real-time di LCD I2C 16x2. Data dibaca dari sensor dengan protokol satu kabel lewat library Adafruit DHT. Proyek ini menjadi dasar untuk stasiun cuaca IoT, otomasi rumah pintar, atau sistem pemantauan lingkungan di rumah kaca. Komunikasi dengan DHT22 dilakukan lewat pin GPIO 4 ESP32.

4.8(38)
56
Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
#144Mahir
Premium

Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)

Buat pencatat suhu bercap waktu dengan ESP32! Baca suhu/kelembapan DHT22 setiap menit, ambil waktu sebenarnya dari RTC DS1307, dan catat ke kartu microSD sebagai CSV. OLED menampilkan suhu langsung (font besar), kelembapan, cap waktu, dan penghitung catatan. File /temp_log.csv bisa dibuka di Excel, Google Sheets, atau Python pandas; cocok untuk rumah kaca, suhu kamar, data laboratorium, penyimpanan makanan, atau sarang lebah.

4.7(7)
12
Jam, Kalender, dan Stasiun Cuaca Dot Matrix (MAX7219, DS1307)
#85Menengah
Premium

Jam, Kalender, dan Stasiun Cuaca Dot Matrix (MAX7219, DS1307)

Papan teks berjalan untuk meja atau dinding yang menampilkan waktu, tanggal, dan cuaca ruangan secara bergantian. Di layar LED 8x32, kamu pertama melihat suhu dalam Celsius dan Fahrenheit, lalu kelemb

5.0(50)
66
Stasiun Penyiraman Pintar
#83Mahir
Premium

Stasiun Penyiraman Pintar

Tukang kebun yang menyiram tanamanmu sendiri, supaya tanaman tidak kering ketika kamu berlibur. Sensor kelembapan tanah mengukur seberapa basah tanahnya; ketika kering, Arduino menyalakan pompa air be

5.0(42)
57
Menggunakan Layar LCD dengan I2C
#32Pemula
Premium

Menggunakan Layar LCD dengan I2C

Beri Arduino-mu layar sendiri dan buat ia menulis pesan pertamanya. Layar LCD dua baris tersambung hanya dengan beberapa kabel; sapaan muncul di baris atas, lalu pesan kedua di baris bawah, layar dibe

4.8(53)
70