Tìm kiếm mã

Bài 98-6: Trò chơi LED bập bênh với Arduino

Bài 98-6: Trò chơi LED bập bênh với Arduino

Dự án LED bập bênh là một bài tập cơ bản kinh điển dành cho người mới bắt đầu, giúp dạy một trong những khái niệm quan trọng nhất trong lập trình Arduino: làm cho hai đầu ra luân phiên nhau theo một nhịp thời gian. Chỉ với hai đèn LED, hai điện trở và một vài dây nối, bạn sẽ xây dựng một mạch điện trong đó một đèn LED xanh lá và một đèn LED đỏ thay phiên nhau sáng lên, mô phỏng chuyển động lên xuống của một chiếc bập bênh ở sân chơi. Đây là một dự án đơn giản, nhưng nó giới thiệu những khối xây dựng cốt lõi — định nghĩa chân, hằng số thời gian và các lệnh gọi digitalWrite() tuần tự — những thứ xuất hiện trong hầu hết mọi bản phác thảo Arduino mà bạn sẽ viết.

hai đèn LED với điện trở trên breadboard được kết nối với Arduino
hai đèn LED với điện trở trên breadboard được kết nối với Arduino

Bởi vì mô hình bập bênh thực ra chỉ là "bật một thứ lên, tắt nó đi, bật thứ kia lên, tắt nó đi, lặp lại", nên cấu trúc tương tự có thể mở rộng thành hàng tá ứng dụng thực tế. Dưới đây là một vài ý tưởng để khơi gợi trí tưởng tượng của bạn:

  • Đèn chỉ báo luân phiên — một cặp "an toàn / cảnh báo" trên bảng điều khiển thay đổi qua lại.
  • Mô phỏng đường ngang tàu hỏa — hai đèn nhấp nháy luân phiên khi tàu đến gần.
  • Biển chỉ hướng hai làn — một màn hình mũi tên "đi lối này / đi lối kia" cho lối vào nhà hoặc bãi đỗ xe.
  • Trang trí ngày lễ — đèn LED đỏ và xanh lá thay đổi vị trí để tạo hiệu ứng nhấp nháy lễ hội.
  • Nền tảng học tập — các kỹ năng về thời gian và trình tự ở đây cũng chính là những kỹ năng bạn sẽ sử dụng sau này cho đèn giao thông, đèn đi bộ và hoạt ảnh nhiều đèn LED.

Hiệu ứng bập bênh hoạt động như thế nào

Đèn LED là một diode phát sáng, và ký hiệu của nó là một hình tam giác chỉ vào một đường thẳng. Đường thẳng phẳng là cathode (cực âm), và mặt sau của hình tam giác là anode (cực dương). Trên một đèn LED thực tế, chân dài hơn là anode và chân ngắn hơn, có cạnh phẳng là cathode. Dòng điện chạy từ anode đến cathode, vì vậy anode kết nối về phía chân Arduino của bạn và cathode kết nối qua một điện trở xuống đất (trong video ở phút 02:29).

Điện trở rất quan trọng. Một đèn LED nhỏ thông thường cần khoảng 2 V trên nó và khoảng 10 mA dòng điện. Nếu Arduino của bạn cung cấp 5 V, thì 3 V còn lại phải được điện trở làm sụt giảm. Sử dụng định luật Ohm, R = V / I = 3 V / 0,01 A = 300 Ω. Bất kỳ giá trị nào từ khoảng 300 Ω đến 1000 Ω đều hoạt động — giá trị cao hơn chỉ đơn giản làm đèn LED mờ hơn (trong video ở phút 03:49).

Đối với bập bênh, hai đèn LED được đấu dây giống hệt nhau: mỗi anode đi đến chân Arduino riêng của nó, và mỗi cathode đi qua điện trở riêng của nó đến một thanh ray nối đất chung. Sự khác biệt duy nhất giữa hai đèn là chúng được gắn vào chân nào.

Phần cứng và linh kiện

  • 1 × bo mạch Arduino (Uno, Nano, Mega hoặc tương tự)
  • 2 × đèn LED — một đỏ, một xanh lá (hai màu bất kỳ đều được)
  • 2 × điện trở, 300 Ω đến 1000 Ω (220 Ω hoặc 330 Ω là những lựa chọn phổ biến)
  • 1 × breadboard
  • Dây nối (dây DuPont)
  • Cáp USB để lập trình và cấp nguồn

Chỉ vậy thôi — không có nút nhấn, không có biến trở, không có cảm biến. Đây là danh sách linh kiện tối giản nhất có thể một cách có chủ đích để bạn có thể tập trung hoàn toàn vào logic mã.

Hướng dẫn đấu dây

Sơ đồ Arduino cho hai đèn LED bập bênh
Sơ đồ Arduino cho hai đèn LED bập bênh
Đấu dây Arduino cho hai đèn LED bập bênh
Đấu dây Arduino cho hai đèn LED bập bênh

Việc đấu dây có tính đối xứng và dễ làm theo. Cắm cả hai đèn LED vào breadboard. Kết nối anode (chân dài hơn) của đèn LED xanh lá với Arduino chân 2 và anode của đèn LED đỏ với Arduino chân 3. Mỗi cathode (chân ngắn hơn) kết nối với một đầu của điện trở riêng, và đầu còn lại của cả hai điện trở nối vào một thanh ray chung dẫn đến chân GND của Arduino (trong video ở phút 27:45).

