1. Trang chủ
  2. » Giáo Dục - Đào Tạo

mô hình xe tự hành sử dụng xử lý ảnh

100 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mô hình xe tự hành sử dụng xử lý ảnh
Tác giả Phạm Ngọc Trí, Nguyễn Văn Tuấn
Người hướng dẫn TS. Nguyễn Linh Nam
Trường học Trường Đại học Sư phạm Kỹ thuật
Chuyên ngành Công nghệ Kỹ thuật Điện tử Viễn thông
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2023
Thành phố Đà Nẵng
Định dạng
Số trang 100
Dung lượng 1,81 MB

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI (16)
    • 1.1 Xe tự hành (16)
      • 1.1.1 Định nghĩa về xe tự hành (16)
      • 1.1.2 Lịch sử phát triển của xe tự hành (17)
      • 1.1.3 Phân loại (18)
      • 1.1.4 Cấu trúc cơ bản của xe tự hành (18)
    • 1.2 Tổng quan về xử lý ảnh (19)
      • 1.2.1 Xử lý ảnh (19)
      • 1.2.2 Ứng dụng của xử lý ảnh trong xe tự hành (21)
    • 1.3 Lý do chọn đề tài (22)
    • 1.4 Tính cấp thiết của đề tài (23)
    • 1.5 Mục tiêu của đề tài (24)
    • 1.6 Mục tiêu nghiên cứu (24)
    • 1.7 Giới hạn đề tài (24)
    • 1.8 Nội dung đề tài (24)
  • CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ (26)
    • 2.1 Xử lý ảnh (26)
      • 2.1.1 Định nghĩa xử lý ảnh (26)
      • 2.1.2 Các vấn đề cơ bản trong xử lý ảnh (27)
      • 2.1.3 Thu nhận và biển diễn ảnh (29)
    • 2.2 Arduino UNO R3 (31)
      • 2.2.1 Giới thiệu (31)
      • 2.2.2 Arduino Uno (32)
      • 2.2.3 Cấu trúc, thông số (33)
    • 2.3 Module điều khiển động cơ L298N (37)
      • 2.3.1 Giới thiệu sơ lược L298N (37)
      • 2.3.2 Đặc điểm và thông số kỹ thuật module L298N (38)
      • 2.3.3 Sơ đồ chân Module điều khiển động cơ DC L298N (39)
      • 2.3.4 Sơ đồ mạch bên trong module điều khiển động cơ L298N (43)
      • 2.3.5 Nguyên lý hoạt động của IC điều khiển động cơ L298N (43)
      • 2.3.6 PWM- kiểm soát động cơ (44)
      • 2.3.7 Mạch cầu H- Đảo chiều quây động cơ DC (44)
      • 2.3.8 Giao tiếp Module điều khiển đọng cơ DC L298N với Arduino (45)
    • 2.4 Động cơ DC (46)
      • 2.4.1 Nguyên lý hoạt động của động cơ DC (47)
      • 2.4.2 Ưu điểm của động cơ DC (48)
      • 2.4.3 Nhược điểm của động cơ DC (48)
    • 2.5 Camera (48)
    • 2.7 Lập trình nhúng (51)
      • 2.7.1 Giới thiệu lập trình nhúng (51)
    • 2.8 Giới thiệu về Python (57)
    • 2.9 Công nghệ sử dụng (58)
      • 2.9.1 Raspbery Pi 4 (58)
      • 2.9.2 Sơ đồ chân của Raspberry Pi 4 (60)
      • 2.9.3 Module giao tiếp dữ liệu nối tiếp Raspberry (61)
      • 2.9.4 Ứng dụng của Raspberry Pi 4 (62)
      • 2.9.5 Mô tả bảng mạch của Raspberry Pi 4 (63)
      • 2.9.6 Tính năng giao diện HDMI Raspberry Pi 4 (64)
      • 2.9.7 Các thiệt bị ngoại vi chính (64)
      • 2.9.8 Cấu trúc phần cứng (65)
      • 2.9.9 Hệ điều hành cho Raspberry Pi 4 (66)
      • 2.9.10 Thông số kỹ thuật chính (67)
    • 2.10 Phương thức truyền thông UART (68)
  • CHƯƠNG 3: THIẾT KẾ VÀ THI CÔNG (72)
    • 3.1 Thiết kế sơ đồ khối (72)
    • 3.2 Sơ đồ từng khối (73)
      • 3.2.1 khối camera (73)
      • 3.2.2 Khối xử lý trung tâm (73)
      • 3.2.3 khối điều khiển động cơ (75)
    • 3.3 Sơ đồ nguyên lý của Raspberry Pi 4 (75)
    • 3.4 Sơ đồ nối dây toàn mạch (76)
    • 3.5 Xử lý ảnh trong mô hình xe tự hành (77)
    • 3.6 Động cơ DC hoạt động trong mô hình xe tự hành (78)
    • 3.7 Thi công phần cứng (79)
      • 3.7.1 Thi công board mạch (79)
      • 3.7.2 Thi công mô hình (80)
    • 3.8 Lập trình phần mềm (81)
      • 3.8.1 Lưu đồ giải thuật cho vi điều khiển (81)
    • 3.9 Phần mềm lập trình Arduino (84)
    • 3.10 Phần mềm THONNY (85)
    • 3.11 Nhận diện với cái biển báo trên phần mềm THONNY (86)
      • 3.11.1 Biển báo STOP(dừng) (86)
      • 3.11.2 Biển báo rẻ phải (86)
      • 3.11.3 Biển báo rẻ trái (87)
      • 3.11.4 Đèn đỏ (87)
      • 3.11.5 Đèn xanh (87)
    • 3.12 Bản thiết kế mô hình đường để xe chạy (88)
      • 3.12.1 Các biển báo giao thông (88)
    • 3.13 Các bước truy cập, lập trình trên hệ điều hành của Raspberry (90)
      • 3.13.1 Các bước cài đặt và lập trình phần mềm IDE THONNY và IDE Arduino (90)
      • 3.13.2 Các bước chạy mô hình (91)
    • 3.14 Kết quả, nhận xét và đánh giá (93)
      • 3.14.1 Kết quả đạt được (93)
      • 3.14.2 Kết quả chạy mô hình (93)
    • 3.15 Nhận xét và đánh giá (94)
      • 3.15.1 Nhận xét (94)
      • 3.15.2 Đánh giá (94)
  • PHỤ LỤC (97)

Nội dung

Nội dung chính của đề tài: Thiết kế mô hình xe tự hành sử dụng xử lý ảnh để nhận diện được các biển báo giao thông khác nhau, hệ thống sử dụng camera Pi để quan sát và gửi dữ liệu về ki

TỔNG QUAN VỀ ĐỀ TÀI

Xe tự hành

1.1.1 Định nghĩa về xe tự hành

Xe tự hành hay còn gọi là Autonomous Vehicles là các phương tiện di chuyển không cần sự can thiệp của con người để thực hiện các chức năng lái xe Còn được biết đến với các thuật ngữ khác như oto tự lái, xe tự lái hoặc xe tự động, xe tự hành tích hợp công nghệ đột phá như cảm biến, hệ thống điều khiển tự động, và trí tuệ nhân tạo để có khả năng nhận diện môi trường xung quanh, ra quyết định, và cách thực hiện các thao tác lái xe một cách an toàn và hiệu quả [1]

Hình 1.1 Tổng quan về xe tự hành

Xe tự hành là phương tiện được thiết kế để di chuyển giữa các điểm đến mà không cần ngưới lái xe phải liên tục theo dõi đường Công nghệ của xe tự hành phải đạt được các mục tiêu sau [1]:

Xử lý một lượng dữ liệu rất lớn và sử dụng nó để đưa ra quyết định thông minh

Có khả năng thích nghi với môi trường đã biết hoặc chưa biết

Nhìn vào tương lai, chúng ta tin rằng vô lăng của xe sẽ biến mất hoàn toàn và chiếc xe sẽ tự hành một cách tự động kết hợp với việc sử dụng một số hệ thống cảm biến, radar, và bản đồ GPS Xe ô tô ngày càng thông minh hơn được minh họa trong hình 1.2

Hình 1.2 Sự phát triển của xe tự hành trong tương lai Những chiếc xe tự hành sử dụng nhiều công nghệ tự động khác nhau để cung cấp một phương thức di chuyển thông minh Việc cung cấp loại phương thức này đòi hỏi sự đồng bộ hài hòa giữa các cảm biến thụ thập thông tin về môi trường xung quanh, và các thuật toán phức tạp xử lý dữ liệu điều khiển xe trong thời gian thực

Những công nghệ này có thể nhận biết đối tượng, con người, ô tô, đánh dấu đường, biển báo, và đèn giao thông, tuân thủ các quy tắc giao thông đường bộ, và cảnh báo nhiều mối nguy hiểm không đoán trước được

Các hệ thống xe tự hành được phân loại dựa trên mức độ độc lập và kiếm soát chúng, theo thang bảy cấp độ tương tự như được đặt ra bởi SAE International (Hiệp hội kỹ sư tự động) Cấp độ này bao gồm từ việc con người phải giữ lại toàn bộ kiểm soát (cấp độ 0) cho đến xe có khả năng hoàn toàn tự động trong mọi điều kiện (cấp độ 5)

Như vậy, xe tự hành được xem là một xu hướng quan trọng trong ngành công nghiệp ô tô và giao thông vận tải, với nhiều ứng dụng tiềm năng không chỉ trong lĩnh vực cá nhân mà còn trong các ứng dụng công nghiệp và dịch vụ [1]

1.1.2 Lịch sử phát triển của xe tự hành

Lịch sử phát triển của xe tự hành là một hành trình ấn tượng, đánh dấu bằng những bước tiến quan trọng và các sự kiện đáng chú ý Mọi khám phá bắt đầu với DARPA Grand Challenge váo năm 2004, nơi các xe tự hành đối đầu với thách thức của sa mạc để chứng minh khả năng của công nghệ này Đến năm 2007, DARPA Urban Challenge mở ra một chương mới, khi các xe tự hành phải đối mặt với môi trường đô thị phức tạp [2]

Sự xuất hiện của Google X và sau này là Waymo vào năm 2009 không chỉ đánh dấu bước tiến quan trọng mà còn đưa công nghệ xe tự hành từ giai đoạn nghiên cứu sang thực tế thương mai Cùng với đó, Uber và Apple cũng đưa vào cuộc đua với các dự án riêng của họ, tạo nên sự canh tranh sôi nổi trong lĩnh vực này

Chức năng Autopilot của Tesla được giới thiệu vào năm 2015, mở ra một đợt sóng mới của xe tự hành, mặc dù đôi khi gặp phải những thách thức và tranh cãi an toàn Từ đó, xu hướng phát triển xe tự hành trở nên toàn cầu, với nhiều quốc gia và khu vực tham gia tích cực vào cuộc đua này

Nhìn chung, lịch sử phát triển của xe tự hành là một câu chuyện về đổi mới, thách thức và cam kết không ngừng, hứa hẹn một tương lai khi mà công nghệ này sẽ trở thành một phần không thể thiếu trong cuộc sống hàng ngày của chúng ta [2]

Phân loại xe tự hành thường dựa trên mức độ độc lập và khả năng kiểm soát của con người Hiện nay, có thể sử dụng hệ thống phân loại theo cấp độ độc lập của SAE International (Hiệp hội kỹ sư tự động) như sau [3]:

Cấp độ 0, xe không có khả năng tự lái, mọi chức năng lái xe phụ thuộc vào sự can thiệp của con người

Cấp độ 1, các chức năng hỗ trợ lái xe như cruise control thông minh và hệ thống hỗ trợ đỗ xe có thể hoạt động, nhưng quyền kiểm soát vẫn ở tay con người

Cấp độ 2, đưa chúng ta vào lĩnh vực “Tự Lái Bộ”, trong đó xe có khả năng thực hiện một số chức năng lái xe mà không cần sự can thiệp của của con người Tuy nhiên, con người vẫn hải sẵn sàng can thiệp khi cần

Cấp độ 3, mở ra khái niệm “Lái xe tự động có hạn”, nơi xe có thể tự động lái trong một số điều kiện nhất định và yêu cầu con người can thiệp khi hệ thống cần

Tổng quan về xử lý ảnh

Xử lý ảnh là một lĩnh vực của khoa học máy tính và kỹ thuật điện tử tập trung vào việc xử lý và phân tích hình ảnh Nó bao gồm nhiều phương pháp và kỹ thuật để chuyển đổi, phân tích và rút trích thông tin từ hình ảnh Dưới đây là một tổng quan về xử lý ảnh [5]:

Cảm biến hình ảnh: sử dụng các thiết bị như máy ảnh để thu thập hình ảnh

Làm sáng và làm tối: điều chỉnh độ sáng và độ tối của ảnh

Cân bằng màu sắc: đảm bảo sự cân bằng màu sắc trong ảnh

Lọc và làm mịn: loại bỏ nhiễu và làm mịn hình ảnh để cải thiện chất lượng

Phóng to và thu nhỏ: thay đổi kích thước của hình ảnh

Xoay và cắt: thực hiện xoay hoặc cắt ảnh để đạt được góc nhìn mong muốn

Chuyển đổi màu sắc và độ sáng: thay đổi màu sắc và độ sáng của ảnh

Phân đoạn màu sắc: phân tách hình ảnh thành các vùng màu sắc khác nhau

Phân đoạn vùng: phân chia hình ảnh thành các vùng có ý nghĩa khác nhau

Kỹ thuật đặc trưng cạnh: phát hiện biên cạnh trong hình ảnh

Trích xuất đặc trưng mức độ cao: nhận diện các đặc trưng phức tạp hơn như khuôn mặt, đối tượng,…

Nhận dạng đối tượng và nhận diện khuôn mặt

Học máy và Deep Learning: sử dụng mô hình học máy và mạng nơ-ron để nhận diện đối tượng và khuôn mặt

Xử lý ảnh y tế và khoa học

Segmentation trong y học: phân loại và đánh dấu các cấu trúc trong hình ảnh y tế

Microscopy Image Analysis: xử lý ảnh từ kính hiển vi để phân tích các cấu trúc nhỏ Ứng dụng thực tế

Xử lý ảnh video: theo dõi đối tượng, nhận dạng hành động trong video

Thị giác máy: sử dụng trong xe tự lái, nhận diện vật thể trong thời gian thực

Nhiễu: nhiễu trong hình ảnh có thể làm giảm chất lượng của quá trình xử lý

Biểu đồ đa chiều: đối với hình ảnh threedimensional, việc xử lý và hiển thị là một thách thức

Học sâu: sử dụng mạng nơ-ron sâu để giải quyết các vấn đề xử lý ảnh phức tạp

Xử lý ảnh 3D: nâng cao khả năng xử lý hình ảnh đa chiều

Xử lý ảnh là lĩnh vực đa dạng và ngày càng trở nên quan trọng trong nhiều ứng dụng thực tế từ y học đến công nghiệp và giải trí Các phương pháp mới và sự phát triển của công nghệ máy tính đã làm tăng cường khả năng xử lý và hiểu hình ảnh

1.2.2 Ứng dụng của xử lý ảnh trong xe tự hành

Xử lý ảnh đóng một vai trò quan trọng trong nhiều khía cạnh của công nghệ xe tự hành Dưới đây là một số ứng dụng quan trọng của xử lý ảnh trong lĩnh vực này [5]:

Nhận diện và theo dõi đối tượng

