Tìm kiếm mã

Bài 98-10: Đèn giao thông Arduino

Bài 98-10: Đèn giao thông Arduino

Đèn giao thông là một trong những hệ thống hàng ngày mà chúng ta hiếm khi nghĩ đến — cho đến khi chúng ta tự làm một cái. Trong dự án này, bạn sẽ sử dụng Arduino để mô phỏng một chuỗi đèn giao thông thực tế: xanh bật, rồi vàng, rồi đỏ, mỗi đèn có thời lượng có thể cấu hình riêng, lặp lại vô tận. Đây là một dự án hoàn hảo cho người mới bắt đầu vì nó dạy logic định thời tuần tự, điều khiển nhiều đầu ra, và mối quan hệ giữa những gì bạn viết trong mã và những gì bạn thấy trong thế giới vật lý.

Đèn giao thông trong thực tế với ba màu

Ngoài phần trình diễn trên lớp, logic định thời mà bạn học ở đây xuất hiện ở khắp mọi nơi:

  • Xây dựng mô hình đèn giao thông thực tế cho đường sắt mô hình hoặc mô hình sa bàn
  • Tạo hệ thống chỉ báo theo thời gian cho xưởng hoặc gara (ví dụ: tín hiệu "an toàn để vào" / "chờ")
  • Học nền tảng cho tín hiệu qua đường dành cho người đi bộ với các pha kích hoạt bằng nút nhấn
  • Tạo nguyên mẫu chuỗi rơ-le định thời cho các tác vụ tự động hóa công nghiệp hoặc gia đình
  • Dạy trẻ em về tuần tự, định thời và điện tử với một vật thể quen thuộc, dễ nhận biết

Phần tuyệt nhất: toàn bộ hệ thống chạy độc lập sau khi nạp xong. Bạn lập trình Arduino một lần từ máy tính, sau đó cấp nguồn bằng pin hoặc bộ chuyển đổi và nó hoạt động mãi mãi — không cần PC (trong video ở 12:27).

red, green and yellow leds on bread board for traffic light project
đèn LED đỏ, xanh lá và vàng trên breadboard cho dự án đèn giao thông

Đèn Giao Thông Hoạt Động Như Thế Nào

Đèn giao thông thực ra chỉ là một chuỗi định thời của ba đầu ra. Arduino bật một LED tại một thời điểm, chờ một số giây đã đặt, tắt nó đi, và chuyển sang LED tiếp theo. Chu kỳ sau đó lặp lại. Trong ví dụ định thời của video, đèn xanh bật trong 3 giây, đèn vàng trong 1 giây, và đèn đỏ trong 3 giây — nhưng tất cả đều có thể điều chỉnh trong mã (trong video ở 49:44).

traffic light timing: red light
định thời đèn giao thông: đèn đỏ
traffic light timing: yellow light
định thời đèn giao thông: đèn vàng
traffic light timing: green light
định thời đèn giao thông: đèn xanh

Lý do chuỗi này có cảm giác thực tế là vì thời lượng phản ánh dòng chảy giao thông thực tế: xanh và đỏ dài hơn vì xe cần thời gian để đi qua giao lộ, trong khi vàng ngắn vì nó chỉ là cảnh báo chuyển tiếp. Bạn có thể tinh chỉnh những thời lượng này để phù hợp với bất kỳ tình huống nào bạn muốn.

Phần Cứng và Linh Kiện

Danh sách linh kiện cho dự án này rất tối giản:

  • 1 × bo mạch Arduino (Uno, Nano, hoặc Mega — bất cứ thứ gì có ít nhất 3 chân kỹ thuật số)
  • 3 × đèn LED (đỏ, vàng/cam, và xanh lá — các màu khác nhau làm hiệu ứng rõ ràng)
  • 3 × điện trở (300 Ω đến 1 kΩ đều hoạt động tốt; video sử dụng 1 kΩ)
  • 1 × breadboard
  • Dây nối jumper
  • Tùy chọn: pin lithium-ion hoặc bộ chuyển đổi nguồn 5 V để chạy độc lập

Video khuyến nghị sử dụng ba đèn LED có màu khác biệt rõ ràng để hiệu ứng đèn giao thông hiển thị ngay lập tức — nếu không bạn sẽ phải dán nhãn chúng (trong video ở 02:04).

Hiểu Về Giới Hạn Dòng Điện Cho LED

Mỗi đèn LED đều cần một điện trở giới hạn dòng mắc nối tiếp. Lý do là: đèn LED có điện áp thuận gần như cố định (thường khoảng 2 V đối với đèn LED 5 mm tiêu chuẩn), và nếu bạn kết nối nó trực tiếp với 5 V, dòng điện sẽ tăng vọt và phá hủy nó. Điện trở sẽ hấp thụ điện áp dư thừa.

Sử dụng định luật Ohm, nếu đèn LED giảm 2 V và nguồn cấp là 5 V, thì 3 V phải giảm qua điện trở. Với dòng mục tiêu khoảng 10 mA, giá trị điện trở tính ra khoảng 300 Ω (trong video ở 04:41). Trong thực tế, bất cứ giá trị nào từ 300 Ω đến 1 kΩ đều hoạt động — giá trị cao hơn chỉ làm đèn LED mờ hơn.

Hướng Dẫn Đấu Dây

