ĐÈN GIAO THÔNG VÀ ĐÈN ĐƯỜNG

Tóm tắt ý tưởng

Đèn giao thông và đèn đường vẫn luôn là những hình ảnh quen thuộc trong cuộc sống hàng ngày, tưởng chừng đơn giản nhưng những ứng dụng này khiến cho cuộc sống của chúng ta trở nên tiện nghi hơn.

Vì vậy, để hiểu được nguyên lí của những tiện ích quan trọng trên, dự án này sẽ hướng dẫn các bạn cách mô phỏng Đèn giao thông và đèn đường – Street & Traffic Light bằng các sản phẩm phần cứng Robotics của MakerEdu.vn với những thao tác lắp đặt và lâp trình vô cùng đơn giản.

Mô tả công dụng

– Hiển thị thời gian đếm ngược của đèn giao thông trên màn hình LCD kèm theo sự thay đổi trạng thái tuần hoàn của các đèn Xanh – Vàng  – Đỏ.

– Đo cường độ ánh sáng môi trường bằng cảm biến ánh sáng quang trở, hiển thị giá trị cường độ ánh sáng lên màn hình LCD, bật đèn đường (đèn Trắng) khi trời tối.

Danh sách vật dụng

Danh sách các thiết bị 

Hình ảnh

Chức năng / Chuẩn giao tiếp

Mạch Vietduino Uno (Arduino Uno Compatible) (x1)

Mạch điều khiển trung tâm, tương thích Arduino Uno, giao tiếp máy tính qua cổng USB

Mạch MakerEDU Shield (x1)

Mạch Shield giúp kết nối Vietduino Uno với các phần cứng Robotics MakerEdu.vn qua chuẩn kết nối XH2.54

Mạch hiển thị MKE-M07 LCD1602 I2C module (x1)

Màn hình hiển thị thông tin, chuẩn giao tiếp I2C

Cảm biến ánh sáng quang trở MKE-S02 LDR light sensor (x1)

Cảm biến cường độ ánh sáng, chuẩn giao tiếp Analog

Mạch led đơn MKE-M01 10mm single LED module
Xanh x1
Vàng x1
Đỏ x1

Trắng x1

Mạch đèn tín hiệu, chuẩn giao tiếp Digital

Cáp Kết Nối MakerEDU XH2.54-XH2.54 3Wires (x5)

Cáp kết nối phần cứng MakerEdu.vn chuẩn XH2.54 3 dây

Cáp Kết Nối MakerEDU XH2.54-XH2.54 4Wires (x1)

Cáp kết nối phần cứng MakerEdu.vn chuẩn XH2.54 4 dây

Flowchart

Hướng dẫn kết nối

LƯU Ý QUAN TRỌNG: CẦN XOÁ CHƯƠNG TRÌNH CŨ TRÊN MẠCH VIETDUINO TRƯỚC KHI THỰC HIỆN KẾT NỐI VỚI CÁC PHẦN CỨNG MỚI ĐỂ TRÁNH CÁC XUNG ĐỘT CÓ THỂ LÀM HƯ HỎNG MẠCH!!!

  • Bước 1: Xoá chương trình cũ có sẵn trên mạch Vietduino trước khi thực hiện kết nối các phần cứng mới.
  • Bước 2: Lắp Shield lên mạch Vietduino Uno
  • Bước 3: Kết nối các phần cứng theo sơ đồ sau:

Hướng dẫn lập trình Mblock for Arduino

LƯU Ý QUAN TRỌNG: TRƯỚC KHI THỰC HIỆN CẦN CÀI ĐẶT PHẦN MỀM MBLOCK, CẤU HÌNH PHẦN MỀM VỚI MẠCH VIETDUINO UNO VÀ CÀI ĐẶT CÁC EXTENSION CỦA MAKEREDU.VN THEO HƯỚNG DẪN TẠI ĐÂY

Hình thành các bộ phận code

Code hoàn chỉnh

***Link dự án tại Mblock: ĐÈN GIAO THÔNG & ĐÈN ĐƯỜNG – Mblock Community

Giải thích code

Phân loại   Khối lệnh  Chức năng 
Events Bắt đầu chương trình
Control Lặp lại các khối lệnh theo số lần được chỉ định.Giá trị mặc định là 10 lần
Lặp lại mãi mãi
● Thực hiện tập lệnh 1 trong khối này nếu các điều kiện được chỉ định được đáp ứng.
● Nếu không, tập lệnh 2 được thực thi
Chờ một khoảng thời gian bao nhiêu giây
Pin Bật / tắt thiết bị chuẩn digital 
Đọc tín hiệu Analog
Operators Cả hai mệnh đề điều kiện đều đúng
Ít nhất một trong hai mệnh đề điều kiện đúng
Ghép hai chuỗi lại với nhau
Làm tròn số đến số nguyên gần nhất
Phép so sánh lớn hơn
Variables Gán giá trị cho một biến
Tăng / giảm biến một giá trị nhất định
MKE-M07,08 In dòng chữ hiển thị trên màn hình LCD

Hướng dẫn lập trình Arduino