Hệ thống nhận diện đối tượng: sử dụng xử lý ảnh để nhận diện và phân loại các đối tượng như xe, người đi bộ, xe đạp, và các vật thể khác trong môi trường đường sá

Phân loại khu vực an toàn và nguy hiểm

Phân loại khu vực an toàn: xử lý ảnh giúp định rõ các khu vực an toàn và nguy hiểm, giúp hệ thống đưa ra quyết định về tốc độ và hướng di chuyển

Thị giác toàn cảnh (360 độ)

Sử dụng nhiều camera: kết hợp thông tin từ nhiều camera để tạo ra thị giác toàn cảnh của xe, giúp tăng cường khả năng nhận biết môi trường xung quanh

Hạn chế góc mù và chuyển làn an toàn

Cảnh báo chuyển làn: xử lý ảnh giúp nhận diện các xe xung quanh và cảnh báo khi có nguy cơ va chạm trong quá trình chuyển làn Điều khiển tốc độ và khoảng cách

Theo dõi khoảng cách: sử dụng xử lý ảnh để đo lường khoảng cách giữa xe và các đối tượng xung quanh, từ đó điều khiển tốc độ của xe Điều khiển đèn pha tự động Điều chỉnh đèn pha: xử lý ảnh giúp tự động điều chỉnh ánh sáng đèn pha để tránh làm chói mắt người lái khác và cải thiện khả năng nhìn đêm

Xử lý dữ liệu lidar và radar

Kết hợp với các cảm biến khác: kết hợp thông tin từ các cảm biến như LIDAR và Radar với dữ liệu từ xử lý ảnh để tạo ra một hình ảnh chính xác và toàn diện về môi trường xung quanh

Nhận diện biển báo giao thông Đọc và nhận diện biển báo: sử dụng xử lý ảnh để nhận diện và đọc thông tin từ biển báo giao thông, giúp hệ thống tự động thích ứng với các quy tắc đường sá

Hệ thống dự đoán và phản ứng

Dự đoán hành vi người lái: xử lý ảnh có thể giúp dự đoán hành vi của người lái và phản ứng tương ứng của hệ thống xe tự hành

Xử lý ảnh thời gian thực

Yêu cầu xử lý nhanh: các ứng dụng yêu cầu xử lý ảnh thời gian thực để đảm bảo rằng hệ thống có khả năng đưa ra quyết định trong khoảng thời gian ngắn

Sự kết hợp của xử lý ảnh với các công nghệ khác như học máy và trí tuệ nhân tạo đã làm tăng hiệu suất và độ chính xác của hệ thống xe tự hành, giúp chúng trở nên an toàn và có khả năng tương tác với môi trường xung quanh một cách thông minh.

Lý do chọn đề tài

Sự phát triển nhanh chóng của công nghệ tự hành: Lĩnh vực xe tự hành đang phát triển với tốc độ nhanh chóng và trở thành một xu hướng quan trọng trong ngành công nghiệp ô tô Sử dụng trí tuệ nhân tạo và xử lý ảnh là một phần quan trọng trong việc phát triển các hệ thống xe tự hành hiện đại

Cải thiện tính an toàn giao thông: Một trong những lợi ích quan trọng của xe tự hành là khả năng tăng cường tính an toàn giao thông Xử lý ảnh có thể giúp xe tự hành phát hiện và phản ứng đúng cách đối với các tình huống đường phố như biển báo giao thông, người đi bộ, xe cộ khác, và các trở ngại

Tích hợp dữ liệu từ các cảm biến hình ảnh: Hiện nay, các xe tự hành thường được trang bị nhiều camera và cảm biến hình ảnh để thu thập dữ liệu về môi trường xung quanh Sử dụng xử lý ảnh giúp khai thác tối đa thông tin từ các nguồn này để đảm bảo hoạt động an toàn và hiệu quả

Khả năng thích nghi với tình huống thay đổi: Mô hình xe tự hành phải có khả năng thích nghi với các tình huống đường phố thay đổi liên tục Xử lý ảnh có thể cung cấp thông tin thời gian thực và chi tiết về môi trường, giúp xe tự hành đưa ra các quyết định thông minh trong thời gian ngắn

Nhu cầu trong ngành công nghiệp và nghiên cứu: Công nghiệp ô tô, công nghệ thông tin và nghiên cứu trí tuệ nhân tạo đang đặt nhiều nguồn lực vào việc phát triển các hệ thống xe tự hành Vì vậy, có nhu cầu lớn cho các nghiên cứu liên quan đến việc sử dụng xử lý ảnh trong mô hình xe tự hành

Thách thức kỹ thuật và nghiên cứu tiềm năng: Đề tài này đối diện với nhiều thách thức kỹ thuật thú vị, chẳng hạn như việc phát triển các thuật toán xử lý ảnh tiên tiến để nhận diện đối tượng và tạo ra mô hình dự đoán cho hành vi của xe tự hành Nghiên cứu trong lĩnh vực này có tiềm năng tạo ra các đóng góp quan trọng đối với ngành công nghiệp và xã hội

Tóm lại, lý do chọn đề tài này xuất phát từ sự quan trọng và tiềm năng của việc sử dụng xử lý ảnh trong mô hình xe tự hành, cũng như nhu cầu gia tăng trong ngành và sự hấp dẫn của các thách thức nghiên cứu liên quan.

Tính cấp thiết của đề tài

Đề tài "Mô hình xe tự hành sử dụng xử lý ảnh" có tính cấp thiết cao vì nó đáp ứng một số vấn đề quan trọng và mang lại lợi ích cho nhiều khía cạnh trong xã hội và công nghiệp, bao gồm:

Tăng cường an toàn giao thông: Xe tự hành có khả năng giảm tai nạn giao thông do người lái gây ra do yếu tố con người như mệt mỏi, sai lầm, hoặc thiếu tập trung

Sử dụng xử lý ảnh giúp xe tự hành phát hiện và phản ứng đúng cách đối với các tình huống nguy hiểm, giảm nguy cơ tai nạn

Cải thiện tính hiệu quả và tiện ích giao thông: Mô hình xe tự hành có khả năng tối ưu hóa việc di chuyển trên đường và giảm tắc nghẽn giao thông Điều này có thể giảm thời gian di chuyển, tiết kiệm nhiên liệu, và giảm ô nhiễm môi trường

Sự phát triển của ngành công nghiệp ô tô và công nghệ thông tin: Xe tự hành là một lĩnh vực đang phát triển mạnh mẽ và có tiềm năng thúc đẩy sự phát triển của ngành công nghiệp ô tô và công nghệ thông tin Điều này có thể tạo ra nhiều cơ hội mới về công việc làm và doanh nghiệp

Thách thức giao thông đô thị: Trong các thành phố đông dân cư, tắc nghẽn giao thông và ô nhiễm môi trường trở thành vấn đề ngày càng nghiêm trọng Mô hình xe tự hành có khả năng giúp giải quyết một phần thách thức này bằng cách cải thiện quản lý và tối ưu hóa giao thông đô thị

Sự phát triển của trí tuệ nhân tạo và xử lý ảnh: Đề tài này cung cấp cơ hội để nghiên cứu và phát triển các thuật toán và công nghệ xử lý ảnh tiên tiến, đóng góp vào sự phát triển của trí tuệ nhân tạo và xử lý ảnh không chỉ trong lĩnh vực xe tự hành mà còn trong các ngành khác

Sự thay đổi trong văn hóa giao thông: xe tự hành có khả năng thay đổi cách chúng ta sử dụng và quản lý giao thông đường bộ Điều này đòi hỏi sự nghiên cứu và phát triển để đảm bảo tính an toàn và tiện ích của hệ thống xe tự hành

Tóm lại, đề tài này có tính cấp thiết cao do nó liên quan trực tiếp đến sự an toàn và hiệu quả của giao thông đường bộ, cũng như có tiềm năng thúc đẩy sự phát triển của nhiều lĩnh vực khác, từ công nghiệp ô tô đến công nghệ thông tin và trí tuệ nhân tạo.

Mục tiêu của đề tài

Mục tiêu của đề tài này là phát triển một hệ thống xe tự hành thông minh, an toàn và hiệu quả dựa trên xử lý ảnh để cải thiện tính an toàn và tiện ích giao thông đường bộ.

Mục tiêu nghiên cứu

Mục tiêu nghiên cứu của đề tài này là phát triển và nghiên cứu các công nghệ và thuật toán để tạo ra một hệ thống xe tự hành thông minh dựa trên xử lý ảnh, đồng thời cũng nhằm đóng góp vào sự phát triển của lĩnh vực này và cải thiện tính an toàn và hiệu quả của giao thông đường bộ.

Giới hạn đề tài

Vì do là đề tài xử lý hình ảnh nên còn rất nhiều vấn đề làm ảnh hướng tới biển báo như ánh sáng, trầy xước, khi vào ban đêm sẽ khó xử lý hình ảnh.

Nội dung đề tài

Bố cục của đề tài gồm 4 chương:

Chương 1: Tổng quan về đề tài

Chương này trình bày tổng quan về xe tự hành, xử lý ảnh và trí tuệ nhân tạo AI Chương 2: Cơ sở lý thuyết vả công nghệ

Chương này trình bày cơ sở lý thuyế như Raspbery Pi 4, Arduino UNO R3, các công nghệ sử dụng, các chuẩn giao tiếp sử dụng trong mô hình

Chương 3: Thiết kế và thi công mô hình

Chương này trình bày sơ đồ khối và thi công mô hình Trong chương này trình bày sơ đồ khối và thiết kế các khối chức năng như khối xử lý trung tâm Sau đó tiến trình layout và gia công mạch được tiến hành Tiếp theo, hệ thống mô hình hoàn chỉnh đã được xây dựng trước đó được lắp ráp để từ đó có thể xây dựng lưu đồ giải thuật và viết chương trình điều khiển cho hệ thống Cuối cùng, sau khi có mô hình và chương trình điều khiển, tiến hành thử nghiệm và kiểm tra hoạt động của hệ thống, tìm lỗi và khắc phục nếu có

Chương 4: Kết quả, nhận xét và đánh giá

Chương này trình bày những kết quả đã đạt được qua 15 tuần thực hiện mô hình, kết quả thực tế mô hình đã làm được bao gồm kết quả chạy các chức năng của mô hình và kết quả phần mềm Qua đó đánh giá một vài thông số để đưa ra nhận xét ưu điểm và nhược điểm của mô hình.

CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ

Xử lý ảnh

2.1.1 Định nghĩa xử lý ảnh

Xử lý ảnh một trong những lĩnh vực khá quan trọng của khoa học máy tính và công nghệ thông tin, tập trung vào việc xử lý và hiểu thông tin từ hình ảnh và video Được sử dụng rộng rãi trong nhiều lĩnh vực, xử lý ảnh đòi hỏi sự kết hợp giữa các phương pháp truyền thống và công nghệ tiên tiến nhằm giải quyết các thách thức phức tạp trong việc đánh giá và xử lý dữ liệu hình ảnh [6]

Hình 2.1 Quá trình xử lý ảnh Quá trình tiền xử lý ảnh là bước rất quan trọng, trong đó hình ảnh sẽ được làm sạch, loại bỏ nhiễu, và điều chỉnh để chuẩn bị cho các bước xử lý tiếp theo Nhận diện đối tượng và nhận dạng đưa ra khả năng xác định và phân loại các đối tượng trong hình ảnh, từ khuôn mặt đến vật thể

Hình 2.2 Các bước cơ bản trong một hệ thống xử lý ảnh Phân loại hình ảnh đưa ra khả năng đánh giá loại hoặc nhãn của hình ảnh, hỗ trợ trong việc tổ chức và quản lý dữ liệu lớn Phân đoạn hình ảnh giúp phân chia hình ảnh thành các vùng có ý nghĩa, cung cấp cái nhìn tổng quan và chi tiết về nội dung

Trích xuất đặc trưng từ hình ảnh là quá trình xác định và rút trích các đặc trưng quan trọng, hỗ trợ trong việc nhận biết và hiểu biết về thông tin hình ảnh Nhận diện hình ảnh chuyển động đặt ra khả năng theo dõi và nhận diện các vùng chuyển động trong video, đóng vai trò quan trọng trong an ninh và giám sát

Xử lý ảnh thường sử dụng các phương pháp học máy, trong đó đặc biệt là học sâu, để tự động học và cải thiện khả năng xử lý dữ liệu hình ảnh Với ứng dụng rộng rãi từ y học đến xe tự hành và giải trí số, xử lý ảnh là một lĩnh vực đầy hứa hẹn và đóng vai trò quan trọng trong cuộc cách mạng công nghiệp 4.0 [6]

2.1.2 Các vấn đề cơ bản trong xử lý ảnh

2.1.2.1 Nén chỉnh biến dạng Ảnh thu nhận thường bị biến dạng do các thiết bị quang trọng và điện tử

Hình 2.3 Ảnh thu nhận và ảnh mong muốn Để khắc phục người ta sử dụng các phép chiếu, các phép chiếu thường được xây dựng trên tập các điểm điều khiển

Giả sử (P i , P i ′)i = 1, 𝑛̅̅̅̅̅ có n các tập điều khiển

Giả sử ảnh bị biến đổi chi bao gồm: Tịnh tiến, quay, tỉ lệ biến dạng bậc nhất tuyến tính Khi đó hàm f có dạng: f(x,y) = (a1x + b1y + c1, a2x + b2y + c2)

Giải hệ phương trình tuyến tính tìm được a1, b1, c1

Có 2 loại nhiễu cơ bản trong quá trình thu nhận ảnh

Nhiễu hệ thống: là nhiễu có quy luật có thể khử bằng các phép biến đổi

Nhiễu ngẫu nhiên:vết bẩn không rõ nguyên nhân đến khắc phục bằng các phép lọc

2.1.2.3 Chỉnh mức xám Để khắc phục vấn đề về tính không đồng đều của hệ thống thường có 2 phương hướng tiếp cận [6]:

Giảm số mức xám: Điều này được thực hiện bằng cách nhóm các mức xám gần nhau lại thành một nhóm duy nhất Trong trường hợp chỉ có hai mức xám, quá trình này có thể chuyển đổi ảnh thành đen trắng Một ứng dụng phổ biến của phương pháp này là in ảnh màu thành ảnh đen trắng

Tăng số mức xám: Tiếp cận này thực hiện việc nội suy để tạo ra các mức xám trung gian, thường sử dụng kỹ thuật nội suy Mục tiêu của quá trình này là tăng cường độ mịn của ảnh và giảm tính không đồng đều

Nhận dạng tự động tên gọi tiếng anh là automatic recognition, đặt ra các thách thức quan trọng trong thị giác máy, bao gồm mô tả, phân loại và nhóm các mẫu trong nhiều lĩnh vực khoa học khác nhau Một câu hỏi quan trọng xuất hiện là định nghĩa

"mẫu" là gì Theo Watanabe, một trong những người đầu tiên nghiên cứu lĩnh vực này, mẫu được mô tả như một thực thể, xác định mơ hồ và có thể được đặt tên

Ví dụ về mẫu có thể là ảnh vân tay, hình ảnh của một đối tượng được chụp, chữ viết, khuôn mặt người, hoặc một biểu đồ tín hiệu tiếng nói Khi đã biết về một mẫu cụ thể, quá trình nhận dạng hoặc phân loại mẫu đó có thể được thực hiện theo một trong những cách sau[6]:

