Komponen · 13 mnt baca

Sensor Suhu LM35 dengan Arduino: Pengkabelan, Rumus, dan Kode

Pengkabelan dan pinout LM35 dengan Arduino, rumus analogRead ke °C, resolusi 0,1 °C dengan referensi 1,1 V, perata-rataan, kode ESP32 dan Pico, serta LM35 vs DS18B20.

LM35 adalah sensor suhu analog berkaki tiga yang murah dan langsung mengubah suhu menjadi tegangan dalam derajat Celsius. Memakai LM35 dengan Arduino tidak butuh library maupun protokol rumit: kamu menyambungkan kaki tengah ke pin analog, membacanya dengan analogRead(), lalu mendapat suhunya dengan rumus satu baris. Output-nya naik tepat 10 mV untuk setiap 1 °C, jadi memberi 250 mV pada 25 °C dan 1 V pada 100 °C.

Di panduan ini kamu akan mempelajari cara kerja LM35, pinout-nya dan kesalahan pengkabelan terbalik yang hampir semua orang pernah lakukan sekali, cara menghitung °C dari nilai analogRead, cara membuat pembacaanmu lebih dari empat kali lebih halus dengan referensi internal 1,1 V Arduino Uno, dan cara menenangkan nilai yang loncat-loncat dengan perata-rataan. Setelah itu kamu akan melihat apa yang perlu diperhatikan di ESP32 dan Raspberry Pi Pico yang bekerja di 3,3 V, cara mengukur suhu negatif, dan kapan sebaiknya memilih LM35 daripada DS18B20 atau DHT11.

Apa itu LM35 dan bagaimana cara kerjanya?

Di dalam LM35 ada dua transistor yang bekerja pada kerapatan arus berbeda. Selisih tegangan basis-emitor keduanya berubah sebanding langsung dengan suhu mutlak; teknik ini disebut delta-VBE. Penguat internal memperkuat selisih kecil ini dan menskalakannya agar output-nya 0 V pada 0 °C. Karena itu, berbeda dengan sensor berbasis Kelvin seperti LM335, kamu tidak perlu mengurangkan tegangan konstan yang besar dari output-nya: suhu (°C) = tegangan output (mV) / 10. Sensor ini dipangkas di tingkat wafer selama produksi, jadi tidak butuh kalibrasi tambahan dan kurva output-nya hampir lurus sempurna; ketidaklinearan tipikalnya hanya ±0,25 °C.

FiturNilai
Output10 mV/°C, 0 V pada 0 °C (250 mV pada 25 °C, 1000 mV pada 100 °C)
Tegangan catu4–30 V
Arus catuKurang dari 60 µA (tipikal 56 µA pada 5 V)
Pemanasan sendiriSekitar 0,08 °C di udara diam
KetidaklinearanTipikal ±0,25 °C
Impedansi output0,1 Ω dengan beban 1 mA
Beban kapasitifSampai 50 pF tanpa tindakan tambahan
KemasanTO-92 (paling umum), TO-220, SOIC-8, dan TO-46 logam

LM35 bukan satu komponen, melainkan satu keluarga. Huruf akhiran menentukan rentang ukur dan akurasi yang dijamin, sedangkan Z di akhir menandai kemasan plastik TO-92. Menurut datasheet, versi plastik TO-92 adalah LM35C, LM35CA, dan LM35D, dan kebanyakan komponen yang dijual sebagai “LM35” di toko hobi sebenarnya adalah LM35DZ. Jadi sensormu kemungkinan besar hanya dijamin untuk 0–100 °C dan bisa meleset sampai ±1,5 °C pada 25 °C, walaupun error tipikalnya sekitar ±0,6 °C. Baca tulisan di komponennya untuk mengetahui yang mana milikmu.

ModelRentang ukurAkurasi terjamin pada 25 °CKasus terburuk di batas rentang
LM35A−55 … +150 °C±0,5 °C±1 °C
LM35−55 … +150 °C±1 °C±1,5 °C
LM35CA−40 … +110 °C±0,5 °C±1,5 °C
LM35C−40 … +110 °C±1 °C±2 °C
LM35D (LM35DZ)0 … +100 °C±1,5 °C±2 °C

Pinout LM35 dan kesalahan pengkabelan terbalik yang paling umum

Dengan sisi datar LM35 menghadap ke arahmu dan kaki mengarah ke bawah, urutannya dari kiri ke kanan adalah: pin 1 +Vs (catu daya), pin 2 Vout (output), dan pin 3 GND (ground). Karena gambar di datasheet adalah tampak bawah, banyak orang membaliknya di kepala dan menyambungkannya terbalik. Pada modul LM35 yang dijual di board kecil, pin biasanya berlabel VCC (atau +), OUT (atau S), dan GND (atau −); dalam kasus itu, percayai label di board.

