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.





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.
| Sensor | Rentang pengukuran | Akurasi | Resolusi | Kecepatan pembacaan |
|---|---|---|---|---|
| DHT11 | 0 … +50 °C | ±2 °C | 1 °C | Sekali per detik |
| DHT22 (AM2302) | −40 … +80 °C | ±0,5 °C | 0,1 °C | Sekali 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) |
| LM35DZ | 0 … +100 °C (LM35: −55 … +150 °C) | Tipikal ±0,6 °C, dijamin ±1,5 °C | 0,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 Uno | Instan (secepat ADC) |
| BME280 | −40 … +85 °C | ±0,5 °C (25 °C), ±1 °C (0 … 65 °C) | 0,01 °C | Puluhan kali per detik |
| MAX6675 + termokopel tipe K | 0 … +1023,75 °C | Beberapa °C (konverter ≈ ±2 °C, sambungan dingin sampai ±3 °C) | 0,25 °C | ≈ 4 kali per detik (konversi 0,22 dtk) |
| MLX90614 | Objek −70 … +380 °C, lingkungan −40 … +125 °C | ±0,5 °C (sekitar suhu ruangan) | 0,02 °C | Beberapa kali per detik |
| Sensor | Antarmuka | Catu daya | Panjang kabel | Pengukuran tambahan | Harga relatif |
|---|---|---|---|---|---|
| DHT11 | Digital satu kabel, 1 pin | 3–5,5 V | Sampai 20 m | Kelembapan | Sangat murah |
| DHT22 | Digital satu kabel, 1 pin | 3,3–6 V | Sampai 20 m | Kelembapan | Menengah |
| DS18B20 | 1-Wire, banyak sensor di 1 pin | 3,0–5,5 V | Puluhan meter | Tidak ada | Murah |
| LM35 | Analog, 1 pin ADC | 4–30 V | Pendek, ≈ 1 m (lebih panjang butuh langkah pencegahan) | Tidak ada | Murah |
| NTC | Analog, 1 pin ADC lewat pembagi tegangan | 3,3 atau 5 V lewat pembagi tegangan | Beberapa meter | Tidak ada | Paling murah |
| BME280 | I2C (2 pin) atau SPI | Chip 1,71–3,6 V; modul dengan regulator 5 V | Pendek, di bawah 50 cm | Kelembapan dan tekanan | Menengah |
| MAX6675 | SPI, 3 pin (hanya baca) | 3,0–5,5 V | Kabel termokopel bisa sepanjang beberapa meter | Tidak ada | Menengah |
| MLX90614 | I2C (SMBus), 2 pin | Versi 3 V atau 5 V (modul bisa punya regulator) | Pendek (I2C); mengukur tanpa kontak | Suhu lingkungan | Mahal |
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.
DS18B20: tahan air, kokoh, dan banyak sensor di satu pin

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.
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.
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?.
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:
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: 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:
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}Ringkasan pengkabelan: Arduino Uno, ESP32, dan Raspberry Pi Pico
| Sensor dan pin | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| DHT11 / DHT22: DATA | D2 | GPIO 27 | GP15 |
| DS18B20: DQ (+ pull-up 4,7 kΩ) | D3 | GPIO 4 | GP22 |
| LM35: Vout (catu 5 V) | A0 | GPIO 34 (ADC1) | GP26 (ADC0) |
| NTC: titik tengah pembagi | A1 (pembagi dari 5V) | GPIO 35 (ADC1, pembagi dari 3V3) | GP27 (ADC1, pembagi dari 3V3) |
| BME280: SDA / SCL | A4 / A5 | GPIO 21 / 22 | GP4 / GP5 |
| MLX90614: SDA / SCL | A4 / A5 (bus I2C yang sama) | GPIO 21 / 22 | GP4 / GP5 |
| MAX6675: SO / CS / SCK | D4 / D5 / D6 | GPIO 19 / 23 / 18 | GP16 / 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.
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:
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 kebutuhan | Sensor yang disarankan | Kenapa? |
|---|---|---|
| Proyek pertama, termometer ruangan | DHT11 | Paling murah, juga memberi kelembapan; ±2 °C cukup untuk ruangan |
| Stasiun cuaca dalam dan luar ruangan | BME280 atau DHT22 | Bisa sampai −40 °C dan memberi kelembapan; BME280 juga mengukur tekanan dan ketinggian |
| Akuarium, tangki air, air boiler | Probe DS18B20 tahan air | Selubung baja tahan karat, ±0,5 °C, kabel panjang |
| Kulkas dan freezer | DS18B20 | Mengukur sampai −55 °C; DHT11 tidak bisa membaca di bawah nol |
| Mengukur banyak titik (ruangan, rumah kaca, pipa) | DS18B20 | Puluhan sensor di satu pin, masing-masing dengan alamatnya sendiri |
| Inkubator telur | DHT22 atau BME280 | ±0,5 °C di sekitar 37,5 °C plus kendali kelembapan |
| Oven, panggangan, solder | MAX6675 + termokopel tipe K | Tahan sampai 1000 °C |
| Hotend printer 3D, battery pack | Termistor NTC | Kecil, murah, dan cepat; printer 3D memakai NTC 100 kΩ berselubung kaca |
| Motor, bantalan, papan sirkuit, bagian yang bergerak | MLX90614 | Mengukur tanpa kontak |
| Belajar ADC dan pengukuran analog | LM35 atau NTC | Tidak 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
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| DHT: nan atau “Failed to read from DHT sensor!” | Tipe yang salah di kode (DHT11/DHT22), tidak ada pull-up, atau membaca terlalu sering | Perbaiki tipenya, tambahkan pull-up 10 kΩ, tunggu 2 detik di antara pembacaan |
| DS18B20: −127 °C | Sensor tidak ditemukan: tidak ada pull-up, kabel rusak, atau pin salah | Pasang 4,7 kΩ antara DQ dan VCC, cek sambungannya |
| DS18B20: selalu 85 °C | Dibaca sebelum konversi selesai, atau catu daya kurang | Tunggu sesuai waktu konversi, beri daya langsung ke VDD |
| LM35: nilai tinggi tidak wajar, sensor memanas | Pin catu daya tersambung terbalik | Segera putuskan daya dan perbaiki urutan pin |
| LM35 atau NTC: nilai terus melompat | Derau ADC, kabel panjang, catu USB yang naik-turun | Rata-ratakan pembacaan, tambahkan kapasitor 0,1 µF, perpendek kabel |
| NTC: suhu turun ketika menghangat | Arah pembagi tegangan tidak cocok dengan kode | Balik rumus hambatannya |
| BME280: “Could not find a valid BME280 sensor” | Alamat salah (0x76/0x77) atau chip-nya sebenarnya BMP280 | Ganti alamatnya, baca ID chip (0x60 / 0x58) |
| BME280 atau DHT: 1–3 °C terlalu tinggi | Pemanasan sendiri, ESP32 atau regulator di dekatnya | Jauhkan sensor dari board, baca lebih jarang, terapkan offset |
| MAX6675: nan | Termokopel tidak tersambung atau kawatnya putus | Cek terminal sekrup dan probe-nya |
| MAX6675: nilai turun ketika memanas | Polaritas termokopel terbalik | Tukar kabel + dan − |
| MLX90614: logam mengilap terbaca sangat dingin | Emisivitas rendah | Tempelkan selotip hitam doff atau atur emisivitasnya |
| MLX90614: benda kecil terukur salah | Bidang pandang lebih besar daripada bendanya | Dekatkan sensornya atau pakai versi bersudut sempit |
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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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

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.

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.

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

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

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
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