Phân loại có mẫu (supervised classification), Bao gồm các phương pháp như phân tích phân biệt, trong đó mẫu đầu vào được xác định là một thành phần của một lớp đã biết trước Phân loại không có mẫu (unsupervised classification hay clustering),Trong trường hợp này, các mẫu được gán vào các lớp khác nhau dựa trên một tiêu chuẩn đồng dạng, mà cho đến thời điểm phân loại, lớp không biết hoặc chưa được đặt tên

2.1.2.5 Nén ảnh Để giảm thiểu không gian lưu trữ, thường có hai phương hướng chính: nén bảo toàn thông tin và nén không bảo toàn thông tin Nén không bảo toàn thông tin thường mang lại hiệu suất nén cao hơn, tuy nhiên, điều này thường đi kèm với sự giảm mất thông tin và khả năng phục hồi kém Dựa trên hai hướng tiếp cận này, có bốn cách tiếp cận cơ bản trong quá trình nén ảnh[6]:

Nén ảnh thống kê là phương pháp nén dựa trên việc phân tích tần suất xuất hiện của các giá trị điểm ảnh, và từ đó áp dụng chiến lược mã hóa tương ứng Một đại diện tiêu biểu của kỹ thuật nén này là định dạng *.TIF

Nén ảnh không gian là một kỹ thuật nén dựa trên vị trí không gian của các điểm ảnh để thực hiện quá trình mã hóa, tận dụng sự tương đồng giữa các điểm ảnh trong các khu vực gần nhau Một ví dụ cụ thể cho phương pháp này là định dạng nén *.PCX

Arduino UNO R3

Năm 2005, Viện Thiết kế Tương tác Arduino được thành lập tại Ivrea, Ý Cái tên

"Arduino" được lấy từ một quán bar ở Ivrea, nơi những người sáng lập thường gặp nhau Arduino là một bo mạch xử lý dùng để lập trình và xây dựng các ứng dụng giao tiếp giữa các thành phần hoặc với môi trường xung quanh Ngôn ngữ lập trình Arduino rất dễ đọc và các thiết bị ngoại vi trên bo mạch được tiêu chuẩn hóa để người dùng không có thiết bị điện tử có thể lập trình Arduino được thiết kế cho nền tảng AVR Atmel 8bit hoặc ARM Atmel 32bit Một bo mạch Arduino bao gồm các thành phần như giao diện USB, các chân đầu vào analog và đầu nối I/O kỹ thuật số được thiết kế để tương thích với nhiều bo mạch mở rộng khác nhau [7]

Các thiết bị dựa trên Arduino được lập trình bằng ngôn ngữ đặc biệt dựa trên ngôn ngữ Wires, một biến thể của C/C++ Sau khi nền tảng Wires đã sẵn sàng, các nhà nghiên cứu đã làm việc để phân phối và cải tiến nó trong cộng đồng nguồn mở Arduino nhằm mục đích cung cấp một phương pháp đơn giản và giá cả phải chăng cho những người có sở thích, sinh viên và chuyên gia Thông tin về phần cứng Arduino được công bố rộng rãi để những ai muốn tự làm bo mạch Arduino cho riêng mình có thể thực hiện Tính đến năm 2011, có hơn 300.000 bo mạch Arduino chính thức được sản xuất thương mại và đến năm 2023, con số đó sẽ tăng lên khoảng 700.000 bo mạch chính thức được người dùng sử dụng

Ngoài công ty Smart Projects ở Italy, phần cứng Arduino gốc, còn có một số board Arduino tương đương khác được thiết kế và sản xuất bởi công ty SparkFun Electronics ở Mỹ [7] Arduino đã có nhiều phiên bản phù hợp cho các mục đích sử dụng khác nhau:

Hình 2.6 Những phiên bản của Arduino

“Uno” có nghĩa là “một” trong tiếng Ý và được chọn là tên cho phiên bản Arduino 1.0 sắp tới, đó sẽ là phiên bản tài liệu tham khảo chính cho Arduino Arduino Uno là phiên bản mới nhất trong các board Arduino và là mô hình tham chiếu cho nền

Arduino Uno là một “board điều khiển” dựa trên vi điều khiển Atmega328 Arduino có 14 chân đầu vào/ra analog, tần số chạy là 16MHz, có kết nối USB, một jack cắm nguồn, một tiêu đề ICSP và một nút reset Nó đi kèm với tất cả các thành phần cần thiết để hỗ trợ vi điều khiển và chỉ cần kết nối với máy tính qua cáp USB hoặc cấp nguồn để bắt đầu sử dụng [8]

Arduino Uno khác biệt với các phiên bản trước bởi việc không sử dụng chip FTDI để điều khiển USB-to-serial Thay vào đó, nó được trang bị tính năng Atmega16U2 để lập trình và chuyển đổi USB-to-serial

Phiên bản (R2) của Arduino Uno sử dụng chip Atmega 8U2 và có một điện trở kéo dòng 8U2 HWB xuống đất, giúp việc chuyển sang chế độ FDU (DFU) dễ dàng hơn

Phiên bản R3 của Arduino Uno (phiên bản hiện tại) có các cải tiến sau:

Phiên bản R3 của Arduino Uno cũng có thêm chân SDA và SCL, được đặt gần chân Aref Ngoài ra, hai chân mới được đặt gần chân RESET, và có chân IOREF để điều chỉnh dòng cung cấp

Mạch được thiết kế lại để có độ bền tốt hơn

Atmega16U2 thay thế cho Atmega8U2

Bảng 2.1 Một vài thông số Arduino Uno R3

Vi điều khiển Atmega328 họ 8bit Điện áp hoạt động 5VDC

Tần số hoạt động 16MHz

Dòng tiêu thụ Khoảng 30mA

Số chân digital I/O 14 chân (6 chân hardware PWM)

Số chân analog 6 chân (độ phân giải 10bit)

Dòng tối đa trên mỗi chân I/O 30mA

Dòng ra tối đa (5V) 500mA

Dòng ra tối đa (3,3V) 50mA

Bộ nhớ Flash 32KB (Atmega328) với 0,5KB dùng bởi bootloader

Một board Arduino đời đầu bao gồm một cổng giao tiếp RS-232 (nằm ở góc phía trên bên trái) và một chip Atmega8 (màu đen, nằm ở góc phía dưới bên phải) Nó có tổng cộng 14 chân I/O digital ở phía trên và 6 chân I/O analog ở phía dưới [7]

Board Arduino thường cung cấp hầu hết các chân I/O của vi điều khiển để sử dụng với mạch ngoại vi Các phiên bản như diecimila, duemilanove, và hiện tại là Uno cung cấp 14 chân I/O digital, trong đó có 6 chân hỗ trợ chế độ điều chế độ rộng xung (PWM), và 6 chân I/O analog, có thể được sử dụng như là 6 chân I/O digital khác Những chân này được đặt ở phía trên mặt board thông qua cái header cái khoảng 0,1 inch (tương đương 2,5 milimet) Các phiên bản như Arduino Nano, Arduino compatible Bare Bones Board và Boarduino được thiết kế với các chân header đực ở phía trên, giúp dễ dàng cắm chúng vào các breadboard Kích thước tối đa của mạch Arduino Uno là 2,7 inch (chiều dài) và 2,1 inch (chiều rộng), bao gồm kết nối USB và jack điện mở rộng vượt ra ngoài không gian ban đầu Có bốn lỗ vít cho phép gắn board vào một board khác [7]

Arduino Uno có thể được cấp nguồn thông qua kết nối USB hoặc từ nguồn điện bên ngoài Nguồn điện được chọn tự động Nguồn cấp bên ngoài (không phải là USB) có thể được cung cấp từ bộ chuyển đổi AC – DC hoặc nguồn pin Bộ chuyển đổi có thể được kết nối bằng cách cắm một đầu cắm đường kính 2,1mm vào lỗ cắm điện trên board mạch Nếu sử dụng nguồn từ pin, nó có thể được kết nối vào hai chân GND và Vin trên header kết nối POWER

Board mạch có thể hoạt động với nguồn cấp từ 6 đến 20V Tuy nhiên, nguồn cấp tối thiểu thường là 7V Các chân 5V có thể nhận nguồn nhỏ hơn 5V, nhưng trong trường hợp này, hoạt động của board có thể không ổn định Nếu sử dụng nguồn cấp lớn hơn 12V, bộ ổn áp sẽ nóng và có thể làm hỏng mạch Do đó, khuyến nghị nên sử dụng trong khoảng 7 đến 12V

Các chân nguồn trên Arduino Uno bao gồm [7]:

Vin – đây là điện áp đầu vào của board Arduino khi sử dụng nguồn cấp bên ngoài Có thể cấp nguồn qua chân Vin hoặc thông qua các jack cắm kết nối với chân này

5V – đây là chân đầu ra được định rõ là 5V Board mạch có thể nhận nguồn từ jack cắm, kết nối USB, hoặc chân Vin của board Cấp nguồn điện thông qua chân 5V hoặc 3,3V mà không tuân theo khuyến nghị có thể gây hỏng board mạch

3,3V – đây là nguồn cấp 3,3V được định rõ trên board mạch Dòng cấp tối đa là 50mA

GND – đây là chân nối đất

IOREF – đây là chân cấp điện áp tham chiếu cho vi điều khiển hoạt động Bộ hỗ trợ cấu hình chuẩn của Arduino cho phép đọc điện áp trên chân IOREF và lựa chọn nguồn cấp phù hợp hoặc kích hoạt dịch điện áp trên đầu ra để làm việc với các nguồn 5V hoặc 3,3V [7]

Module điều khiển động cơ L298N

Module điều khiển động cơ L298N sử dụng để điều khiển động cơ DC và động cơ bước Trong đó module có một IC điều khiển động cơ L298 và một bộ điều chỉnh điện áp 5V 78M05 [9]

Ngoài ra, Module L298N có thể điều khiển 2 động cơ DC hoắc là tối đa 4 động cơ DC tùy thuộc vào mô hình ta muốn điều khiển với khả năng điều khiển hướng và tốc độ

Hình 2.9 Module điều khiển động cơ L298N Trong Module điều khiển động cơ L298N gồm có bộ điều chỉnh điện áp 78M05

IC điều khiển động cơ L298, điện trở, tụ điện , LED nguồn và juumper 5v tích hợp

Mạch điều khiển được thiết kế với bộ điều chỉnh điện áp 78M05, và để kích hoạt nó, bạn cần đặt jumper Khi nguồn điện nhỏ hơn hoặc bằng 12V, mạch sẽ sử dụng bộ điều chỉnh điện áp để cấp nguồn, và chân 5V có thể được sử dụng làm nguồn cung cấp cho vi điều khiển Tuy nhiên, không nên đặt jumper khi nguồn điện lớn hơn 12V, và chân 5V phải được cấp nguồn riêng cho mạch bên trong

Chân ENA và ENB được sử dụng để điều khiển tốc độ của động cơ A và B, trong khi chân IN1 và IN2 cũng như IN3 và IN4 được sử dụng để điều khiển hướng quay của động cơ A và B Điều này tạo ra một cấu trúc điều khiển linh hoạt cho cả hai động cơ, cho phép bạn kiểm soát cả tốc độ và hướng chuyển động của chúng [9]

Hình 2.10 Module điều khiển động cơ L298N

2.3.2 Đặc điểm và thông số kỹ thuật module L298N

Bảng 2.2 Thông số kĩ thuật của Module L298N

Chip điều khiển Cặp H-Bridge L298N Điện áp cấp cho động cơ ( tối đa) 46V

Dòng điện cấp động cơ (tối đa) 2A Điện áp logic 5V Điện áp hoạt động của IC 5-35V

Dòng điện hoạt động IC 2A

Cảm biến dòng điện cho mỗi động cơ

Có tản nhiệt cho hiệu suất tốt hơn

Có đèn báo LED bật nguồn

Ngoài ra module điều khiển động cơ L298N có thể được thay thế bằng các loại khác như : TMC2209, DR8825, A4988, L9110S, DRV8711

Mỗi loại module có những đặc tính và ưu điểm riêng, và sự thay thế phụ thuộc vào yêu cầu cụ thể của dự án hoặc ứng dụng Đối với các linh kiện khác, danh sách bao gồm:IC điều khiển động cơ LM298, Bộ điều khiển điện áp 78M05, Tụ điện, Điện trở, Tản nhiệt [9]

2.3.3 Sơ đồ chân Module điều khiển động cơ DC L298N

Bảng 2.3 Mô tả các chân cho module L298N

IN1 & IN2 Các chân đầu vào điều khiển hướng quay của động cơ A

IN3 & IN4 Các chân đầu vào điều khiển hướng quay của động cơ B

ENA Kích hoạt tín hiệu PWM cho động cơ A

VIB Kích hoạt tín hiệu PWM cho động cơ B

OUT2 Chân đầu ra cho động cơ A

OUT4 Chân đầu ra cho động cơ B

5V Cấp nguồn cho mạch logic bên trong IC L298N

Hình 2.11 Cấu hình sơ đồ bố trí chân của L298N

Chân nguồn cấp cho động cơ(Power Pins) [9]

Module điều khiển động cơ DC L298N Arduino có 2 chân cấp nguồn đầu vào là

VS và VSS GND là chân để nối đất

Hình 2.12 Sợ đồ 2 chân cấp nguồn đầu vào VS, VSS và chân nối đất GND

VS: Chân này dùng để cấp nguồn vào cho mạch H bên trong của IC Nguồn điện áp đầu vào từ 5V đến 12V

VSS: Chân này được sử dụng để cấp nguồn vào cho mạch logic bên trong IC L298N và điện áp của nó nằm trong khoảng từ 5V đến 7V

GND: Chân này được sử dụng để nối đất

Chân đầu ra (Output Pins) [9]

Kênh đầu ra của module điều khiển động cơ L298N Arduino có thứ tự như sau: OUT1 & OUT2 cho động cơ A và OUT3 & OUT4 cho động cơ B Chúng ta có thể sử dụng hai động cơ DC 5-12V

Hình 2.13 Sơ đồ 2 chân đầu ra OUT1 & OUT2 và OUT3 & OUT4 Đầu ra trên module L298N có thể chịu tải tới 2A cho mỗi động cơ DC Tuy nhiên, nó còn phụ thuộc vào công suất của nguồn điện cấp động cơ

Chân điều khiển hướng di chuyển ( Direction control Pins) [9] các chân trên module mang đến khả năng điều khiển hướng chuyển động của động cơ, cho phép thực hiện các thao tác như di chuyển thẳng hoặc di chuyển lùi Nguyên lý hoạt động của tính năng này dựa trên việc điều khiển các công tắc trong mạch cầu H tích hợp trong IC L298N

Hình 2.14 Sơ đồ 2 chân điều khiển hướng di chuyển IN1 & IN2 và IN3 & IN4

Module điều khiển động cơ L298N khi kết hợp với Arduino thường có hai chân điều khiển hướng IN1 & IN2 chân điều khiển chiều chuyển động của động cơ A và IN3 & IN4 điều khuyển hướng chuyển động của động cơ B

Chân điều khiển tốc độ (Speed Control Pins) [9] các chân điều khiển tốc độ ENA và ENB trên module L298N được sử dụng để bật tắt động cơ và kiểm soát tốc độ quay của chúng Khi bạn đặt các chân này ở mức CAO, động cơ sẽ quay; khi đặt ở mức THẤP, động cơ sẽ dừng lại Tuy nhiên, việc sử dụng PWM (Modulation Width Pulse) cho phép bạn kiểm soát tốc độ của động cơ một cách linh hoạt

