Đèn cầu thang tự sáng khi có người, chỉ bật lúc trời tối

Dây LED 12V dọc cầu thang tự sáng dần khi cảm biến PIR thấy người đi tới, sáng trong thời gian cài đặt rồi mờ dần tắt. Quang trở khoá mạch vào ban ngày nên không tốn điện vô ích. Dùng adapter 12V, không đụng tới điện 220V.

⏱ 100 phút🔧 Biết hàn💰 Linh kiện ~249.100đ🧠 Arduino Nano⚡ Nguồn adapter

✅ Đã kiểm thử

Luật điệnKhông lỗiSai chân, chập nguồn, quá áp 5V vào chân 3,3V, thiếu đi-ốt, thiếu trở kéo…
Mô phỏng SPICE3/3 kịch bản · 13 phép đo đạtDòng/áp từng linh kiện ở trường hợp xấu nhất (ngspice)
Biên dịch codeĐạt · dùng 9% bộ nhớarduino:avr:nano
Xem chi tiết 13 phép đo

Đèn đang sáng hết cỡ (trời tối, PIR thấy người)

  • Q1: dẫn 997.9mA, Vds=0.03V.
  • Chân D9 cấp 0.5mA (an toàn ≤ 20.0mA).
  • Dòng qua dây LED 12V: 997.9mA ✓
  • Sụt áp trên MOSFET (càng nhỏ càng mát): 0.03V ✓
  • Áp kích cửa MOSFET: 4.94V ✓
  • Áp ra module hạ áp cấp Nano và PIR: 5.00V ✓
  • Áp quang trở lúc trời tối: 0.24V ✓
  • Tổng dòng adapter phải cấp (adapter 2A): 1.01A ✓

Trời sáng nên không bật dù có người

  • Dây LED phải tắt: 0.0mA ✓
  • Áp quang trở lúc trời sáng: 4.17V ✓
  • Mức tín hiệu PIR vào Nano: 3.30V ✓

Ban đêm không có người (đèn chờ)

  • Dây LED tắt: 0.0mA ✓
  • Cửa MOSFET được kéo xuống mát: 0.00V ✓
Kiểm lần cuối: 08:49:21 13/11/2026

Nguyên lý hoạt động

PIR HC-SR501 bắt tia hồng ngoại từ thân nhiệt người; thấy chuyển động là chân OUT lên 3,3V — đủ để Nano chạy 5V đọc là mức cao. Quang trở LDR mắc nối tiếp với điện trở 10kΩ thành cầu chia áp: trời tối quang trở lên khoảng 200kΩ nên chân A0 chỉ còn khoảng 0,24V, trời sáng quang trở xuống khoảng 2kΩ nên A0 lên hơn 4V. Nano chỉ bật đèn khi A0 thấp hơn ngưỡng (trời tối) và PIR báo có người. Chân D9 phát xung PWM qua điện trở 100Ω vào cửa MOSFET IRLZ44N để sáng dần — mờ dần; điện trở 10kΩ kéo cửa xuống mát giữ đèn tắt lúc Nano chưa khởi động xong. MOSFET đóng cắt phía âm của dây LED, chịu khoảng 1A ở 12V với sụt áp chỉ vài chục milivôn nên gần như không nóng. Adapter 12V nuôi dây LED, đồng thời qua module hạ áp DC-DC xuống 5V cấp cho Nano, PIR và cầu chia áp quang trở — hạ áp kiểu xung nên không nóng như hạ áp bằng điện trở.

Sơ đồ đấu dây

Mỗi màu là một dây. Chấm tròn là điểm hàn. Chạm vào tên dây trong bảng để làm nổi bật.

⚡ Mô phỏng tương tácBấm thử — mạch được giải ngay trên máy bạn, điện áp và dòng hiện lên sơ đồ bên dưới.
Tình huống mẫu
Chân D9điều khiển R2
U3 · OUTHC-SR501 xuất 3,3V khi phát hiện chuyển động, 0V khi không có.
Quang trở LDR1tối 200k · sáng 2k

Đây là mô phỏng một chiều (DC) ở trạng thái tĩnh: dùng để kiểm tra mức áp, dòng và công suất. Hiệu ứng nhấp nháy, PWM hay giao tiếp số do code quyết định nên không chạy ở đây.