Schematic of Arduino traffic light
Sơ đồ mạch đèn giao thông Arduino
Arduino LED traffic lights wiring
Đấu dây đèn giao thông LED Arduino

Mỗi đèn LED được đấu dây giống hệt nhau: cực dương (chân dài hơn) kết nối với một chân kỹ thuật số của Arduino, và cực âm (chân ngắn hơn, cạnh phẳng của thân LED) kết nối qua một điện trở xuống mass.

Trong phần đấu dây của video, đèn LED đỏ kết nối với chân 2, đèn LED vàng/cam với chân 3, và đèn LED xanh lá với chân 4 (trong video ở 50:50). Cả ba điện trở chia sẻ một thanh mass chung trên breadboard. Thứ tự màu sắc trên breadboard không quan trọng — điều quan trọng là số chân trong mã của bạn khớp với các chân bạn thực sự đã sử dụng.

Một mẹo hữu ích từ video: điện trở có thể đặt ở hai bên của LED. Bạn có thể đặt nó giữa chân Arduino và cực dương của LED, hoặc giữa cực âm của LED và chân nối đất — về mặt điện thì như nhau (trong video tại 51:52).

Giải thích mã

Chương trình đầy đủ có sẵn bên dưới bài viết. Ở đây chúng ta sẽ tập trung vào những phần bạn muốn tùy chỉnh.

Ở đầu sketch, ba định nghĩa chân ánh xạ mỗi LED tới một chân kỹ thuật số. Nếu bạn đã nối LED của mình tới các chân khác, hãy thay đổi các giá trị này:

const int greenLED = 4;
const int yellowLED = 3;
const int redLED = 2;

Tiếp theo là các hằng số thời gian. Chúng điều khiển thời gian mỗi đèn sáng, tính bằng mili giây. Video sử dụng mặc định 5000 ms cho xanh lá, 1000 ms cho vàng, và 5000 ms cho đỏ — nhưng trong phần demo, các giá trị này đã được đổi thành 3 s / 1 s / 3 s, và sau đó thành 10 s / 3 s / 10 s (trong video tại 56:27):

const int greenOnTime = 5000;
const int yellowOnTime = 1000;
const int redOnTime = 5000;

Để thay đổi nhịp điệu của đèn giao thông, chỉ cần sửa ba giá trị này. Muốn một giao lộ chậm, thực tế? Hãy thử 10000, 3000, 10000. Muốn demo nhanh? Hãy thử 1000, 300, 1000.

Bên trong loop(), trình tự rất đơn giản: bật xanh lá, chờ, tắt xanh lá; bật vàng, chờ, tắt vàng; bật đỏ, chờ, tắt đỏ; rồi lặp lại về xanh lá. Màn hình nối tiếp in mỗi lần thay đổi trạng thái để bạn có thể xác minh thời gian khớp với điều bạn mong đợi.

Trình diễn trực tiếp

Sau khi mã được tải lên, Arduino tự chạy chu trình. Trong video, đèn LED xanh lá sáng trước, sau khoảng thời gian của nó thì đèn vàng sáng lên trong chốc lát, rồi đến đèn đỏ, và chu trình bắt đầu lại ngay lập tức (trong video tại 55:20).

Màn hình nối tiếp phản ánh điều này bằng văn bản — "green LED on", "green off", "yellow on", v.v. — đây là cách tuyệt vời để xác nhận các giá trị thời gian của bạn đang hoạt động như mong muốn. Khi bạn sẵn sàng chạy nó không dây, hãy ngắt kết nối USB và kết nối pin lithium-ion hoặc bộ chuyển đổi 5 V; Arduino sẽ tiếp tục chạy chu trình mà không cần máy tính (trong video tại 56:11).

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

Các chương

  • [00:00] Tổng quan về 10 dự án LED Arduino
  • [01:22] Giới thiệu về khóa học Arduino từng bước
  • [02:29] LED là gì: ký hiệu, cực dương và cực âm
  • [03:49] Tính toán điện trở hạn dòng cho LED
  • [49:25] Giới thiệu về dự án đèn giao thông
  • [49:44] Giải thích thời gian đèn giao thông
  • [50:34] Sơ đồ nối dây cho đèn giao thông
  • [52:13] Giải thích mã cho đèn giao thông
  • [54:32] Trình diễn trực tiếp với màn hình nối tiếp
  • [55:30] Thay đổi các giá trị thời gian
  • [56:11] Chạy đèn giao thông bằng nguồn pin

Hình ảnh

traffic light timing: green light
traffic light timing: green light
thời gian đèn giao thông: đèn vàng
thời gian đèn giao thông: đèn vàng
thời gian đèn giao thông: đèn đỏ
thời gian đèn giao thông: đèn đỏ
Sơ đồ mạch đèn giao thông Arduino
Sơ đồ mạch đèn giao thông Arduino
traffic_lights
traffic_lights
Sơ đồ đấu dây đèn giao thông LED Arduino
Sơ đồ đấu dây đèn giao thông LED Arduino
đèn LED đỏ, xanh lá và vàng trên breadboard cho dự án đèn giao thông
đèn LED đỏ, xanh lá và vàng trên breadboard cho dự án đèn giao thông
942-Lessson 98-LED-10: Arduino code traffic light
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