Lampu automatik yang menyala waktu senja dibina daripada satu LDR dan satu perintang tetap yang membentuk pembahagi voltan pada pin A0 Arduino: analogRead membaca titik tengah pembahagi itu, dan dua ambang dalam kod β satu untuk nyala, satu untuk padam β menghalang lampu daripada berkelip-kelip tepat waktu senja. LDR tidak menghasilkan voltan; ia hanya menukar rintangan, dan perintang tetap itulah yang menterjemahkannya kepada voltan yang boleh dibaca.
Apa yang anda perlukan untuk lampu automatik sensor cahaya?
Bahagian penting binaan ini ialah LDR (light dependent resistor) β cakera bermuka merah jambu pucat dengan corak elektrod perak berbelit-belit, dua kaki wayar lurus, tiada PCB dan tiada polariti. Saiz cakera boleh berbeza antara batch, dan itu tidak mengubah apa-apa di sini kerana anda tidak menyalin nilai rintangan sesiapa β anda mengukur unit anda sendiri pada Serial Monitor dan menetapkan ambang daripada nombor itu. Selebihnya memberinya otak, lampu, dan satu perintang yang menjadikan bacaannya bermakna.
Senarai komponen β lampu automatik sensor cahaya LDR dengan Arduino Uno
Pilihan β jalan pintas modul, naik taraf relay, kabel dan kit perintang
Modul sensor cahaya ialah jalan pintas siap-pasang: ambangnya diset dengan trimmer di atas papan, bukan dalam kod. Modul relay 5V pula untuk menaik taraf LED mini kepada lampu DC 12V sebenar. Kabel USB A-ke-B ialah bentuk yang diterima soket segi empat pada Uno β tambah satu kalau laci anda belum ada. Kit permulaan elektrik mengandungi jalur perintang β jalur bertanda 220 dan 100K kelihatan pada gambar, iaitu tepat dua nilai yang binaan ini perlukan β bersama LED, jumper dan breadboard 830 lubang, berguna kalau pek perintang sedang habis.
Dua nilai perintang diperlukan: 100 kΞ© untuk pembahagi voltan, dan 220 Ξ© untuk menghadkan arus LED. (10 kΞ© juga berfungsi; bahagian seterusnya menunjukkan sebab 100 kΞ© memberi bacaan senja yang jauh lebih lapang.) Semuanya nilai biasa dalam pek perintang 1/4 W, dalam laci komponen anda, atau pada jalur bertanda dalam kit permulaan elektrik. LED putih 5 mm berkubah jernih ialah “lampu jalan” kita; untuk penunjuk status kecil di sebelahnya, LED merah 3 mm cukup.
Satu perkara perlu jelas dari awal: litar ini bertindak balas kepada aras cahaya, bukan kepada orang. Nak lampu yang menyala apabila ada orang lalu? Itu kerja sensor pergerakan β baca panduan sensor pergerakan HC-SR501. Kedua-duanya sering digabungkan: PIR memutuskan “ada orang”, LDR memutuskan “hari sudah gelap”.
Kenapa LDR mesti guna pembahagi voltan?
LDR ialah kepingan bahan fotokonduktif: foton yang mengenai mukanya melepaskan pembawa cas, jadi lebih banyak cahaya bermakna lebih banyak laluan untuk arus, dan rintangan pun jatuh. Di bawah cahaya bilik yang terang, LDR jenis ini berada pada beberapa kΞ© sahaja; dalam gelap ia memanjat ke ratusan kΞ© sehingga menghampiri 1 MΞ©. Itu julat yang besar β tetapi ia julat rintangan.
Masalahnya, pin analog Arduino tidak boleh mengukur rintangan. analogRead ialah pengukur voltan: ia menimbang voltan pada pin terhadap rujukan 5 V dan memulangkan nombor 0 hingga 1023, satu langkah setiap ~4.9 mV. Tiada punca arus di dalam cip yang boleh “menyoal” sesuatu rintangan. Jadi kalau LDR disambung dari 5 V terus ke A0 dan tiada apa-apa lagi, hampir tiada arus mengalir menerusinya β arus bocor pin ATmega328P hanya 1 Β΅A maksimum, mengikut lembaran datanya β jadi hampir tiada susut voltan merentasi LDR, A0 sekadar duduk hampir 5 V dan bacaan tersangkut hampir 1023 sama ada tengah hari atau tengah malam. Sambungkannya ke GND sahaja pula dan anda dapat bayangan cerminnya: arus bocor yang sama terlalu kecil untuk mengangkat voltan merentasi LDR, jadi pin ditarik rapat ke 0 V dan bacaan tersangkut di hujung bawah skala. Dua-dua cara, rintangan LDR tidak pernah menjadi nombor.
Pembahagi voltan menyelesaikannya dengan satu perintang tetap. Sambung LDR dari 5 V ke satu titik, dan satu perintang tetap β ambil 10 kΞ© sebagai contoh dahulu β dari titik yang sama ke GND: sekarang satu arus kecil mengalir menerusi kedua-duanya, dan voltan di titik tengah ialah 5 V × 10 kΞ© ÷ (RLDR + 10 kΞ©). Rintangan LDR yang turun-naik kini menolak voltan itu naik-turun, dan itulah yang dibaca oleh ADC. Ada satu bonus percuma di sini: rel 5 V yang sama membekalkan pembahagi dan menjadi rujukan ADC, jadi kalau rel itu merosot sedikit β USB laptop berbanding pengecas dinding β kedua-dua belah nisbah merosot serentak dan bacaan hampir tidak berubah. Ambang yang anda kalibrasi kekal sah walaupun bertukar bekalan.
| Rintangan LDR | Keadaan lebih kurang | Voltan A0 (perintang 10 kΞ©) | analogRead |
analogRead jika 100 kΞ© |
|---|---|---|---|---|
| 5 kΞ© | siang terang | 3.33 V | 682 | 974 |
| 20 kΞ© | bilik bercahaya | 1.67 V | 341 | 852 |
| 50 kΞ© | senja awal | 0.83 V | 170 | 682 |
| 100 kΞ© | senja | 0.45 V | 93 | 512 |
| 300 kΞ© | lepas maghrib | 0.16 V | 33 | 256 |
| 1 MΞ© | gelap | 0.05 V | 10 | 93 |
Dua lajur terakhir menjawab soalan “nilai mana patut saya guna”. Pembahagi voltan paling sensitif apabila perintang tetap hampir sama dengan rintangan LDR pada aras cahaya yang anda mahu bezakan. Dengan 10 kΞ©, jurang senja 50 kΞ©β300 kΞ© hanya merentangi 170 hingga 33 β 137 langkah. Dengan 100 kΞ©, jurang cahaya yang sama merentangi 682 hingga 256, iaitu 426 langkah, tiga kali lebih lapang untuk meletakkan ambang. Sebabnya kelihatan dalam formula: apabila perintang tetap jauh lebih kecil daripada LDR, hampir keseluruhan 5 V jatuh merentasi LDR dan titik tengah tersepit rapat ke 0 V, jadi perubahan rintangan yang besar pun hanya menggerakkan bacaan beberapa langkah. Kedua-dua nilai berfungsi, tetapi binaan dalam panduan ini menggunakan 100 kΞ©, kerana ruang paling lapang itu jatuh tepat pada aras cahaya yang menjadi keputusan.