12V12VGNDGND5V5VPIR_OUTPIR_OUTLDR_SENSELDR_SENSEGATE_DRVGATE_DRVGATEGATELED_NEGLED_NEGU1 · Arduino Nano5VA0D2D9GNDLDR1 · Quang trở LDR 5mm12R1 · Điện trở 10kΩ12U3 · Cảm biến chuyển động PIR HC-SR501VCCOUTGNDR2 · Điện trở 100Ω12Q1 · MOSFET kênh N logic-level IRLZ44NDGSR3 · Điện trở 10kΩ12L1 · Dây LED 12V-+PS1 · Adapter 12V DC+-U2 · hạ áp DC-DCIN+OUT+IN-OUT-C1 · Tụ điện 470µF-+
#DâyNối các điểmÁp mô phỏng
1đỏ sẫm
12V
PS1 + ⟷ U2 IN+ ⟷ L1 + ⟷ C1 +—
2đen
GND
PS1 - ⟷ U2 IN- ⟷ U2 OUT- ⟷ U1 GND ⟷ U3 GND ⟷ Q1 S ⟷ R1 2 ⟷ R3 2 ⟷ C1 -—
3đỏ
5V
U2 OUT+ ⟷ U1 5V ⟷ U3 VCC ⟷ LDR1 1—
4vàng
PIR_OUT
U3 OUT ⟷ U1 D2—
5xanh lá
LDR_SENSE
LDR1 2 ⟷ R1 1 ⟷ U1 A0—
6xanh dương
GATE_DRV
U1 D9 ⟷ R2 1—
7tím
GATE
R2 2 ⟷ Q1 G ⟷ R3 1—
8xanh ngọc
LED_NEG
L1 - ⟷ Q1 D—

Danh sách linh kiện

Ký hiệuLinh kiệnGiá tham khảo
PS1Adapter 12V 2A jack DC 5.5×2.1mm65.000đTìm mua
U2Module hạ áp DC-DC LM2596 (chỉnh ra 5V) hoặc mini-360 ra 5V25.000đTìm mua
U1Arduino Nano (chip nạp CH340)75.000đTìm mua
U3Cảm biến chuyển động PIR HC-SR50122.000đTìm mua
LDR1Quang trở LDR 5mm (GL5528)2.000đTìm mua
R1Điện trở 10kΩ 1/4W (nâu-đen-cam)200đTìm mua
Q1MOSFET IRLZ44N (TO-220, loại logic-level chữ L)12.000đTìm mua
R2Điện trở 100Ω 1/4W (nâu-đen-nâu)200đTìm mua
R3Điện trở 10kΩ 1/4W (nâu-đen-cam)200đTìm mua
C1Tụ hóa 470µF 25V (470u)2.500đTìm mua
L1Dây LED 12V đơn màu (tổng dòng ≤1A, xem nhãn W/m)45.000đTìm mua
Tổng (chưa gồm board hàn, dây, thiếc)249.100đ

Các bước làm

Code nạp cho mạch

Chọn board Arduino Nano.

/*
  Đèn cầu thang tự sáng khi có người — Arduino Nano
  - PIR HC-SR501 ở D2 báo có người (mức cao 3,3V)
  - Quang trở + trở 10k ở A0: số đọc CÀNG NHỎ nghĩa là CÀNG TỐI
  - Dây LED 12V qua MOSFET IRLZ44N ở D9 (có PWM nên sáng dần / mờ dần)
  Mở Serial Monitor 115200 để xem số đọc A0 rồi chỉnh NGUONG_TOI cho đúng phòng.
*/

// ---------- Cấu hình ----------
const uint8_t CHAN_PIR   = 2;      // OUT của PIR
const uint8_t CHAN_LDR   = A0;     // cầu chia áp quang trở
const uint8_t CHAN_DEN   = 9;      // cửa MOSFET (chân có PWM)

int  NGUONG_TOI          = 400;    // A0 nhỏ hơn số này = trời tối (0..1023)
const int  VUNG_CHET     = 60;     // chống chớp quanh ngưỡng
const unsigned long GIU_SANG_MS = 45000UL;  // sáng bao lâu sau lần thấy người cuối
const uint8_t DO_SANG_MAX       = 255;      // 255 = sáng hết cỡ
const uint8_t DO_SANG_CHO       = 0;        // 0 = tắt hẳn; đặt 20 nếu muốn sáng mờ chờ sẵn
const unsigned long BUOC_FADE_MS = 6;       // càng lớn càng chuyển chậm
const unsigned long KHOI_DONG_MS = 60000UL; // PIR cần ~60s ổn định sau khi cấp điện