LM35 dan DS18B20 datang dalam kemasan TO-92 hitam yang sama dan hampir mustahil dibedakan, tapi pin dayanya terbalik: pada DS18B20, dengan sisi datar menghadap ke arahmu, pin kiri adalah GND dan pin kanan VDD. Jika kamu menukar +Vs dan GND pada LM35, arus besar mengalir lewat struktur dioda di dalam chip, sensor menjadi cukup panas untuk membakar jarimu dalam hitungan detik, dan pembacaannya tidak berarti. Sentuh sensornya ketika pertama kali kamu menyalakannya; jika mulai panas, segera putus dayanya. Sensor yang hanya sebentar terbalik biasanya selamat, tapi akurasinya bisa rusak; jika setelah itu pembacaannya tidak konsisten, ganti sensornya.

Pengkabelan LM35 dengan Arduino: Uno, ESP32, dan Pico

Pin LM35Arduino UnoESP32Raspberry Pi Pico
1 · +Vs (kiri)5V5V / VIN (5 V dari USB)VBUS, pin 40 (5 V dari USB)
2 · Vout (tengah)A0GPIO 34 (ADC1)GP26 / ADC0, pin 31
3 · GND (kanan)GNDGNDAGND pin 33 atau GND pin 38
Kapasitor 0,1 µFAntara +Vs dan GND, dekat sensorAntara +Vs dan GND, dekat sensorAntara +Vs dan GND, dekat sensor
Untuk lingkungan yang berisik, produsen menganjurkan kapasitor keramik 0,1 µF antara +Vs dan GND tepat di samping sensor; kapasitor ini bertanda “104”, dan kamu bisa memecahkan kodenya dengan alat Kode kapasitor. Output LM35 hanya bisa mengendalikan beban kapasitif paling banyak 50 pF tanpa masalah; kabel beberapa meter sudah melampaui itu dan output-nya bisa mulai berosilasi. Dengan kabel panjang, pasang resistor 2 kΩ seri dengan output, atau tambahkan peredam R-C 75 Ω + 1 µF secara seri antara output dan GND; kabel twisted-pair juga mengurangi interferensi secara nyata.

Dari analogRead ke °C: rumus LM35

Konverter analog ke digital (ADC) Arduino Uno punya 10 bit: ia membagi rentang antara 0 V dan tegangan referensi menjadi 1024 langkah dan memberimu angka dari 0 sampai 1023. Karena referensinya bawaan 5 V, setiap langkah adalah 5 / 1024 = 4,88 mV. Pertama kamu mengubah nilai mentah menjadi tegangan, lalu tegangan menjadi suhu: tegangan = raw × 5.0 / 1024 dan suhu = tegangan × 100. Jika digabung, suhu ≈ raw × 0,488. Beberapa contoh memakai 1023 sebagai ganti 1024; selisihnya satu per seribu dan bisa diabaikan dibanding error LM35 sendiri, tapi 1024 adalah nilai yang benar. Jika kamu ingin memahami ADC lebih rinci, lihat artikel tentang konversi analog ke digital (ADC).

Nilai analogReadTegangan (referensi 5 V)Suhu
410,200 V20,0 °C
510,249 V24,9 °C
520,254 V25,4 °C
610,298 V29,8 °C
2051,001 V100,1 °C

Perhatikan tabelnya baik-baik: pada suhu ruangan ADC hanya menghasilkan angka sekitar 50, dan perubahan satu langkah saja menggeser suhu sekitar 0,5 °C. Karena itulah pembacaanmu bolak-balik antara 24,9 dan 25,4; sensornya tidak rusak, itu memang resolusi referensi 5 V. Kita akan memperbaikinya sebentar lagi dengan referensi internal.

Pengukuran pertamamu, langkah demi langkah

  1. Tancapkan LM35 ke breadboard; dengan sisi datar menghadap ke arahmu, sambungkan kaki kiri ke 5V dan kaki kanan ke GND.
  2. Sambungkan kaki tengah (Vout) ke A0 dengan kabel jumper. Jika punya, tambahkan kapasitor 0,1 µF antara +Vs dan GND.
  3. Sambungkan Arduino lewat USB dan sentuh sensornya setelah beberapa detik: jika terasa seperti suhu ruangan, semuanya baik; jika panas, pengkabelannya terbalik.
  4. Upload kode di bawah dan buka Serial Monitor di 9600 baud.
  5. Jepit sensor di antara jarimu; kamu seharusnya melihat nilainya naik perlahan dan turun lagi ketika dilepas.
