← Quay lại danh sách Arduino C++
Khóa học:

Bài 1: Làm Quen Với Arduino C++ Và Đèn LED

🎯 Độ khó: Dễ ⏱️ Thời lượng: 45 phút 📘 Khóa: Arduino C++
💡 Tóm tắt bài học: Bài học "Làm Quen Với Arduino C++ Và Đèn LED" thuộc giáo trình ARDUINO-CPP.
📖 1. Lý Thuyết & Kiến Thức Nền Tảng

🔹 Kiến Trúc Phần Cứng Vi Điều Khiển Arduino UNO R3

Vi điều khiển Arduino UNO R3 dựa trên vi xử lý 8-bit ATmega328P là bo mạch tiêu chuẩn vàng trong giáo dục STEM và sáng tạo phần cứng:
◦Vi xử lý (MCU): ATmega328P hoạt động ở xung nhịp 16 MHz, mang lại khả năng thực thi lệnh điều khiển thời gian thực chính xác.
◦Hệ thống bộ nhớ:
◦32 KB Flash Memory (trong đó 0.5 KB dùng cho Bootloader).
◦2 KB SRAM lưu trữ biến trong quá trình thực thi.
◦1 KB EEPROM lưu dữ liệu không bị mất khi tắt nguồn.
◦Cổng kết nối & Chân GPIO:
◦14 chân Digital I/O (D0 đến D13), trong đó các chân hỗ trợ xuất tín hiệu số logic HIGH (5V) và LOW (0V). Trong bài này ta sử dụng 3 chân số: D9, D10, D11.
◦6 chân Analog Input (A0 đến A5) với độ phân giải 10-bit (0 - 1023).
◦Nguồn điện & Mức Logic: Điện áp logic chuẩn là 5V DC. Nguồn cấp qua cổng USB Type-B (5V) hoặc Jack cắm DC tròn (7V - 12V).

🔹 Nguyên Lý Hoạt Động Của Đèn LED & Điện Trở Hạn Dòng

Đèn LED (Light Emitting Diode) là linh kiện bán dẫn chỉ cho dòng điện chạy qua theo một chiều từ cực dương (Anode) sang cực âm (Cathode):
◦Điện áp rơi (Forward Voltage V_f): Thông thường từ 1.8V - 2.2V đối với LED Đỏ/Vàng và 3.0V - 3.2V đối với LED Xanh lá/Xanh dương.
◦Dòng điện định mức (I_f): Dao động từ 10mA - 20mA. Để bảo vệ LED và chân vi điều khiển không bị quá tải dòng điện dẫn đến chập cháy, ta phải mắc nối tiếp điện trở hạn dòng R (220Ω hoặc 330Ω):
R = (V_CC - V_f / I_f) = (5V - 2V / 0.015A) ≈ 200Ω → chọn chuẩn 220Ω
🔌 2. Sơ Đồ Đấu Dây & Linh Kiện
Linh KiệnChân Linh KiệnChân Arduino UNO
Đèn LED ĐỏChân Anode (+) (chân dài)Chân Digital 9 (D9) qua điện trở 220Ω
Đèn LED VàngChân Anode (+) (chân dài)Chân Digital 10 (D10) qua điện trở 220Ω
Đèn LED XanhChân Anode (+) (chân dài)Chân Digital 11 (D11) qua điện trở 220Ω
Các đèn LEDChân Cathode (-) (chân ngắn)Nối chung chân GND
Sơ đồ cắm dây thực tế bo mạch Arduino UNO R3 với 3 đèn LED
📌 Sơ đồ cắm dây thực tế bo mạch Arduino UNO R3 với 3 đèn LED

🔹 Hướng Dẫn & Nguyên Lý Nối Dây Thực Tế

◦Cắm chân tín hiệu điều khiển 3 LED: Cắm chân Anode dương của LED Đỏ, Vàng, Xanh nối qua các điện trở hạn dòng 220Ω lần lượt vào 3 chân số D9, D10, D11.
◦Nối đất chung GND: Chân âm Cathode của 3 đèn LED được nối chung về đường cực âm trên Testboard và cắm vào chân GND của vi điều khiển Arduino.
💻 3. Chương Trình Mã Nguồn C++ / WebServer
⚡ Arduino C++ (ESP32)
// Khai bao cac chan noi den LED