Module L298N thường đi kèm với một jumper được gắn vào, và khi có jumper này, động cơ sẽ quay với tốc độ tối đa Nếu bạn muốn điều khiển tốc độ của động cơ thông qua chương trình, bạn có thể tháo jumper ra và kết nối với chân PWM trên Arduino Điều này cho phép bạn điều chỉnh tốc độ quay của động cơ thông qua tín hiệu PWM được tạo ra từ Arduino

Hình 2.15 Sơ đồ 2 chân điều khiển tốc độ ENA và ENB

Trên module có tích hợp một IC ổn áp 5V 78M05 và có khả năng bật tắt thông qua một jumper ở phía dưới Khi jumper được cắm, IC ổn áp 78M05 sẽ được kích hoạt, và chân VSS của nó sẽ nhận nguồn từ VS của động cơ Trong tình huống này, chân đầu vào 5V chuyển thành chân đầu ra, cung cấp nguồn 5V với dòng tối đa là 0,5A Chức năng này có thể sử dụng để cung cấp nguồn cho Arduino hoặc các thiết bị khác

Khi jumper được tháo, IC ổn áp 78M05 sẽ tắt, và nếu muốn tiếp tục sử dụng nguồn 5V từ module, bạn phải cung cấp nguồn 5V riêng biệt thông qua chân VSS Điều này tạo ra sự linh hoạt trong việc quyết định cách cấp nguồn 5V cho các thành phần khác nhau trên mạch Điện áp rơi của chương trình điều khiển động cơ L298N[9] Điện áp rơi (Voltage Drop) của chương trình điều khiển động cơ L298N là một thông số chỉ ra mức điện áp mất mát khi dòng điện chạy qua IC Điện áp rơi của L298N được xác định chủ yếu bởi hai yếu tố quan trọng: điện áp đầu vào và dòng điện đầu ra

2.3.4 Sơ đồ mạch bên trong module điều khiển động cơ L298N

Hình 2.17 sơ đồ mạch bên trong module L298N

2.3.5 Nguyên lý hoạt động của IC điều khiển động cơ L298N

Nguyên lý hoạt động của IC điều khiển động cơ L298N dựa trên mạch cầu H, một cấu trúc điện tử sử dụng transistor để điều khiển dòng điện qua động cơ Mạch cầu

H cho phép thay đổi hướng chuyển động của động cơ và kiểm soát tốc độ quay của nó Dưới đây là mô tả chi tiết về nguyên lý hoạt động của L298N: Mạch Cầu H: L298N chứa hai mạch cầu H độc lập, mỗi mạch cầu điều khiển một động cơ Mỗi mạch cầu bao gồm bốn transistor (thường là MOSFET) được kết hợp để tạo ra cấu trúc mạch cầu

Động cơ DC

Động cơ DC (viết tắt của Direct Current Motors) hay còn gọi là động cơ điện một chiều, là loại động cơ được điều khiển bằng dòng điện có hướng cụ thể, sử dụng nguồn điện áp DC (1 chiều) Đầu ra của động cơ thường bao gồm hai dây: dây nguồn (VCC) và dây tiếp đất (GND) Động cơ DC là loại động cơ quay liên tục [11] Để động cơ DC quay, cần cung cấp năng lượng để chuyển đổi từ điện năng thành cơ năng Hầu hết các động cơ DC quay với tốc độ quay rất cao (đo bằng số vòng quay/phút) Tốc độ không tải của động cơ DC, nếu không có giảm tốc, có thể đạt từ 1000RPM đến 40.000RPM

Một ví dụ về động cơ DC là loại có tốc độ quay lên đến 22.000RPM, thường được sử dụng trong các ứng dụng như tivi, đài FM, máy in ảnh, ổ đĩa DC, và máy công nghiệp Đối với động cơ DC, có hai loại chính: động cơ không chổi than (Brushless DC Motor - BLDC) và động cơ có chổi than (Brush DC Motor - DC Motor) Động cơ BLDC thực chất là động cơ điện 3 pha không đồng bộ, trong khi chúng ta chỉ xét động cơ DC có chổi than trong ngữ cảnh này [11]

2.4.1 Nguyên lý hoạt động của động cơ DC Động cơ DC sử dụng năng lượng điện thông qua dòng điện trực tiếp và chuyển đổi năng lượng này thành chuyển động quay cơ học Khi động cơ DC nhận năng lượng điện, nó tạo ra một từ trường trong Stator Từ trường này sẽ tương tác với nam châm trên Roto, đẩy và thu hút chúng, làm cho Roto quay [11]

Nguyên tắc hoạt động này thường được biết đến với tên gọi "Quy tắc bàn tay trái," một nguyên lý được giảng dạy trong môn vật lý Tuy nhiên, để đảm bảo rằng động cơ hoạt động liên tục và không ngừng, người ta gắn bộ chuyển đổi vào bàn chải được kết nối với nguồn điện, cung cấp năng lượng cho cuộn dây của động cơ

Tốc độ quay của động cơ DC có thể thay đổi và khác nhau theo chu kỳ thời gian, được đo lường bằng đơn vị vòng/phút hoặc nghìn vòng/phút, phụ thuộc vào ứng dụng cụ thể cho từng thiết bị Động cơ DC được xem là loại động cơ đơn giản và phổ biến nhất, được ứng dụng rộng rãi trong nhiều lĩnh vực công nghiệp và sản xuất, chẳng hạn như trong thiết bị gia dụng, quạt trần, máy cạo râu thông minh, cửa sổ điện ô tô, và nhiều ứng dụng khác

Hình 2.22 Nguyên lý hoạt động của động cơ DC

2.4.2 Ưu điểm của động cơ DC Động cơ DC có cấu trúc và nguyên tắc hoạt động đơn giản, nhưng lại đóng vai trò quan trọng trong các ngành công nghiệp sản xuất và chế tạo nhiều sản phẩm Mặc dù nhỏ gọn và đơn giản, nhưng động cơ DC mang lại nhiều lợi ích và ưu điểm đáng chú ý [11]:

Tiết Kiệm Năng Lượng:Động cơ DC có công suất từ 35-60W và tiêu thụ ít điện hơn do chỉ cần cấp điện cho Stator mà không cần cấp điện cho Rotor Điều này giúp động cơ DC tiết kiệm năng lượng so với một số loại động cơ một chiều khác

Bền Bỉ và Tuổi Thọ Cao:Thiết kế đơn giản và sử dụng nam châm vĩnh cửu giúp động cơ DC hoạt động bền bỉ và có tuổi thọ cao, với trung bình khoảng 15 năm Điều Chỉnh Linh Hoạt: Động cơ DC có khả năng điều chỉnh dòng điện liên tục, nên có thể hoạt động hiệu quả trong nhiều điều kiện dòng điện khác nhau

Trọng Lượng Nhẹ và Dễ Lắp Đặt: Trọng lượng nhẹ giúp động cơ DC dễ dàng lắp đặt ở các vị trí cao và có độ an toàn cao

Khả Năng Khởi Động và Điều Chỉnh Hiệu Suất: Đối với động cơ DC có chổi than, được đánh giá cao với khả năng khởi động và điều chỉnh hiệu suất tốt Ứng Dụng Rộng Rãi trong Quạt Trần: Động cơ DC được sử dụng phổ biến trong việc lắp ráp và sản xuất quạt trần, nơi có khả năng tiết kiệm điện và không tạo ra tiếng ồn lớn

2.4.3 Nhược điểm của động cơ DC Điều đi kèm với những ưu điểm vượt trội, động cơ DC cũng mang đến một số nhược điểm trong quá trình hoạt động [11]:

Giá Cả Cao:Động cơ DC có giá thành cao hơn so với một số loại động cơ điện một chiều khác như AC, điều này có thể tăng chi phí sản xuất và lắp đặt

Tiếp Điểm Giữa Chổi Than và Cổ Góp:Động cơ DC có tiếp điểm giữa chổi than và cổ góp, có khả năng tạo ra các tia điện trong quá trình hoạt động Điều này có thể dẫn đến mài mòn cơ học và tăng nhiệt độ của động cơ Việc này có thể làm suy giảm độ bền và gây hỏng hóc, cháy chập khi hoạt động vượt quá mức cho phép.

Camera

Camera dùng thể thu nhận hình ảnh từ xung quanh môi trường khi xe đi qua và truyền hình ảnh về cho Raspbery giải quyết Camera đảm bảo cho chúng ta có thể theo dõi toàn bộ cảnh, không góc khuất, không điểm mù, đảm bảo an toàn tuyệt đối khí xe chạy

Hình 2.23 Webcom A13-1080p Full HD Camera dùng thể thu nhận hình ảnh từ xung quanh môi trường khi xe đi qua và truyền hình ảnh về cho Raspbery giải quyết Camera đảm bảo cho chúng ta có thể theo dõi toàn bộ cảnh, không góc khuất, không điểm mù, đảm bảo an toàn tuyệt đối khí xe chạy

Hình 2.24 Yolo thị giác máy tính YOLOv8 là một thuật toán phát hiện đối tượng nhanh và chính xác, được phát triển bởi Ultralytics Nó là phiên bản mới nhất trong dòng mô hình YOLO, và được cải thiện so với các phiên bản trước về tốc độ, độ chính xác và khả năng mở rộng

YOLOv8 hoạt động bằng cách chia hình ảnh thành các ô nhỏ, và sau đó dự đoán các hộp giới hạn (bounding box) và xác suất của các đối tượng có thể có trong mỗi ô Các hộp giới hạn xác định vị trí và kích thước của các đối tượng, và xác suất xác định khả năng của đối tượng là một đối tượng cụ thể

YOLOv8 sử dụng một số kỹ thuật để cải thiện hiệu suất của nó, bao gồm:

Mạng kim tự tháp đặc trưng: Mạng kim tự tháp đặc trưng sử dụng các kích thước ô khác nhau để tạo ra các biểu hiện đặc trưng ở các cấp độ khác nhau Điều này giúp mô hình có thể phát hiện các đối tượng ở nhiều kích thước khác nhau

Các mô-đun chú ý không gian: Các mô-đun chú ý không gian giúp mô hình tập trung vào các khu vực quan trọng của hình ảnh Điều này giúp cải thiện độ chính xác của các dự đoán

Các kỹ thuật tăng cường dữ liệu tiên tiến: YOLOv8 sử dụng các kỹ thuật tăng cường dữ liệu tiên tiến để cải thiện hiệu suất của nó trên các tập dữ liệu nhỏ

YOLOv8 đã được chứng minh là hiệu quả trong nhiều ứng dụng khác nhau, bao gồm:

Xe tự hành: YOLOv8 có thể được sử dụng để phát hiện các đối tượng khác nhau trên đường, chẳng hạn như xe, người đi bộ, và đèn giao thông

Cảnh sát: YOLOv8 có thể được sử dụng để phát hiện các đối tượng đáng ngờ, chẳng hạn như vũ khí và chất nổ

An ninh: YOLOv8 có thể được sử dụng để phát hiện xâm nhập và các hoạt động bất hợp pháp khác

YOLOv8 là một công cụ mạnh mẽ có thể được sử dụng cho nhiều ứng dụng khác nhau Nó là một lựa chọn tốt cho các ứng dụng đòi hỏi hiệu suất cao và độ chính xác cao

Dưới đây là một số ưu điểm và nhược điểm của thuật toán YOLOv8: Ưu điểm:

Nhanh: YOLOv8 có thể xử lý hình ảnh ở tốc độ cao, khiến nó trở thành một lựa chọn tốt cho các ứng dụng thời gian thực

Chính xác: YOLOv8 có độ chính xác cao, khiến nó trở thành một lựa chọn tốt cho các ứng dụng đòi hỏi độ chính xác cao

Mở rộng: YOLOv8 có thể được mở rộng để phát hiện nhiều đối tượng khác nhau Nhược điểm:

Yêu cầu nhiều dữ liệu: YOLOv8 yêu cầu nhiều dữ liệu để được đào tạo hiệu quả

Có thể phức tạp: YOLOv8 là một thuật toán phức tạp, có thể khó hiểu và triển khai

Nhìn chung, YOLOv8 là một thuật toán phát hiện đối tượng mạnh mẽ có thể được sử dụng cho nhiều ứng dụng khác nhau Nó là một lựa chọn tốt cho các ứng dụng đòi hỏi hiệu suất cao, độ chính xác cao và khả năng mở rộng

Trong trường hợp cụ thể của hình ảnh, dữ liệu nhận được từ Raspberry Pi có thể là dữ liệu từ cảm biến, chẳng hạn như cảm biến ánh sáng hoặc cảm biến nhiệt độ Dữ liệu này có thể được sử dụng để điều khiển động cơ theo các cách khác nhau Ví dụ, nếu dữ liệu từ cảm biến ánh sáng cho thấy trời tối, Arduino có thể điều khiển động cơ để bật đèn

Lưu đồ thuật toán này có thể được sửa đổi để phù hợp với các ứng dụng khác nhau Ví dụ, nếu bạn muốn điều khiển động cơ theo dữ liệu từ người dùng, bạn có thể thêm bước nhập dữ liệu từ người dùng vào lưu đồ.

Lập trình nhúng

2.7.1 Giới thiệu lập trình nhúng

Hệ thống nhúng là gì?

Hệ thống nhúng là thuật ngữ chỉ một hệ thống có khả năng tự trị tích hợp vào một môi trường hay hệ thống mẹ, kết hợp cả phần cứng và phần mềm để giải quyết các vấn đề chuyên dụng trong nhiều lĩnh vực như công nghiệp, tự động hóa điều khiển, quan trắc, và truyền tin Tính chất chung của hệ thống nhúng bao gồm khả năng hoạt động ổn định và khả năng tự động hóa cao

Quá trình lập trình hệ thống nhúng là việc xây dựng phần mềm để liên kết và điều khiển các thành phần trong hệ thống nhúng để thực hiện các chức năng chuyên trách hoặc độc lập Các hệ thống này thường được áp dụng để giải quyết các vấn đề chuyên dụng trong nhiều lĩnh vực khác nhau

Các đặc điểm của hệ thống nhúng bao gồm khả năng tự hành và tích hợp vào các hệ thống lớn hơn, thực hiện nhiều chức năng chuyên biệt Nó không chỉ là một khối riêng biệt mà còn bao gồm cả phần cứng và phần mềm Hệ thống nhúng đòi hỏi sự ràng buộc về tính hoạt động thời gian thực để đảm bảo độ an toàn và tính ứng dụng

Thường được sản xuất với số lượng lớn, quá trình lập trình hệ thống nhúng tập trung vào tối ưu hóa để giảm kích thước và chi phí sản xuất [13]

Lịch sử phát triển của hệ thống nhúng

Hệ thống nhúng đầu tiên xuất hiện là Apollo Guidance Computer (Máy tính dẫn đường Apollo), được phát triển bởi Charles Stark Draper tại phòng thí nghiệm của trường đại học MIT vào năm 1960 Đây là máy tính dẫn đường tự động đầu tiên được sản xuất hàng loạt và được sử dụng cho tên lửa quân sự từ năm 1961 Máy tính này, Autonetics D-17, sử dụng bóng bán dẫn và một đĩa cứng để duy trì bộ nhớ Khi Minuteman II được sản xuất vào năm 1996, Autonetics D-17 đã được thay thế bằng một máy tính mới sử dụng mạch tích hợp Máy tính Minuteman II có tính năng thiết kế chủ yếu là đưa ra thuật toán có thể lập trình lại để làm cho tên lửa chính xác hơn, đồng thời giảm trọng lượng cáp điện và đầu nối điện [13]

