Xe điều khiển kết hợp xử lý ảnh GVHD TS Nguyễn Ngọc Minh HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA KĨ THUẬT ĐIỆN TỬ I BÁO CÁO ĐỒ ÁN MÔN HỌC ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG ĐỀ TÀI XE ĐIỀU KHIỂN KẾT HỢ.
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA KĨ THUẬT ĐIỆN TỬ I
-BÁO CÁO ĐỒ ÁN MÔN HỌC: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG
ĐỀ TÀI: XE ĐIỀU KHIỂN KẾT HỢP XỬ LÝ ẢNH
SỬ DỤNG ESP32-CAM
Giảng viên: Nguyễn Ngọc Minh
Hà Nội – 2022
Trang 2LỜI MỞ ĐẦU
Ngày nay, sự phát triển mạnh mẽ của khoa học đời sống, cuộc sống của con người
đã thay đổi ngày một tốt hơn, với những trang thiết bị hiện đại phục vụ trong công cuộccông nghiệp hóa, hiện đại hóa Đặc biệt góp phần không nhỏ đó là ngành kĩ thuật điện –điện tử trong sự nghiệp xây dựng đất nước Những thiết bị điện, điện tử được phát triển vàứng dụng rộng rãi trong đời sống hằng ngày Từ những thời gian đầu phát triển vi xử lý đãcho thấy sự ưu việt của nó và cho tới ngày nay tính ưu việt đó ngày càng được khẳng địnhthêm Những thành tựu của nó đã có thể biến được những cái tưởng chừng như không thểthành những cái có thể, góp phần nâng cao đời sống vật chất và tinh thần cho con người
Để góp phần làm sáng tỏ hiệu quả của những ứng dụng trong thực tế của môn vi xử lý,sau một thời gian học tập được các thầy cô trong khoa giảng dạy về các kiến thức chuyênngành, đồng thời được sự giúp đỡ nhiệt tình của các thầy cô trong khoa Điện-Điện tử,cùng với sự nỗ lực của cả nhóm, nhóm em đã “XE ĐIỀU KHIỂN KẾT HỢP XỬ LÝẢNH” nhưng do thời gian, kiến thức và kinh nghiệm của chúng em còn có hạn nên sẽkhông thể tránh khỏi những sai sót Chúng em rất mong được sự giúp đỡ và tham khảo ýkiến của thầy cô và các bạn nhằm đóng góp phát triển thêm đề tài
Trang 3LỜI CẢM ƠN
Lời đầu tiên chúng em xin chân thành cảm ơn đến thầy Nguyễn Ngọc Minh đã giúpchúng em rất nhiều trong quá trình thực hiện đồ án này Trong quá trình thực hiện đồ án,được sự giúp đỡ tận tình của thầy Nguyễn Ngọc Minh nhóm em đã thu được nhiều kiếnthức quý báu giúp nhóm em rất nhiều trong quá trình học và làm việc trong tương lai:được tiếp xúc với ESP32-CAM, giao tiếp UDP, OPENCV… Trong quá trình thực hiện đồ
án do em chưa có nhiều kinh nghiệm nên không tránh khỏi sai sót Mong nhận được sựgóp ý của thầy để hoàn thiện hơn Một lần nữa em xin chân thành cảm ơn sự giúp đỡ củathầy giáo trong quá trình thực hiện đồ án để em hoàn thành đồ án này
Trang 4MỤC LỤC
BÁO CÁO ĐỒ ÁN 1
I GIỚI THIỆU ĐỀ TÀI 6
1.1 Giới thiệu về đề tài 6
1.2 Mục đích đề tài 6
1.3 Sơ lược về các bước thực hiện 6
II TỔNG QUAN VỀ ESP32-CAM 7
2.1 Giới thiệu về ESP32-CAM 7
2.2 Các đặc điểm, tính năng của ESP32-CAM 8
2.3 Các thông số kỹ thuật 8
2.4 Sơ đồ chân và cách hoạt động 9
MicroSD card 12
ESP32 12
OV2640 CAMERA 13
ESP32 13
Variable name in code 13
III GIỚI THIỆU VỀ CÁC LINH KIỆN KHÁC 13
3.1 Module điều khiển động cơ L298N 13
3.2 Động cơ servo MG90S 14
3.3 Mạch chuyển USB UART TTL FT232RL 16
IV PHẦN MỀM 17
4.1 Arduino IDE 17
4.2 Arduino Websocket Client 18
4.2.1 Giới thiệu 18
4.2.2 Ưu điểm và nhược điểm 18
4.2.3 Xây dựng Websocket Client cho ESP32 với Arduino Core 19
V GIỚI THIỆU OPENCV VÀ CÁC THUẬT TOÁN 22
5.1 Thư viện OPENCV 22
5.2 Thuật toán OBJECT DETECTION 23
5.3 Thuật toán OBJECT TRAKING 24
Single Obkect Tracking (SOT) 24
5.4 Thuật toán PID 25
5.4.1 Sơ lược cấu trúc điều khiển 25
5.4.2 Thực hiện thuật toán điều khiển trên ESP32 26
Trang 55.4.3 Nguyên lý hoạt động 27
VI HỆ ĐIỀU HÀNH VÀ LƯU ĐỒ THUẬT TOÁN 29
6.1 Hệ điều hành FreeRTOS 29
6.2 Chương trình thử với động cơ l298n 30
VII THIẾT KẾ MÔ HÌNH VÀ SẢN PHẨM 33
7.1 Sơ đồ khối 33
7.2 Sản phẩm 34
VIII KẾT LUẬN VÀ TÀI LIỆU THAM KHẢO 35
8.1 Kết quả của dự án 35
8.2 Hướng phát triển của dự án 36
8.3 Các kinh nghiệm và bài học rút ra 36
Trang 6I GIỚI THIỆU ĐỀ TÀI
I.1 Giới thiệu về đề tài
Ngày nay, robotic đã đạt được những thành tựu to lớn trong sản xuất công nghiệpcũndg như trong đời sống Sản xuất robot là nghành công nghiệp trị giá hang tỉ USD
và ngày càng phát triển mạnh, trong các họ robot chúng ta không thể không nhắc tớimobile robot với những đặc thù riêng mà các loại robot khác không có Mobile robot
có thể di chuyển một cách rất linh hoạt, do đó tạo nên không gian hoạt động lớn vàcho đến nay nó đã dần khẳng định vai trò quan trọng không thể thiếu trong nhiều lĩnhvực, thu hút được rất nhiều sự đầu tư và nghiên cứu Mobile robot cũng được chia ralàm nhiều loại: robot học đường đi, robot dò đường line, robot tránh vật cản, robot tìmđường cho mê cung,…trong số đó robot điều khiển kết hợp nhận diện ảnh sẽ dễ dàngứng dụng nhiều trong cuộc sống Việc phát triển loại xe này sẽ phục vụ rất đắc lực chocon người
I.2 Mục đích đề tài
Xe điều khiển, nhận diện, dò line vừa có nhiều ứng dụng trong thực tế vừa dễ dàng
để sinh viên vận dụng những kiến thức tiếp thu được trên giảng đường vào nó Vớinhững kết cấu cơ khí đơn giản nhưng lại có thể kết hợp được với khá nhiều thành phầnđiện tử nên những xe này rất phù hợp để sinh viên học tập và nghiên cứu thêm vềngành Điện tử một cách cụ thể
I.3 Sơ lược về các bước thực hiện
Bước 1: Thảo luận và chọn đề tài, lên kế hoạch thực hiện
Bước 2: Tìm hiểu về các linh kiện, đọc các tài liệu liên quan
Bước 3: Kiểm thử và chạy mô phỏng
Bước 4: Sử dụng các phần mềm Arduino để code và nạp vào mạch mô phỏng để kiểmtra khả năng hoạt động và sửa lỗi
Bước 5: Thống kê các linh kiện, giá tiền, và chọn sản phẩm phù hợp với nhủ cầu vàtiến hành đi mua các linh kiện cần thiết
Bước 6: Tiến hành lắp các linh kiện cần thiết và kiểm tra thử sản phẩm
Bước 7: Làm báo cáo và thuyết trình về sản phẩm, phát triển thêm sản phẩm
Trang 7II TỔNG QUAN VỀ ESP32-CAM
II.1Giới thiệu về ESP32-CAM
- ESP32-CAM là một camera module tiêu thụ năng lượng thấp, kích thước nhỏ dựatrên nền ESP32 Đi kèm với một camera OV2640 và tích hợp khe cắm thẻ TF trênboard mạch
Hình 2.1: Module ESP32-CAM
- ESP32-CAM là mô-đun phát video trực tuyến tiêu thụ điện năng thấp và độ trễthấp Nó có một module camera cỡ nhỏ có thể hoạt động như một hệ thống độc lậpvới kích thước chỉ 27×40.5×4.5mm và dòng tiêu thụ ở chế độ deep sleep chỉ có 6mA
- ESP32-CAM có kiểu chân DIP-16 hai hàng, có thể dễ dàng lắp đặt trên bread board hay là tích hợp lên bo mạch sản phẩm một cách chắc chắn và có tính tuỳ biến cao trong mọi ứng dụng IoT
- Các ứng dụng của bo mạch trong IoTs như: Camera IP, nhận dạng khuôn mặt, nhậndạng màu sắc, nhận dạng hình dạng sản phẩm, nhận diện đồ vật
Trang 8II.2Các đặc điểm, tính năng của ESP32-CAM
- Tích hợp module ESP32-S trên board mạch, hỗ trợ WiFi + Bluetooth
- Camera OV2640 có đèn flash
- Khe cắm thẻ TF trên board mạch, hỗ trợ thẻ nhớ TF lên đến 4G để lưu trữ dữ liệu
- Hỗ trợ WiFi video monitoring and WiFi image upload
- Hỗ trợ multi sleep modes, dòng sleep sâu thấp tới 6mA
- Giao diện điều khiển có thể truy cập thông qua pinheader, dễ dàng tích hợp vànhúng vào các sản phẩm của người dùng
II.3Các thông số kỹ thuật
- Module WIFI: ESP-32S
- Bộ xử lý: ESP32-D0WD
- Flash tích hợp: 32Mbit
- RAM: 512KB bên trong + PSRAM 4M bên ngoài
- Antenna: Antenna PCB trên board
- Giao thức WiFi: IEEE 802.11 b / g / n / e / i
- Bluetooth: Bluetooth 4.2 BR / EDR và BLE
- Chế độ WIFI: Station / SoftAP / SoftAP+Station
- Bảo mật: WPA / WPA2 / WPA2-Enterprise / WPS
- Định dạng hình ảnh đầu ra: JPEG (chỉ hỗ trợ OV2640), BMP, GRAYSCALE
- Thẻ TF được hỗ trợ: tối đa 4G
- Giao diện ngoại vi: UART / SPI / I2C / PWM
Trang 9- Power consumption:
o Flash off: 180mA @ 5V
o Flash on and brightness max: 310mA @ 5V
o Deep-Sleep: thấp tới 6mA @ 5V
o Modern-Sleep: thấp tới 20mA @ 5V
o Light-Sleep: thấp tới 6,7mA@5V
- Nhiệt độ hoạt động: -20oC ~ 85oC
- Môi trường bảo quản: -40oC ~ 90oC, <90% rh
- Kích thước: 40,5mm x 27mm x 4,5mm
II.4Sơ đồ chân và cách hoạt động
Sơ đồ chân của ESP32-CAM được thể hiện qua hình dưới đây:
Hình 2.4: Sơ đồ chân ESP32-CAM
Chân nguồn (power in)
ESP32-CAM có 3 chân GND (màu đen trong sơ đồ chân), 1 chân 3.3V và 1 chân 5V (màu đỏ trong sơ đồ chân)
CAM có thể hoạt động ở cả 3.3V và 5V, tuy nhiên với nguồn 3.3V, CAM có thể sẽ hoạt động không ổn định, chúng ta nên dùng nguồn 5V để đảm bảo ESP32-CAM hoạt động ổn định
ESP32- Trên sơ đồ chân bạn có thể thấy 1 chân màu vàng 3.3/5V, trên ESP32-CAM chân này được kí hiệu là VCC Chúng ta không nên sử dụng chân này để cấp nguồn cho ESP32-
Trang 10CAM Đây là chân nguồn output, không sử dụng để cấp nguồn Điện áp ở chân này cóthể là 3.3V hoặc 5V.
Để ý trên board ESP32-CAM, bạn sẽ thấy bên cạnh chân VCC có kí hiệu 2 mức điện
áp của chân VCC Ứng với mỗi mức có 2 pad hàn điện trở 0Ω (đóng vai trò như jumper) Jumper nối ở mức điện áp nào thì điện áp ngõ ra của chân VCC bằng mức đó
Chân Serial
GPIO 1 và GPIO 3 là 2 chân serial của ESP32-CAM (GPIO 1 đóng vai trò là TX, GPIO 3 là RX) ESP32-CAM không được tích hợp sẵn mạch giao tiếp serial với máy tính, cần dùng 2 chân serial giao tiếp với một mạch giao tiếp serial trung gian mới có thể nạp chương trình từ máy tính
Bạn vẫn có thể sử dụng GPIO 1 và GPIO 3 để kết nối với các module ngoại vi sau khi nạp chương trình xong Trong trường hợp đó, bạn sẽ không thể mở Serial Monitor để xem các thông tin mà chương trình in ra hoặc debug qua serial monitor
Trang 11 Khi cần nạp chương trình cho ESP32, ta kết nối GPIO 0 với chân GND, và ngắt kết nối giữa GPIO 0 với GND khi cần ESP32-CAM hoạt động bình thường Mỗi lần kết nối hoặc ngắt kết nối giữa GPIO 0 và GND cần nhấn nút RST trên board để ESP32-CAM cập nhật lại chế độ hoạt động.
GPIO 16
GPIO 16 mặc định là chân có chức năng UART Tuy nhiên bạn cũng có thể sử dụng GPIO 16 với chức năng là digital input, GPIO 16 được kết nối với điện trở nội kéo lênnên trạng thái mặc định của chân này là mức 1
GPIO 16 không được tích hợp bộ chuyển đổi ADC, nên không thể sử dụng cho chức năng analog input, chân này cũng không phải chan RTC, nên không thể sử dụng cho chứcnăng timer waker up
GPIO 33
Trang 12 Ở gần nút RST, có 1 đèn LED đỏ được tích hợp sẵn trên board LED này được kết nốivới GPIO 33 Đèn LED này hoạt động theo logic đảo, khi điều khiển GPIO 33 ở mứcLOW, đèn LED này sẽ sáng và ngược lại.
Flashlight (GPIO 4)
ESP32-CAM có 1 đèn LED kết nối với GPIO 4, có thể hoạt động như đèn flash khi chụp hình Tuy nhiên GPIO 4 cũng là chân kết nối với thẻ nhớ nên đèn LED có thể sẽ sáng trong lúc chúng ta sử dụng thẻ nhớ
Kết nối thẻ nhớ MicroSD
ESP32-S kết nối với thẻ nhớ microSD qua khe cắm thẻ nhớ theo bảng kết nối dưới đây:
Trang 13OV2640 CAMERA ESP32 Variable name in code
III GIỚI THIỆU VỀ CÁC LINH KIỆN KHÁC
III.1 Module điều khiển động cơ L298N
Thông số kỹ thuật:
Driver: L298N tích hợp hai mạch cầu H
Điện áp điều khiển: +5 V ~ +12 V
Dòng tối đa cho mỗi cầu H là: 2A (=>2A cho mỗi motor)
Điện áp của tín hiệu điều khiển: +5 V ~ +7 V
Dòng của tín hiệu điều khiển: 0 ~ 36mA (Arduino có thể chơi đến 40mA nên khỏe
re nhé các bạn)
Trang 14 Công suất hao phí: 20W (khi nhiệt độ T = 75 ℃)
Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃
từ đó cấp cho Arduino
Power GND chân này là GND của nguồn cấp cho Động cơ
2 Jump A enable và B enable
Trang 15 Gồm có 4 chân Input IN1, IN2, IN3, IN4
Output A,B: nối với động cơ Board này gồm 2 phần điều khiển động cơ Và
có thể điều khiển cho 1 động cơ bước 6 dây hoặc 4 dây
III.2 Động cơ servo MG90S
Động cơ RC Servo MG90S là phiên bản nâng cấp của động cơ RC Servo 9G với các bánh răng được làm bằng kim loại cho lực khéo khỏe và độ bền cao, động cơ có kích thước nhỏ gọn, cách điều khiển giống như các động cơ RC Servo phổ biến trên thị trường hiện nay: MG996, MG995, 9G, Phù hợp cho nhiều ứng dụng khác nhau: Robot cánh tay máy, robot nhện, cơ cấu chuyển hướng, cơ cấu quay góc,
Thông số kỹ thuật:
Model: MG90S servo
Điện áp hoạt động: 4.8 ~ 6VDC
Stall Torque: 1.8kg/cm(4.8V ),2.2kg/cm(6V)
Operating Speed: 0.1sec/60degree(4.8v), 0.08sec/60degree(6v
Bánh răng: Kim loại
Độ dài dây nối: 175mm
Trọng lượng: 13.4g
Kích thước: 22.8 x 12.2 x 28.5mm
Trang 16III.3 Mạch chuyển USB UART TTL FT232RL
Thông số kĩ thuật:
IC chính: FT232RL chính hãng FTDI
Nguồn cấp: 5VDC từ cổng USB (cổng mini USB)
Có ngõ ra nguồn có thể điều chỉnh 3V3 hoặc 5VDC
Chuyển giao tiếp từ USB sang UART TTL
Drive hỗ trợ Windows Mac, Linux
Có cầu chì tự phục hồi: 500mA
Tốc độ Baudrate: tùy chỉnh
Kích thước PCB: 36 x 18.5mm
Trọng lượng: 3g
Sơ đồ chân chân ra của Mạch chuyển USB UART TTL FT232RL
DTR: Data terminal ready control output / Handshake signal (có thể reset arduino khi nạp chương trình)
RXD: Receive asynchronous data Input – nhận tín hiệu
TXD: Transmit asynchronous data output – truyền tín hiệu
VCC: Chân nguồn cấp, có thể chọn 5V hoặc 3.3VDC thông qua Jumper
CTS: Clear to send control input / handshake signal (không sử dụng)
Mạch chuyển USB UART TTL FT232RL
Trang 18IV PHẦN MỀM
IV.1 Arduino IDE
Cài đặt phần mềm Arduino IDE
H
ình 4.1 Arduino IDE 1.8.3
- Sau khi cài đặt xong, ta cần cài thư viện
- ESP32-CAM không được tích hợp sẵn mạch giao tiếp serial với máy tính nên cần một mạch giao tiếp serial trung gian để kết nối với máy tính Ở đây, em dùng đế nạp để nạp code
Trang 19IV.2 Arduino Websocket Client
IV.2.1 Giới thiệu
- Ngày nay Websocket được ứng dụng rất nhiều trong các dự án cần giao tiếp với
máy chủ, đặc biệt trong lĩnh vực IoT thì nó càng quan trọng ngang với các chuẩn giao tiếp khác như MQTT, LWM2M, CoAP,…
- WebSoket là công nghệ hỗ trợ giao tiếp hai chiều giữa client và server bằng cách
sử dụng một TCP socket để tạo một kết nối hiệu quả và ít tốn kém Mặc dù được thiết kế để chuyên sử dụng cho các ứng dụng web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào
IV.2.2 Ưu điểm và nhược điểm
Ưu điểm:
- WebSockets cung cấp khả năng giao tiếp hai chiều mạnh mẽ, có độ trễ thấp và dễ
xử lý lỗi Không cần phải có nhiều kết nối như phương pháp Comet long-polling
và cũng không có những nhược điểm như Comet streaming
- API cũng rất dễ sử dụng trực tiếp mà không cần bất kỳ các tầng bổ sung nào, so
với Comet, thường đòi hỏi một thư viện tốt để xử lý kết nối lại, thời gian chờ timeout, các Ajax request (yêu cầu Ajax), các tin báo nhận và các dạng truyền tải tùy chọn khác nhau (Ajax long-polling và jsonp polling)
Nhược điểm:
- Không có phạm vi yêu cầu nào Do WebSocket là một TCP socket chứ không phải
là HTTP request, nên không dễ sử dụng các dịch vụ có phạm vi yêu cầu, như SessionInViewFilter của Hibernate
- Hibernate là một framework kinh điển cung cấp một bộ lọc xung quanh một HTTP
request Khi bắt đầu một request, nó sẽ thiết lập một contest (chứa các transaction
và liên kết JDBC) được ràng buộc với luồng request Khi request đó kết thúc, bộ lọc hủy bỏ contest này
- WebSocket hỗ trợ bốn sự kiện được xác định theo W3C: • open • message • error •
close
IV.2.3 Xây dựng Websocket Client cho ESP32 với Arduino Core
Websocket được xây dựng dựa trên nền TCP IP và duy trì kết nối liên tục cho tới khi Cliet hoặc Server ngắt kết nối
Cài đặt thư viện Websocket cho ESP32
Trang 20Để cài đặt thư viện bạn sử dụng trình quản lý thư viện của Arduino: Sketch->Include
Library->Manager Libraries… tìm với từ khóa “Websockets” kéo và tải xuống như
hình(Chú ý chọn phiên bản V2.x.x trở lên vì chúng ta đang sử dụng cho ESP32)
Xây dựng chương trình Websocket Client cho ESP32
- Bắt đầu mã của chúng tôi bằng cách nhập một số thư viện Đầu tiên, chúng ta sẽ
cần thư viện WiFi.h , cho phép chúng ta kết nối với mạng WiFi Ngoài ra, chúng tôi sẽ cần bao gồm thư viện WebSocketsClient.h , vì vậy chúng tôi có thể truy cập
tất cả các chức năng cần thiết để kết nối với máy chủ
#include <WiFi.h>
#include <WebSocketsClient.h>
o Tiếp theo, chúng tôi sẽ đặt thông tin đăng nhập cần thiết để kết nối với mạng WiFi mà chúng tôi muốn sử dụng theo hai biến toàn cục Chúng tôi sẽcần cả tên mạng (ssid) và mật khẩu
const char* ssid = "one pice";//"your-ssid";
const char* password = "lehailong";//"your-password";
o Chúng ta cũng sẽ cần một thể hiện của đối tượng của lớp WebSocketClient ,
sẽ hiển thị các chức năng cần thiết để tương tác với máy chủ
WebSocketsClient webSocket;
Chức năng thiết lập setup()