1. Đèn tín hiệu giao thông là gì?
Đèn tín hiệu giao thông được dùng để điều khiển giao thông ở những nơi có lượng phương tiện lưu thông lớn như ngã ba, ngã tư. Đây là một thiết bị quan trọng giúp đảm bảo an toàn cho các phương tiện cũng như giảm ùn tắc giao thông vào giờ cao điểm.
Nó được lắp đặt ở tâm giao lộ hoặc trên vỉa hè. Đèn tín hiệu giao thông có thể hoạt động tự động hay có sự điều khiển của cảnh sát giao thông. Có nhiều loại đèn tín hiệu giao thông như sau:
1.1. Loại 3 màu
Loại này dành cho xe cộ với 3 màu: đỏ, xanh, vàng. Các màu này có ý nghĩa:
- Đỏ: Không được phép qua đường.
- Xanh: Được phép qua đường.
- Vàng: Sắp hết thời gian được phép qua đường.
1.2. Loại 2 màu
Loại này dành cho người đi bộ với 2 màu: đỏ và xanh. Màu đỏ: không được sang đường. Màu xanh: được phép sang đường.
1.3. Đèn đếm lùi
Loại đèn này còn lắp bổ sung thêm số giây đếm ngược cho các đèn tín hiệu.
1.4. Đèn dành cho người đi xe đạp
Đây là loại đèn dành cho xe đạp dắt ngang qua đường. Loại này được lắp đặt ở những quốc gia có nhiều xe đạp.
1.5. Loại 1 màu (đèn chớp vàng)
Đây là loại đèn tín hiệu chỉ có duy nhất màu vàng. Đèn này thường nhấp nháy để cảnh báo các phương tiện đi chậm và chú ý quan sát ở những nơi giao nhau không có đèn tín hiệu xanh đỏ hoặc những nơi thường hay xảy ra tai nạn.
1.6. Đèn mũi tên, đèn rẽ phải hoặc đèn rẽ trái
Một số cột đèn tín hiệu giao thông sẽ có một đèn phụ có hình mũi tên bên phải hoặc bên trái hoặc đi thẳng.
Các loại đèn tín hiệu giao thông thường được làm với nhiều led đơn. Ví dụ, đèn tín hiệu xanh gồm có 114 led đơn, đèn tín hiệu đỏ và vàng gồm có 115 led đơn mỗi đèn.
Ở bài này, chúng ta sử dụng giả lập 1 led đơn màu đỏ làm đèn tín hiệu đỏ, 1 led đơn màu xanh làm đèn tín hiệu xanh và 1 led đơn màu vàng làm đèn tín hiệu vàng. Sau đó, sử dụng Arduino để lập trình điều khiển các led xanh đỏ vàng để làm đèn giao thông.
2. Giả lập điều khiển đèn tín hiệu giao thông với Arduino
Trong bài này, chúng ta sẽ điều khiển 2 loại đèn tín hiệu giao thông: Loại 3 đèn ở ngã tư và Loại đèn vàng nhấp nháy.
2.1. Loại 3 đèn ở ngã tư
Bên dưới là sơ đồ mạch điều khiển loại 3 đèn ở ngã tư với Arduino.
Ở ngã tư, người tham gia giao thông sẽ nhìn vào cụm đèn tín hiệu ở bên phải theo hướng di chuyển của mình. Tuy là ngã tư nhưng thật chất chúng ta chỉ cần xử lý các cụm đèn tín hiệu theo 2 hướng: chiều ngang và chiều dọc. Cụm đèn D1, D2, D3 sẽ tương tự cụm đèn D10, D11, D12. Cụm đèn D4, D5, D6 sẽ tương tự cụm đèn D7, D8, D9.
Chúng ta xét cụm đèn D1, D2, D3 và cụm đèn D4, D5, D6. Có 4 lượt đèn giao thông sáng và lặp đi lặp lại như sau:
Lượt 1 – Đèn xanh D3 và đèn đỏ D4 sáng, các đèn D1, D2, D5, D6 tắt.
Lượt 2 – Đèn đỏ D4 và đèn vàng D2 sáng, các đèn D1, D3, D5, D6 tắt.
Lượt 3 – Đèn đỏ D1 và đèn xanh D6 sáng, các đèn D2, D3, D4, D5 tắt.
Lượt 4 – Đèn đỏ D1 và đèn vàng D5 sáng, các đèn D2, D3, D4, D6 tắt.
Dưới đây là code Arduino điều khiển đèn giao thông với sơ đồ mạch đã cho.
//led-red
int d1=7, d4=4, d7=10, d10=13;
//led-yellow
int d2=6, d5=3, d8=9, d11=12;
//led-green
int d3=5, d6=2, d9=8, d12=11;
//red_delay = yellow_delay + green_delay
int yellow_delay=3000, green_delay=12000;
void setup() {
for(int i=2;i<14;i++){
pinMode(i, OUTPUT);
}
}
void loop() {
/*----------Lượt đèn sáng 1----------*/
//d4, d3 sáng; d1, d2 tắt; d5, d6 tắt
digitalWrite(d4, HIGH);
digitalWrite(d3, HIGH);
digitalWrite(d1, LOW);
digitalWrite(d2, LOW);
digitalWrite(d5, LOW);
digitalWrite(d6, LOW);
//d7, d12 sáng; d10, d11 tắt; d8, d9 tắt
digitalWrite(d7, HIGH);
digitalWrite(d12, HIGH);
digitalWrite(d10, LOW);
digitalWrite(d11, LOW);
digitalWrite(d8, LOW);
digitalWrite(d9, LOW);
delay(green_delay);
/*----------Lượt đèn sáng 2----------*/
//d4, d2 sáng; d1, d3 tắt; d5, d6 tắt
digitalWrite(d4, HIGH);
digitalWrite(d2, HIGH);
digitalWrite(d1, LOW);
digitalWrite(d3, LOW);
digitalWrite(d5, LOW);
digitalWrite(d6, LOW);
//d7, d11 sáng; d10, d12 tắt; d8, d9 tắt
digitalWrite(d7, HIGH);
digitalWrite(d11, HIGH);
digitalWrite(d10, LOW);
digitalWrite(d12, LOW);
digitalWrite(d8, LOW);
digitalWrite(d9, LOW);
delay(yellow_delay);
/*----------Lượt đèn sáng 3----------*/
//d1, d6 sáng; d2, d3 tắt; d4, d5 tắt
digitalWrite(d1, HIGH);
digitalWrite(d6, HIGH);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
digitalWrite(d5, LOW);
//d10, d9 sáng; d11, d12 tắt; d7, d8 tắt
digitalWrite(d10, HIGH);
digitalWrite(d9, HIGH);
digitalWrite(d11, LOW);
digitalWrite(d12, LOW);
digitalWrite(d7, LOW);
digitalWrite(d8, LOW);
delay(green_delay);
/*----------Lượt đèn sáng 4----------*/
//d1, d5 sáng; d2, d3 tắt; d4, d6 tắt
digitalWrite(d1, HIGH);
digitalWrite(d5, HIGH);
digitalWrite(d2, LOW);
digitalWrite(d3, LOW);
digitalWrite(d4, LOW);
digitalWrite(d6, LOW);
//d10, d8 sáng; d11, d12 tắt; d7, d9 tắt
digitalWrite(d10, HIGH);
digitalWrite(d8, HIGH);
digitalWrite(d11, LOW);
digitalWrite(d12, LOW);
digitalWrite(d7, LOW);
digitalWrite(d9, LOW);
delay(yellow_delay);
}
Bên dưới là video demo điều khiển đèn giao thông với Arduino.
2.2. Loại đèn vàng nhấp nháy
Bên dưới là sơ đồ mạch điều khiển loại đèn vàng nhấp nháy với Arduino.
Cách hoạt động của loại đèn vàng nhấp nháy rất đơn giản. Đèn vàng này sẽ nhấp nháy liên tục để cảnh báo cho người tham gia giao thông khi đi qua các ngã 3, ngã 4 hay đoạn đường giao nhau.
Dưới đây là code Arduino điều khiển đèn giao thông với sơ đồ mạch đã cho.
void setup() {
pinMode(6, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
digitalWrite(6, HIGH);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);
digitalWrite(12, HIGH);
delay(500);
digitalWrite(6, LOW);
digitalWrite(3, LOW);
digitalWrite(9, LOW);
digitalWrite(12, LOW);
delay(500);
}
Bên dưới là video demo điều khiển đèn giao thông với Arduino.