LƯU Ý QUAN TRỌNG: TRƯỚC KHI THỰC HIỆN CẦN CÀI ĐẶT PHẦN MỀM ARDUINO, CẤU HÌNH PHẦN MỀM VỚI MẠCH VIETDUINO UNO VÀ CÀI ĐẶT BỘ THƯ VIỆN CỦA MAKEREDU.VN THEO HƯỚNG DẪN TẠI ĐÂY

// Include library
// Cai dat thu vien

#include "LiquidCrystal_I2C.h"

// Define connected pin
// Dat ten chan cong ket noi
#define LDR_PIN         A3
#define LED_STREET_PIN  A1
#define LED_RED_PIN     9
#define LED_YELLOW_PIN  10
#define LED_GREEN_PIN   11

// Set the LCD address to 0x27 for a 16 chars and 2 line display
// Thiet lap dia chi LCD 0x27 de hien thi 16 ky tu tren hai dong
LiquidCrystal_I2C LCD(0x27, 16, 2);

void setup() {
  // Initialize LCD 1602 to display
  // Khoi tao LCD 1602 de hien thi
  LCD.init();
  // Turn on LCD backlight
  // Bat den nen LCD 1602
  LCD.backlight();
  // Set LED as Output pin
  // Thiet lap LED o trang thai OUTPUT
  pinMode(LED_RED_PIN, OUTPUT);
  pinMode(LED_YELLOW_PIN, OUTPUT);
  pinMode(LED_GREEN_PIN, OUTPUT);
  pinMode(LED_STREET_PIN, OUTPUT);
}

void loop() {
  LCD.setCursor(0, 0);
  LCD.print("TRAFFIC");
  LCD.setCursor(8, 0);
  LCD.print("|");
  LCD.setCursor(10, 0);
  LCD.print("STREET");
  // Turn on Green Light and countdown 7 seconds
  // Dem nguoc den xanh 7 giay
  digitalWrite(LED_GREEN_PIN, HIGH);
  digitalWrite(LED_YELLOW_PIN, LOW);
  digitalWrite(LED_RED_PIN, LOW);
  for (int i = 7; i > 0; i--) {
    LCD.setCursor(0, 1);
    LCD.print(i);
    LCD.print("  ");
    LCD.setCursor(8, 1);
    LCD.print("|");
    LCD.setCursor(10, 1);
    LCD.print(analogRead(LDR_PIN));
    LCD.print(("  "));
    // If LRD>110 turn on the street light
    // Nếu cam bien anh sang > 110 bat den đuong
    if (analogRead(LDR_PIN) > 110) {
      digitalWrite(LED_STREET_PIN, HIGH);
    } else {
      digitalWrite(LED_STREET_PIN, LOW);
    }
    delay(1000);
  }
  // Turn on Yellow Light and countdown 3 seconds
  // Dem nguoc den vang 3 giay
  digitalWrite(LED_GREEN_PIN, LOW);
  digitalWrite(LED_YELLOW_PIN, HIGH);
  digitalWrite(LED_RED_PIN, LOW);
  for (int i = 3; i > 0 ; i--) {
    LCD.setCursor(0, 1);
    LCD.print(i);
    LCD.print("  ");
    LCD.setCursor(8, 1);
    LCD.print("|");
    LCD.setCursor(10, 1);
    LCD.print(analogRead(LDR_PIN));
    LCD.print(("  "));
    // If LRD>110 turn on the street light
    // Nếu cam bien anh sang > 110 bat den đuong
    if (analogRead(LDR_PIN) > 110) {
      digitalWrite(LED_STREET_PIN, HIGH);
    } else {
      digitalWrite(LED_STREET_PIN, LOW);
    }
    delay(1000);
  }
  // Turn on Red Light and countdown 10 seconds
  // Dem nguoc den do 10 giay
  digitalWrite(LED_GREEN_PIN, LOW);
  digitalWrite(LED_YELLOW_PIN, LOW);
  digitalWrite(LED_RED_PIN, HIGH);
  for (int i = 10; i > 0; i--) {
    LCD.setCursor(0, 1);
    LCD.print(i);
    LCD.print("  ");
    LCD.setCursor(8, 1);
    LCD.print("| ");
    LCD.setCursor(10, 1);
    LCD.print(analogRead(LDR_PIN));
    LCD.print(("  "));
    // If LRD>110 turn on the street light
    // Nếu cam bien anh sang > 110 bat den đuong
    if (analogRead(LDR_PIN) > 110) {
      digitalWrite(LED_STREET_PIN, HIGH);
    } else {
      digitalWrite(LED_STREET_PIN, LOW);
    }
    delay(1000);
  }
}

***Link tải code tại Github: makereduvn/MakerEdu_Development_Kit (github.com)

Hình ảnh thành phẩm

Tìm kiếm

Các kênh truyền thông

Bài viết phổ biến

Các chuyên mục

Đăng ký theo dõi

Hãy đăng ký theo dõi MakerLab.vn để cập nhật các bài viết và thông tin công nghệ mới nhất!

Bài viết liên quan

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments