Bài nhập môn: nút nhấn bật/tắt đèn LED (Arduino Nano)
Bài đầu tiên cho người mới học điện tử: bấm nút một lần đèn sáng, bấm lần nữa đèn tắt. Học được cách nối LED đúng chiều, tính điện trở hạn dòng, trở kéo lên bên trong chip và chống dội phím bằng code.
✅ Đã kiểm thử
Xem chi tiết 9 phép đo
Đèn đang sáng, đang bấm nút
- D1: dòng 9.0mA (cho phép 20.0mA).
- Chân D9 cấp 9.0mA (an toàn ≤ 20.0mA).
- Tổng dòng đỉnh từ USB 39.0mA (đủ với cục sạc 5V 1A).
- Dòng qua LED (≈9mA: đủ sáng, an toàn): 9.0mA ✓
- Dòng chân D9 phải cấp (giới hạn 20mA): 9.0mA ✓
- Chân D2 khi bấm nút đọc mức THẤP: 0.00V ✓
Đèn tắt, thả nút
- Tổng dòng đỉnh từ USB 30.0mA (đủ với cục sạc 5V 1A).
- LED tắt: 0.0mA ✓
- Chân D2 khi thả nút đọc mức CAO: 4.98V ✓
Nguyên lý hoạt động
Chân D9 xuất 5V khi muốn đèn sáng. LED đỏ cần khoảng 1,9V, phần còn lại 3,1V rơi trên trở 330Ω → dòng I = 3,1V ÷ 330Ω ≈ 9mA (định luật Ôm). Không có trở, dòng sẽ vọt lên rất lớn làm cháy LED và hỏng chân Arduino. Nút nhấn nối D2 xuống GND; lệnh pinMode(D2, INPUT_PULLUP) bật một trở ~40kΩ bên trong chip kéo D2 lên 5V, nên thả nút đọc được HIGH, bấm nút đọc được LOW. Khi bấm, lá kim loại trong nút bị nảy vài mili giây tạo ra nhiều lần bật/tắt giả (gọi là dội phím); code chỉ chấp nhận thay đổi khi tín hiệu đứng yên đủ 30ms.
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 | đen GND | U1 GND ⟷ D1 K · chân ngắn (−) ⟷ SW1 2 | — |
| 2 | vàng LED_DRV | U1 D9 ⟷ R1 1 | — |
| 3 | xanh lá LED_A | R1 2 ⟷ D1 A · chân dài (+) | — |
| 4 | xanh dương BTN | U1 D2 ⟷ SW1 1 | — |
Danh sách linh kiện
| Ký hiệu | Linh kiện | Giá tham khảo | |
|---|---|---|---|
| U1 | Arduino Nano V3 (ATmega328P, chip nạp CH340) kèm cáp USB | 85.000đ | Tìm mua |
| D1 | LED đỏ 5mm (red) | 300đ | Tìm mua |
| R1 | Điện trở 330Ω 1/4W (cam-cam-nâu) | 100đ | Tìm mua |
| SW1 | Nút nhấn 4 chân 6×6mm | 1.000đ | Tìm mua |
| Tổng (chưa gồm board hàn, dây, thiếc) | 86.400đ |
Các bước làm
Code nạp cho mạch
Chọn board Arduino Nano.
/*
Mạch Gọn — Bài nhập môn: nút nhấn bật/tắt LED
Board: Arduino Nano
Chân : D9 -> trở 330Ω -> LED -> GND
D2 -> nút nhấn -> GND (dùng trở kéo lên bên trong chip)
*/
const uint8_t PIN_LED = 9;
const uint8_t PIN_BTN = 2;
const unsigned long DEBOUNCE_MS = 30; // thời gian chờ tín hiệu nút ổn định
bool ledOn = false; // trạng thái đèn hiện tại
bool btnStable = HIGH; // trạng thái nút đã ổn định (HIGH = đang thả)
bool btnLastRead = HIGH; // lần đọc gần nhất
unsigned long lastChange = 0; // thời điểm tín hiệu thay đổi gần nhất
unsigned long pressCount = 0;
void setup() {
Serial.begin(115200);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_BTN, INPUT_PULLUP); // thả nút = HIGH, bấm nút = LOW
digitalWrite(PIN_LED, LOW);
Serial.println(F("San sang. Bam nut de bat/tat den."));
}
void loop() {
bool reading = digitalRead(PIN_BTN);
// tín hiệu vừa đổi -> ghi lại thời điểm, chờ nó đứng yên
if (reading != btnLastRead) {
btnLastRead = reading;
lastChange = millis();
}
// tín hiệu đã đứng yên đủ lâu và khác trạng thái cũ -> chấp nhận
if (millis() - lastChange >= DEBOUNCE_MS && reading != btnStable) {
btnStable = reading;
if (btnStable == LOW) { // vừa bấm xuống
ledOn = !ledOn;
digitalWrite(PIN_LED, ledOn ? HIGH : LOW);
pressCount++;
Serial.print(F("Lan bam thu "));
Serial.print(pressCount);
Serial.println(ledOn ? F(": DEN SANG") : F(": DEN TAT"));
}
}
}
🔌 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.
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: Bài nhập môn: nút nhấn bật/tắt đèn LED (Arduino Nano)
Kích thước board: 48,3×48,3 mm · 38 lỗ khoan (mũi 0,8, 0,9 và 1 mm) · 9 đoạn mạch, tổng 153 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 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ẽ đỏ.
- 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
| Hai đầu điện trở 330Ω khi đèn sáng | khoảng 3,0V (≈9mA) |
| Chân D2 với GND khi không bấm | khoảng 5V |
| Chân D2 với GND khi đang bấm | 0V |
Sửa lỗi thường gặp
LED không sáng
Xoay ngược LED (rất hay gặp). Kiểm tra trở có cùng hàng với chân D9 không. Thử mở code mẫu File → Examples → Basics → Blink để chắc Nano hoạt động.
Bấm nút đèn lúc đổi lúc không
Nút đang cắm 2 chân luôn thông nhau. Dùng 2 chân chéo nhau của nút.
Máy tính không nhận Arduino
Cài driver CH340, đổi cáp USB (nhiều cáp chỉ để sạc, không có dây dữ liệu), thử cổng USB khác.
⚠️ An toàn
- Chỉ dùng điện 5V từ cổng USB, an toàn tuyệt đối khi chạm tay.
- Luôn có điện trở nối tiếp với LED.