// ---------- Trạng thái ----------
int  doSangHienTai = 0;
int  doSangDich    = 0;
bool troiToi       = false;
unsigned long mocTatDen  = 0;
unsigned long mocFade    = 0;
unsigned long mocInLog   = 0;

void setup() {
  pinMode(CHAN_PIR, INPUT);
  pinMode(CHAN_DEN, OUTPUT);
  analogWrite(CHAN_DEN, 0);
  Serial.begin(115200);
  Serial.println(F("Den cau thang PIR - dang khoi dong PIR (~60 giay)"));
}

void loop() {
  unsigned long bayGio = millis();

  // 1. Đọc ánh sáng môi trường, có vùng chết để không chớp quanh ngưỡng
  int sangMT = analogRead(CHAN_LDR);
  if (troiToi && sangMT > NGUONG_TOI + VUNG_CHET) troiToi = false;
  else if (!troiToi && sangMT < NGUONG_TOI) troiToi = true;

  // 2. Đọc PIR (bỏ qua trong lúc PIR chưa ổn định)
  bool coNguoi = (bayGio > KHOI_DONG_MS) && (digitalRead(CHAN_PIR) == HIGH);
  if (coNguoi && troiToi) mocTatDen = bayGio + GIU_SANG_MS;

  // 3. Quyết định độ sáng đích
  bool dangTrongGioSang = (mocTatDen != 0) && (bayGio < mocTatDen);
  doSangDich = (dangTrongGioSang && troiToi) ? DO_SANG_MAX : DO_SANG_CHO;

  // 4. Sáng dần / mờ dần, không dùng delay
  if (bayGio - mocFade >= BUOC_FADE_MS) {
    mocFade = bayGio;
    if (doSangHienTai < doSangDich) doSangHienTai++;
    else if (doSangHienTai > doSangDich) doSangHienTai--;
    analogWrite(CHAN_DEN, doSangHienTai);
  }

  // 5. Nhật ký 2 giây một lần
  if (bayGio - mocInLog >= 2000) {
    mocInLog = bayGio;
    Serial.print(F("A0=")); Serial.print(sangMT);
    Serial.print(F(" troiToi=")); Serial.print(troiToi ? 1 : 0);
    Serial.print(F(" PIR=")); Serial.print(coNguoi ? 1 : 0);
    Serial.print(F(" den=")); Serial.print(doSangHienTai);
    if (dangTrongGioSang) {
      Serial.print(F(" con_sang=")); Serial.print((mocTatDen - bayGio) / 1000); Serial.print(F("s"));
    }
    Serial.println();
  }
}

🔌 Cắm thử trên breadboard

Cắm nháp trên board cắm trước cho chắc, chạy đúng rồi hãy làm mạch in. Sơ đồ này do máy tự xếp từ chính netlist ở trên và đã đối chiếu lại: hai chân cùng một cột (cùng nửa board) là thông nhau, không có net nào bị chập.

+−+−551010151520202525303035354040JIHGFEDCBAU1 · Arduino NanoGND5VD2D9A0PS1U2U3LDR1R1 10kQ1 IRLZ44NR2 100R3 10kC1 470u+L1
  • Mỗi cột 5 lỗ trong cùng một nửa board thông nhau; hai nửa cách nhau bởi rãnh giữa.
  • Hai đường kẻ dọc mép board là đường nguồn: hàng + (vạch đỏ) và hàng − (vạch xanh). Nhớ bắc dây nối đường nguồn trên với đường nguồn dưới nếu dùng cả hai nửa.
  • Màu dây trên hình trùng với màu trong bảng nối dây ở mục Sơ đồ, cắm theo màu cho dễ dò.

🧲 Mạch in để ủi (PCB 1 mặt)

Bản mạch in một mặt đồng, tự xếp linh kiện và tự đi dây, đã kiểm quy tắc khoảng cách và đối chiếu đúng 100% với sơ đồ nguyên lý ở trên. In tỉ lệ 1:1 rồi ủi lên tấm đồng.

