Dãy 8 đèn LED chạy đuổi, đổi hiệu ứng và chỉnh tốc độ bằng núm vặn
Tám đèn LED nhiều màu chạy theo 4 hiệu ứng: chạy đuổi, con mắt quét qua lại, nhấp nháy xen kẽ và sáng dần từng đèn. Vặn núm để đổi tốc độ, bấm nút để đổi hiệu ứng — mạch nhớ hiệu ứng đang chọn kể cả khi mất điện. Mạch nhập môn rất hợp để học cách điều khiển nhiều chân cùng lúc.
✅ Đã kiểm thử
Xem chi tiết 31 phép đo
Thử đèn lúc khởi động: cả 8 LED cùng sáng
- D1: dòng 9.0mA (cho phép 20.0mA).
- D2: dòng 9.0mA (cho phép 20.0mA).
- D3: dòng 8.5mA (cho phép 20.0mA).
- D4: dòng 8.5mA (cho phép 20.0mA).
- D5: dòng 8.2mA (cho phép 20.0mA).
- D6: dòng 8.2mA (cho phép 20.0mA).
- D7: dòng 8.4mA (cho phép 20.0mA).
- D8: dòng 8.4mA (cho phép 20.0mA).
- Chân D2 cấp 9.0mA (an toàn ≤ 20.0mA).
- Chân D3 cấp 9.0mA (an toàn ≤ 20.0mA).
- Chân D4 cấp 8.5mA (an toàn ≤ 20.0mA).
- Chân D5 cấp 8.5mA (an toàn ≤ 20.0mA).
- Chân D6 cấp 8.2mA (an toàn ≤ 20.0mA).
- Chân D7 cấp 8.2mA (an toàn ≤ 20.0mA).
- Chân D8 cấp 8.4mA (an toàn ≤ 20.0mA).
- Chân D9 cấp 8.4mA (an toàn ≤ 20.0mA).
- Tổng dòng đỉnh từ USB 98.7mA (đủ với cục sạc 5V 1A).
- Dòng LED đỏ đầu dãy: 9.0mA ✓
- Dòng LED xanh dương (áp rơi lớn hơn nên dùng trở 220Ω): 8.4mA ✓
- Dòng một chân Nano (giới hạn an toàn 20mA): 9.0mA ✓
- Tổng dòng khi cả 8 đèn cùng sáng: 98.7mA ✓
- Áp chân giữa biến trở khi vặn ở giữa: 2.50V ✓
Hiệu ứng đang chạy: chỉ một đèn giữa sáng
- D4: dòng 8.5mA (cho phép 20.0mA).
- Chân D5 cấp 8.5mA (an toàn ≤ 20.0mA).
- Tổng dòng đỉnh từ USB 39.0mA (đủ với cục sạc 5V 1A).
- Dòng đèn đang sáng: 8.5mA ✓
- Các đèn khác phải tắt: 0.0mA ✓
Đang bấm nút đổi hiệu ứng, núm vặn sát đầu nối mát
- Tổng dòng đỉnh từ USB 30.5mA (đủ với cục sạc 5V 1A).
- Áp chân nút khi nhấn: 0.00V ✓
- Áp chân giữa biến trở khi vặn sát đầu nối mát: 0.00V ✓
- Dòng khi tất cả đèn tắt: 30.5mA ✓
Nguyên lý hoạt động
Tám chân D2 đến D9 của Nano mỗi chân nối qua một điện trở hạn dòng rồi tới một LED, chân còn lại của LED về mát. Điện trở quyết định độ sáng: LED đỏ, vàng, xanh lá rơi khoảng 2V nên dùng 330Ω cho khoảng 9mA; LED xanh dương rơi khoảng 3V nên dùng 220Ω để vẫn đủ sáng, dòng khoảng 9mA. Một chân Nano chỉ nên cấp dưới 20mA và cả chip dưới 150mA, nên kể cả khi cả 8 đèn cùng sáng (khoảng 72mA) vẫn an toàn. Biến trở 10kΩ mắc giữa 5V và mát, chân giữa đưa vào A0: Nano đọc ra số 0–1023 rồi quy thành chu kỳ 20–400 mili giây cho hiệu ứng. Nút ở D10 dùng trở kéo lên trong chip, mỗi lần bấm là chuyển sang hiệu ứng kế tiếp và ghi số hiệu ứng vào EEPROM nên mất điện bật lại vẫn đúng hiệu ứng cũ.
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.
Đâ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.
| # | Dây | Nối các điểm | Áp mô phỏng |
|---|---|---|---|
| 1 | đỏ 5V | U1 5V ⟷ VR1 1 | — |
| 2 | đen GND | U1 GND ⟷ VR1 3 ⟷ SW1 2 ⟷ D1 K · chân ngắn (−) ⟷ D2 K · chân ngắn (−) ⟷ D3 K · chân ngắn (−) ⟷ D4 K · chân ngắn (−) ⟷ D5 K · chân ngắn (−) ⟷ D6 K · chân ngắn (−) ⟷ D7 K · chân ngắn (−) ⟷ D8 K · chân ngắn (−) | — |
| 3 | vàng L1_DRV | U1 D2 ⟷ R1 1 | — |
| 4 | xanh lá L1_A | R1 2 ⟷ D1 A · chân dài (+) | — |
| 5 | xanh dương L2_DRV | U1 D3 ⟷ R2 1 | — |
| 6 | tím L2_A | R2 2 ⟷ D2 A · chân dài (+) | — |
| 7 | xanh ngọc L3_DRV | U1 D4 ⟷ R3 1 | — |
| 8 | nâu L3_A | R3 2 ⟷ D3 A · chân dài (+) | — |
| 9 | hồng L4_DRV | U1 D5 ⟷ R4 1 | — |
| 10 | xám L4_A | R4 2 ⟷ D4 A · chân dài (+) | — |
| 11 | xanh rêu L5_DRV | U1 D6 ⟷ R5 1 | — |
| 12 | tím nhạt L5_A | R5 2 ⟷ D5 A · chân dài (+) | — |
| 13 | vàng L6_DRV | U1 D7 ⟷ R6 1 | — |
| 14 | xanh lá L6_A | R6 2 ⟷ D6 A · chân dài (+) | — |
| 15 | xanh dương L7_DRV | U1 D8 ⟷ R7 1 | — |
| 16 | tím L7_A | R7 2 ⟷ D7 A · chân dài (+) | — |
| 17 | xanh ngọc L8_DRV | U1 D9 ⟷ R8 1 | — |
| 18 | nâu L8_A | R8 2 ⟷ D8 A · chân dài (+) | — |
| 19 | hồng SPEED | VR1 W · chân giữa ⟷ U1 A0 | — |
| 20 | xám BTN | SW1 1 ⟷ U1 D10 | — |
Danh sách linh kiện
| Ký hiệu | Linh kiện | Giá tham khảo | |
|---|---|---|---|
| U1 | Arduino Nano (chip nạp CH340) | 75.000đ | Tìm mua |
| D1 | LED đỏ 5mm (red) | 300đ | Tìm mua |
| D2 | LED đỏ 5mm (red) | 300đ | Tìm mua |
| D3 | LED vàng 5mm (yellow) | 300đ | Tìm mua |
| D4 | LED vàng 5mm (yellow) | 300đ | Tìm mua |
| D5 | LED xanh lá 5mm (green) | 300đ | Tìm mua |
| D6 | LED xanh lá 5mm (green) | 300đ | Tìm mua |
| D7 | LED xanh dương 5mm (blue) | 300đ | Tìm mua |
| D8 | LED xanh dương 5mm (blue) | 300đ | Tìm mua |
| R1 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| R2 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| R3 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| R4 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| R5 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| R6 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 200đ | Tìm mua |
| R7 | Điện trở 220Ω 1/4W (đỏ-đỏ-nâu) | 200đ | Tìm mua |
| R8 | Điện trở 220Ω 1/4W (đỏ-đỏ-nâu) | 200đ | Tìm mua |
| VR1 | Biến trở núm vặn 10kΩ (B10K) | 4.000đ | Tìm mua |
| SW1 | Nút nhấn 4 chân 6×6mm | 1.500đ | Tìm mua |
| Tổng (chưa gồm board hàn, dây, thiếc) | 84.500đ |
Các bước làm
Code nạp cho mạch
Chọn board Arduino Nano.
/*
Mạch Gọn — Dãy 8 đèn LED chạy đuổi (Arduino Nano)
Chân : D2..D9 -> điện trở -> 8 LED (chân ngắn về GND)
A0 <- chân giữa biến trở 10k (chỉnh tốc độ)
D10 nút đổi hiệu ứng, nối GND (INPUT_PULLUP)
Bốn hiệu ứng: chạy đuổi, con mắt quét, nhấp nháy xen kẽ, sáng dần.
*/
#include <Arduino.h>
#include <EEPROM.h>
// ---------- Cấu hình ----------
const uint8_t CHAN_LED[8] = { 2, 3, 4, 5, 6, 7, 8, 9 }; // đổi thứ tự ở đây nếu hàn khác
const uint8_t PIN_NUM = A0, PIN_NUT = 10;
const uint16_t NHANH_NHAT_MS = 20; // vặn núm hết cỡ
const uint16_t CHAM_NHAT_MS = 400; // vặn núm về 0
const uint16_t CHONG_DOI_MS = 180;
const uint8_t SO_HIEU_UNG = 4;
const int EE_DIA_CHI = 0;
const uint8_t EE_MAGIC = 0xA7;
uint8_t hieuUng = 0, buoc = 0;
bool nutDangNhan = false;
uint32_t mocBuoc = 0, mocNhanNut = 0, mocInLog = 0;
uint16_t chuKy = 120;
void batTat(uint8_t mask) { // mỗi bit một đèn
for (uint8_t i = 0; i < 8; i++) digitalWrite(CHAN_LED[i], (mask >> i) & 1);
}
uint8_t maskTheoHieuUng(uint8_t hu, uint8_t b) {
switch (hu) {
case 0: return 1 << (b % 8); // chạy đuổi một chiều
case 1: { uint8_t v = b % 14; return 1 << (v < 8 ? v : 14 - v); } // quét qua lại
case 2: return (b % 2) ? 0b10101010 : 0b01010101; // nhấp nháy xen kẽ
default: { uint8_t n = b % 9; return n == 0 ? 0 : (uint8_t)((1u << n) - 1); } // sáng dần
}
}
void luuHieuUng() {
EEPROM.update(EE_DIA_CHI, EE_MAGIC);
EEPROM.update(EE_DIA_CHI + 1, hieuUng);
}
void setup() {
for (uint8_t i = 0; i < 8; i++) { pinMode(CHAN_LED[i], OUTPUT); digitalWrite(CHAN_LED[i], LOW); }
pinMode(PIN_NUT, INPUT_PULLUP);
Serial.begin(115200);
if (EEPROM.read(EE_DIA_CHI) == EE_MAGIC) {
uint8_t h = EEPROM.read(EE_DIA_CHI + 1);
if (h < SO_HIEU_UNG) hieuUng = h;
}
Serial.print(F("Mach Gon - 8 LED chay duoi. Hieu ung: ")); Serial.println(hieuUng + 1);
batTat(0xFF); // thử cả 8 đèn 1 giây
delay(1000);
batTat(0);
}
void loop() {
uint32_t bayGio = millis();
// 1. Núm vặn quyết định tốc độ
int so = analogRead(PIN_NUM);
chuKy = map(so, 0, 1023, CHAM_NHAT_MS, NHANH_NHAT_MS);
// 2. Nút đổi hiệu ứng (có chống dội)
bool dangNhan = (digitalRead(PIN_NUT) == LOW);
if (dangNhan && !nutDangNhan && bayGio - mocNhanNut > CHONG_DOI_MS) {
nutDangNhan = true;
mocNhanNut = bayGio;
hieuUng = (hieuUng + 1) % SO_HIEU_UNG;
buoc = 0;
luuHieuUng();
Serial.print(F("Doi hieu ung: ")); Serial.println(hieuUng + 1);
}
if (!dangNhan) nutDangNhan = false;
// 3. Chạy hiệu ứng theo nhịp
if (bayGio - mocBuoc >= chuKy) {
mocBuoc = bayGio;
batTat(maskTheoHieuUng(hieuUng, buoc));
buoc++;
}
// 4. Nhật ký 2 giây một lần
if (bayGio - mocInLog >= 2000) {
mocInLog = bayGio;
Serial.print(F("hieu_ung=")); Serial.print(hieuUng + 1);
Serial.print(F(" A0=")); Serial.print(so);
Serial.print(F(" chu_ky=")); Serial.print(chuKy); Serial.println(F("ms"));
}
}
🔌 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.
- 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.
- net L7_DRV: U1.D8 → R7.1
- net GND: U1.GND → VR1.3
- net GND: VR1.3 → D1.K
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: Dãy 8 đèn LED chạy đuổi, đổi hiệu ứng và chỉnh tốc độ bằng núm vặn
Kích thước board: 83,8×81,3 mm · 69 lỗ khoan (mũi 0,8, 0,9 và 1 mm) · 30 đoạn mạch, tổng 913,7 mm · 3 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 và 1mm, 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ẽ đỏ.
- Mạch này còn 3 CẦU NHẢY: hàn đoạn dây đơn ở mặt linh kiện theo nét đỏ gạch trên bản vẽ:
- cầu nhảy net L7_DRV: từ U1.D8 sang R7.1
- cầu nhảy net GND: từ U1.GND sang VR1.3
- cầu nhảy net GND: từ VR1.3 sang D1.K
- 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
Đo kiểm bằng đồng hồ vạn năng
| Giữa chân 5V và GND của Nano | 4,7 – 5,1V |
| Giữa A0 và GND khi vặn núm hết một chiều | gần 0V; vặn hết chiều kia gần 5V |
| Giữa D10 và GND khi nhấn nút | dưới 0,2V |
| Giữa chân dài một LED đang sáng và GND | khoảng 2V (LED xanh dương khoảng 3V) |
| Nối tiếp đồng hồ ở thang mA với một LED | 8 – 11mA |
Sửa lỗi thường gặp
Một đèn không bao giờ sáng
Thường là cắm ngược LED đó. Rút điện, đo thang đi-ốt: que đỏ vào chân dài phải thấy đèn lóe. Hoặc mối hàn điện trở bị nguội.
Cả dãy mờ và Nano nóng
Thiếu điện trở hạn dòng ở đâu đó, hoặc dùng trở quá nhỏ. Đo lại trị số: 330Ω là cam-cam-nâu, 220Ω là đỏ-đỏ-nâu.
Vặn núm không đổi tốc độ
Chân giữa biến trở chưa vào A0, hoặc hai chân ngoài chưa nối 5V và GND. Xem số đọc A0 trên Serial Monitor khi vặn.
Bấm nút nhảy 2–3 hiệu ứng
Nút bị dội tiếp điểm. Code đã chống dội 180ms; nếu vẫn nhảy thì hàn thêm tụ 100nF song song nút.
Thứ tự đèn chạy lộn xộn
Thứ tự hàn không khớp: D2 phải nối đèn đầu dãy, D9 nối đèn cuối dãy. Sửa lại thứ tự dây hoặc đổi mảng CHAN_LED trong code.
⚠️ An toàn
- Mạch dùng 5V từ cổng USB, an toàn khi chạm.
- Không nhìn thẳng vào LED xanh dương ở khoảng cách gần trong thời gian dài.
- Mạch có đèn nhấp nháy: không dùng cho người nhạy cảm với ánh sáng nhấp nháy (có tiền sử động kinh do ánh sáng); nếu cần, đặt tốc độ chậm.