const int LED_RED    = 9;  // LED Do noi chan D9

const int LED_YELLOW = 10; // LED Vang noi chan D10

const int LED_GREEN  = 11; // LED Xanh noi chan D11


void setup() {
  // Cau hinh cac chan GPIO la ngo ra (OUTPUT)

  pinMode(LED_RED, OUTPUT);
  pinMode(LED_YELLOW, OUTPUT);
  pinMode(LED_GREEN, OUTPUT);

  // Khoi tao trang thai tat tat ca cac den

  digitalWrite(LED_RED, LOW);
  digitalWrite(LED_YELLOW, LOW);
  digitalWrite(LED_GREEN, LOW);
}

void loop() {
  // 1. Bat LED Do, tat cac LED con lai trong 1000ms (1 giay)

  digitalWrite(LED_RED, HIGH);
  digitalWrite(LED_YELLOW, LOW);
  digitalWrite(LED_GREEN, LOW);
  delay(1000);

  // 2. Bat LED Vang trong 500ms

  digitalWrite(LED_RED, LOW);
  digitalWrite(LED_YELLOW, HIGH);
  digitalWrite(LED_GREEN, LOW);
  delay(500);

  // 3. Bat LED Xanh trong 1000ms

  digitalWrite(LED_RED, LOW);
  digitalWrite(LED_YELLOW, LOW);
  digitalWrite(LED_GREEN, HIGH);
  delay(1000);
}
📝 4. Giải Thích Chi Tiết Mã Nguồn

🔹 Giải Thích Chi Tiết Mã Nguồn C++

▪Dòng 2--4 (const int LED_RED = 9...): Định nghĩa các hằng số nguyên đại diện cho số hiệu chân GPIO trên bo mạch Arduino. Việc dùng const int giúp mã nguồn trực quan, dễ quản lý và không chiếm bộ nhớ RAM khi biên dịch.
◦Hàm setup: Được Arduino thực thi duy nhất một lần ngay sau khi cấp nguồn hoặc nhấn nút Reset:
◦pinMode(pin, OUTPUT): Cấu hình thanh ghi vi điều khiển để chân đó hoạt động ở chế độ xuất dữ liệu (Output Driver).
◦digitalWrite(pin, LOW): Đặt mức điện áp ra chân là 0V để đảm bảo tất cả đèn LED đều tắt khi vừa khởi động mạch.
◦Hàm loop: Chạy lặp đi lặp lại vô tận sau khi hàm setup hoàn tất:
◦digitalWrite(pin, HIGH): Xuất điện thế +5V ra chân GPIO, tạo dòng điện chạy qua LED làm LED phát sáng rực rỡ.
◦digitalWrite(pin, LOW): Xuất điện thế 0V làm tắt dòng điện qua LED.
◦delay(milliseconds): Tạm dừng toàn bộ vi điều khiển trong khoảng thời gian xác định tính bằng mili-giây (1000ms = 1s) để mắt người có thể quan sát rõ hiệu ứng chuyển đổi giữa các trạng thái đèn.
✨ 5. Bài Tập Thực Hành & Kết Quả
[Bài Tập Thực Hành & Vận Dụng C++ - Bài 1: Chớp Tắt 3 Đèn LED]
◦Bài tập 1 (Thay đổi tần số nhịp): Sửa đổi các giá trị trong hàm delay thành 200ms để tạo hiệu ứng chớp tắt nhanh kiểu đèn cảnh báo xe cứu thương.
◦Bài tập 2 (Hiệu ứng sáng dồn bằng C++): Viết lại vòng lặp loop để thực hiện hiệu ứng: Bật LED 9 → Giữ nguyên LED 9 và bật thêm LED 10 → Giữ nguyên cả hai và bật tiếp LED 11 → Tắt toàn bộ 3 LED sau 1s.
◦Bài tập 3 (Sử dụng mảng & vòng lặp for): Khai báo mảng int leds[] = {9, 10, 11;} và dùng vòng lặp for để tối ưu hóa việc khởi tạo pinMode trong hàm setup và quét sáng LED tuần tự trong loop.
◦Bài tập 4 (Điều chỉnh độ sáng bằng PWM): Sử dụng hàm analogWrite(LED_RED, value) với giá trị value từ 0 đến 255 để tạo hiệu ứng đèn thở (Breathing LED) tăng dần rồi mờ dần trên chân D9.