Từ những ứng dụng đầu tiên trong những năm 1960, các hệ thống nhúng đã phát triển mạnh mẽ về khả năng xử lý Bộ vi xử lý đầu tiên dành cho người tiêu dùng là Intel 4004, được phát minh để phục vụ máy tính điện tử và các hệ thống nhỏ khác Tuy nhiên, nó vẫn cần đến chip nhớ ngoài và các hỗ trợ khác Đến những năm cuối thập kỷ

1970, các bộ xử lý 8 bit đã được sản xuất, nhưng chúng vẫn cần đến chip nhớ bên ngoài

Vào giữa thập kỷ 1980, kỹ thuật mạch tích hợp đã phát triển đến mức độ cao, dẫn đến khả năng đưa nhiều thành phần vào một chip xử lý Các bộ vi xử lý, được gọi là vi điều khiển, trở nên phổ biến và được chấp nhận rộng rãi Với giá cả thấp, các vi điều khiển trở nên hấp dẫn để xây dựng các hệ thống chuyên dụng Sự bùng nổ về số lượng hệ thống nhúng đã xảy ra trong tất cả các lĩnh vực thị trường, và có nhiều nhà sản xuất đã đầu tư mạnh mẽ vào lĩnh vực này Ví dụ, xuất hiện rất nhiều chip xử lý đặc biệt với nhiều giao diện lập trình hơn so với kiểu song song truyền thống để kết nối các vi xử lý Vào cuối những năm 1980, các hệ thống nhúng đã trở nên phổ biến trong hầu hết các thiết bị điện tử, và xu hướng này vẫn tiếp tục đến ngày nay [13]

Xu hương phát triển của hệ thống nhúng

Hệ thống nhúng, đứng sau máy tính lớn (mainframe), PC và Internet, đang là làn sóng đổi mới thứ ba trong lĩnh vực công nghệ thông tin và truyền thông

Các xu hướng phát triển của hệ thống nhúng hiện nay bao gồm [13]:

Vai trò quan trọng của phần mềm: Phần mềm ngày càng trở thành một thành phần chủ chốt, có tác động như các phần cơ khí, linh kiện điện tử và linh kiện quang học trong cấu trúc của thiết bị nhúng Độ phức tạp ngày càng cao: các hệ nhúng ngày càng trở nên phức tạp để đáp ứng yêu cầu về thời gian thực, tiêu thụ năng lượng thấp và đảm bảo hoạt động ổn định và tin cậy Độ mềm dẻo cao: hệ nhúng ngày càng có độ mềm dẻo cao để nhanh chóng ra mắt sản phẩm, bảo trì từ xa và đáp ứng yêu cầu cá nhân của người sử dụng

Khả năng hội thoại và kết nối mạng:Hệ nhúng ngày càng có khả năng hội thoại và kết nối mạng để tương tác với người sử dụng

Tính thích nghi và tự tổ chức: các hệ nhúng ngày càng có tính thích nghi và tự tổ chức cao, có khả năng tái cấu hình như một thực thể hoặc tác nhân

Tính tiếp nhận năng lượng đa nguồn: hệ nhúng ngày càng có khả năng tiếp nhận năng lượng từ nhiều nguồn khác nhau như ánh sáng, rung động, điện từ trường và sinh học, tạo ra các hệ thống tự tiếp nhận năng lượng trong quá trình hoạt động

Những thách thức và vấn đề còn tồn tại với hệ thống nhúng

Hệ thống nhúng hiện nay đối mặt với nhiều thách thức và vấn đề, bao gồm [13]: Độ phức tạp của sự liên kết đa ngành:Sự phối hợp giữa các ngành công nghiệp, đặc biệt là sự kết hợp giữa các yếu tố cứng và mềm, tạo nên độ phức tạp cho hệ thống Việc tích hợp nhiều lĩnh vực đòi hỏi sự hiểu biết sâu sắc về phần cứng, phần mềm và khả năng tương tác giữa chúng Khoảng cách giữa lý thuyết và thực hành còn lớn và còn thiếu các phương pháp và lý thuyết hoàn chỉnh để khám phá và phân tích toàn diện các hệ nhúng

Thiếu phương pháp tích hợp tối ưu: đối mặt với thách thức tích hợp tối ưu giữa các thành phần của hệ nhúng, bao gồm lý thuyết điều khiển tự động, thiết kế máy, công nghệ phần mềm, điện tử, vi xử lý và các công nghệ hỗ trợ khác Sự đồng bộ và tích hợp hiệu quả giữa các lĩnh vực này là chìa khóa để xây dựng các hệ thống nhúng hiệu quả và mạnh mẽ

Thách thức về độ tin cậy và tính mở của hệ thống: hệ thống nhúng thường phải tương tác với môi trường xung quanh và đôi khi phải đối mặt với tình huống không được thiết kế trước Các phần mềm có thể cần được điều chỉnh và thay đổi trong quá trình hoạt động, điều này có thể tạo ra khả năng mất kiểm soát đối với hệ thống phần mềm Đối với hệ thống mở, việc tích hợp các module và thành phần mới từ các bên thứ ba có thể gây ra sự thiếu tin cậy

Các đặc điểm của hệ thống nhúng

Hệ thống nhúng thường có những đặc điểm chung như sau:

Chuyên dụng: Các hệ thống nhúng được thiết kế để thực hiện một số nhiệm vụ chuyên dụng, không đóng vai trò như các hệ thống máy tính đa chức năng Điều này giúp tối ưu hóa hiệu suất và chi phí, tập trung vào chức năng cụ thể mà hệ thống được xây dựng để thực hiện [13]

Giới thiệu về Python

Python là một ngôn ngữ lập trình máy tính bậc cao phổ biến, thường được ứng dụng trong xây dựng trang web và phần mềm, tự động hóa các nhiệm vụ và thực hiện phân tích dữ liệu Với tính linh hoạt và khả năng áp dụng rộng rãi,

Python không chỉ là một ngôn ngữ mục đích chung mà còn là một trong những lựa chọn phổ biến nhất cho các nhà phát triển Công ty phân tích ngành RedMonk cũng xác nhận sự phổ biến này thông qua cuộc khảo sát năm 2021, đưa Python lên vị trí thứ hai trong danh sách các ngôn ngữ lập trình được ưa chuộng nhất, chỉ sau

JavaScript Sự thân thiện với người mới bắt đầu và cú pháp đơn giản làm cho

Python trở thành một công cụ quan trọng và được ưa chuộng trong cả cộng đồng lập trình và ngành công nghiệp [16]

Công nghệ sử dụng

Raspberry Pi 4 là một máy tính cỡ nhỏ chạy hệ điều hành Linux, được thiết kế đặc biệt để thực hiện các chương trình lớn với mục tiêu đạt được tín hiệu đầu ra nhanh chóng Mô hình Raspberry Pi 4 B+ (RP4) là phiên bản cuối cùng trong dòng sản phẩm, được phát triển bởi công ty, và tích hợp đầy đủ các hệ thống truyền thông có dây và không dây mới nhất, là lựa chọn lý tưởng cho nhiều dự án điều khiển thông minh [14] Raspberry Pi 4 được trang bị một vi xử lý 4 lõi và có ba phiên bản khác nhau với dung lượng RAM tùy chọn Máy sử dụng cổng mini HDMI, hỗ trợ đồng thời hai cổng để kết nối với hai màn hình 4K, cung cấp khả năng hiển thị đồ họa cao cấp Điều này làm cho Raspberry Pi 4 trở thành một công cụ mạnh mẽ để triển khai ứng dụng đa nhiệm và xử lý dữ liệu đồng thời trên nền tảng nhỏ gọn

Hình 2.27 Mạch Raspbery Pi 4 Mặc dù Raspberry Pi không thể thay thế máy tính để bàn hoặc laptop một cách hoàn toàn, nhưng nó là một thiết bị linh hoạt có nhiều ứng dụng

Raspberry Pi thường được sử dụng trong các hệ thống điện tử, triển khai hệ thống máy tính nhỏ, và làm cho các dự án DIY trở nên dễ thực hiện với chi phí thấp.Một điểm mạnh của Raspberry Pi là chi phí thấp, làm cho nó trở thành sự lựa chọn phổ biến cho những người muốn thử nghiệm và phát triển ứng dụng mà không Đặc biệt, Raspberry Pi Zero, là một phiên bản rút gọn của Raspberry Pi, có thể được mua với giá chỉ 5 USD, mang lại sự tiện lợi và cơ hội tiếp cận cho cộng đồng lập trình và những người đam mê công nghệ.

Hình 2.28 Raspberry Pi 4 Module B Ngày nay, Raspberry Pi 4 Model B đang là phiên bản mới nhất, được cập nhật với nhiều cải tiến đáng kể về chức năng và thông số kỹ thuật Một số điểm nổi bật bao gồm [14]:

Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.5GHz

Có 3 lựa chọn RAM: 2GB, 4GB hoặc 8GB LPDDR4-2400 SDRAM

Wifi chuẩn 2.4 GHz và 5.0 GHz IEEE 802.11ac Bluetooth 5.0, BLE

2 cổng USB 3.0 và 2 cổng USB 2.0

Chuẩn 40 chân GPIO, tương thích với các phiên bản trước

Hỗ trợ 2 cổng ra màn hình chuẩn Micro HDMI với độ phân giải lên tới 4K

Cổng MIPI DSI, cổng MIPI CSI, cổng AV 4 chân

Khe cắm MicroSD cho hệ điều hành và lưu trữ

Nguồn điện DC 5V – 3A DC chuẩn USB-C

5V DC via GPIO header (minimum 3A*)

Hỗ trợ Power over Ethernet (PoE) (yêu cầu có PoE HAT)

2.9.2 Sơ đồ chân của Raspberry Pi 4

Hình 2.29 Cấu hình chân của Raspberry Pi 4

Mô tả chân Raspberry Pi

Raspberry Pi 4 sử dụng một bố trí chân chung được áp dụng cho tất cả các phiên bản, với tổng cộng 40 chân, trong đó có 28 chân GPIO (General-Purpose Input/Output) và phần còn lại được dành cho chân nguồn [14]

Chân GPIO không chỉ thực hiện các chức năng đơn giản I/O mà còn hỗ trợ các giao thức như UART, SPI, và I2C Mỗi chân GPIO có khả năng đồng thời thực hiện các chức năng này, mở rộng khả năng kết nối và giao tiếp của Raspberry Pi 4 Dưới đây là mô tả chi tiết về các giao thức này và cách chúng được áp dụng cho từng chân [14]:

Chân cấp nguồn của Raspberry Pi 4 được mô tả như sau [14]:

Power In: Raspberry Pi 4 có hai lựa chọn cấp nguồn: một là từ cổng nguồn USB-

C và thứ hai là từ các chân 5V Chân 5V được liên kết trực tiếp với cổng adapter USB-

C Điều quan trọng là đầu vào ở chân 5V phải duy trì ổn định và tuân thủ đúng thông số kỹ thuật Trong trường hợp có điện áp cao hơn, thiết bị có thể bị hỏng Chân đầu vào 5V không có cầu chì và bộ điều chỉnh điện áp khi được sử dụng làm nguồn cấp, do đó, nguồn điện 5V cần tuân thủ đúng thông số kỹ thuật để tránh hỏng hóc

Power Out: Raspberry Pi 4 cung cấp hai loại chân nguồn ra là 3V3 và 5V Chân 5V được kết nối trực tiếp với cổng USB, trong khi chân 3V3 được điều chỉnh điện áp để tạo ra một đầu ra 3V3 ổn định

Ground: Raspberry Pi 4 có nhiều chân ground được kết nối bên trong, có thể được sử dụng làm điểm nối đất chung cho nguồn điện hoặc các thiết bị bên ngoài Điều này giúp tạo ra một điểm đất chung cho hệ thống, đảm bảo sự ổn định trong việc cung cấp và nhận nguồn điện

Chân Input/Output (I/O) Digital của Raspberry Pi 4 đề cập đến khả năng sử dụng các chân đầu vào và đầu ra để thực hiện giao tiếp với các thiết bị khác Trong Raspberry Pi 4, có tổng cộng 28 chân GPIO được dùng như là đầu vào và đầu ra digital Các chân GPIO này có một số giá trị mặc định

Cụ thể, các chân GPIO từ 0 đến 9 được đặt ở trạng thái logic cao, trong khi các chân từ 10 trở đi được đặt ở trạng thái logic thấp Trạng thái logic cao và thấp này quy định mức điện áp tương ứng trên các chân GPIO, đóng vai trò quan trọng trong việc truyền và nhận dữ liệu giữa Raspberry Pi và các thiết bị ngoại vi khác [14]

2.9.3 Module giao tiếp dữ liệu nối tiếp Raspberry

Các chân UART trong Raspberry Pi

Trong Raspberry Pi, có nhiều chân được sử dụng cho giao thức nối tiếp, và trong số đó, UART (Universal Asynchronous Receiver-Transmitter) là một giao thức phổ biến Giao thức UART được ưa chuộng vì nó sử dụng hệ thống giao tiếp đơn giản và phụ thuộc vào hầu hết các phần mềm [14]

UART là một giao thức truyền thông không đồng bộ, nghĩa là không có tín hiệu đồng hồ chung giữa truyền và nhận dữ liệu Thay vào đó, dữ liệu được truyền đi một bit tại một thời điểm và được đồng bộ bằng cách sử dụng start bit và stop bit

Trên Raspberry Pi, các chân UART thường được kết nối với các chân GPIO và có thể được cấu hình để thực hiện giao tiếp nối tiếp với các thiết bị ngoại vi khác, như cảm biến, mô-đun, hoặc các board mở rộng khác Sự linh hoạt và đơn giản của UART làm cho nó trở thành lựa chọn phổ biến trong các ứng dụng nhúng và các dự án DIY trên Raspberry Pi

Chân giao tiếp SPI (Serial Peripheral Interface) trong Raspberry Pi 4 đóng vai trò quan trọng trong việc kết nối và điều khiển nhiều thiết bị thông qua một đường truyền dữ liệu duy nhất Giao thức SPI cho phép Raspberry Pi truyền và nhận dữ liệu với các thiết bị ngoại vi như cảm biến, mô-đun, hoặc các thiết bị khác một cách hiệu quả Raspberry Pi 4 có nhiều chân SPI được cung cấp để hỗ trợ giao tiếp SPI Các chân này thường được kết nối với các thiết bị ngoại vi có hỗ trợ giao thức SPI Việc sử dụng giao thức SPI giúp tối ưu hóa quá trình truyền thông và giảm thiểu số lượng chân cần thiết, giúp Raspberry Pi kết nối với nhiều thiết bị một cách thuận tiện và linh hoạt trong các ứng dụng nhúng và dự án DIY [14]

Phương thức truyền thông UART

UART, hay Universal Asynchronous Receiver/Transmitter, là một vi mạch tích hợp trong nhiều vi điều khiển và vi xử lý, chịu trách nhiệm cho chức năng truyền và nhận dữ liệu mà không đòi hỏi tín hiệu đồng bộ chính xác giữa các thiết bị [17]

Với chế độ giao tiếp dữ liệu nối tiếp, thông tin được truyền qua một dây truyền duy nhất, làm cho UART thích hợp cho các ứng dụng yêu cầu truyền dữ liệu trên khoảng cách xa Chế độ không đồng bộ đặc trưng của nó có nghĩa là không cần có tín hiệu đồng bộ như clock giữa các thiết bị để thực hiện giao tiếp

Hình 2.35 Sơ đồ khối của giao tiếp UART