Bagaimana menyambung LDR, LED dan Arduino Uno?
Semua komponen binaan ini duduk di atas breadboard 400 lubang, dan jumper male-to-male membawa setiap baris ke soket female pada Uno. Bekalkan rel dahulu: satu jumper dari soket 5V Uno ke jalur merah breadboard, satu dari GND ke jalur biru. Selepas itu setiap sambungan 5 V dan GND diambil dari rel, bukan berebut satu soket pada board.
| Sambungan | Ke | Kenapa |
|---|---|---|
Uno 5V |
jalur merah breadboard | Bekalan untuk pembahagi voltan |
Uno GND |
jalur biru breadboard | Rujukan sifar untuk ADC dan untuk LED |
| LDR kaki pertama | jalur merah | LDR tiada polariti β mana-mana kaki boleh |
| LDR kaki kedua | lajur kosong (panggil lajur A) | Titik tengah pembahagi voltan |
| Perintang 100 kΞ© | lajur A β jalur biru | Kaki bawah pembahagi; tanpa ini A0 tersangkut hampir 5 V |
| Jumper | lajur A β Uno A0 |
ADC membaca voltan titik tengah |
Uno D9 |
satu kaki perintang 220 Ξ© | Pin output yang menghidupkan lampu |
| Perintang 220 Ξ© kaki kedua | kaki panjang LED (anod) | Menghadkan arus LED |
| LED kaki pendek (katod) | jalur biru | Melengkapkan litar LED ke GND |
Urutan dua komponen itu penting walaupun LDR sendiri tiada polariti: LDR di sebelah 5 V dan perintang tetap di sebelah GND bermakna bacaan naik apabila terang. Tukar tempat kedua-duanya dan pembahagi masih berfungsi, cuma bacaan menjadi songsang β nombor besar bermakna gelap β dan dua ambang dalam sketch di bawah akan bertindak terbalik. Kalau lampu anda menyala waktu siang dan padam waktu malam, periksa urutan ini dahulu sebelum mengusik mana-mana nombor.
Perintang 220 Ξ© itu bukan hiasan. LED putih jatuh voltan kira-kira 3.1 V, jadi 220 Ξ© membawa lebihan 1.9 V dan menetapkan arus pada lebih kurang 9 mA β selesa di bawah had 20 mA setiap pin ATmega328P. Sambung LED terus ke pin tanpa perintang dan yang menghadkan arus hanyalah rintangan dalaman pin itu sendiri, yang merosakkan LED, pin, atau kedua-duanya.
Satu keputusan pemasangan yang mudah terlepas pandang: halakan LDR jauh daripada LED. Kalau LDR dapat melihat lampunya sendiri, lampu yang menyala akan menaikkan bacaan cahaya, dan litar anda baru saja membina gelung maklum balas yang memadamkan lampu itu semula.
Satu perkara lagi sebelum ia menjadi lampu sebenar: litar ini perlu hidup sepanjang malam, bukan hanya semasa laptop anda terbuka. Uno menerima kuasa daripada mana-mana pengecas telefon USB melalui kabel yang sama, atau daripada bekalan DC 7β12 V melalui bicu bulat hitam di tepi board. Kerana keadaan lampu ditentukan semata-mata oleh bacaan cahaya semasa, tiada apa-apa yang perlu diset semula setiap kali kuasa terputus dan masuk balik.
Susunan fizikal LDR dan perintang di atas breadboard, kalau anda mahu melihatnya dahulu:
Bagaimana kalibrasi ambang, dan kenapa perlu dua nombor?
Nombor ambang bergantung pada perintang yang anda pilih, unit LDR anda, dan cahaya di tempat lampu itu akan dipasang. Muat naik sketch di bawah, buka Serial Monitor pada 9600 baud, letakkan litar di tempat sebenarnya, dan tengok nombor yang keluar pada waktu anda mahu lampu bertukar. Itulah ambang anda.
Sekarang bahagian yang membezakan lampu automatik senja yang kemas daripada lampu yang menyusahkan. Kalau anda guna satu ambang sahaja, cahaya senja yang turun perlahan akan duduk berdekatan nombor itu selama berpuluh minit. Riak beberapa langkah daripada noise ADC, awan yang lalu, atau lampu jiran sudah cukup untuk melintasinya berulang kali, dan lampu anda berkelip.
Dua ambang menyelesaikannya. Lampu menyala apabila bacaan jatuh bawah AMBANG_ON, tetapi hanya padam apabila bacaan naik atas AMBANG_OFF yang lebih tinggi. Di antara dua nombor itu tiada apa-apa berubah β keadaan semasa dikekalkan. Itulah hysteresis, dan jurangnya mesti lebih lebar daripada dua benda: riak bacaan biasa anda, dan lonjakan bacaan yang disebabkan oleh lampu itu sendiri. Ukur yang kedua sekali: catat bacaan dengan LED dipaksa nyala dan dipaksa padam pada cahaya sekeliling yang sama, dan jurang antara dua ambang mesti melebihi beza itu.
Sketch ini menambah satu lapisan lagi: perubahan cahaya mesti kekal selama tiga saat sebelum lampu bertindak. Hysteresis menangani riak di sekitar ambang; pemasa menangani peristiwa pendek seperti lampu kereta yang menyapu atau tangan yang melintas.

/*
Lampu automatik sensor cahaya (LDR) β Arduino Uno
LDR + perintang tetap 100k = pembahagi voltan pada A0.
Bacaan BESAR = terang, bacaan KECIL = gelap
(LDR di sebelah 5V, perintang tetap di sebelah GND).
Dua ambang (hysteresis) + tempoh sah supaya lampu tidak
berkelip-kelip waktu senja.
*/
const uint8_t PIN_LDR = A0; // titik tengah pembahagi voltan
const uint8_t PIN_LAMPU = 9; // LED (melalui 220R) atau pin IN relay
// Tukar dua nombor ini selepas kalibrasi Serial Monitor.
const int AMBANG_ON = 400; // bawah ini = cukup gelap -> nyala
const int AMBANG_OFF = 550; // atas ini = cukup terang -> padam
const unsigned long TEMPOH_SAH = 3000UL; // cahaya mesti kekal 3 saat
const uint8_t SAMPEL = 16; // purata, buang noise ADC
bool lampuNyala = false;
bool sedangTunggu = false;
unsigned long mulaBerubah = 0;
int bacaPurata() {
long jumlah = 0;
for (uint8_t i = 0; i < SAMPEL; i++) {
jumlah += analogRead(PIN_LDR);
delay(2);
}
return (int)(jumlah / SAMPEL);
}
void setup() {
pinMode(PIN_LAMPU, OUTPUT);
digitalWrite(PIN_LAMPU, LOW);
Serial.begin(9600);
Serial.println(F("Kalibrasi: tutup LDR dgn jari = gelap, sinar lampu = terang"));
}
void loop() {
int cahaya = bacaPurata();
// Hysteresis: setiap keadaan ada ambangnya sendiri, jadi
// antara AMBANG_ON dan AMBANG_OFF tiada apa-apa berubah.
bool mahuNyala = lampuNyala;
if (!lampuNyala && cahaya < AMBANG_ON) mahuNyala = true;
if (lampuNyala && cahaya > AMBANG_OFF) mahuNyala = false;
// Tempoh sah: lampu kereta atau bayang tangan tidak cukup lama.
if (mahuNyala != lampuNyala) {
if (!sedangTunggu) {
sedangTunggu = true;
mulaBerubah = millis();
} else if (millis() - mulaBerubah >= TEMPOH_SAH) {
lampuNyala = mahuNyala;
digitalWrite(PIN_LAMPU, lampuNyala ? HIGH : LOW);
sedangTunggu = false;
}
} else {
sedangTunggu = false; // cahaya berpatah balik, batalkan kiraan
}
Serial.print(F("cahaya="));
Serial.print(cahaya);
Serial.print(F(" lampu="));
Serial.println(lampuNyala ? F("ON") : F("OFF"));
delay(200);
}
Pada Uno, sketch ini menggunakan 2,718 bait flash (8% daripada 32 KB) dan 194 bait RAM statik, jadi ada banyak ruang untuk anda tambah paparan atau jam kemudian. bacaPurata() mengambil 16 bacaan dan meratakannya: satu bacaan ADC boleh bergoyang beberapa langkah, dan purata itu membuang riak kecil sebelum ia sempat mengganggu ambang anda.
Di sinilah modul sensor cahaya kita perlu dilihat dengan jujur. Ia papan HW-072 tiga pin β VCC, GND dan DO β dengan trimmer biru dan comparator LM393 di atasnya: trimmer menetapkan satu titik potong dalam perkakasan dan DO memberi jawapan ya-atau-tidak sahaja. Tiada pin AO, jadi analogRead dan dua ambang dalam kod bukan pilihan di situ. Sebagai suis cahaya siap-pasang ia kemas dan pantas (header male bersudut 90Β° padanya perlu jumper female-to-male) β tetapi untuk mengawal sendiri jurang antara nyala dan padam, LDR telanjang yang menang.
Bagaimana menaik taraf kepada lampu 12 V dengan relay?
Modul relay 5V menukar LED mini kepada lampu DC sebenar. Papan merah itu membawa relay Songle biru dan dua blok terminal skru biru: sebelah kawalan bertanda IN, DC- dan DC+, sebelah beban bertanda NO, COM dan NC. Kedua-duanya terminal skru, jadi hujung pin jumper male-to-male terus diapit di bawah skru β tiada penyolderan.
DC+ ke rel 5 V, DC- ke rel GND, dan IN ke D9. Cabut LED dan perintang 220 Ξ© dahulu, dan bawa IN terus ke D9 tanpa perintang β IN ialah input isyarat yang sudah membawa perintang sirinya sendiri di atas papan, bukan beban yang perlu dihadkan arusnya. Di sudut papan ada blok jumper bertanda L dan H yang memilih sama ada pin IN dicetuskan oleh isyarat rendah atau tinggi. Sketch di atas menghantar HIGH untuk menyalakan lampu, jadi jumper itu perlu duduk pada pasangan pin H. Dalam gambar produk kami ia memang sudah berada di situ, jadi selalunya tiada apa-apa yang perlu dialihkan β pandang sekali sebelum mendawai untuk mengesahkannya, kerana kalau ia tersasar ke L, lampu anda akan menyala waktu siang dan padam waktu malam. Panduan cara guna relay module dengan selamat menerangkan sisi beban dengan lebih terperinci.
Keselamatan, dan ini bukan nasihat pilihan. Kontak relay itu bercetak dua rating pada kesnya, 10A 250VAC dan 10A 30VDC, dan nombor kedua itulah yang berkaitan di sini β ia jauh melebihi apa yang ditarik oleh mana-mana lampu taman 12 V. Binaan ini kekal DC voltan rendah sahaja β lampu 12 V maksimum, dengan bekalannya sendiri. Jangan sekali-kali mendawai 240 V mains ke litar breadboard ini. Wayar mains di atas breadboard tidak boleh dilindungi, tiada pengasingan sentuhan, dan satu wayar tercabut sudah cukup untuk membunuh. Kerja mains ialah kerja juruelektrik bertauliah, bukan kerja projek Arduino.
Relay hanya menyuis β ia tidak membekalkan kuasa. Bekalan 12 V anda masuk ke COM, NO pergi ke terminal positif lampu, dan negatif lampu pulang ke negatif bekalan. Perhatikan apa yang tiada dalam ayat itu: tiada wayar daripada bekalan 12 V ke GND Uno. Kontak relay ialah kepingan logam yang ditarik secara magnetik, terasing daripada gegelungnya, jadi litar 12 V dan litar 5 V tidak perlu berkongsi ground langsung. Itulah bezanya daripada suis transistor, yang memang menuntut ground yang sama. Kalau sistem anda sudah pun berjalan pada 12 V, contohnya papan solar atau kereta, versi gegelung 12V lebih sesuai kerana ia dikuasakan terus dari rel 12 V itu; ia tidak boleh dijalankan dari pin 5 V Uno.

Kesilapan biasa yang kami lihat
LDR disambung terus ke A0. Ini corak paling kerap: LDR dari 5 V ke A0, dan tiada apa-apa lagi. Tanpa perintang tetap ke GND hampir tiada arus mengalir menerusi LDR, jadi hampir tiada voltan jatuh merentasinya: pin duduk hampir 5 V dan bacaan tersangkut hampir 1023 tanpa menjejaki cahaya langsung. Perintang tetap itu bukan tambahan β ia separuh daripada sensor.
Menyalin nombor ambang dari internet. Ambang orang lain dikira daripada perintang, unit LDR dan bilik mereka; 400 dan 550 dalam sketch di atas ialah titik permulaan untuk pembahagi 100 kΞ© supaya kod boleh dijalankan, bukan jawapan.
Menyalahkan LDR apabila lampu berkelip. Berkelip waktu senja hampir selalunya bermaksud satu ambang, jurang hysteresis yang terlalu sempit, atau LDR yang nampak lampunya sendiri β lebarkan jurang dahulu, kemudian pusingkan LDR menghadap arah lain. Kalau bacaan pelik walaupun dalam gelap penuh, ukur rintangan LDR terus dengan multimeter sebelum menyalahkan kod; panduan cara guna multimeter digital menunjukkan caranya.
FAQ
Kenapa LDR tidak boleh disambung terus ke pin A0?
Kerana analogRead mengukur voltan, bukan rintangan. Tanpa perintang tetap ke GND hampir tiada arus mengalir menerusi LDR, jadi hampir tiada susut voltan merentasinya: A0 sekadar duduk hampir 5 V dan bacaan tersangkut hampir 1023 tidak kira terang atau gelap. Perintang tetap itulah yang menukar rintangan menjadi voltan.
Nilai perintang mana untuk pembahagi voltan LDR β 10 kΞ© atau 100 kΞ©?
Kedua-duanya berfungsi. Pembahagi paling sensitif apabila perintang tetap hampir sama dengan rintangan LDR pada aras cahaya yang anda mahu bezakan; pada waktu senja itu puluhan hingga ratusan kΞ©, jadi 100 kΞ© memberi julat bacaan yang lebih lapang.
Kenapa lampu automatik saya berkelip-kelip waktu senja?
Kerana kod anda menggunakan satu ambang, dan cahaya senja duduk berdekatan nombor itu lama. Guna dua ambang, dan pastikan jurangnya lebih besar daripada lonjakan bacaan yang disebabkan oleh lampu itu sendiri.
Boleh saya guna modul sensor cahaya dan buat analogRead?
Modul HW-072 tiga pin kami mengeluarkan VCC, GND dan DO sahaja, jadi anda membacanya dengan digitalRead dan ambangnya diset dengan trimmer. Untuk dua ambang dalam kod, guna LDR telanjang dengan pembahagi voltan.
Boleh litar ini menghidupkan lampu 240 V?
Tidak. Litar ini direka untuk DC voltan rendah β LED, atau lampu 12 V melalui modul relay dengan bekalannya sendiri. Pendawaian mains memerlukan pengasingan, perlindungan dan kandang yang betul, dan di Malaysia ia kerja juruelektrik bertauliah.
Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.



Light Dependent Resistor Photo Sensor LDR Sunlight Detection Light Sensitive Resistor
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
MB102 Breadboard 170 400 830 Holes Breadboard Donut Board Arduino Prototype Multi Color - BREADBOARD (400 HOLES)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM
Round Head LED 3mm / 5mm / 8mm - Red/Yellow/Blue/Green/White - 5mm LED (WHITE)
400 pcs 1/4W Resistor Pack Resistor Kit 20 Common Value with 20 each
Light Sensor Module Photosensitive Light Detection LDR For Arduino IOT Application
Relay Module 3.3V 5V 12V 1/2/4/8 Ways Optocoupler Trigger Relay Module 1 2 4 8 Channel Relay Module - 5V RELAY MODULE(1WAY)
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-B (1.0M)
Electronic Component Set Beginner Electrical Learning Kit For Arduino Beginner Learning - ELECTRICAL STARTER KIT