Để 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 đượccác thầy cô trong khoa giảng dạy về các kiến thức chuyên ngành, đồng thời
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
Trang 2
MỤC LỤC
MỤC LỤC 2
LỜI MỞ ĐẦU 4
LỜI CẢM ƠN 5
1 GIỚI THIỆU ĐỀ TÀI 6
1.1 Giới thiệu đề tài 6
1.2 Mục đích đề tài 6
1.3 Sơ lược các bước thực hiện 6
2 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 11
MicroSD card 13
ESP32 13
OV2640 CAMERA 15
ESP32 15
Variable name in code 15
3 GIỚI THIỆU LINH KIỆN 16
3.1 Module điều khiển động cơ L298N: 16
Thông số kỹ thuật: 16
L298 gồm các chân: 16
3.2 Động cơ Servo MG90S: 17
3.3 Khung xe 18
3.4 Motor, bánh xe 19
3.5 Pin 19
4 Phần mềm sử dụng: 20
4.1 Adruino IDE 20
4.2 Tìm hiểu giao thức UDP 22
Trang 34.2.1 Khái niệm UDP 22
4.2.2 Cấu trúc gói tin UDP 22
4.2.3 Cách hoạt động của UDP 23
4.2.3 Ứng dụng của UDP 23
4.3 Arduino Websocket Client 23
4.3.1 Giới thiệu 23
4.3.2 Ưu điểm & Nhược điểm 23
4.3.3 Xây dựng Websocket Client cho ESP32 với Arduino Core 24
5 Giới thiệu về opencv và các thuật toán, code demo 28
5.1 Thư viện OPENCV 28
5.2 Thuật toán Object Detection 29
5.3 Thuật toán OBJECT TRAKING 30
- Single Obkect Tracking (SOT) 31
5.4.Thuật toán PID 31
5.4.1 Sơ lược cấu trúc điều khiển 31
5.4.2 Thực hiện thuật toán điều khiển trên ESP32 33
5.5 Nguyên lý hoạt động 34
6 THIẾT KẾ MÔ HÌNH, SẢN PHẦM, CODE DEMO 35
6.1 Sơ đồ 35
6.2 Sản phẩm 36
6.3 Code demo 40
7 KẾT LUẬN VÀ TÀI LIỆU THAM KHẢO 47
7.1 Kết quả của dự án 47
7.2 Hướng phát triển của dự án 47
7.3 Các kinh nghiệm rút ra 47
7.4 Tài liệu tham khảo 48
LỜI MỞ ĐẦU
Trang 4Ngày nay, sự phát triển mạnh mẽ của khoa học đời sống, cuộc sống của conngườ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ụ trongcông cuộc cô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ờigian đầ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 định thê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ângcao đờ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 đượccác thầy cô trong khoa giảng dạy về các kiến thức chuyên ngà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ờigian, 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ánhkhỏi những sai sót Chúng em rất mong được sự giúp đỡ và tham khảo ý kiến củathầy cô và các bạn nhằm đóng góp phát triển thêm đề tài
Trang 5LỜI CẢM ƠN
Lời đầu tiên em xin chân thành cảm ơn đến thầy Nguyễn Ngọc Minh đã giúp em rấtnhiề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ến thứcquý 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ựchiện đồ án do em chưa có nhiều kinh nghiệm nên không tránh khỏi sai sót Mongnhậ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ànhcảm ơn sự giúp đỡ của thầy giáo trong quá trình thực hiện đồ án để em hoàn thành
đồ án này
Trang 61 GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu đề 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ệp cũ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ới mobile 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ĩnh vực, thu hút được rất nhiều sự đầu tư và nghiên cứu Mobile robot cũng được chia ra là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 cho con người
1.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ới nhữ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ềuthà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êncứu thêm về ngành Điện tử một cách cụ thể
1.3 Sơ lược các bước thực hiện
Bước 1: Thảo luận đề tài, tìm hiểu về các linh kiện, đọc các tài liệu liên quan
Bước 2: Vẽ phác họa sản phẩm, từng bộ phận của xe tự hành
Bước 3: Thiết kế mạch mô phỏng hoạt động của xe trên phần mềm proteus, altium, 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ểm tra 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 , chọn giá sản phẩm phù hợp với nhu cầu
và tiến hành đi mua linh kiện cần thiết
Bước 6: Lắp ráp các linh kiện cần thiết và kiểm thử sản phẩm
Bước 7: Làm báo cáo, thuyết trình, kết luận
Trang 72 TỔNG QUAN VỀ ESP32-CAM
2.1 Giớ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ựa trên nền ESP32 Đi kèm với một camera OV2640 và tích hợp khe cắm thẻ
- 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ận dạng màu sắc, nhận dạng hình dạng sản phẩm, nhận diện đồ vật,…
Trang 82.2 Cá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
2.3 Cá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
Trang 9- Giao diện ngoại vi: UART / SPI / I2C / PWM
+ Flash off: 180mA @ 5V
+ Flash on and brightness max: 310mA @ 5V
+ Deep-Sleep: thấp tới 6mA @ 5V
+ Modern-Sleep: thấp tới 20mA @ 5V
+ Light-Sleep: thấp tới 6,7mA@5V
Trang 10- 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
2.4 Sơ đồ 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:
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)
- ESP32-CAM có thể hoạt động ở cả 3.3V và 5V, tuy nhiên với nguồn 3.3V, ESP32-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
- 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-CAM Đâ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 đó
Trang 11Châ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 serialvớ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 serialmonitor
- 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ỗilầ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
Trang 12GPIO 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ên nê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ức năng timer waker up.
Nếu không sử dụng thẻ nhớ, bạn có thể sử các GPIO 2, 4, 12, 13, 14, 15 với
chức năng input/output, các chân này đều được tích hợp bộ chuyển đổi ADC và là
chân RTC
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ớ
Trang 13GPIO 33
Ở 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ối với GPIO 33 Đèn LED này hoạt động theo logic đảo, khi điều khiển GPIO 33 ở mức LOW, đèn LED này sẽ sáng và ngược lại
Trang 14Kết nối Camera
ESP32-S kết nối với camera theo bảng kết nối dưới đây:
Trang 153 GIỚI THIỆU LINH KIỆN
3.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)
Công suất hao phí: 20W (khi nhiệt độ T = 75 )℃)
Nhiệt độ bảo quản: -25 ~ +130 ℃) ℃)
L298 gồm các chân:
Trang 16 12V power, 5V power Đây là 2 chân cấp nguồn trực tiếp đến động cơ.
o Bạn có thể cấp nguồn 9-12V ở 12V
o Bên cạnh đó có jumper 5V, nếu bạn để như hình ở trên thì sẽ có
nguồn 5V ra ở cổng 5V power, ngược lại thì không Nếu để như hình thì ta chỉ cần cấp nguồn 12V vô ở 12V power là có 5V ở 5V power, 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
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
3.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ớicá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ênthị 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)
Trang 17 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
3.3 Khung xe
- Bộ Kit Khung Xe Robot 3 Bánh - tự lắp ráp (DIY) là bộ khung xe phổ biến, được
sử dụng nhiều trong các ứng dụng như: xe dò line, xe dò đường mê cung, xe tựhành…
- Với thiết kế mica, cứng cáp cùng với giá thành rẻ
- Khung xe với 2 bánh sau được điều khiển bằng Động Cơ Giảm Tốc V3, bánhtrước trơn, dễ bẻ lái
- Kích thước: xấp xỉ: 20 * 14 cm (L x W)
- Kích thước bánh xe: 6.5 cm (Đường kính)
- Điện áp động cơ: 3V - 6V DC
Trang 20 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 214.2 Tìm hiểu giao thức UDP
4.2.1 Khái niệm UDP
- UDP là viết tắt của cụm từ User Datagram Protocol UDP là một phần của bộgiao thức Internet được sử dụng bởi các chương trình chạy trên các máy tính khác nhau trên mạng
- Không giống như TCP/IP, UDP được sử dụng để gửi các gói tin ngắn gọi là datagram, cho phép truyền nhanh hơn Tuy nhiên, UDP không cung cấp kiểmtra lỗi nên không đảm bảo toàn vẹn dữ liệu
4.2.2 Cấu trúc gói tin UDP
- Cấu trúc gói tin UDP thì đơn giản hơn rất nhiều so với TCP
- Source port và destination port(đều 16 bit): cho phép định danh một
session của một ứng dụng nào đó chạy trên UDP Có thể coi port chính là địa chỉ của tầng Transport
- UDP length(16 bit): cho biết chiều dài của toàn bộ UDP datagram tổng cộng bao nhiêu byte (16 bit thì sẽ có tổng cộng 2^16 byte = 65536 giá trị (từ 0 ->
Trang 224.2.3 Cách hoạt động của UDP
- UDP hoạt động tương tự như TCP nhưng nó không cung cấp kiểm tra lỗi khi truyền gói tin
- Khi một ứng dụng sử dụng UDP, các gói tin chỉ được gửi đến người nhận Người gửi không đợi để đảm bảo người nhận nhận được gói tin hay không,
mà tiếp tục gửi các gói tiếp theo Nếu người nhận miss mất một vài gói tin UDP thì gói tin đó coi như bị mất vì người gửi sẽ không gửi lại chúng => Các thiết bị có thể giao tiếp nhanh hơn
- Điều này hoạt động tương tự trong các trò chơi trực tuyến Nếu bạn bỏ lỡ một
số gói UDP, các nhân vật của người chơi có thể xuất hiện trên bản đồ ở vị trí khác khi bạn nhận được các gói UDP mới hơn
4.3 Arduino Websocket Client
4.3.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
4.3.2 Ưu điểm & Nhược điểm
Ưu điểm
Trang 23- 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ôngphả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
4.3.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 chotới khi Cliet hoặc Server ngắt kết nối
Cài đặt thư viện Websocket cho ESP32
Để 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