Sơ đồ khối UART bao gồm hai phần chính: máy phát và máy thu Mỗi phần này đều có cấu trúc bao gồm ba thành phần chính: thanh ghi giữ truyền, thanh ghi dịch chuyển và logic điều khiển Cả hai phần này thường được kết hợp thông qua một bộ tạo tốc độ baud, có nhiệm vụ tạo ra tốc độ cho quá trình truyền và nhận dữ liệu Trong máy phát, thanh ghi giữ chứa byte dữ liệu cần truyền Các thanh ghi dịch chuyển thực hiện việc di chuyển các bit qua phải hoặc trái cho đến khi một byte dữ liệu được truyền Logic điều khiển quyết định khi nào cần đọc hoặc ghi dữ liệu.Tốc độ baud được duy trì bởi máy phát và máy thu giữa các thiết bị, tạo ra một tốc độ truyền dao động từ 110 bps đến 230400 bps Thông thường, tốc độ truyền của vi điều khiển nằm trong khoảng 9600 đến 115200 bps Điều này đảm bảo sự hiệu quả và đồng bộ trong quá trình truyền và nhận dữ liệu [17]

UART có thể chia thành hai phần chính là truyền (Tx) và nhận (Rx) Giao tiếp giữa chúng có thể được thực hiện trực tiếp thông qua hai cáp, nơi luồng dữ liệu sẽ chạy qua cả hai chân truyền (Tx) và nhận (Rx) của UARTs Điều này cho phép dữ liệu được truyền và nhận mà không cần một tín hiệu đồng bộ như tín hiệu CLK để đồng bộ hóa các bit dữ liệu đầu vào/ra Trong quá trình truyền dữ liệu, UART có khả năng sử dụng bus dữ liệu ở dạng song song, liên kết với các thiết bị khác như vi điều khiển, bộ nhớ, hoặc CPU Dữ liệu song song được nhận từ bus và sau đó được biến đổi thành gói dữ liệu UART, bao gồm ba bit bắt đầu, dừng và trung bình [17]

Trong khi nhận dữ liệu, UART đọc từng bit của gói dữ liệu, chuyển đổi nó thành dạng song song và loại bỏ ba bit bắt đầu, dừng và trung bình

Như vậy, quá trình này đảm bảo giao tiếp hiệu quả giữa các thiết bị thông qua UART, với khả năng truyền và nhận dữ liệu cả trong hình thức song song và không đồng bộ

Hình 2.36 Truyền thông UART Ứng dụng của UART Ứng Dụng Trong Bộ Vi Điều Khiển: UART thường được tích hợp trong bộ vi điều khiển (MCU) để cung cấp khả năng giao tiếp với các thiết bị khác như cảm biến, mô-đun, hoặc bất kỳ thiết bị ngoại vi nào yêu cầu truyền thông nối tiếp [17] Ứng dụng trong các thiết bị liên lạc khác nhau: UART cũng được sử dụng rộng rãi trong các thiết bị liên lạc như mô-đun Bluetooth, thiết bị GPS, các mô-đun giao tiếp không dây và nhiều ứng dụng khác Điều này giúp chúng tương tác với các thiết bị khác một cách thuận lợi.Tiêu Chuẩn Truyền Thông: UART thường sử dụng các tiêu chuẩn truyền thông như RS422 và TIA, ngoại trừ RS232

Các tiêu chuẩn này giúp đảm bảo tính tương thích và đồng bộ hóa trong quá trình truyền thông giữa các thiết bị khác nhau

Sử Dụng Các IC (Integrated Circuits) Riêng Lẻ: Trong nhiều trường hợp, UART được triển khai dưới dạng các IC riêng lẻ, giúp đơn giản hóa quá trình tích hợp và sử dụng Các IC này thường cung cấp các tính năng như bộ đệm, điều khiển tốc độ baud, và các tính năng khác để hỗ trợ quá trình giao tiếp Nhờ tính linh hoạt và sự phổ quát, UART đóng vai trò quan trọng trong các hệ thống nhúng và thiết bị điện tử hiện đại [17] Ưu và nhược điểm của UART Ưu điểm: Đơn Giản và Phổ Biến: UART là giao thức đơn giản và phổ biến, được sử dụng rộng rãi trong nhiều ứng dụng và thiết bị

Sử Dụng Hai Dây Truyền Dữ Liệu: Chỉ cần hai dây (TX và RX) để truyền và nhận dữ liệu, giảm độ phức tạp về cáp và pin

Không Cần Tín Hiệu CLK (Clock): UART có thể thực hiện giao tiếp không đồng bộ mà không yêu cầu tín hiệu clock bổ sung, làm cho nó linh hoạt và dễ tích hợp

Kiểm Tra Lỗi: Có thể sử dụng bit chẵn lẻ để kiểm tra lỗi truyền thông, giúp phát hiện và sửa lỗi trong quá trình truyền dữ liệu

Sắp Xếp Gói Dữ Liệu Có Thể Điều Chỉnh: Cả hai bên, truyền và nhận, có thể điều chỉnh sắp xếp gói dữ liệu để đáp ứng yêu cầu cụ thể của hệ thống

Kích Thước Khung Dữ Liệu Linh Hoạt: Khung dữ liệu của UART có thể có kích thước linh hoạt, cho phép truyền từ 5 đến 9 bit dữ liệu

Không Chứa Một Số Hệ Thống Phụ UART không chứa nhiều tính năng bảo mật và kiểm soát lỗi như một số giao thức truyền thông hiện đại Tốc Độ Truyền Thấp Hơn Các Giao Thức Khác: Tốc độ truyền của UART có thể thấp hơn so với một số giao thức khác, đặc biệt là trong môi trường yêu cầu tốc độ cao.

THIẾT KẾ VÀ THI CÔNG

Thiết kế sơ đồ khối

Hình 3.1 Sơ đồ khối của mô hình

Khối xử lý trung tâm: Trung tâm điều khiển hoạt động của toàn hệ thống, trong khối này có Raspberry và Arduino UNO R3 Nhận hình ảnh từ camera, xử lý sau đó chuyển tín hiệu đến các khối điều khiển động cơ

Khối camera: Camera thu thập hình ảnh từ môi trường xung quanh sau đó gởi về Raspberry ở khối xử lý trung tâm

Khối điều khiển động cơ: Có chức năng nhận tín hiệu từ Raspberry sau đó điều khuyển 4 động cơ DC

Khối nguồn: Có chức năng cấp nguồn cho toàn hệ thống.

Sơ đồ từng khối

Hình 3.2 sơ đồ kết nối Raspberry với camera Khối camera được xem là con mắt của mô hình Để kết nối Raspberry Pi với Camera, cần có các thành phần sau: Raspberry Pi, chúng ta có thể sử dụng bất kỳ phiên bản Raspberry Pi nào, nhưng phiên bản 4 hoặc 3 là lựa chọn tốt nhất Ở đây chúng em sử dụng raspberry Pi 4 Camera Raspberry Pi: Sử dụng webcam A13- 1080p FullHD Cáp kết nối Camera: Cáp kết nối Camera hai đầu cắm, một đầu cắm vào Raspberry Pi và một đầu cắm vào Camera

3.2.2 Khối xử lý trung tâm

Hình 3.3 Sơ đồ kết nối Raspberry Pi 4 với Arduino Uno

Trong quá trình hoạt động của hệ thống, chúng em lựa chọn giao thức truyền thông UART để thiết lập truyền dữ liệu liên tục giữa Raspberry Pi 4 và Arduino Uno Việc này được thực hiện dễ dàng do cả hai kit điều khiển đều tích hợp sẵn giao thức truyền này Giao thức UART được chọn vì khả năng truyền dữ liệu nhanh và ổn định, đồng thời giữa các chân, RX của Arduino Uno được kết nối với chân TX của Raspberry Pi, và chân TX của Arduino Uno được kết nối với chân RX của Raspberry

Pi Nối chung hai chân GND

Hình 3.4 sơ đồ khối kết nối UART giữa Raspberry và Arduino

Sơ đồ khối UART gồm có 2 bộ phận chính là bộ phát (Transmitter) và bộ thu (Receiver), bộ phát ở trong mô hình của chúng em lầ Rasperrry Pi và bộ thu là Arduino:

Bộ phát: Raspberry Pi có trách nhiệm gửi dữ liệu sang cho Arduino Bộ phát gồm có: thanh ghi dữ liệu truyền (Transmit Hold Register) là nơi lưu trữ dữ liệu cần được truyền Thanh ghi này có thể chứa một hoặc nhiều byte dữ liệu Thanh ghi dịch (Transmit Shift Register) là nơi dữ liệu được chuyển đổi từ dạng nhị phân nhị phân sang dạng nhị phân tương tự Thanh ghi này có một số bit nhất định, thường là 8 hoặc

16 bit.Bộ điều khiển (Control Logic) chịu trách nhiệm điều khiển quá trình truyền dữ liệu Bộ điều khiển này sẽ xác định thời điểm bắt đầu và kết thúc quá trình truyền, cũng như tốc độ truyền dữ liệu.Tốc độ truyền dữ liệu (Baud Rate Generator) là bộ tạo xung quyết định tốc độ truyền dữ liệu Tốc độ truyền dữ liệu được đo bằng số bit mỗi giây (bps)

Bộ thu: Arduino có nhiệm vụ nhận dữ liệu từ Raspberry Pi Bộ thu báo gồm: thanh ghi dữ liệu nhận (Receive Hold Register) là nơi lưu trữ dữ liệu nhận được Thanh ghi này có thể chứa một hoặc nhiều byte dữ liệu Thanh ghi dịch (Receive Shift Register) là nơi dữ liệu được chuyển đổi từ dạng nhị phân nhị phân sang dạng nhị phân nhị phân Thanh ghi này có một số bit nhất định, thường là 8 hoặc 16 bit Bộ điều khiển (Control Logic) chịu trách nhiệm điều khiển quá trình nhận dữ liệu Bộ điều khiển này sẽ xác định thời điểm bắt đầu và kết thúc quá trình nhận, cũng như tốc độ nhận dữ liệu Tốc độ truyền dữ liệu (Baud Rate Generator) là bộ tạo xung quyết định tốc độ truyền dữ liệu Tốc độ truyền dữ liệu được đo bằng số bit mỗi giây (bps)

3.2.3 khối điều khiển động cơ

Hình 3.5 Sơ đồ khối điều khiển động cơ Mạch bao gồm hai động cơ DC được điều khiển bởi một bo mạch Arduino Động cơ được kết nối với bo mạch Arduino thông qua cầu H L298N

Cầu H L298N được sử dụng để điều khiển hai động cơ DC Cầu H có hai điện áp đầu vào, một điện áp dương và một điện áp âm Khi điện áp dương được cấp cho một trong hai chân của cầu H, động cơ được kết nối với chân đó sẽ quay theo một hướng Khi điện áp âm được cấp cho một trong hai chân của cầu H, động cơ được kết nối với chân đó sẽ quay theo hướng ngược lại

Bo mạch Arduino được sử dụng để điều khiển cầu H Bo mạch Arduino có thể gửi tín hiệu điện áp dương hoặc âm đến cầu H để điều khiển động cơ.

Sơ đồ nguyên lý của Raspberry Pi 4

Hình 3.6 Sơ đồ nguyên lý của Raspberry Pi 4

Raspberry Pi 4 được thiết kế với 40 chân, trong đó có 28 chân GPIO và 12 chân khác được sử dụng cho nguồn và các mục đích khác Các chân GPIO không chỉ giới hạn trong việc thực hiện các chức năng đơn giản như đầu ra hoặc đầu vào, mà còn mở rộng khả năng giao tiếp với nhiều thiết bị khác nhau

Các chân GPIO có thể linh hoạt cấu hình để thực hiện các nhiệm vụ như điều khiển đèn LED, đọc dữ liệu từ cảm biến, và thậm chí tham gia vào các chuẩn giao tiếp như UART,SPI, và I2C Điều này mở ra nhiều khả năng trong việc tích hợp Raspberry

Pi 4 vào các dự án nhúng và tương tác với các thiết bị ngoại vi

Ngoài ra, Raspberry Pi 4 còn có các chân nguồn để cung cấp điện, tạo điều kiện thuận lợi cho quá trình kết nối và tích hợp Thêm vào đó, sự hỗ trợ từ thư viện GPIO Zero giúp làm giảm độ phức tạp trong việc lập trình, giúp người dùng mới tiếp cận với Raspberry Pi một cách dễ dàng hơn

Với những đặc tính này, Raspberry Pi 4 không chỉ là một công cụ linh hoạt cho các dự án nhúng mà còn mở ra nhiều cơ hội sáng tạo trong việc tương tác và kết nối với thế giới xung quanh.

Sơ đồ nối dây toàn mạch

Hình 3.7 Sơ đồ nguyên lý toàn mạch

Sau khi cấp nguồn cho hệ thống hoạt động Raspberry sẽ gửi tín hiệu cho Arduino, Arduino sẽ điều khiển xe chạy thẳng Sau đó, camera thu thập hình ảnh gửi cho Raspberry xử lý hình ảnh và Raspberry phát hiện hình ảnh tương ứng thông qua thuật toán YOLOv8 gửi kí tự tương ứng hình ảnh sang Arduino, Arduino sẽ điều khiển xe thông qua L298N Nếu biển báo phát hiện là Stop(dừng) thì gửi kí tự 1 xuống Arduino, Arduino sẽ cho phép dừng xe Nếu biển báo phát hiện là rẻ trái thì gửi kí tự 2 xuống Arduino, Arduino sẽ cho phép xe rẻ trái Nếu biển báo phát hiện là rẻ phải thì gửi kí tự 3 xuống Arduino, Arduino sẽ cho phép xe rẻ phải Nếu phát hiện cây đèn xanh đèn đỏ chuyển sang màu đỏ thì gửi kí tự 4 xuống Arduino, Arduino sẽ cho phép xe dừng Nếu phát hiện cây đèn xanh đèn đỏ chuyển sang màu xanh thì gửi kí tự 5 xuống Arduino, Arduino sẽ cho phép xe tiếp tục chạy.

Xử lý ảnh trong mô hình xe tự hành

Xử lý ảnh là một trong những công nghệ quan trọng nhất đối với xe tự hành Xử lý ảnh đóng vai trò nhận biết thu thập hình ảnh từ môi trường xung quanh và đưa ra các quyết định lái xe an toàn Xử lý ảnh được sử dụng trong xe tự hành để thực hiện các nhiệm vụ cụ thể như sau:

Phát hiện biển báo giao thông: Xe tự hành cần phát hiện các biển báo giao thông khác nhau trên đường, chẳng hạn như biển báo rẻ trái, biển báo rẻ phải, stop(dừng) và đèn giao thông

Cung cấp thông tin về môi trường xung quanh: Xe tự hành cần nhận biết các đặc điểm của môi trường xung quanh, chẳng hạn như đường xá, biển báo, và đèn giao thông

Tự động hóa các nhiệm vụ lái xe: Xe tự hành có thể sử dụng xử lý ảnh để tự động thực hiện các nhiệm vụ lái xe, chẳng hạn như giữ làn đường, điều chỉnh tốc độ, và đánh lái

Các điều này giúp xe tự hành điều hướng an toàn và hiệu quả