C++ (Arduino IDE)
1const int LM35_PIN = A0;   // LM35 orta bacak (Vout) / LM35 middle leg (Vout)
2
3void setup() {
4  Serial.begin(9600);
5}
6
7void loop() {
8  int raw = analogRead(LM35_PIN);          // 0–1023 ham değer / raw value 0–1023
9  float voltage = raw * 5.0 / 1024.0;      // 5 V referansla volta çevir / convert to volts (5 V reference)
10  float tempC = voltage * 100.0;           // 10 mV/°C: 0,25 V = 25 °C / 0.25 V = 25 °C
11
12  Serial.print(F("Ham / Raw: "));
13  Serial.print(raw);
14  Serial.print(F("  Gerilim / Voltage: "));
15  Serial.print(voltage, 3);
16  Serial.print(F(" V  Sicaklik / Temp: "));
17  Serial.print(tempC, 1);
18  Serial.println(F(" C"));
19  delay(1000);
20}

Setiap detik kode membaca nilai mentah di A0, mengubahnya dulu menjadi tegangan lalu menjadi suhu, dan mencetak ketiganya ke Serial Monitor. Mencetak nilai mentah sangat berguna ketika mencari bug: jika selalu 0, tidak ada tegangan yang datang dari Vout; jika mendekati 1023, pin analog tidak sengaja tersambung ke 5 V; jika loncat-loncat secara acak, A0 mengambang. Menulis string tetap di dalam makro F() menghemat RAM 2 KB milik Uno. Kamu akan menemukan lebih banyak tips Serial Monitor di artikel tentang Serial Monitor Arduino.

Menaikkan resolusi dengan referensi internal 1,1 V

Referensi 5 V punya dua masalah. Yang pertama adalah resolusi kasar yang baru kamu lihat. Yang kedua lebih licik: 5 V dari USB sering berada di mana saja antara 4,7 dan 5,1 V, dan karena kodemu menyebut 5.0, selisihnya langsung masuk ke suhu. Misalnya, jika board-mu sebenarnya bekerja di 4,8 V, kamu akan melihat 25 °C sebagai 26 °C, dan ketika port USB komputermu turun karena beban, suhunya seolah berubah sendiri. Solusinya adalah memakai referensi internal 1,1 V yang ada di ATmega328P pada Arduino Uno dan Nano. Setelah analogReference(INTERNAL), setiap langkah adalah 1,1 / 1024 = 1,07 mV, atau sekitar 0,11 °C. Sebagai gantinya kamu hanya bisa mengukur paling tinggi 1,1 V, yaitu 110 °C, yang memang sudah lebih dari cukup untuk rentang 0–100 °C LM35DZ.

ReferensiPerintahSatu langkahLangkah suhuNilai tertinggi yang bisa diukur
5 V (bawaan)analogReference(DEFAULT) (bawaan)4,88 mV0,49 °C150 °C (batas sensor)
3,3 V (disambung ke AREF)analogReference(EXTERNAL) (referensi eksternal)3,22 mV0,32 °C150 °C (batas sensor)
1,1 V internalanalogReference(INTERNAL) (referensi internal)1,07 mV0,11 °C110 °C

Referensi 1,1 V tidak tepat 1,1 V di setiap chip; menurut datasheet ATmega328P nilainya bisa di mana saja dari 1,0 sampai 1,2 V. Tanpa kalibrasi, itu berarti error skala sampai 9%. Solusinya mudah: upload kode di bawah, ukur tegangan antara pin AREF dan GND dengan multimeter, dan tulis nilainya ke konstanta VREF (mis. const float VREF = 1.083;). Kamu hanya perlu melakukannya sekali per board, dan hasilnya tetap berlaku. Kode ini juga merata-ratakan 32 sampel untuk setiap pembacaan:

C++ (Arduino IDE)
1const int LM35_PIN = A0;
2const float VREF = 1.1;     // AREF'te ölçtüğün değeri yaz (ör. 1.083) / write the voltage you measured on AREF (e.g. 1.083)
3const int SAMPLES = 32;     // ortalama için ölçüm sayısı / number of samples to average
4
5void setup() {
6  Serial.begin(9600);
7  analogReference(INTERNAL);        // Uno/Nano: 1,1 V dahili referans / 1.1 V internal reference
8  for (int i = 0; i < 5; i++) {     // referans değişti, ilk okumaları at / discard the first readings after switching
9    analogRead(LM35_PIN);
10    delay(10);
11  }
12}
13
14float readTempC() {
15  long sum = 0;
16  for (int i = 0; i < SAMPLES; i++) {
17    sum += analogRead(LM35_PIN);
18    delay(2);
19  }
20  float raw = sum / (float)SAMPLES;       // ortalama ham değer / average raw value
21  return raw * VREF / 1024.0 * 100.0;     // her basamak ~0,107 °C / each step is ~0.107 °C
22}
23
24void loop() {
25  float t = readTempC();
26  Serial.print(F("Sicaklik / Temp: "));
27  Serial.print(t, 2);
28  Serial.println(F(" C"));
29  if (t > 108.0) {
30    Serial.println(F("Uyari: 1,1 V sinirina yakin / Warning: close to the 1.1 V limit"));
31  }
32  delay(1000);
33}
analogReference(INTERNAL) memengaruhi semua input analog di board: jika di proyek yang sama kamu juga membaca potensiometer atau LDR, apa pun di atas 1,1 V akan terbaca 1023. Jangan pernah memberi tegangan eksternal ke pin AREF selama referensi internal dipilih; jika kamu ingin menyambungkan 3,3 V ke AREF, kamu harus memanggil analogReference(EXTERNAL) sebelum analogRead pertama, kalau tidak referensi internal dan sumber eksternal terhubung singkat dan mikrokontroler bisa rusak. Di Arduino Mega opsi ini bernama INTERNAL1V1; di Leonardo dan Micro, INTERNAL memberi 2,56 V, dan di Uno R4 analogReference(AR_INTERNAL) adalah 1,5 V.

Perata-rataan dan mengurangi noise

Satu analogRead bisa bergoyang satu atau dua langkah karena noise di kabel dan riak di catu daya. Solusi paling sederhana dan efektif adalah merata-ratakan beberapa pembacaan: noise acak turun sebanding akar kuadrat jumlah sampel, jadi rata-rata 16 pembacaan memangkas noise menjadi seperempat dan 64 pembacaan menjadi seperdelapan. Suhu berubah perlahan, jadi puluhan pembacaan yang diambil dalam beberapa milidetik tidak merugikan apa pun. Untuk kurva yang lebih halus lagi, pakai filter eksponensial: filtered = filtered + 0.1 × (new − filtered). Filter ini hanya memperhitungkan 10 persen dari setiap pembacaan baru dan hanya menyimpan satu variabel di memori. Kami membandingkan metode lain, seperti moving average dan median, di artikel tentang menyaring data sensor.

  • Buang pembacaan pertama setelah berganti kanal: jika kamu membaca beberapa sensor analog, kapasitor sampling ADC sesaat masih menahan tegangan kanal sebelumnya; baca pin yang sama dua kali dan abaikan hasil pertama.
  • Tarik GND sensor langsung ke pin GND Arduino: jika arus relay, motor, atau LED strip mengalir lewat kabel ground yang sama, muncul pergeseran beberapa milivolt, dan pada LM35 setiap 10 mV sama dengan satu derajat.
  • Buat kabel pendek dan jauh dari kabel daya: kabel panjang tanpa pelindung bertindak seperti antena; pakai kabel terpilin atau berpelindung jika perlu.
  • Jauhkan sensor dari sumber panas: LM35 yang tepat di samping regulator tegangan, modul ESP32, atau relay mengukur suhu board, bukan suhu ruangan.
  • Kalibrasi offset sekali saja: letakkan LM35 di samping termometer yang andal dan kurangkan selisih tetapnya di kodemu.

LM35 dengan ESP32: catu daya 3,3 V dan linearitas ADC

ESP32 bekerja di 3,3 V, tapi datasheet LM35 mensyaratkan catu daya minimal 4 V. LM35 yang diberi daya 3,3 V mungkin terlihat bekerja pada suhu ruangan, tapi akurasinya tidak dijamin. Cara yang benar adalah memberi daya sensor dari pin 5V board (VIN di beberapa board), yaitu 5 V dari USB. Ini tidak akan merusak ESP32, karena bahkan pada suhu terpanasnya (150 °C) output LM35 tidak pernah melebihi 1,5 V. Selalu sambungkan output ke pin ADC1 (GPIO 32–39), karena pin ADC2 tidak bisa dipakai ketika Wi-Fi menyala. Untuk peta pin board-mu yang rinci, lihat alat Pinout, dan jika kamu baru mengenal ESP32, baca Apa Itu ESP32.

Masalah kedua adalah linearitas ADC ESP32. ADC-nya 12 bit (0–4095) tapi tidak linear di ujung-ujungnya: ia nyaris tidak bisa membedakan tegangan di bawah 100 mV, dan simpangannya berbeda dari board ke board. Karena LM35 hanya mengeluarkan 200–300 mV pada suhu ruangan, ini langsung berpengaruh. Solusinya dua langkah: pilih atenuasi yang cocok dengan rentang tegangan LM35, dan alih-alih nilai mentah pakai analogReadMilliVolts(), yang menerapkan data kalibrasi yang ditulis ke chip selama produksi. Karena fungsi ini langsung mengembalikan milivolt, kamu cukup membagi hasilnya dengan 10 untuk mendapat suhunya.

AtenuasiRentang yang terukur akuratPadanan LM35
ADC_0db (atenuasi 0 dB)100–950 mV10–95 °C
ADC_2_5db (atenuasi 2,5 dB)100–1250 mV10–125 °C
ADC_6db (atenuasi 6 dB)150–1750 mV15–150 °C
ADC_11db (bawaan)150–2450 mV15–150 °C, resolusi paling kasar
C++ (Arduino IDE)
1const int LM35_PIN = 34;     // ADC1_CH6, Wi-Fi açıkken de çalışır / works while Wi-Fi is on
2const int SAMPLES = 64;      // ortalama için ölçüm sayısı / number of samples to average
3
4void setup() {
5  Serial.begin(115200);
6  analogReadResolution(12);                       // 0–4095
7  analogSetPinAttenuation(LM35_PIN, ADC_2_5db);   // ~100–1250 mV, yani 10–125 °C / i.e. 10–125 °C
8}
9
10void loop() {
11  uint32_t sum = 0;
12  for (int i = 0; i < SAMPLES; i++) {
13    sum += analogReadMilliVolts(LM35_PIN);        // kalibre edilmiş mV / calibrated millivolts
14    delay(1);
15  }
16  float mv = sum / (float)SAMPLES;
17  float tempC = mv / 10.0;                        // 10 mV = 1 °C
18  Serial.printf("Gerilim / Voltage: %.1f mV  Sicaklik / Temp: %.2f C\n", mv, tempC);
19  delay(1000);
20}
Karena ESP32 tidak bisa mengukur dengan andal di bawah 100 mV apa pun atenuasi yang kamu pilih, pembacaan LM35 di bawah 10 °C di ESP32 salah. Untuk ruangan dingin, luar ruangan, atau kulkas, pakai DS18B20. Jika kamu menginginkan sensor analog di rangkaian yang hanya punya 3,3 V, TMP36 adalah alternatif yang bagus: sensor ini bekerja di 2,7–5,5 V dan mengeluarkan 500 mV pada 0 °C. Pinout-nya sama dengan LM35, dan rumusnya suhu = (mV − 500) / 10.

LM35 dengan Raspberry Pi Pico dan MicroPython

ADC 12 bit Pico ada di pin GP26, GP27, dan GP28; sebagai referensinya dipakai ADC_VREF, versi tersaring dari jalur 3,3 V. Di MicroPython, read_u16() menskalakan hasilnya ke 0–65535, jadi tegangan = raw × 3.3 / 65535. Resolusi teoretisnya 0,8 mV, atau sekitar 0,08 °C, tapi dalam praktiknya ADC Pico agak berisik dan menunjukkan lompatan kecil di nilai-nilai tertentu, jadi perata-rataan di sini juga wajib. Beri daya LM35 dari VBUS (pin 40), yang membawa 5 V dari USB; jika kamu menjalankan Pico dari baterai alih-alih USB, pastikan tegangan di VSYS di atas 4 V dan beri daya sensor dari sana. Jika ini pertama kalinya kamu memakai Pico, kamu akan menemukan instalasi MicroPython di Apa Itu Raspberry Pi Pico.

MicroPython
1from machine import ADC, Pin
2import time
3
4# Pin(23, Pin.OUT, value=1)  # yalnız Pico (W değil): regülatör PWM modu, daha az gürültü / Pico (not W) only: SMPS PWM mode, less noise
5lm35 = ADC(26)               # GP26 = ADC0, fiziksel pin 31 / physical pin 31
6VREF = 3.3                   # ADC_VREF'i multimetreyle ölçüp yaz / measure ADC_VREF with a multimeter
7SAMPLES = 64                 # ortalama için ölçüm sayısı / number of samples to average
8
9
10def read_temp_c():
11    total = 0
12    for _ in range(SAMPLES):
13        total += lm35.read_u16()   # 0–65535, 12 bit sonuç 16 bite ölçeklenir / 12-bit result scaled to 16 bits
14    raw = total / SAMPLES
15    volts = raw * VREF / 65535
16    return volts * 100             # 10 mV/°C
17
18
19while True:
20    t = read_temp_c()
21    print("Sicaklik / Temp: {:.2f} C".format(t))
22    time.sleep(1)

Chip Pico juga punya sensor suhu (ADC(4)), tapi sensor itu mengukur suhu chip sendiri, bukan ruangan, dan biasanya terbaca beberapa derajat lebih tinggi selama bekerja; untuk suhu ruangan kamu butuh sensor eksternal seperti LM35. Untuk hasil yang lebih bersih di Pico standar, kamu bisa mengatur GP23 menjadi HIGH agar regulator daya board masuk ke mode PWM; ini mengurangi riak di ADC_VREF tapi memakai arus sedikit lebih banyak ketika diam. Di Pico W pin ini dicadangkan untuk chip nirkabel, karena itu baris tersebut dibiarkan sebagai komentar di kode.

Mengukur suhu negatif dengan LM35

Pada rangkaian dasar, LM35 hanya mengukur dari 2 °C sampai 150 °C, karena tahap output-nya bisa mengeluarkan arus tapi hampir tidak bisa menyerapnya, sehingga output tidak bisa turun di bawah ground. Untuk suhu negatif, datasheet menunjukkan dua pilihan. Yang pertama adalah menyambungkan output ke catu daya negatif lewat resistor (R = Vs / 50 µA; 100 kΩ untuk −5 V), yang jarang dipakai di proyek Arduino karena tidak ada catu daya negatif. Yang kedua adalah metode catu tunggal: kamu menaikkan pin GND LM35 sekitar 1 V di atas ground dengan dua dioda seri (mis. 1N4148), menyambungkan resistor 18 kΩ antara output dan ground, lalu membaca output di A0 dan pin GND LM35 di A1. Suhunya adalah (tegangan A0 − tegangan A1) × 100. Agar tetap ada minimal 4 V di pin LM35 sendiri pada rangkaian ini, beri daya +Vs dari VIN (mis. adaptor 9 V) alih-alih 5 V dan pakai referensi 5 V. Ingat bahwa LM35DZ yang umum tidak dijamin di bawah 0 °C; jika kamu sering butuh pembacaan negatif, DS18B20 jauh lebih tidak merepotkan.

LM35 vs DS18B20 vs DHT11

Sensor suhu DS18B20
Sensor suhu DS18B20
Sensor suhu dan kelembapan DHT11
Sensor suhu dan kelembapan DHT11
FiturLM35 (LM35DZ)DS18B20DHT11
OutputAnalog, 10 mV/°CDigital (1-Wire)Digital (satu kabel)
Rentang ukur0 … +100 °C (LM35: −55 … +150 °C)−55 … +125 °C0 … +50 °C
AkurasiTipikal ±0,6 °C, paling buruk ±1,5 °C pada 25 °C±0,5 °C (−10 … +85 °C)±2 °C
Catu daya4–30 V3,0–5,5 V3–5,5 V
KelembapanTidakTidakYa
LibraryTidak perluLibrary OneWire + DallasTemperatureLibrary “DHT sensor library”
Waktu bacaInstan, output terus-menerusSampai 750 ms pada 12 bitPaling banyak 1 pembacaan per detik
Dengan ESP32 dan PicoDengan catu 5 V; perhatikan batas ADCLangsung di 3,3 VLangsung di 3,3 V
Beberapa sensor di satu pinTidak, masing-masing satu pin analogYaTidak
Versi tahan airTidak, kamu harus menyegelnya sendiriProbe baja tahan karatTidak

Singkatnya: jika kamu menginginkan termometer sederhana yang bereaksi cepat, tidak butuh library, memakai satu pin analog, dan bekerja di Arduino 5 V, LM35 ideal; sensor ini juga paling mendidik untuk mempelajari pembacaan analog dan referensi ADC. Jika kabelnya panjang, jika kamu butuh suhu negatif, jika sensornya masuk ke cairan, atau jika kamu bekerja dengan board 3,3 V seperti ESP32 dan Pico, DS18B20 adalah pilihan yang lebih baik. Jika kamu juga menginginkan kelembapan, pakai DHT11 atau saudaranya yang lebih akurat, DHT22. Untuk perbandingan yang lebih luas yang juga mencakup termistor NTC, BME280, dan lainnya, lihat perbandingan sensor suhu Arduino.

Ide proyek LM35

Proyek LM35 yang paling populer adalah termostat yang menyalakan kipas ketika suhu melewati nilai tertentu. Kuncinya adalah histeresis: jika kipas menyala di 30 °C dan mati di 28 °C, relay tidak akan klik menyala-mati setiap detik ketika suhu berada tepat di ambang, dan kontaknya tidak cepat aus. Kamu bisa mengendalikan kipas dengan modul relay yang tersambung ke D7:

C++ (Arduino IDE)
1const int LM35_PIN = A0;
2const int RELAY_PIN = 7;          // röle modülünün IN pini / relay module IN pin
3const float ON_TEMP = 30.0;       // bu değerde fan açılır / fan turns on here
4const float OFF_TEMP = 28.0;      // bu değerde fan kapanır / fan turns off here
5const float VREF = 1.1;           // ölçtüğün AREF değeri / your measured AREF value
6bool fanOn = false;
7
8float readTempC() {
9  long sum = 0;
10  for (int i = 0; i < 32; i++) {
11    sum += analogRead(LM35_PIN);
12  }
13  return (sum / 32.0) * VREF / 1024.0 * 100.0;
14}
15
16void setup() {
17  Serial.begin(9600);
18  pinMode(RELAY_PIN, OUTPUT);
19  digitalWrite(RELAY_PIN, LOW);
20  analogReference(INTERNAL);      // 1,1 V referans / 1.1 V reference
21  analogRead(LM35_PIN);           // ilk okumayı at / discard the first reading
22  delay(10);
23}
24
25void loop() {
26  float t = readTempC();
27  if (!fanOn && t >= ON_TEMP) fanOn = true;      // eşik aşıldı / threshold exceeded
28  if (fanOn && t <= OFF_TEMP) fanOn = false;     // yeterince soğudu / cooled down enough
29  digitalWrite(RELAY_PIN, fanOn ? HIGH : LOW);   // aktif-HIGH röle varsayıldı / assumes an active-HIGH relay
30  Serial.print(t, 1);
31  Serial.println(fanOn ? " C  fan ON" : " C  fan OFF");
32  delay(1000);
33}
  • Termostat kipas yang bisa diatur: gabungkan kode di atas dengan kipas DC dan relay, lalu naikkan atau turunkan ambangnya dengan dua tombol.
  • Termometer digital dengan LCD: tampilkan suhu di LCD I2C atau layar OLED beserta suhu minimum dan maksimum hari itu.
  • Alarm panas berlebih: bunyikan buzzer dan nyalakan LED ketika catu daya, pengisi baterai, atau motor printer 3D menjadi terlalu panas.
  • Termometer ruangan Wi-Fi: tampilkan suhu yang diukur ESP32 di halaman web yang kamu buka di ponselmu.
  • Kendali rumah kaca dan inkubator: buat sistem yang mengatur pemanas dan kipas berdasarkan suhu; detailnya di artikel proyek rumah kaca pintar.
  • Pencatat suhu: tulis satu pembacaan ke kartu SD setiap menit dan gambar kurva suhu harian di Excel.

Kesalahan umum dan cara memperbaikinya

GejalaKemungkinan penyebabSolusi
Sensor terlalu panas untuk disentuh+Vs dan GND tertukarSegera putus dayanya; dengan sisi datar menghadap ke arahmu, urutannya harus +Vs, Vout, GND
Nilainya selalu 0Tidak ada daya yang sampai ke sensor, atau Vout tersambung ke pin yang berbeda dari kodeUkur 5 V antara +Vs dan GND dengan multimeter dan pastikan Vout ke A0
Nilai loncat-loncat secara acakA0 mengambang atau kontak breadboard burukGanti kabel jumper dan pindahkan sensor ke baris lain di breadboard
Nilainya bolak-balik dengan langkah 0,5 °CResolusi referensi 5 VPakai analogReference(INTERNAL) dan rata-ratakan
Nilainya melompat ketika relay atau motor bekerjaTegangan jatuh dan noise di ground bersamaTarik GND sensor langsung ke Arduino dan tambahkan kapasitor 0,1 µF
Terbaca 2–3 °C di atas suhu sebenarnyaSensor berada di samping regulator atau modul ESP32Jauhkan sensor dari board dengan kabel
Sensor analog lain terbaca 1023Referensi INTERNAL membatasi semua input analog sampai 1,1 VBaca sensor lain dengan referensi 5 V atau bagi tegangannya
Nilai tidak masuk akal di ESP32 ketika dinginADC ESP32 tidak bisa mengukur di bawah 100 mV dengan akuratPakai DS18B20 di bawah 10 °C
Cara mudah mengecek akurasi LM35-mu adalah meletakkannya di samping termometer yang andal selama beberapa menit; jika selisihnya tetap (mis. selalu 0,8 °C lebih tinggi), kurangkan sebagai offset di kodemu. Jika kamu mengukur permukaan, tempelkan sensor dan kakinya ke permukaan itu dengan sedikit epoksi; menurut produsen, LM35 lalu mengikuti suhu permukaan dengan sangat dekat. Jika sensornya masuk ke cairan, selalu isolasi kakinya, karena arus bocor di antara kaki yang basah membuat pembacaan bergeser.

LM35 adalah komponen pemula yang sempurna untuk mempelajari pembacaan sensor analog, referensi ADC, dan penyaringan sinyal: kamu mulai dengan satu rumus, lalu memakai referensi yang tepat, perata-rataan, dan kalibrasi agar pengukuranmu bisa dipercaya seperti termometer. Kamu akan memakai pendekatan yang sama dengan sensor analog lain seperti termistor NTC. Di aplikasi BlueGrays kamu akan menemukan proyek seperti pengukuran suhu dengan NTC dan LCD, suhu dan kelembapan dengan DHT11, stasiun suhu ESP32 dengan LCD, dan pencatat suhu, masing-masing dengan skema rangkaian langkah demi langkah dan kode siap pakai.

Pertanyaan umum

Berapa tegangan yang dibutuhkan LM35, dan bisakah bekerja di 3,3 V?

Datasheet LM35 menyebut catu daya 4–30 V. Di 3,3 V sensor ini biasanya masih memberi pembacaan pada suhu ruangan, tapi akurasinya tidak dijamin. Di ESP32 dan Pico, beri daya sensor dari pin 5 V (VIN atau VBUS); output-nya tidak pernah melebihi 1,5 V, jadi bisa langsung ke input analog 3,3 V.

Kenapa LM35-ku jadi panas?

Dalam pemakaian normal LM35 hanya menarik sekitar 60 µA dan memanaskan dirinya kurang dari 0,1 °C; jika terasa panas, hampir pasti pin catu daya dan GND-nya terbalik. Dengan sisi datar menghadap ke arahmu, urutan yang benar dari kiri ke kanan adalah +Vs, Vout, GND. Segera putus dayanya; sensor yang lama dibiarkan terbalik bisa rusak permanen.

Apa rumus suhu LM35?

Di Arduino Uno dengan referensi 5 V, suhu (°C) = analogRead × 5.0 / 1024 × 100, atau kira-kira analogRead × 0.488. Dengan referensi internal 1,1 V faktornya menjadi 1.1 / 1024 × 100 ≈ 0.107. Di ESP32, cukup bagi hasil analogReadMilliVolts() dengan 10.

Bisakah LM35 mengukur suhu negatif?

Pada rangkaian dasar LM35 hanya mengukur dari 2 °C sampai 150 °C. Untuk nilai negatif kamu perlu menarik output ke catu daya negatif lewat resistor, atau menaikkan pin GND dengan dua dioda dan mengukur selisihnya dengan dua input analog; sensornya juga harus versi yang dirating di bawah nol, seperti LM35 atau LM35C. Dalam praktiknya, DS18B20 jauh lebih mudah untuk suhu di bawah nol.

Mana yang lebih baik, LM35 atau DS18B20?

Di proyek Arduino 5 V dengan kabel pendek, LM35 sangat praktis karena tidak butuh library dan langsung terbaca. Untuk kabel panjang, suhu negatif, pengukuran di cairan, beberapa sensor di satu pin, atau board 3,3 V, DS18B20 yang digital memberi hasil yang lebih akurat dan andal. Pada suhu ruangan LM35A dan DS18B20 sama akuratnya, sedangkan LM35DZ yang umum sedikit tertinggal.

Kenapa pembacaan LM35-ku terus berubah?

Dengan referensi 5 V setiap langkah ADC sama dengan sekitar 0,5 °C, jadi nilainya bolak-balik di antara dua langkah, dan riak di tegangan USB juga memengaruhi hasilnya. Beralihlah ke referensi 1,1 V dengan analogReference(INTERNAL), rata-ratakan 16–64 pembacaan, dan tambahkan kapasitor 0,1 µF di pin catu daya sensor. Jika ada relay atau motor, tarik GND sensor langsung ke Arduino.

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 Intensitas Cahaya dengan LDR
#11Pemula

Mengukur Intensitas Cahaya dengan LDR

Ingin melihat seberapa terang kamarmu dalam bentuk angka? LDR, komponen kecil yang bereaksi terhadap cahaya, mengukur cahaya di sekitarnya, dan Arduino menulis nilainya ke layar komputermu setiap sete

4.6(81)
139
Membaca Intensitas Cahaya dengan Modul LDR ESP32
#113Pemula

Membaca Intensitas Cahaya dengan Modul LDR ESP32

Memantau secara real-time di Serial Monitor nilai ADC mentah modul LDR dan persentase cahaya relatif yang dihitung dari nilai acuan gelap dan terang. Persentase ini bukan pengukuran lux. Mengajarkan logika kalibrasi modul. Ideal dikerjakan sebelum Proyek 10, karena dipakai untuk menentukan nilai ambang.

4.6(36)
55
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
Voltmeter Digital dengan Layar LCD
#56Menengah
Premium

Voltmeter Digital dengan Layar LCD

Cari tahu berapa tegangan yang diberikan baterai atau adaptor daya dengan alat ukur buatanmu sendiri. Pembagi dari dua resistor menurunkan tegangan tinggi ke tingkat yang bisa dibaca board, dan Arduin

4.5(27)
36
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
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