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.
| Fitur | Nilai |
|---|---|
| Output | 10 mV/°C, 0 V pada 0 °C (250 mV pada 25 °C, 1000 mV pada 100 °C) |
| Tegangan catu | 4–30 V |
| Arus catu | Kurang dari 60 µA (tipikal 56 µA pada 5 V) |
| Pemanasan sendiri | Sekitar 0,08 °C di udara diam |
| Ketidaklinearan | Tipikal ±0,25 °C |
| Impedansi output | 0,1 Ω dengan beban 1 mA |
| Beban kapasitif | Sampai 50 pF tanpa tindakan tambahan |
| Kemasan | TO-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.
| Model | Rentang ukur | Akurasi terjamin pada 25 °C | Kasus 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.
Pengkabelan LM35 dengan Arduino: Uno, ESP32, dan Pico
| Pin LM35 | Arduino Uno | ESP32 | Raspberry Pi Pico |
|---|---|---|---|
| 1 · +Vs (kiri) | 5V | 5V / VIN (5 V dari USB) | VBUS, pin 40 (5 V dari USB) |
| 2 · Vout (tengah) | A0 | GPIO 34 (ADC1) | GP26 / ADC0, pin 31 |
| 3 · GND (kanan) | GND | GND | AGND pin 33 atau GND pin 38 |
| Kapasitor 0,1 µF | Antara +Vs dan GND, dekat sensor | Antara +Vs dan GND, dekat sensor | Antara +Vs dan GND, dekat sensor |
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 analogRead | Tegangan (referensi 5 V) | Suhu |
|---|---|---|
| 41 | 0,200 V | 20,0 °C |
| 51 | 0,249 V | 24,9 °C |
| 52 | 0,254 V | 25,4 °C |
| 61 | 0,298 V | 29,8 °C |
| 205 | 1,001 V | 100,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
- Tancapkan LM35 ke breadboard; dengan sisi datar menghadap ke arahmu, sambungkan kaki kiri ke 5V dan kaki kanan ke GND.
- Sambungkan kaki tengah (Vout) ke A0 dengan kabel jumper. Jika punya, tambahkan kapasitor 0,1 µF antara +Vs dan GND.
- Sambungkan Arduino lewat USB dan sentuh sensornya setelah beberapa detik: jika terasa seperti suhu ruangan, semuanya baik; jika panas, pengkabelannya terbalik.
- Upload kode di bawah dan buka Serial Monitor di 9600 baud.
- Jepit sensor di antara jarimu; kamu seharusnya melihat nilainya naik perlahan dan turun lagi ketika dilepas.
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.
| Referensi | Perintah | Satu langkah | Langkah suhu | Nilai tertinggi yang bisa diukur |
|---|---|---|---|---|
| 5 V (bawaan) | analogReference(DEFAULT) (bawaan) | 4,88 mV | 0,49 °C | 150 °C (batas sensor) |
| 3,3 V (disambung ke AREF) | analogReference(EXTERNAL) (referensi eksternal) | 3,22 mV | 0,32 °C | 150 °C (batas sensor) |
| 1,1 V internal | analogReference(INTERNAL) (referensi internal) | 1,07 mV | 0,11 °C | 110 °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:
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}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.
| Atenuasi | Rentang yang terukur akurat | Padanan LM35 |
|---|---|---|
| ADC_0db (atenuasi 0 dB) | 100–950 mV | 10–95 °C |
| ADC_2_5db (atenuasi 2,5 dB) | 100–1250 mV | 10–125 °C |
| ADC_6db (atenuasi 6 dB) | 150–1750 mV | 15–150 °C |
| ADC_11db (bawaan) | 150–2450 mV | 15–150 °C, resolusi paling kasar |
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}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.
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


| Fitur | LM35 (LM35DZ) | DS18B20 | DHT11 |
|---|---|---|---|
| Output | Analog, 10 mV/°C | Digital (1-Wire) | Digital (satu kabel) |
| Rentang ukur | 0 … +100 °C (LM35: −55 … +150 °C) | −55 … +125 °C | 0 … +50 °C |
| Akurasi | Tipikal ±0,6 °C, paling buruk ±1,5 °C pada 25 °C | ±0,5 °C (−10 … +85 °C) | ±2 °C |
| Catu daya | 4–30 V | 3,0–5,5 V | 3–5,5 V |
| Kelembapan | Tidak | Tidak | Ya |
| Library | Tidak perlu | Library OneWire + DallasTemperature | Library “DHT sensor library” |
| Waktu baca | Instan, output terus-menerus | Sampai 750 ms pada 12 bit | Paling banyak 1 pembacaan per detik |
| Dengan ESP32 dan Pico | Dengan catu 5 V; perhatikan batas ADC | Langsung di 3,3 V | Langsung di 3,3 V |
| Beberapa sensor di satu pin | Tidak, masing-masing satu pin analog | Ya | Tidak |
| Versi tahan air | Tidak, kamu harus menyegelnya sendiri | Probe baja tahan karat | Tidak |
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:
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
| Gejala | Kemungkinan penyebab | Solusi |
|---|---|---|
| Sensor terlalu panas untuk disentuh | +Vs dan GND tertukar | Segera putus dayanya; dengan sisi datar menghadap ke arahmu, urutannya harus +Vs, Vout, GND |
| Nilainya selalu 0 | Tidak ada daya yang sampai ke sensor, atau Vout tersambung ke pin yang berbeda dari kode | Ukur 5 V antara +Vs dan GND dengan multimeter dan pastikan Vout ke A0 |
| Nilai loncat-loncat secara acak | A0 mengambang atau kontak breadboard buruk | Ganti kabel jumper dan pindahkan sensor ke baris lain di breadboard |
| Nilainya bolak-balik dengan langkah 0,5 °C | Resolusi referensi 5 V | Pakai analogReference(INTERNAL) dan rata-ratakan |
| Nilainya melompat ketika relay atau motor bekerja | Tegangan jatuh dan noise di ground bersama | Tarik GND sensor langsung ke Arduino dan tambahkan kapasitor 0,1 µF |
| Terbaca 2–3 °C di atas suhu sebenarnya | Sensor berada di samping regulator atau modul ESP32 | Jauhkan sensor dari board dengan kabel |
| Sensor analog lain terbaca 1023 | Referensi INTERNAL membatasi semua input analog sampai 1,1 V | Baca sensor lain dengan referensi 5 V atau bagi tegangannya |
| Nilai tidak masuk akal di ESP32 ketika dingin | ADC ESP32 tidak bisa mengukur di bawah 100 mV dengan akurat | Pakai DS18B20 di bawah 10 °C |
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.
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 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

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.

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

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

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.

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