Có nhiều thuật toán xử lý ảnh khác nhau có thể được sử dụng trong xe tự hành Nhưng sau khi train thì chúng em thấy dùng thuật toán YOLOv8 là nhanh và chính xác nhất vì YOLOv8 là phiên bản mới nhất trong dòng mô hình YOLO, và được cải thiện so với các phiên bản trước về tốc độ, độ chính xác và khả năng mở rộng Để đảm bảo hiệu quả của xử lý ảnh trong xe tự hành, cần phải đáp ứng các yêu cầu sau:

Tốc độ: Xử lý ảnh cần được thực hiện ở tốc độ cao để đảm bảo xe tự hành có thể đưa ra các quyết định lái xe kịp thời Độ chính xác: Xử lý ảnh cần có độ chính xác cao để tránh các sai sót

Khả năng mở rộng: Xử lý ảnh cần có khả năng mở rộng để đáp ứng nhu cầu của các nhiệm vụ lái xe khác nhau.

Động cơ DC hoạt động trong mô hình xe tự hành

Hình 3.8 Sơ đồ mạch cầu H

Trong hình ảnh được gửi, chúng ta có thể thấy một sơ đồ mạch cầu H được sử dụng để điều khiển một động cơ DC Mạch này bao gồm bốn transistor, được kết nối thành hai cặp Mỗi cặp transistor có thể được kích hoạt hoặc tắt để tạo ra dòng điện qua cuộn dây động cơ.

Trong hình ảnh này, mạch cầu H được điều khiển bởi một vi điều khiển Vi điều khiển cung cấp tín hiệu cho các chân IN1, IN2, IN3, và IN4 của mạch cầu H Tín hiệu này xác định hai transistor nào sẽ được kích hoạt Để quay động cơ theo chiều kim đồng hồ, cần kích hoạt hai transistor ở cùng một phía của mạch Trong trường hợp này, cần kích hoạt chân IN1 và chân IN3 Điều này sẽ tạo ra dòng điện qua cuộn dây động cơ, khiến động cơ quay theo chiều kim đồng hồ Để quay động cơ ngược chiều kim đồng hồ, cần kích hoạt hai transistor ở phía đối diện của mạch Trong trường hợp này, cần kích hoạt chân IN2 và chân IN4 Điều này cũng sẽ tạo ra dòng điện qua cuộn dây động cơ, khiến động cơ quay ngược chiều kim đồng hồ Để điều chỉnh tốc độ của động cơ, cần điều chỉnh điện áp cấp cho động cơ Điện áp cao hơn sẽ làm cho động cơ quay nhanh hơn Trong trường hợp này, điện áp được cấp cho động cơ bằng một bộ điều chỉnh điện áp

Cách hoạt động của 4 động cơ DC trong xe tự hành

Khi nhận được tín hiệu từ Arduino gởi cho L298N thì 4 bánh xe sẽ hoạt động như sau:

Nếu nhận được tín hiệu yêu cầu xe rẻ trái thì bộ điều khiển động cơ L298N sẽ quay một động cơ DC ở phía bên trái của xe theo chiều kim đồng hồ và quay động cơ

DC ở phía bên phải của xe ngược chiều kim đồng hồ Điều này sẽ tạo ra lực quay ngược chiều ở phía bên trái của xe và lực quay thuận chiều ở phía bên phải của xe

Ngược lại, nếu nhận được tín hiệu yêu cầu xe rẻ phải thì bộ điều khiển động cơ L298N sẽ quay một động cơ DC ở phía bên phải của xe theo chiều kim đồng hồ và quay động cơ DC ở phía bên trái của xe ngược chiều kim đồng hồ Điều này sẽ tạo ra lực quay ngược chiều ở phía bên phải của xe và lực quay thuận chiều ở phía bên trái của xe Lực quay này sẽ làm cho xe quay sang phải

Tương tự, nếu nhận được tín hiệu yêu cầu xe tăng tốc, bộ điều khiển động cơ L298N sẽ tăng cường dòng điện chạy qua tất cả bốn động cơ DC Điều này sẽ làm cho các động cơ quay nhanh hơn, từ đó làm cho xe tăng tốc.

Thi công phần cứng

3.7.1.1 Các bước thi công phần cứng gồm:

Mạch in được thiết kế trên phần mềm Altium

Thực hiện và tiến hành thi công mạch

Sau khi thi công xong, sẽ dùng đồng hồ VOM để kiểm tra ngõ vào, ngõ ra để kiểm tra có lỗi trong lúc thi công hay không

Sau khi làm mạch in ra board đồng, cần kiểm tra các đường mạch đã nối với nhau như thiết kế ban đầu chưa Sử dụng mũi khoan phù hợp với kích thước chân cho từng linh kiện để việc sắp xếp linh kiện lên mạch và hàn mạch được thuận tiện và chính xác

3.7.1.3 Thống kê linh kiện được sử dụng trong hệ thống

Bảng 3.1 Linh kiện sử dụng trong mô hình

STT Tên linh kiện Số lượng Thông số

Dựa vào bảng trên, tổng dòng điện tiêu thụ lớn nhất của mạch là:

= 5.03A Công suất tiêu thụ toàn mạch: P=U.I

Sau khi tim đủ linh kiện cần thiết để lắp ráp mô hình xe thì chúng em đã có được mô hình xe như hình sau:

Hình 3.11 Hoàn thiện mô hình xe

Lập trình phần mềm

3.8.1 Lưu đồ giải thuật cho vi điều khiển

3.8.1.1 Lưu đồ giải thuật cho Raspberry Pi 4

Hình 3.12 Lưu đồ giải thuật cho Raspberry Pi 4 Lưu đồ thuật toán mô tả quá trình xử lý hình ảnh bằng thuật toán YOLOv8 trên Raspberry Pi Lưu đồ bắt đầu bằng việc camera thu thập hình ảnh Hình ảnh được truyền đến Raspberry Pi, nơi nó được xử lý bằng thuật toán YOLOv8 Thuật toán YOLOv8 là một thuật toán phát hiện đối tượng nhanh và chính xác, được sử dụng rộng rãi trong các ứng dụng máy học

Lưu đồ có hai nhánh chính:

Nhánh đúng: Hình ảnh được xử lý đúng với hình ảnh đã train Trong trường hợp này, Raspberry Pi sẽ gửi dữ liệu tương ứng với hình đã train sang Arduino Arduino là một bo mạch vi điều khiển được sử dụng để điều khiển động cơ DC Dữ liệu được gửi sang Arduino được sử dụng để điều khiển động cơ DC

Nhánh sai: Hình ảnh không được xử lý đúng với hình ảnh đã train Trong trường hợp này, Raspberry Pi sẽ không gửi dữ liệu sang Arduino

Giải thích chi tiết từng bước của lưu đồ như sau:

Bước này đánh dấu bắt đầu của quá trình xử lý

Bước 2: Camera thu thập hình ảnh

Camera thu thập hình ảnh từ thế giới thực

Bước 3: Raspberry đọc hình ảnh từ camera

Raspberry Pi đọc hình ảnh từ camera

Bước 4: Raspberry dùng thuật toán Yolov8 để xử lý ảnh

Raspberry Pi sử dụng thuật toán YOLOv8 để xử lý hình ảnh

Bước 5: Hình ảnh được xử lý đúng với hình ảnh train

Thuật toán YOLOv8 xác định xem hình ảnh được xử lý đúng với hình ảnh đã train hay không

Bước 6: Raspberry gửi data tương ứng với hình đã train sang Arduino

Nếu hình ảnh được xử lý đúng, Raspberry Pi sẽ gửi dữ liệu tương ứng với hình đã train sang Arduino

Bước 7: Arduino điều khiển động cơ DC

Arduino sử dụng dữ liệu được gửi từ Raspberry Pi để điều khiển động cơ DC

Lưu đồ thuật toán này là một ví dụ điển hình về cách sử dụng lưu đồ để mô tả quá trình xử lý hình ảnh bằng thuật toán máy học Lưu đồ là một công cụ hữu ích để giúp hiểu rõ và phân tích các thuật toán

3.8.1.2 Lưu đồ giải thuật cho Arduino Uno R3

Hình 3.13 Lưu đồ giải thuật cho Arduino Lưu đồ thuật toán mô tả quá trình điều khiển động cơ DC bằng Arduino và L298N Lưu đồ bắt đầu bằng việc Arduino nhận dữ liệu từ Raspberry Pi Dữ liệu này là hình ảnh gửi từ camera về cho Raspberry

Lưu đồ có hai nhánh chính:

Nhánh sai: Hình ảnh không hợp lệ Trong trường hợp này, Arduino sẽ không điều khiển động cơ

Nhánh đúng: Hình ảnh hợp lệ Trong trường hợp này, Arduino sẽ điều khiển động cơ theo hình ảnh đã nhận

Giải thích chi tiết từng bước của lưu đồ như sau:

Bước này đánh dấu bắt đầu của quá trình xử lý

Bước 2: Arduino nhận dữ liệu từ Raspberry Pi

Arduino nhận dữ liệu từ Raspberry Pi qua giao tiếp serial

Bước 3: Kiểm tra dữ liệu

Arduino kiểm tra xem dữ liệu nhận được có hợp lệ hay không

Bước 4: Dữ liệu hợp lệ

Nếu dữ liệu hợp lệ, Arduino sẽ chuyển sang bước tiếp theo

Bước 5: Điều khiển động cơ

Arduino sử dụng dữ liệu đã nhận để điều khiển động cơ

Lưu đồ thuật toán này là một ví dụ điển hình về cách sử dụng lưu đồ để mô tả quá trình điều khiển động cơ bằng Arduino Lưu đồ là một công cụ hữu ích để giúp hiểu rõ và phân tích các thuật toán.

Phần mềm lập trình Arduino

Arduino IDE là một phần mềm miễn phí được sử dụng để lập trình cho các board Arduino và các board phổ biến khác dựa trên AVR và ARM Arduino IDE cho phép người dùng viết, biên dịch và nạp chương trình vào các board Arduino một cách dễ dàng và nhanh chóng

Phần mềm Arduino IDE cung cấp một giao diện đơn giản và dễ dàng sử dụng để viết code, cũng như các chức năng giúp cho người dùng kiểm tra, debug, và nạp chương trình vào các board Arduino

Nó cũng hỗ trợ cho người dùng các thư viện mã nguồn mở, cũng như các ví dụ sẵn có giúp cho người dùng có thể bắt đầu lập trình các board Arduino một cách dễ dàng

Hình 3.14 Giao diện của Arduino IDE Người dùng chỉ cần định nghĩa hai hàm để thực hiện một chương trình hoạt động theo quy trình: setup(): được thực hiện một lần khi board Arduino khởi động hoặc reset Trong hàm này, người dùng thường thiết lập các chân đầu vào đầu ra, khởi tạo các biến và thư viện cần thiết cho chương trình loop(): là hàm chạy liên tục trong chương trình, cho phép người dùng thực hiện các tác vụ theo chu kỳ lặp lại Trong hàm loop(), người ta thường đọc các giá trị từ cảm biến, điều khiển các đầu ra, hoặc thực hiện các tính toán và xử lý dữ liệu

Quy trình đó có thể được mô tả trong hình dưới đây:

Hình 3.15 Quy trình làm việc của arduino IDE

Phần mềm THONNY

Hình 3.16 Giao diện của THONNY Tính đến hiện tại, Thonny IDE được coi là một trong những môi trường phát triển lý tưởng cho những người mới bắt đầu học Python, đặc biệt là những người không có nhiều kinh nghiệm trong ngôn ngữ lập trình này Thonny nổi bật với giao diện đơn giản và dễ sử dụng, mang lại trải nghiệm tập trung vào việc học và viết mã Một trong những ưu điểm quan trọng của Thonny là quản lý gói tích hợp, giúp người dùng dễ dàng cài đặt và quản lý các thư viện Python mà họ cần trong quá trình phát triển Ngoài ra, IDE cũng đi kèm với một trình giả lập Python tích hợp, giúp người học kiểm thử mã nguồn mà không cần cài đặt Python trực tiếp trên máy tính của họ Thonny cũng đặc biệt hữu ích với việc hỗ trợ lập trình cho các board nhúng sử dụng MicroPython và CircuitPython, mở ra nhiều cơ hội cho những người muốn khám phá lập trình nhúng Bằng cách tích hợp debugger, Thonny giúp người dùng dễ dàng theo dõi và sửa lỗi trong mã nguồn Python của mình.

Nhận diện với cái biển báo trên phần mềm THONNY

Hình 3.17 Nhận diện với biển báo STOP(dừng)

Khi mô hình chạy đến biển báo stop(dừng) thì camera sẽ thu thập hình ảnh và gởi hình ảnh về cho Raspberry để xử lý, sau đó Raspberry sẽ truyền tín hiệu cho Arduino để Arduino điều khiển mạch điều khiển động cơ DC L298N để mô hình xe dừng lại

Hình 3.18 Nhận diện với biển báo rẻ phải

Khi mô hình chạy đến biển báo rẻ phải thì camera sẽ thu thập hình ảnh và gởi hình ảnh về cho Raspberry để xử lý, sau đó Raspberry sẽ truyền tín hiệu cho Arduino để Arduino điều khiển mạch điều khiển động cơ DC L298N để mô hình xe sẽ rẻ phải

Hình 3.19 Nhận diện với biển báo rẻ trái

Khi mô hình chạy đến biển báo rẻ trái thì camera sẽ thu thập hình ảnh và gởi hình ảnh về cho Raspberry để xử lý, sau đó Raspberry sẽ truyền tín hiệu cho Arduino để Arduino điều khiển mạch điều khiển động cơ DC L298N để mô hình xe sẽ rẻ trái

Hình 3.20 Nhận diện với đèn đỏ Khi mô hình chạy đến đèn đỏ thì camera sẽ thu thập hình ảnh và gởi hình ảnh về cho Raspberry để xử lý, sau đó Raspberry sẽ truyền tín hiệu cho Arduino để Arduino điều khiển mạch điều khiển động cơ DC L298N để mô hình xe sẽ dừng lại

Hình 3.21 Nhận diện với đen xanh

Khi mô hình chạy đến đèn xanh thì camera sẽ thu thập hình ảnh và gởi hình ảnh về cho Raspberry để xử lý, sau đó Raspberry sẽ truyền tín hiệu cho Arduino để Arduino điều khiển mạch điều khiển động cơ DC L298N để mô hình xe sẽ đi tiếp.

Bản thiết kế mô hình đường để xe chạy

Hình 3.22 Mô hình đường xe chạy

3.12.1 Các biển báo giao thông

Hình 3.23 Biển báo rẻ trái

Khi xe chạy đến biển báo rẻ trái thì camera sẽ thu hình ảnh của biến báo rẻ trái xong gởi về cho Raspberry ở bộ điều khiển trung tâm để xử lý hình ảnh và đưa ra tín hiệu cho Arduino, sau đó Arduino sẽ ra tín hiệu cho L298N để điều khiển động cơ DC Động cơ DC sẽ hoạt động như sau, nếu nhận được tín hiệu yêu cầu xe rẻ trái thì bộ điều khiển động cơ L298N sẽ quay một động cơ DC ở phía bên trái của xe theo chiều kim đồng hồ và quay động cơ DC ở phía bên phải của xe ngược chiều kim đồng hồ Điều này sẽ tạo ra lực quay ngược chiều ở phía bên trái của xe và lực quay thuận chiều ở phía bên phải của xe Lực quay này sẽ làm cho xe quay sang trái

Hình 3.24 Biển báo rẻ phải

Tương tự như biển báo rẻ trái thì biển báo rẻ phải sẽ hoạt động ngược lại với biển báo rẻ trái