Kích thước board53,3×63,5 mm54 lỗ khoan · mũi 0,8 / 0,9 / 1 / 1,1 / 1,2mm
Đi dây 1 mặt20 đoạn · 421 mmKhông cần cầu nhảy nào
Kiểm tra bản mạchĐạt DRC · khớp 100% netlistĐường ≥0,8mm, khe ≥0,5mm; mọi net đối chiếu lại từ hình học thật
Mặt đồng — đã lật gương sẵn để in rồi ủi úp xuống tấm đồng
Mặt linh kiện — vị trí, chiều cắm và tên từng chân
PS1U2U1U3LDR1R1Q1R2R3C1L1+-IN+IN-OUT+OUT-D1D0RSTGNDD2D3D4D5D6D7D8D9D10D11D12VINGND2RST25VA7A6A5A4A3A2A1A0AREF3V3D13VCCOUTGND+-
Hướng dẫn ủi – ăn mòn – khoan – hàn (đầy đủ)

Hướng dẫn làm mạch in bằng phương pháp ủi

Mạch: Đèn cầu thang tự sáng khi có người, chỉ bật lúc trời tối

Kích thước board: 53,3×63,5 mm · 54 lỗ khoan (mũi 0,8, 0,9, 1, 1,1 và 1,2 mm) · 20 đoạn mạch, tổng 421 mm · 0 cầu nhảy.

Quy tắc đã kiểm: đường mạch rộng 0,8mm (nguồn và GND 1mm), khe cách tối thiểu 0,5mm. Mạch in đã được máy đối chiếu đúng 100% với sơ đồ nguyên lý.

1. In đúng tỉ lệ 1:1

  • In trang "MẶT ĐỒNG" bằng máy in LASER, đặt tỉ lệ 100%, KHÔNG chọn "Fit to page" hay "Scale to fit".
  • Dùng thước trên bản in đo lại đoạn 100mm: phải đúng 100mm mới dùng được.
  • In trên giấy in ảnh bóng, giấy decal bóc, hoặc giấy tạp chí láng. Mực càng dày càng tốt.
  • Trang "MẶT ĐỒNG" đã được LẬT GƯƠNG sẵn: úp mặt có mực vào tấm đồng là đúng chiều.

2. Chuẩn bị tấm đồng

  • Cắt phíp đồng (board đồng một mặt) lớn hơn kích thước mạch mỗi bề khoảng 5mm.
  • Chà mặt đồng bằng giấy nhám mịn (P800–P1200) rồi rửa sạch, lau khô. Mặt đồng phải sáng, không vết dầu mỡ, không chạm tay vào.

3. Ủi mực sang đồng

  • Úp mặt có mực vào tấm đồng, dùng băng keo giấy dán cố định một cạnh.
  • Bàn ủi để mức nóng nhất (cotton/linen), KHÔNG dùng chế độ phun hơi nước.
  • Ủi đè mạnh và đều 3–5 phút, tập trung từng vùng nhỏ, chú ý các góc và mép.
  • Để nguội hẳn rồi ngâm cả tấm vào nước ấm 5–10 phút, bóc giấy thật nhẹ. Giấy decal thì bóc khi còn ấm.
  • Soi kỹ: chỗ nào mực bị thiếu hoặc đứt đường thì tô lại bằng bút lông dầu (bút CD) rồi để khô.

4. Ăn mòn (etching)

  • Pha dung dịch sắt(III) clorua FeCl3 theo hướng dẫn trên bao bì, hoặc dung dịch oxy già + muối ăn + a-xít; dùng hộp nhựa, KHÔNG dùng đồ kim loại.
  • Nhiệt độ dung dịch khoảng 40–50°C thì ăn nhanh hơn. Lắc nhẹ hộp cho đều, thường 10–25 phút là xong.
  • An toàn: đeo găng tay cao su và kính bảo hộ, làm ở nơi thoáng. Dung dịch ăn mòn làm hỏng quần áo, bồn rửa và gây bỏng rát da.
  • Xong thì rửa board bằng nước sạch, lau khô, dùng xăng thơm hoặc axeton lau sạch lớp mực.
  • Dung dịch đã dùng KHÔNG đổ xuống bồn rửa hay cống; đựng vào can kín và bỏ đúng nơi thu gom chất thải.

