Bằng cách lập trình và thiết kế hệ thống điều khiển LED mô phỏng đèn giao thông, dự án này không chỉ giúp hiểu rõ nguyên lý hoạt động của hệ thống đèn giao thông mà còn mở ra cơ hội ứng
Trang 1TRƯỜNG ĐIỆN – ĐIỆN TỬ
***** *****
BÁO CÁO ĐỒ ÁN 1 :
ĐỀ TÀI: ĐIỀU KHIỂN LED BẰNG ESP32
Giảng viên hướng dẫn: Th.S Tạ Thị Kim Huệ
Mã lớp: 748536 Nhóm: 1 Sinh viên: Cao Việt Bình 20213818
20203330
Hà Nội, T1/2024
MỤC LỤC
LỜI MỞ ĐẦU 4
Trang 2CHƯƠNG 1: TỔNG QUAN 5
1.1 Yêu cầu đề tài 5
1.2 Yêu cầu chức năng 5
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 6
2.1 VISUAL STUDIO CODE 6
2.1.1 Tổng quan 6
2.1.2 Các Thành Phần 6
2.2 ESP32 7
2.2.1 Tổng quan 7
2.3 WEB WOKWI 8
2.3.1 Tổng quan 8
CHƯƠNG 3: TRIỂN KHAI HỆ THỐNG 9
3.1 Chạy thử code 9
3.2 Mô phỏng trên WOKWI 12
KẾT LUẬN 13
TÀI LIỆU THAM KHẢO 14
Trang 3
LỜI MỞ ĐẦU
Trong bối cảnh phát triển công nghệ hiện nay, Internet of Things (IoT) đang ngày càng được ứng dụng rộng rãi trong nhiều lĩnh vực, từ tự động hóa, nông nghiệp, cho đến giao thông vận tải Một trong những ứng dụng phổ biến của IoT là sử dụng các vi điều khiển để điều khiển các thiết bị thông minh, góp phần nâng cao hiệu quả và giảm thiểu chi phí vận hành
Dự án điều khiển đèn giao thông bằng ESP32 là một minh chứng tiêu biểu cho việc ứng dụng IoT trong đời sống thực tiễn ESP32, với khả năng xử lý mạnh mẽ, tích hợp Wi-Fi và Bluetooth, là một lựa chọn lý tưởng để thực hiện các dự án liên quan đến tự động hóa Bằng cách lập trình và thiết kế hệ thống điều khiển LED mô phỏng đèn giao thông, dự án này không chỉ giúp hiểu rõ nguyên lý hoạt động của hệ thống đèn giao thông mà còn mở ra cơ hội ứng dụng vào các hệ thống thực tế nhằm cải thiện tình hình giao thông tại các đô thị
Mục tiêu của đề tài không chỉ dừng lại ở việc xây dựng một hệ thống mô phỏng hoạt động ổn định, mà còn hướng đến khả năng mở rộng, tích hợp các tính năng thông minh như điều khiển từ xa qua mạng không dây, cảm biến lưu lượng giao thông, hoặc điều chỉnh theo thời gian thực Đề tài này là bước đầu giúp sinh viên làm quen với IoT, lập trình vi điều khiển và thiết kế hệ thống thông minh, đóng góp vào sự phát triển của công nghệ trong lĩnh vực giao thông
Trang 4CHƯƠNG 1: TỔNG QUAN
1.1 Yêu cầu đề tài
Mục tiêu của đề tài là thiết kế và triển khai hệ thống điều khiển đèn giao thông tự động thông minh sử dụng vi điều khiển ESP32 Hệ thống sẽ tự động điều khiển các tín hiệu đèn giao thông (đỏ, vàng, xanh) cho ít nhất hai làn đường, với khả năng thay đổi thời gian sáng của từng đèn theo yêu cầu Các chức năng của hệ thống bao gồm: chuyển đổi chu kỳ đèn giao thông tự động, giám sát và điều khiển từ xa qua mạng WiFi, và khả năng điều chỉnh thời gian sáng của từng đèn từ ứng dụng di động hoặc web Hệ thống cũng sẽ có khả năng giám sát trạng thái hoạt động của các đèn giao thông và thông báo lỗi khi có sự cố Đây là một giải pháp tiết kiệm năng lượng, hiệu quả và dễ dàng mở rộng, có thể áp dụng cho các tuyến đường giao thông trong các thành phố thông minh
1.2 Yêu cầu chức năng
Mục tiêu của đề tài là nghiên cứu và thiết kế hệ thống điều khiển đèn giao thông sử dụng vi điều khiển ESP32 Hệ thống này sẽ điều khiển đèn giao thông một cách tự động và linh hoạt, có thể thay đổi tín hiệu đèn theo chu kỳ và kết hợp các tính năng giám sát từ xa
Hệ thống điều khiển đèn giao thông sử dụng ESP32 cần có các chức năng chính sau:
tự động điều khiển các tín hiệu đèn giao thông (đỏ, vàng, xanh) cho ít nhất hai làn đường, với khả năng chuyển đổi giữa các trạng thái đèn theo chu kỳ đã được lập trình sẵn Người dùng có thể điều chỉnh thời gian sáng của mỗi đèn qua ứng dụng di động hoặc web kết nối WiFi Giói thiệu công cụ, phần mềm sử dụng
Trang 5CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 VISUAL STUDIO CODE
2.1.1 Tổng quan
Visual Studio Code (VS Code) là một trình soạn thảo mã nguồn mạnh mẽ, được phát triển bởi Microsoft Nó hỗ trợ nhiều ngôn ngữ lập trình, bao gồm JavaScript, Python, C++, Java, và nhiều ngôn ngữ khác VS Code là một phần mềm mã nguồn mở, miễn phí và chạy trên các hệ điều hành Windows, macOS, và Linux
Các tính năng chính của Visual Studio Code bao gồm:
Tự động hoàn thành mã (IntelliSense): Cung cấp gợi ý về mã nguồn, giúp tăng năng suất lập trình
Debugging: Hỗ trợ gỡ lỗi trực tiếp từ giao diện, giúp phát hiện và sửa lỗi nhanh chóng
Tích hợp Git: VS Code tích hợp sẵn Git, giúp quản lý mã nguồn dễ dàng ngay trong giao diện
Extension Marketplace: Cung cấp hàng ngàn tiện ích mở rộng (extension) cho các ngôn ngữ lập trình, công cụ phát triển và các tính năng bổ sung khác
Hỗ trợ đa nền tảng: Có thể chạy trên nhiều hệ điều hành khác nhau và có thể được tùy chỉnh để phù hợp với nhu cầu cá nhân của lập trình viên
Tối ưu hóa cho Web và Cloud Development: Với các tiện ích như Live Server
và Docker integration, VS Code rất phù hợp cho các dự án phát triển web hoặc ứng dụng đám mây
2.1.2 Các Thành Phần
PlatformIO và Arduino Library là hai công cụ quan trọng trong việc phát triển phần mềm cho vi điều khiển, đặc biệt khi sử dụng Visual Studio Code (VS Code) làm môi trường phát triển
PlatformIO là một hệ sinh thái phát triển mã nguồn mở hỗ trợ nhiều loại vi điều khiển khác nhau như Arduino, ESP32, STM32, v.v Nó cung cấp một IDE mạnh
mẽ với tính năng như quản lý dự án, gỡ lỗi, và biên dịch mã PlatformIO không chỉ hỗ trợ nhiều nền tảng mà còn tích hợp với VS Code để mang lại một trải
Trang 6nghiệm phát triển liền mạch, tự động quản lý thư viện và các công cụ cần thiết cho mỗi dự án
Arduino Library là bộ thư viện phần mềm hỗ trợ phát triển ứng dụng cho các bo mạch Arduino Trong VS Code, bạn có thể sử dụng các thư viện Arduino thông qua Arduino Extension, giúp dễ dàng viết mã, biên dịch và tải lên vi điều khiển Extension này cũng cung cấp khả năng truy cập và quản lý thư viện, giúp người dùng dễ dàng thêm các thư viện cần thiết vào dự án của mình
2.2 ESP32
2.2.1 Tổng quan
ESP32 là một vi điều khiển mạnh mẽ và tiết kiệm chi phí được phát triển bởi Espressif Systems, nổi bật với khả năng kết nối Wi-Fi và Bluetooth tích hợp ESP32 được sử dụng rộng rãi trong các ứng dụng Internet of Things (IoT) nhờ vào hiệu năng cao, khả năng kết nối linh hoạt và chi phí thấp
Đặc điểm nổi bật của ESP32:
Kết nối Wi-Fi và Bluetooth:
ESP32 hỗ trợ Wi-Fi 802.11 b/g/n và Bluetooth 4.2 (Classic và BLE), giúp dễ dàng kết nối với các mạng không dây và các thiết bị Bluetooth
Hiệu năng mạnh mẽ:
ESP32 được trang bị CPU dual-core với tốc độ lên đến 240 MHz, giúp xử lý nhanh và hiệu quả các tác vụ phức tạp
RAM lên đến 520 KB và Flash memory có thể mở rộng đến 16 MB, hỗ trợ lưu trữ và
xử lý dữ liệu lớn
Tính linh hoạt:
ESP32 có nhiều GPIO (General Purpose Input/Output) và hỗ trợ các giao tiếp như SPI, I2C, UART, giúp giao tiếp với các cảm biến và thiết bị ngoại vi khác
Tiết kiệm năng lượng:
ESP32 được thiết kế với khả năng tiết kiệm năng lượng, có chế độ deep sleep giúp giảm điện năng tiêu thụ, rất phù hợp cho các ứng dụng di động hoặc các thiết bị IoT cần hoạt động lâu dài
Dễ dàng lập trình:
Trang 7ESP32 hỗ trợ các nền tảng lập trình phổ biến như Arduino IDE, PlatformIO, và
Espressif's ESP-IDF, giúp người dùng dễ dàng lập trình và phát triển ứng dụng
Ứng dụng phổ biến:
ESP32 được sử dụng rộng rãi trong các ứng dụng IoT như hệ thống nhà thông minh, giám sát môi trường, thiết bị đeo thông minh, hệ thống điều khiển từ xa, và nhiều dự
án sáng tạo khác
2.3 WEB WOKWI
2.3.1 Tổng quan
Wokwi là một nền tảng mô phỏng trực tuyến dành cho các dự án điện tử, đặc biệt là các dự án sử dụng Arduino, ESP32, và các vi điều khiển khác Wokwi cung cấp một
Trang 8công cụ mô phỏng mạnh mẽ, giúp người dùng có thể thiết kế, lập trình và kiểm tra các mạch điện tử mà không cần phần cứng thực tế
Môi trường mô phỏng mạch điện tử:
Wokwi cho phép người dùng mô phỏng các mạch điện tử và vi điều khiển như Arduino và ESP32 trực tuyến Bạn có thể tạo mạch, thêm các cảm biến, động cơ, LED,
và các linh kiện khác, sau đó lập trình và chạy thử mạch ngay trên nền tảng mà không cần có phần cứng thực tế
Lập trình và phát triển dự án IoT:
Wokwi hỗ trợ lập trình trực tiếp qua các IDE phổ biến như Arduino IDE và PlatformIO, giúp bạn dễ dàng viết mã và kiểm tra các dự án IoT (Internet of Things)
Giao diện dễ sử dụng:
Giao diện của Wokwi rất trực quan và dễ sử dụng, cho phép người dùng kéo và thả các linh kiện vào mạch, kết nối chúng một cách dễ dàng Sau đó, người dùng có thể viết
mã để lập trình và điều khiển các linh kiện trong mạch
Mô phỏng mạch chính xác:
Wokwi hỗ trợ mô phỏng chính xác các vi điều khiển và mạch điện tử, cho phép bạn kiểm tra các dự án mà không cần phần cứng thực tế Điều này đặc biệt hữu ích khi bạn muốn thử nghiệm và phát triển các dự án trước khi thực hiện với phần cứng thực tế
CHƯƠNG 3: TRIỂN KHAI HỆ THỐNG
3.1 Chạy thử code
Bảng 3.1 Code khai báo chân GPIO
Khai báo các chân GPIO:
Định nghĩa các chân GPIO cho LED :
Const int red_LED1=14;
Const int yellow_LED1=12;
Const int green_LED1=13;
Const int red_LED2=25;
Const int yellow_LED2=26;
Const int green_LED2=27;
Biến thời gian sáng cho từng đèn :
int time_red_1=500000;//ms
int time_yellow_1=100000;//ms
Trang 9int time_green_1=400000;//ms
int time_red_2=500000;//ms
int time_yellow_2=100000;//ms
int time_green_2=400000;//ms
Bảng 3.2 Code cấu hình các chân GPIO
Cấu hình các chân GPIO:
Void setup(){
pinMode(red_LED1, OUTPUT);
pinMode(yellow_LED1, OUTPUT);
pinMode(green_LED1, OUTPUT);
pinMode(red_LED1, OUTPUT);
pinMode(yellow_LED1, OUTPUT);
pinMode(green_LED1, OUTPUT);
}
Bảng 3.3 Code lưu trữ thời gian sáng của đèn
Lưu trữ thời gian các đèn :
void controlTrafficLights() {
static unsigned long stepStartTime = 0;
unsigned long currentMillis = millis();
unsigned long stepTime = 0;
void loop() {
controlTrafficLights();
}
Bảng 3.4 Code điều khiển sáng tắt các đèn
Điều khiển sáng tắt các đèn :
Trang 10switch (step) {
case 0: // Đèn đo' 1 sáng, đèn xanh 2 sáng
digitalWrite(red_LED1, HIGH);
digitalWrite(yellow_LED1, LOW);
digitalWrite(green_LED1, LOW);
digitalWrite(red_LED2, LOW);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, HIGH);
stepTime = time_red_1;
break;
case 1: // Đèn đo' 1 sáng, đèn vàng 2 sáng
digitalWrite(red_LED1, HIGH);
digitalWrite(yellow_LED1, LOW);
digitalWrite(green_LED1, LOW);
digitalWrite(red_LED2, LOW);
digitalWrite(yellow_LED2, HIGH);
digitalWrite(green_LED2, LOW);
stepTime = time_yellow_2;
break;
case 2: // Đèn xanh 1 sáng, đèn đo' 2 sáng
digitalWrite(red_LED1, LOW);
digitalWrite(yellow_LED1, LOW);
digitalWrite(green_LED1, HIGH);
digitalWrite(red_LED2, HIGH);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, LOW);
stepTime = time_green_1;
break;
case 3: // Đèn vàng 1 sáng, đèn đo' 2 sáng
digitalWrite(red_LED1, LOW);
digitalWrite(yellow_LED1, HIGH);
digitalWrite(green_LED1, LOW);
digitalWrite(red_LED2, HIGH);
digitalWrite(yellow_LED2, LOW);
digitalWrite(green_LED2, LOW);
stepTime = time_yellow_1;
break;
}
if (currentMillis - stepStartTime >= stepTime) {
stepStartTime = currentMillis;
step = (step + 1) % 4; // Chuyể'n bước
}
Trang 11void setup() {
// Khở'i tạo các chân GPIO làm OUTPUT
pinMode(red_LED1, OUTPUT);
pinMode(yellow_LED1, OUTPUT);
pinMode(green_LED1, OUTPUT);
pinMode(red_LED2, OUTPUT);
pinMode(yellow_LED2, OUTPUT);
pinMode(green_LED2, OUTPUT);
}
Hình 3.1 Chạy thử trên Visualcode
Trang 123.2 Mô phỏng trên WOKWI
Hình 3.2 Mô phỏng trên WOKWI
KẾT LUẬN
Đề tài "Điều khiển đèn giao thông qua ESP32" cho thấy hệ thống đã thực hiện thành công việc điều khiển tự động các đèn giao thông theo chu trình thời gian đã được định sẵn Việc sử dụng ESP32, một vi điều khiển mạnh mẽ với khả năng lập trình dễ dàng, giúp tối ưu hóa việc phát triển và vận hành hệ thống Hệ thống hiện tại điều khiển đèn giao thông dựa trên các bước thời gian cố định, giúp đảm bảo sự lưu thông và an toàn giao thông giữa các làn đường Mặc dù chưa tích hợp cảm biến để tự động điều chỉnh thời gian sáng đèn theo tình hình giao thông thực tế, nhưng hệ thống đã tạo nền tảng vững chắc cho các ứng dụng mở rộng như điều khiển qua internet hoặc giám sát từ xa Với khả năng mở rộng và cải tiến, hệ thống có thể được phát triển thêm để xây dựng một hệ thống giao thông thông minh hơn, giúp tối ưu hóa việc điều phối giao thông và nâng cao an toàn cho các phương tiện tham gia giao thông trong tương lai
Tuy kiến thức, năng lực còn hạn chế nhưng sau một thời gian học tập và nghiên cứu,
đề tài đã được em hoàn thành đúng thời hạn Em đã rút ra được nhiều kinh nghiệm và
Trang 13nâng cao được khả năng thiết kế , lập trình liên kết với vi điều khiển ESP32 cũng như
kĩ năng làm báo cáo
Một lần nữa em xin cảm ơn cô Nguyễn Thị Kim Huệ đã tận tình hướng dẫn, giúp đỡ
em trong suốt thời gian thực hiện đề tài này
Trang 14TÀI LIỆU THAM KHẢO
[1] Visual Studio là gì? Những tính năng cần thiết của Visual Studio, năm 2021, https://bizflycloud.vn/tin-tuc/visual-studio-la-gi-nhung-tinh-nang-can-thiet-cua-visual-studio-20210324175835691.htm
[2]https://www.coursera.org/learn/packt-embedded-systems-object-oriented-programming-in-c-and-c-gjdxd#modules
[3] https://vi.wikipedia.org/wiki/ESP32
[4] https://docs.wokwi.com/