Hình 3.25 Biển báo STOP(dừng) Đối với biển báo dừng thì khi mô hình gặp biển báo STOP(dừng) thì Arduino sẽ gửi tín hiệu cho L298N để L298N điều khiển 4 động cơ dừng ngay lập tức và mô hình sẽ không hoạt động nữa Đèn đỏ

Hình 3.26 Đèn đỏ Đối với đèn đỏ thì khi mô hình gặp đèn đỏ thì Arduino sẽ gửi tín hiệu cho L298N để L298N điều khiển 4 động cơ dừng ngay lập tức và mô hình sẽ không hoạt động nữa Đèn xanh

Hình 3.27 Đèn xành Đối với đèn xanh thì khi mô hình gặp đèn xanh thì Arduino sẽ gửi tín hiệu cho L298N để L298N điều khiển 4 động cơ tiếp tục chạy.

Các bước truy cập, lập trình trên hệ điều hành của Raspberry

3.13.1 Các bước cài đặt và lập trình phần mềm IDE THONNY và IDE Arduino

Bước 1: Cấp nguồn cho mô hình xe và kết nối Raspberry trên xe mô hình với máy tính, sau đó hệ điều hành của Raspberry sẽ xuất hiện trên máy tính như hình dưới đây:

Hình 3.28 Hệ điệu của Raspberry Bước 2: Cài phần mềm Arduino

Các bước cài phần mềm như hình sau:

Hình 3.29 Cài đặt Arduino IDE

Bước 3: Cài thư viện Ultralytics(YOLOv8)

Hình 3.30 Cài đặt YOLOv8 Sau khi cài đặt xong các phần mềm cần thiết sau đó ta thực hiện như sau:

Bước 4: Mở IDE THONNY và lập trình

Hình 3.31 Lập trình trên Raspberry với phần mềm THONNY Bước 5: Mở IDE Arduino và lập trình

Hình 3.32 lập trình trên Raspberry với phần mềm Arduino IDE

3.13.2 Các bước chạy mô hình

Sau khi lập trình trên Raspberry thì chúng em lưu file code của Aruino và code python trên phần mềm THONNY và thực hiện các bước sau để mô hình hoạt động:

Bước 1: Mở phần mềm VNC Viewer

Hình 3.33 Giao diện phần mềm VNC

Bước 2: Mở nguồn cho Raspberry và mô hình xe sau đó chúng ta qua phần mềm VNC Viewer để tìm địa chỉ IP của Raspberry trên thanh tìm kiếm IP được khoanh như hình 3.28, yêu cầu Raspberry và máy tính đang sử dụng phần mềm VNC Viewer phải bắt chung một wifi thì chúng ta mới tìm được địa chỉ IP của Raspberry

Hình 3.34 Thanh công cụ tìm kiếm địa chỉ IP

Bước 3: Sau khi tìm kiếm địa chỉ IP của Raspberry thì màn hình chính sẽ hiện hệ điều hành của Raspberry như sau:

Hình 3.35 Màn hình chính Raspberry Bước 4: Mở file code của THONNY và Arduino đã lưu lên và chạy chương trình sẽ hiện trên màn hình giao diện của camera sẽ hiện lên như sau:

Hình 3.36 Màn hình khi chạy code mở camera Bước 5: Chạy chương trình và cho xe chạy nhận diện của biển báo.

Kết quả, nhận xét và đánh giá

Phần này trình bày những kết quả đã đạt được qua 15 tuần thực hiện mô hình, kết quả thực tế mô hình đã làm được bao gồm kết quả chạy các chức năng của mô hình và kết quả phần mềm Qua đó đánh giá một vài thông số để đưa ra nhận xét ưu điểm và nhược điểm của mô hình

Sau khoảng 15 tuần nghiên cứu và thực hiện đề tài dưới sự hướng dẫn tận tình của thầy Nguyễn Linh Nam, nhóm đã hoàn thiện được đề tài, giải quyết các vấn đề cần thiết cho mô hình để có thể đưa vào việc sử dụng trong thực tiễn và đạt được một số yêu cầu đã đề ra:

Tiếp cận, tìm hiểu sâu hơn về Raspberry Pi 4

Biết cách vận hành của xe tự hành khi tìm hiểu về L298N điều khiển động cơ

Hiểu được nguyên lý hoạt động của các linh kiện sử dụng như Raspberry Pi 4, Arduino UNO R3 và L298N

Lập trình cho board Raspberry giao tiếp với Arduino và L298N

3.14.2 Kết quả chạy mô hình

Mô hình xe chạy theo đúng với các biển báo đã được train trước đó

Giao tiếp được Raspberry Pi với Camera

Giao tiếp được Raspberry Pi với Arduino

Nhận xét và đánh giá

Sau khoảng 15 tuần nghiên cứu và thực hiện đề tài, mạch cơ bản đã đáp ứng được một số yêu cầu thiết kế ban đầu Dưới đây là một số nhận xét sau:

Raspberry Pi có kích thước nhỏ,dễ tích hợp và gắn kết vào xe mà không tạo ra sự cồng kềnh Điều này giúp giữ cho hệ thống tự hành giữ được thiết kế mảnh mai và linh hoạt

Mô hình có kích thước nhỏ nhưng có độ xử lý chính xác cao

Raspberry xử lý còn chậm trong một số tính huống phức tạp và xử lý chậm khi xe chạy với tốc độ nhanh

Qua quá trình thực hiện đề tài, nhóm đã biết sử dụng Rasberry các chức năng cơ bản chiếc máy tính nhúng, như việc tạo file mới, tạo project mới, tìm hiểu Python trên Raspberry, cách chạy chương trình Python, Ngoài ra nhóm còn tự cài đặt hệ điều hành cho máy và kết nối với Camera chụp ảnh từ

Raspberry,… Đánh giá máy tính nhúng Raspberry một cách khách quan, máy tính được thiết kế nhỏ gọn, thuận tiện cho các mô hình không thích sự cồng kềnh, đáp ứng đủ các chức năng cơ bản như một chiếc máy tính bình thường, tốc độ xử lý tạm ổn cho các dự án nhỏ, hệ thống chạy ổn định, nhưng các dự án lớn cần cấu hình máy cao thì Raspberry chưa đáp ứng được nhu cầu

Kết luận và hướng phát triển

Sau khoảng 15 tuần thực hiện đồ án, nhóm đã hoàn thành nhiệm vụ đúng thời gian dự kiến để báo cáo trước hội đồng Nhóm đã thực hiện đề tài đã tạo ra một sản phẩm cụ thể, đó là:

Sau khi tổng hợp các kết quả chạy mô hình xe và đem so sánh với các hình ảnh biển báo đã train trước đó thì chúng em thấy xe hoạt động khá chính xác với những gì đã train trên phầm mềm

Tuy Raspberry còn xử lý chậm nhưng độ hiệu quả và chính xác cao

Từ mô hình xe chúng ta có thể phát triển thêm cho xe bao gồm như sau:

Thêm định vị GPS: cho phép xe xác định chính xác vị trí trên bản đồ, hỗ trợ quản lý và giám sát Dữ liệu GPS được sử dụng để tính toán đường đi tốt nhất, điều chỉnh đường đi dựa trên thông tin giao thông và điều kiện đường Nó cũng giúp theo dõi vị trí liên tục, đảm bảo an toàn và bảo mật, và ngăn chặn mất cắp

Thêm các cảm biến tránh vật cản:

Dùng Lidar (Light Detection and Ranging) sử dụng tia laser để đo khoảng cách đến các vật thể xung quanh Tạo ra một bản đồ chi tiết về môi trường xung quanh với thông tin về hình dạng và kích thước của các vật thể

Radar sử dụng sóng radio để đo khoảng cách và tốc độ của các vật thể Thích hợp cho việc phát hiện vật cản ở các điều kiện thời tiết khác nhau

Ultrasonic Sensors sử dụng sóng siêu âm để đo khoảng cách đến các vật thể

Thường được sử dụng cho việc đỗ xe và phát hiện vật cản ở gần

TOF Sensors (Time-of-Flight) sử dụng công nghệ đo thời gian mà tia ánh sáng mất để đi và quay lại.Cho phép đo khoảng cách chính xác và nhanh chóng đến các vật thể

Infrared Sensors sử dụng tia hồng ngoại để đo khoảng cách đến vật thể Thích hợp cho việc phát hiện vật cản trong điều kiện ánh sáng yếu

Kết hợp nhiều loại cảm biến này giúp xe tự hành có cái nhìn toàn diện về môi trường xung quanh, từ đó có thể đưa ra quyết định thông minh để tránh vật cản và duy trì an toàn khi di chuyển

Thêm hệ thống báo hết xăng,hệ thống báo xe gặp sự cố hoặc hỏng

[1] Nguyễn Thúy Anh (2023), Xe tự hành là gì?, Từ xe tự hành là gì? Tìm hiểu về cấu tạo và ứng dung của xe AGV

[2] Đại học sao đỏ khoa ô tô(2022), Lịch sử phát triển của xe tự hành Từ lịch sử phát triền của xe tự hành

[3] Huyền Chi (2022), Các cấp độ của xe tự hành Từ có bao nhiêu cấp độ xe tự lái, công nghệ tự lái của VinFast, Tesla và các hãng khác thế nào?

[4] SAOMAI SOLUTION GROUP(2022), Cấu tạo của xe tự hành Từ Cấu tạo xe tự hành AGV- Phân loại và tầm quan trọng của AGV

[5] Richard Szeliski (2022), Xử lý ảnh là gì?,Từ Computer Vision: Algorithms and Applications

[6] TS.Đỗ Năng Toàn (2007), Xử lý ảnh là gì?, Từ Giáo trình môn học xử lý ảnh

[7] Lê Mỹ Hà, KS.Phạm Quang Huy, Lập trình IoT với Arduino, NXB

[8] Micheal McRoberts (2010), Beginning Arduino, Technology In Action

[9] Điện Dân Dụng (2023), Module điều khiển động cơ L298N, Từ Module điều khiển động cơ L298N là gì?

[10] Arduinokit (2023), Giao tiếp Module điều khiển động cơ L298N với

[11] Diễm Quỳnh (2022), Động cơ Dc là gì?, Từ Động cơ DC là gì? Cấu tạo của động cơ DC trong xe tự hành

[12] VBD (2023), Yolov8 là gì?, Từ YOLOv8 có gì nâng cấp so với các phiên bản trước

[13]TS.Phạm Ngọc Hưng ,Lập trình nhúng là gì?, Từ Giáo trình lập trình nhúng

[14] Kiến Thức Chung (2023), Raspberry Pi 4 là gì?, Từ Raspberry Pi 4 là gì?, sơ đồ chân, tính năng và ngoại vi của Raspberry Pi 4

[15] Nhã Nguyễn (2020),Hệ điều hành Linux là gì?, Từ Tìm hiểu về hệ điều hành Linux

[16] Phạm Minh Khoa, Phần mềm Python, Từ Python là gì?

[17] Quynh_ADV, UART là gì, Từ Khái niệm cơ bản của UART.

Ngày đăng: 19/09/2024, 20:09

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Thúy Anh (2023), Xe tự hành là gì?, Từ xe tự hành là gì? Tìm hiểu về cấu tạo và ứng dung của xe AGV Sách, tạp chí
Tiêu đề: Xe tự hành là gì?, Từ
Tác giả: Nguyễn Thúy Anh
Năm: 2023
[2] Đại học sao đỏ khoa ô tô(2022), Lịch sử phát triển của xe tự hành. Từ lịch sử phát triền của xe tự hành Sách, tạp chí
Tiêu đề: Lịch sử phát triển của xe tự hành
Tác giả: Đại học sao đỏ khoa ô tô
Năm: 2022
[3] Huyền Chi (2022), Các cấp độ của xe tự hành. Từ có bao nhiêu cấp độ xe tự lái, công nghệ tự lái của VinFast, Tesla và các hãng khác thế nào Sách, tạp chí
Tiêu đề: Các cấp độ của xe tự hành
Tác giả: Huyền Chi
Năm: 2022
[4] SAOMAI SOLUTION GROUP(2022), Cấu tạo của xe tự hành. Từ Cấu tạo xe tự hành AGV- Phân loại và tầm quan trọng của AGV Sách, tạp chí
Tiêu đề: Cấu tạo của xe tự hành
Tác giả: SAOMAI SOLUTION GROUP
Năm: 2022
[5] Richard Szeliski (2022), Xử lý ảnh là gì?,Từ Computer Vision: Algorithms and Applications Sách, tạp chí
Tiêu đề: Xử lý ảnh là gì
Tác giả: Richard Szeliski
Năm: 2022
[6] TS.Đỗ Năng Toàn (2007), Xử lý ảnh là gì?, Từ Giáo trình môn học xử lý ảnh Sách, tạp chí
Tiêu đề: Xử lý ảnh là gì
Tác giả: TS.Đỗ Năng Toàn
Năm: 2007
[7] Lê Mỹ Hà, KS.Phạm Quang Huy, Lập trình IoT với Arduino, NXB Thanh Niên Sách, tạp chí
Tiêu đề: Lập trình IoT với Arduino
Nhà XB: NXB Thanh Niên
[8] Micheal McRoberts (2010), Beginning Arduino, Technology In Action Sách, tạp chí
Tiêu đề: Beginning Arduino
Tác giả: Micheal McRoberts
Năm: 2010
[9] Điện Dân Dụng (2023), Module điều khiển động cơ L298N, Từ Module điều khiển động cơ L298N là gì Sách, tạp chí
Tiêu đề: Module điều khiển động cơ L298N
Tác giả: Điện Dân Dụng
Năm: 2023
[10] Arduinokit (2023), Giao tiếp Module điều khiển động cơ L298N với Arduino.Từ Arduinokit.vn Sách, tạp chí
Tiêu đề: Giao tiếp Module điều khiển động cơ L298N với Arduino
Tác giả: Arduinokit
Năm: 2023
[11] Diễm Quỳnh (2022), Động cơ Dc là gì?, Từ Động cơ DC là gì? Cấu tạo của động cơ DC trong xe tự hành Sách, tạp chí
Tiêu đề: Động cơ Dc là gì
Tác giả: Diễm Quỳnh
Năm: 2022
[12] VBD (2023), Yolov8 là gì?, Từ YOLOv8 có gì nâng cấp so với các phiên bản trước Sách, tạp chí
Tiêu đề: Yolov8 là gì
Tác giả: VBD
Năm: 2023
[13]TS.Phạm Ngọc Hưng ,Lập trình nhúng là gì?,Từ Giáo trình lập trình nhúng Sách, tạp chí
Tiêu đề: Lập trình nhúng là gì
[14] Kiến Thức Chung (2023), Raspberry Pi 4 là gì?, Từ Raspberry Pi 4 là gì?, sơ đồ chân, tính năng và ngoại vi của Raspberry Pi 4 Sách, tạp chí
Tiêu đề: Raspberry Pi 4 là gì
Tác giả: Kiến Thức Chung
Năm: 2023
[15] Nhã Nguyễn (2020),Hệ điều hành Linux là gì?, Từ Tìm hiểu về hệ điều hành Linux Sách, tạp chí
Tiêu đề: Hệ điều hành Linux là gì
Tác giả: Nhã Nguyễn
Năm: 2020
[16] Phạm Minh Khoa, Phần mềm Python, Từ Python là gì Sách, tạp chí
Tiêu đề: Phần mềm Python
[17] Quynh_ADV, UART là gì, Từ Khái niệm cơ bản của UART Sách, tạp chí
Tiêu đề: UART là gì

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w