5. Khoan lỗ

  • Đối chiếu trang "BẢN VẼ LỖ KHOAN" để biết lỗ nào dùng mũi nào.
  • Dùng mũi khoan 0,8mm, 0,9mm, 1mm, 1,1mm và 1,2mm, khoan từ MẶT ĐỒNG vào để mũi tự định tâm giữa pad.
  • Khoan tốc độ cao, đẩy nhẹ; mũi nhỏ rất dễ gãy. Khoan xong chà nhẹ bavia hai mặt.

6. Hàn linh kiện

  • Linh kiện cắm ở MẶT KHÔNG CÓ ĐỒNG, hàn ở mặt đồng. Theo trang "MẶT LINH KIỆN" để đặt đúng vị trí và đúng chiều.
  • Hàn linh kiện thấp trước (điện trở, đi-ốt), cao sau (tụ, hàng chân, board vi điều khiển).
  • Chú ý chiều: LED chân dài là (+); đi-ốt có vạch trắng là K; tụ hoá có vạch là (−); transistor theo mặt chữ như nét vẽ đỏ.
  • Trước khi cấp điện: đo thông mạch giữa chân nguồn và GND — KHÔNG được kêu (không được chập).

Lưu ý với board vi điều khiển

  • Board nhái có thể khác thứ tự chân. Đối chiếu tên chân in cạnh từng lỗ trên trang "MẶT LINH KIỆN" với chữ in trên board thật TRƯỚC KHI ăn mòn. Nếu khác, đừng hàn mà báo lại để sửa bản vẽ.
Bản vẽ lỗ khoan
BẢN VẼ LỖ KHOAN (nhìn từ mặt linh kiện)mũi khoan 0,8mm — 6 lỗmũi khoan 0,9mm — 4 lỗmũi khoan 1mm — 37 lỗmũi khoan 1,1mm — 3 lỗmũi khoan 1,2mm — 4 lỗ

Đo kiểm bằng đồng hồ vạn năng

Giữa 12V và GND trên board11,5 – 12,6V
Giữa OUT+ và OUT− của module hạ áp4,9 – 5,1V
Giữa A0 và GND lúc che tối quang trởdưới 1V
Giữa A0 và GND lúc rọi đèn pin vào quang trởtrên 3V
Giữa D (chân giữa MOSFET) và GND lúc đèn sángdưới 0,3V

Sửa lỗi thường gặp

Đèn sáng suốt ngày

Ngưỡng tối đang đặt quá cao hoặc quang trở bị chính dây LED rọi vào. Xem số A0 trên Serial Monitor lúc ban ngày rồi đặt NGUONG_TOI thấp hơn số đó.

Đèn chớp tắt liên tục

Quang trở đang nhìn thấy dây LED: tắt đèn thì trời tối, bật đèn lại thành sáng. Xoay quang trở ra hướng khác hoặc che bằng ống nhựa đen.

Đèn không bật dù có người

Chờ 60 giây sau khi cấp điện cho PIR ổn định; kiểm tra PIR được cấp 5V và jumper ở H; xem dòng PIR=1 trên Serial Monitor khi vẫy tay.

Nano hoặc module hạ áp nóng

Module hạ áp loại LM2596 ấm nhẹ là bình thường. Nếu nóng rát tay thì kiểm tra lại điện áp ra đúng 5V (vặn sai có thể ra 10V làm hỏng Nano) và dây LED không bị chạm chập.

Dây LED sáng yếu ở đoạn cuối

Dây dài trên 3m bị sụt áp. Cấp nguồn vào cả hai đầu dây hoặc chia thành hai đoạn chạy song song.

⚠️ An toàn

  • Chỉ dùng adapter 12V có chứng nhận, dòng ≥ 2A. Không tự chế nguồn từ điện 220V.
  • Không dùng mạch này để đóng cắt đèn 220V; muốn điều khiển đèn 220V phải nhờ thợ điện hoặc dùng ổ cắm thông minh có chứng nhận.
  • Dây LED dán lên bề mặt kim loại thì lót băng keo cách điện để tránh chạm chập.
  • Rút điện trước khi hàn hoặc đổi dây.