ĐIỀU KHIỂN LED 7 ĐOẠN

Chào các bạn!
Hôm nay chúng ta cùng thực hành Bài 9-10: Hiển thị số bằng LED 7 đoạn (7-segment display) trong môi trường mô phỏng Tinkercad.

🧠 MỤC TIÊU BÀI HỌC

  • Làm quen với linh kiện LED 7 đoạn loại cathode chung
  • Kết nối 7 chân điều khiển của LED 7 đoạn với Arduino
  • Lập trình để hiển thị các số từ 0 đến 9

🛠️ PHẦN 1: CHUẨN BỊ LINH KIỆN

🔧 Truy cập https://www.tinkercad.com. Trong Tinkercad, bạn hãy kéo vào các linh kiện sau:

  • Arduino UNO
  • 1 LED 7 đoạn (common cathode – CC)
  • 7 điện trở 220Ω (để giới hạn dòng)
  • Dây nối

🔌 PHẦN 2: KẾT NỐI MẠCH

🧩 Cấu tạo LED 7 đoạn:

LED 7 đoạn có 10 chân, gồm:

  • 7 chân điều khiển các đoạn: a, b, c, d, e, f, g
  • 2 chân COM (Common cathode): bạn nối GND

✳️ Cách nối cụ thể:

SegmentArduino Pin
aD2
bD3
cD4
dD5
eD6
fD7
gD8
  • Nối điện trở 220Ω từ mỗi chân a–g đến các chân D2–D8
  • Nối COM (2 chân cathode) xuống GND

📌 Tất cả các đoạn đều sáng khi xuất tín hiệu HIGH, vì đây là loại cathode chung.


💻 PHẦN 3: LẬP TRÌNH HIỂN THỊ SỐ

✏️ Code mẫu: Hiển thị tuần tự từ 0 đến 9

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a-g

// Bảng mã bit cho các số 0–9, theo thứ tự a-b-c-d-e-f-g (HIGH = bật)
const byte digits[10][7] = {
{1,1,1,1,1,1,0}, // 0
{0,1,1,0,0,0,0}, // 1
{1,1,0,1,1,0,1}, // 2
{1,1,1,1,0,0,1}, // 3
{0,1,1,0,0,1,1}, // 4
{1,0,1,1,0,1,1}, // 5
{1,0,1,1,1,1,1}, // 6
{1,1,1,0,0,0,0}, // 7
{1,1,1,1,1,1,1}, // 8
{1,1,1,1,0,1,1} // 9
};

void setup() {
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
}

void loop() {
for (int num = 0; num < 10; num++) {
// Hiển thị từng số
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], digits[num][i]);
}
delay(1000); // Đợi 1 giây
}
}

🧠 GIẢI THÍCH CODE

  • segmentPins[]: ánh xạ các đoạn a–g đến D2–D8
  • digits[][]: bảng mã 0–9, mỗi hàng là mã điều khiển 7 đoạn
  • Trong loop(), Arduino duyệt qua từng số, bật/tắt đoạn tương ứng

▶️ PHẦN 4: CHẠY MÔ PHỎNG

  1. Nhấn Start Simulation
  2. Quan sát LED 7 đoạn hiển thị các số từ 0 đến 9, mỗi số hiển thị trong 1 giây

🎯 PHẦN 5: TỔNG KẾT

Qua bài học này, các bạn đã:

  • Làm quen với LED 7 đoạn loại cathode chung
  • Biết cách kết nối và điều khiển từng đoạn qua Arduino
  • Hiển thị được số từ 0 đến 9 bằng cách lập trình logic bit

📘 Gợi ý mở rộng:

  • Kết hợp nút nhấn để tăng số (0–9) bằng tay
  • Sử dụng 2 LED 7 đoạn để hiển thị 2 chữ số (đếm từ 00 đến 99)
  • Kết hợp với cảm biến để hiển thị giá trị đo (ví dụ nhiệt độ)

BÀI TẬP THỰC HÀNH

🧪 Bài 1: Hiển thị số đếm tăng dần từ 0 đến 9 khi nhấn nút

🎯 Mục tiêu:

  • Mỗi lần nhấn nút → tăng số lên 1 và hiển thị trên LED 7 đoạn
  • Khi vượt quá 9 → quay về 0

🧠 Kỹ năng:

  • Đọc nút nhấn (INPUT_PULLUP)
  • Tăng biến đếm và hiển thị số
  • Tránh lặp do giữ nút (debounce đơn giản)

🧪 Bài 2: Hiển thị số ngược từ 9 xuống 0 tự động mỗi giây

🎯 Mục tiêu:

  • Dùng millis() để đếm lùi từ 9 → 0 → lặp lại

🧠 Kỹ năng:

  • Quản lý thời gian không dùng delay()
  • Dùng mảng mã LED 7 đoạn
  • Xử lý biến giảm và quay vòng

🧪 Bài 3: Kết nối 2 LED 7 đoạn để hiển thị số từ 00 đến 99

🎯 Mục tiêu:

  • Dùng 2 LED 7 đoạn để hiển thị số 2 chữ số
  • Mỗi giây tăng số lên 1
  • Hiển thị đúng hàng chục và hàng đơn vị

🧠 Kỹ năng:

  • Tách số thành hàng chụchàng đơn vị
  • Điều khiển nhiều LED đồng thời
  • Quản lý mảng mã theo 2 cụm chân (a–g mỗi LED)

🧪 Bài 4: Đếm và hiển thị số lần phát hiện chuyển động từ cảm biến PIR

🎯 Mục tiêu:

  • Kết nối cảm biến chuyển động (PIR)
  • Mỗi lần có chuyển động → tăng số và hiển thị trên LED 7 đoạn

🧠 Kỹ năng:

  • Giao tiếp với cảm biến (Digital input)
  • Ứng dụng thực tế: đếm người, phát hiện vật thể
  • Hiển thị dữ liệu cảm biến theo thời gian thực

🧪 Bài 5: Nhận số từ Serial Monitor để hiển thị trên LED 7 đoạn

🎯 Mục tiêu:

  • Gửi số từ 0–9 (hoặc 00–99 nếu có 2 LED) qua Serial
  • Arduino hiển thị số đó trên LED 7 đoạn

🧠 Kỹ năng:

  • Giao tiếp UART
  • Phân tích chuỗi số (readStringUntil('\n') → toInt())
  • Điều khiển theo dữ liệu nhập từ máy tính