Bởi vì cả hai đèn LED dùng chung thanh ray nối đất, chỉ cần một dây nối đất từ breadboard trở về Arduino. Hai dây tín hiệu — một đến chân 2, một đến chân 3 — là những kết nối duy nhất thay đổi giữa hai đèn LED.

Giải thích mã

Bản phác thảo được cố ý viết ngắn để mỗi dòng đều có ý nghĩa. Dưới đây là những phần bạn thực sự sẽ muốn điều chỉnh:

Định nghĩa chân

const int greenLEDPin = 2;//define a pin for green LED
const int redLEDPin = 3;//define a pin for red LED

Hai hằng số này cho Arduino biết các đèn LED được kết nối với chân nào. Nếu bạn đấu dây đèn LED của mình vào các chân khác — ví dụ chân 8 và chân 9 — thì đây là nơi duy nhất bạn cần thay đổi. Từ khóa const có nghĩa là giá trị được cố định trong suốt vòng đời của chương trình và không thể bị vô tình ghi đè sau này.

Hằng số thời gian

const int ON_TIME = 500;

Giá trị đơn này điều khiển thời gian mỗi đèn LED sáng, tính bằng mili giây. Giá trị mặc định là 500 nghĩa là mỗi đèn LED sáng trong nửa giây, vì vậy một chu kỳ đầy đủ xanh-rồi-đỏ mất một giây. Giảm xuống 200 để nhấp nháy nhanh, hoặc tăng lên 1000 để có nhịp chậm, dứt khoát một giây mỗi đèn LED (trong video tại 30:17). Vì cả hai đèn LED dùng chung hằng số này, chúng luôn đồng bộ — bập bênh luôn cân bằng.

Thiết lập

Bên trong setup(), hai chân được khai báo là đầu ra bằng pinMode(), và màn hình nối tiếp được khởi động ở tốc độ 9600 baud để bạn có thể xem các thông báo trạng thái đèn LED cuộn qua. Phần này chạy một lần, khi bo mạch được cấp nguồn.

Vòng lặp

Hàm loop() là nơi diễn ra hoạt động bập bênh. Nó thực hiện bốn hành động theo trình tự: bật đèn LED xanh, chờ ON_TIME mili giây, tắt đèn, rồi làm tương tự với đèn LED đỏ. Khi vòng lặp đến cuối, nó tự động bắt đầu lại từ đầu — đó là toàn bộ hành vi "bập bênh". Không có biến trạng thái và không có điều kiện nào cần kiểm tra, vì mẫu này hoàn toàn tuần tự.

Dự án trực tiếp và minh họa

Sau khi tải mã lên, bạn sẽ thấy đèn LED xanh sáng trong nửa giây, rồi đến đèn LED đỏ, rồi lại xanh, liên tục không ngừng. Mở màn hình nối tiếp (Tools → Serial Monitor, hoặc Ctrl+Shift+M) sẽ hiển thị "Green LED ON" và "Red LED ON" được in ra khi mẫu chạy, đây là cách hữu ích để xác nhận thời gian khớp với giá trị bạn đặt.

Hãy thử đổi ON_TIME thành 200 và tải lại — các đèn LED sẽ hoán đổi nhanh hơn rõ rệt. Đặt thành 1000 và bập bênh sẽ trở thành sự luân phiên chậm rãi, dứt khoát. Bạn cũng có thể ngắt Arduino khỏi USB và cấp nguồn bằng pin hoặc bộ chuyển đổi 5 V; chương trình sẽ chạy y hệt vì nó đã được lưu trong bộ nhớ của bo mạch.

Các dự án liên quan từ video này

Các chương

  • [00:00] Tổng quan về 10 dự án đèn LED Arduino
  • [01:22] Giới thiệu khóa học Arduino từng bước
  • [02:29] Hiểu về đèn LED: ký hiệu, cực dương và cực âm
  • [03:49] Tính điện trở nối tiếp cho đèn LED bằng định luật Ohm
  • [27:32] Giới thiệu dự án đèn LED bập bênh
  • [27:45] Sơ đồ đấu dây cho dự án bập bênh
  • [28:28] Giải thích mã bập bênh
  • [30:06] Minh họa bập bênh với các thời gian khác nhau
  • [30:47] Tổng quan dự án đèn chạy
  • [36:41] Đèn chạy được điều khiển bằng nút nhấn
  • [42:25] Đồng hồ đo mức điện áp LED với biến trở
  • [49:25] Dự án đèn giao thông Arduino

Hình ảnh

Arduino wiring for two LEDs see saw
Arduino wiring for two LEDs see saw
Arduino schematic for two LEDs see saw
Arduino schematic for two LEDs see saw
330_ohm_resistor
330_ohm_resistor
hai đèn LED với điện trở trên breadboard kết nối với Arduino
hai đèn LED với điện trở trên breadboard kết nối với Arduino
938-Lessson 98-LED-6: Arduino code two LED, See-saw
Ngôn ngữ: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Tập tin📁

Thư viện Arduino (tệp nén)

Hướng dẫn Sử dụng