BÁO CÁO MÔN HỌC CÔNG NGHỆ PHẦN MỀM NHÚNG Đề tài: XE TỰ HÀNH TRÁNH VẬT CẢN Lời mở đầu Các Robot tự hành được ứng dụng trong đời sống ngày càng nhiều như robot vận chuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật, robot phục vụ sinh hoạt gia đình… Điểm hạn chế của robot tự hành hiện tại là tính thiếu linh hoạt và khả năng thích ứng khi làm việc ở những vị trí khác nhau. Từ những lý do đó nảy sinh vấn đề tránh vật cản cho robot tự hành nhằm nâng cao tính linh hoạt cho robot. Hầu hết các robot hiện đại đều có một kiểu tránh vật cản nào đó robot xác định vật cản và dừng lại ở khoảng cách ngắn so với vật cản để tránh va chạm, đến các thuật toán tinh tế hơn, cho phép robot di chuyển theo đường viền quanh vật cản. Đề tài ”Xe tự hành tránh vật cản” nhằm góp phần giải quyết vấn đề trên.
Trang 1Ban cơ yếu chính phủ Học viện Kỹ thuật mật mã
Giảng viên hướng dẫn: Lê Đức Thuận
Sinh viên thực hiện: Nhóm 07 – lớp L03
Đinh Công Tuấn CT050453
Hoàng Tuấn Minh CT050432
Lê Quốc Mạnh CT050234
Trang 2MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI 5
1.1 Đặt vấn đề 5
1.2 Tính cấp thiết của đề tài 5
1.3 Tình hình nghiên cứu hiện nay 6
1.3.1 Tình hình nghiên cứu quốc tế 6
1.3.2 Tình hình nghiên cứu trong nước 7
1.4 Tổng kết chương 1 7
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VỀ ARDUINO 7
2.1 Giới thiệu 7
2.2 Lịch sử ra đời 8
2.2.1 Dòng Arduino USB 8
2.2.1.1 Mạch lập trình đầu tiên (2005) 8
2.2.1.2Mạch Arduino đầu tiên - Arduino USB (2005) 8
2.2.1.3 Arduino Extreme (2006) 9
2.2.1.4 Arduino NG (2006) 11
2.2.1.5 Arduino Diecimila (2007) 12
2.2.1.6 Arduino Duemilanove (2008 - 2009) 13
2.2.1.7 Arduino UNO 2010 - đến nay 13
2.2.1.8 Những dòng Arduino khác 16
2.2.2 Arduino MEGA 16
2.2.2.1 Arduino Mega đầu tiên (2009 - 2010) 16
2.2.2.2 Arduino MEGA ADK (2011) 17
Trang 32.6 Tổng kết chương 2 26
CHƯƠNG 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 27
3.1 Thiết kế phần cứng 27
3.1.1 Tổng quan phần cứng 27
3.1.1.1 Arduino Uno R3 27
3.1.1.2 Cảm biến siêu âm HC-SR04 28
3.1.1.3 Khối động cơ Servo 30
3.1.1.4 Module điều khiển động cơ L298 mạch cầu H 31
3.1.2 Thiết kế sơ đồ mạch 33
3.1.3 Nguyên lý hoạt động 34
3.2 Thiết kế phần mềm 34
3.2.1 Sơ đồ Use Case tổng quát 34
3.2.2 Đặc tả Use Case 34
3.2.2.1 Đặc tả Use Case “Đi thẳng” 34
3.2.2.2 Đặc tả Use Case “Đi lùi” 35
3.2.2.3 Đặc tả Use Case “Rẽ trái” 36
3.2.2.4 Đặc tả Use Case “Rẽ phải” 37
3.2.3 Thuận toán khối xử lý trung tâm 38
3.2.4 Sơ đồ thuật toán 39
3.3 Kết quả thực nghiệm 40
3.3.1 Code Arduino 40
3.3.2 Mô hình thử nghiệm 40
3.3.2.1 Mô hình giả lập trên Proteus 40
3.3.2.2 Mô hình thực tế 40
3.3.3 Kết quả thử nghiệm 40
3.3.4 Nhận xét đánh giá 40
Trang 4Lời mở đầuCác Robot tự hành được ứng dụng trong đời sống ngày càng nhiều như robot vậnchuyển hàng hóa, robot kiểm tra nguy hiểm, robot xe lăn cho người khuyết tật, robot phục
vụ sinh hoạt gia đình… Điểm hạn chế của robot tự hành hiện tại là tính thiếu linh hoạt vàkhả năng thích ứng khi làm việc ở những vị trí khác nhau Từ những lý do đó nảy sinh vấn
đề tránh vật cản cho robot tự hành nhằm nâng cao tính linh hoạt cho robot Hầu hết các robothiện đại đều có một kiểu tránh vật cản nào đó robot xác định vật cản và dừng lại ở khoảngcách ngắn so với vật cản để tránh va chạm, đến các thuật toán tinh tế hơn, cho phép robot di
chuyển theo đường viền quanh vật cản Đề tài ”Xe tự hành tránh vật cản” nhằm góp phần
giải quyết vấn đề trên
Nội dung báo cáo này gồm các phần:
- Chương 1: Tổng quan đề tài
- Chương 2: Cơ sở lý thuyết
- Chương 3: Thiết kế và xây dựng hệ thống
Trang 5TÓM TẮT ĐỀ TÀI
*Yêu cầu chung và các chức năng của hệ thống
- Yêu cầu chung
Tính thực thi cao, có khả năng phát triển
Đảm bảo về chất lượng, độ chính xác cao, làm việc lâu dài, bền bỉ
Tiết kiệm chi phí, linh kiện dễ kiếm dễ sử dụng và dễ dàng thay thế khi xảy
ra sự cố
Giảm thiểu chi phí, thời gian vận hành, bảo dưỡng và sửa chữa
- Chức năng: Xe có khả năng di chuyển tiến, lùi , rẽ trái, rẽ phải và dừng lại khinhận được khoảng cách tín hiệu từ cảm biến
*Linh kiện sử dụng
Xe được thiết kế với các linh kiện cấu tạo sau đây:
- Giá đỡ cảm biến siêu âm
- Khung xe mô hình
- Arduino UNO R3 CH340G
- Module điều khiển động cơ I298N
- Module cảm biến siêu âm HC-SR04
Trang 6CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
xe tự hành né tránh vật cản”
1.2Tính cấp thiết của đề tài
Xe tự hành là một loại xe robot có khả năng tự dịch chuyển, tự vận động (cóthể lập trình lại được) dưới sự điều khiển tự động có khả năng hoàn thành côngviệc được giao Xe tự hành là một thành phần có vai trò quan trọng trong ngành robothọc Cùng với sự phát triển mạnh mẽ của các hệ thống tự động hóa, xe tự hành ngàymột được hoàn thiện và càng cho thấy lợi ích của nó trong công nghiệp và sinh hoạt.Ngày nay xe tự hành có rất nhiều ứng dụng tự động hóa trong đời sống, côngnghiệp….Có nhiều công việc đòi hỏi thực thi trong môi trường độc hại, nguyhiểm như có phóng xạ, khí độc, bụi bẩn, kí sinh trùng gây bệnh Vì thế giải pháp sửdụng robot nói chung trong việc quan trắc môi trường là rất cần thiết Với khả năngtích hợp nhiều loại cảm biến như nhiệt độ, độ ẩm, bụi, camera, siêu âm, hồngngoại…, robot có khả năng thay thế con người 1 cách hiệu quả trong các côngviệc có độ nguy hiểm cao
Trang 7Hình 1.1 Xe tự hành thám hiểm sao hỏa Curiosity
Từ tình hình thực tế đó, việc xây dựng các chương trình hoạt động cho các
xe tự hành là điều thiết yếu Một vấn đề rất được quan tâm khi thiết kế xe tự hành làđiều khiển làm sao cho xe có thể đi theo một quỹ đạo mong muốn Bài toán xe tựhành di động bám tường (wall-following problem) là một trong các bài toánthường gặp của robot kiểu phản xạ (reactive paradigm), nó đã được giải bằngnhiều cách khác nhau Bản báo cáo này trình bày phương pháp giải quyết vấn đề đóvới thuật toán điều khiển PID sử dụng Arduino
1.3Tình hình nghiên cứu hiện nay
Khái niệm Robot tự động đang phát triển nhanh chóng về số lượng, Robot tự động vàcấu tạo phức tạp của nó ngày càng nâng cao để phù hợp với từng lĩnh vực khác nhau Có rấtnhiểu loại điều khiển Robot tự động như: Thiết lập đường đi, định vị GPS,… Robot tránhvật cản là loại Robot có khả năng tránh va chạm với trở ngại bất ngờ
1.3.1 Tình hình nghiên cứu quốc tế
Có nhiều hãng xe trên khắp thế giới đã và đang phát triển công nghệ tự động không ngườilái cho các dòng xe của họ có thể kể đến như:
- Hãng xe Tesla
Trang 8- Hãng xe Ford
- Hãng xe Waymo
- Hãng xe Audi
1.3.2 Tình hình nghiên cứu trong nước
Một số trường đại học và viện nghiên cứu ở Việt Nam đã bắt đầu nghiên cứu về côngnghệ xe tự lái Các nhóm nghiên cứu tại các trường đại học đang tiến hành nghiên cứu về hệthống điều khiển, trí tuệ nhân tạo và cảm biến cho xe tự lái
Một số công ty công nghệ trong nước đã bắt đầu tham gia vào lĩnh vực này Họthường tập trung vào phát triển các phần mềm và giải pháp công nghệ liên quan đến xe tựlái Việt Nam đã thiết lập mối quan hệ hợp tác với các công ty và tổ chức quốc tế trong lĩnhvực xe tự lái Điều này giúp truy cập vào tài liệu nghiên cứu, công nghệ tiên tiến và chuyểngiao kỹ thuật từ các quốc gia phát triển
1.4Tổng kết chương 1
Chương 1 của đề tài “Xe tự hành né tránh vật vản” đã trình bày các phần quan trọng như Đặtvấn đề, Tính cấp thiết của đề tài và Tình hình nghiên cứu hiện nay Chương 1 đã đặt nềnmóng cho đề tài và cung cấp một cái nhìn tổng quan về tình hình và cấp thiết của nghiên cứu
về xe tự hành né tránh vật cản Dự án xe tự hành tránh vật cản được nghiên cứu và thựcnghiệm Xe được sử dụng bằng Arduino sử dụng cảm biến siêu âm để dò tìm để tránh vậtcản
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VỀ ARDUINO
2.1 Giới thiệu
Trang 9- Bạn có thể điều khiển các chức năng của bo mạch của mình bằng cách nạp cáctập lệnh đến vi điều khiển trên bo mạch Thông qua phần mềm hỗ trợ là ArduinoIDE
- Không giống như bo mạch có khả năng lập trình trước kia, Arduino chỉ cần bạn
sử dụng cáp USB để nạp mã vào trong bo mạch
- Hơn nữa, phần mềm Arduino IDE sử dụng phiên bản giản thể của C++, làm việchọc lập trình nó trở nên dễ dàng hơn rất nhiều
2.2 Lịch sử ra đời
Năm 2005, một giáo viên ở Ý và nhóm bạn của ông bắt đầu phát triển một nền tảngphần cứng dựa trên vi điều khiển AVR của Atmel Họ đã đặt tên nền tàng này là “Arduino”dựa trên tên của một ngôi làng ở Ý, nơi mà một phần dự án được phát triển Phiên bản đầutiên của Arduino được công bố với tên gọi “Arduino NG”
2.2.1 Dòng Arduino USB
2.2.1.1 Mạch lập trình đầu tiên (2005)
- Được đặt tên là Arduino Serial
- Sử dụng cổng kết nối RS-232 (Serial) thay vì cổng USB (TTL) Qua thời gian, dòngmạch Arduino Serial đã được thiết kế đơn giản hơn, và chỉ cần dùng 1 mặt để mọinhà phát triển có thể tự làm một cái cho bản thân mình bằng cách rửa mạch PCB Nổibật trong số đó là dòng mạch có tên Severino (Aka S3V3) Dòng sản phẩm này có tên
là Arduino Signle-Sided Seria
Trang 102.2.1.2Mạch Arduino đầu tiên - Arduino USB (2005)
Dòng mạch Arduino USB được phát triển qua 2 phiên bản (Arduino USB và ArduinoUSB v2.0)
Ở mỗi phiên bản cũng không có sự khác nhau lắm, chỉ khác nhau về địa chỉ trangweb và sửa một lỗi nhỏ ở phần pinout chỗ đầu USB
Ở board mạch Arduino USB này, chúng ta đã thấy có sự xuất hiện của cồng USBType B, như vậy, nguồn điện nuôi Arduino không phải lúc nào cũng là 12V (thường thường
là 12V), vì khi gắn cổng USB Type B ta lại có thể 5V, như vậy nếu đi qua con LM7805 thì
sẽ không đủ điện nuôi cho con ATmega328 Điều đó khiến những nhà phát triển phần cứngArduino phải thích nghi với việc thay đổi header ext or usb mỗi khi thay đổi từ lúc nạpchương trình sang dùng nguồn ngoài
Trang 112.2.1.3 Arduino Extreme (2006)
Ở phiên bản này, chúng ta đã có thêm đèn RX, TX ở 2 chân TX và RX của Arduino.Các linh kiện trên Arduino phần lớn được thay thế bằng linh kiện dán
Ngoài ra, các chân header male đã được thay thế với chân header female
Cũng trong năm đó, trang arduino.cc cũng chính thức được ra đời
Arduino Extreme version 2 ra đời, các dây nối giữa các phần trong mạch cũng đượclàm "âm" đất đã cho thay thế phần lớn điện trở, tụ điện trở thành những linh kiện dán, đẹphơn, gọn hơn và hoạt động ổn định hơn nữa Việc tích hợp bóng đèn LED vốn dùng để chiếusáng và đặt vào mạch Arduino để giúp người dùng biết máy tính đã kết nối được với mạchArduino và quá trình nạp chương trình có hoạt động được hay không
Trang 122.2.1.4 Arduino NG (2006)
Ở phiên bàn này, Arduino NG đã thay thế chip FT232BM (chuẩn cũ USB to TTL)bằng chíp FT232RL - FTDI ( chuẩn mới USB to Serial), điều đó làm cho thiết kế giao diệnphần cứng của Arduino trong thật sự rất tuyệt vời
Trong board này, họ đã gắn thêm con LED màu xanh tại chân số 13 Đèn LED nàykhông những giúp ta debug được truyền dữ liệu SPI mà còn có "một công cụ" kiểm thửmạch (vì khi được xuất bán, Arduino NG đã được upload chương trình Blink) Ta chỉ cầngắn điện vào cổng USB hoặc nguồn ngoài là có thể kiểm thử được mạch NG
Trang 13Vi điều khiển ATmega168 kể từ phiên bản Arduino NG Rev.C đã được thay thế choATmega8 ở các phiên bản trước đó và có thể xem là phiên bản đệm tương tự Arduino USBv2.
2.2.1.5 Arduino Diecimila (2007)
Thay đổi chính trong phiên bản này đó là việc đưa vào chức năng "tự động reset"bằng máy tính khi upload chương trình, nghĩa là lúc bấy giờ chúng ta đã có thể lập trìnhArduino như thời điểm hiện tại (gắn cáp USB vào máy tính, viết chương trình, sau đó tảichương trình lên và tận hưởng thành quả)
Với việc cải tiến nút reset cũng đã khiến những nhà lập trình thiết kế lại các chânnguồn, và chân digital pin, cung cấp cho họ nhiều khả năng tùy biến hơn Ví dụ: thêm chânAREF, VIN, RESET,
Trong phiên bản này, Arduino đã sử dụng một mạch "dropout voltage regulator" (khiđiện áp đổi thì điện áp so sánh ở Analog IN vẫn không bị nhiễu), đó là một dự kết hợp hoànhảo chúng ta không cần phải sử dụng tụ 103, 104 để lọc nhiễu cho các chân Analog nữa
Các chân nguồn 3.3V, 5V, GND, Vin đã được điều chỉnh lại và thực sự nó rất ổn nênđến tận bây giờ chúng ta vẫn dùng thiết kế đó và thống nhất đến bây giờ (với các mạch pháttriển khác từ bên thứ 3) Ngoài ra, về vấn đề nguồn, chúng ta đã có một cầu chì dán (có thểsửa được) Nó giúp mạch được bảo vệ trước sự nguy hiểm của sự sơ xẩy đoản mạch, đó làmột sự thích nghi trước những sự hỏng hóc qua cổng USB
Trang 142.2.1.6 Arduino Duemilanove (2008 - 2009)
Mạch Arduino Duemilanove đã có khả tự động nhận biết mỗi khi sử dụng nguồn tửcổng USB hay nguồn ngoài (không cần phải thay đổi jumper nữa) Ngoài ra, trong phiên bảnnày, còn bổ sung một đường chì nhỏ được nối tắt nhằm giúp cho có thể hủy chức năng auto-reset (tự động reset khi upload chương trình)
2.2.1.7 Arduino UNO 2010 - đến nay
Cái tên UNO nghĩa là "một" trong tiếng Ý, nó được đặt tên như vậy thì lúc nàyArduino IDE cũng đã gần chạm đến mốc 1.0 Nghĩa là, họ muốn nói rằng, UNO sẽ là mạchtham khảo chính được dùng trong việc hướng dẫn Arduino cho người mới học Họ mất 5năm để định hình một thứ mạch lập trình trở thành một thứ kỳ diệu trong giới DIY (Do ityourself – tự tay làm lấy) và hơn thế nữa, giới nghiên cứu khoa học
5 năm đủ để biến một bản mạch thô sơ, trở thành một thứ mạch "tuyệt đẹp" và "đanăng" như hiện tại
Trang 15Ở mạch này, ngoài việc thay đổi và cách đặt tên cho dễ xác định các chân I/O,Arduino UNO còn thay con chip FT232RL - FTDI (chuẩn USB to Serial) bằng con chipATMega8U2 (chuẩn Serial TTL Converter) nhưng vẫn giữ được pinout cũ của mạch trước
đó Điều đó làm cho những mạch kế thừa, các dòng phụ trợ cho Arduino USB không bị lỗithời và dễ hòa nhập với nhau
Từ phiên bản Arduino UNO này, Arduino USB đã chính thức phân nhánh ra thành 2nhánh con, đó là Arduino Ethernet và Arduino Leonardo nhằm tối ưu hóa cho các dự án sửdụng Internet (Arduino Ethernet - cái này không phải là shield Ethernet cho Arduino mà làmột board Arduino tích hợp Internet trong một luôn)
Trang 16Ở các phiên bản Arduino Leonardo, chúng ta có thể được sử dụng như chuột và bànphím.
Trang 172.2.1.8 Những dòng Arduino khác
Ngoài dòng Arduino USB kinh điểm trên, chúng ta còn có những dòng Arduino khác
có thể được liệt kê bằng hình ảnh bên dưới
Mỗi dòng lại có những điểm mạnh và điểm yếu riêng, tuy nhiên, đều là sự sáng tạocủa những con người sáng tạo nên mạch Arduino Nhờ những sáng tạo này, họ đã tạo nênmột hệ sinh thái vô cùng lớn với Arduino Chỉ cần một mạch Arduino Mega, bạn đã có thể
tự xây dựng cho mình những cổ máy sáng tạo như máy in 3d, máy khắc laser, tất cả đều lànguồn mở “open source” và bạn có thể tự làm cho mình một cái ngay tại nhà Hay là, vớiArduino Pro mini, những dự án mạng cảm biến chưa bao giờ dễ như thế, hoặc là những dự
án mini robot,
2.2.2 Arduino MEGA
2.2.2.1 Arduino Mega đầu tiên (2009 - 2010)
Arduino MEGA có rất nhiều chân I/O so với dòng Arduino UNO (54 digital I/O và
16 analog I/O), đồng thời bộ nhớ flash của MEGA rất lớn, gấp 4 lần so với UNO (128kb)
Trang 18với vi điều khiển ATmega1280 Rõ ràng, những dự án cần điều khiển nhiều loại động cơ và
xử lý nhiều luồng dữ liệu song song (3 timer), nhiều ngắt hơn (6 cổng interrupt), có thểđược phát triển dễ dàng với Arduino MEGA, chẳng hạn như: máy in 3d, quadcopter,
Các chân digital từ 0 -> 13, analog từ 0 -> 5 và các chân nguồn được thiết kế tương tựArduino UNO
Để có thể thêm được nhiều vùng nhớ hơn, thêm được nhiều chân I/O hơn, nhà pháttriển đã mạnh dạng thay đổi con vi điều khiển ATmega1280
Cách thiết kế Arduino MEGA tương tự như mạch Arduino UNO nối dài
Một năm sau đó, với những ý tưởng lớn hơn, hay hơn, nhưng cần phải có một dunglượng flash lớn hơn Vì vậy, họ đã thay con ATmega1280 (128kb) bằng con ATmega2560(256kb) và Arduino MEGA 2560 ra đời
Trang 192.2.2.3 Arduino DUE (2012)
Arduino DUE là phiên bản đầu tiên sử dụng một vi điều khiển 32 bit thay vì con viđiều khiển 8 bit ATmega2560 trước đây Nó có thể tính toán nhanh hơn 4 lần (nếu so sánhvới mạch 8 bit cùng xung nhịp) Xung nhịp của dòng sản phẩm này cũng cao hơn (84MHz)
Trang 202.2.2.4 Arduino Yún (2013)
Arduino Yún thực sự là một "super mini computer" vì nó cực kì nhỏ chạy hệ điềuhành linux (bản mod openwrt) và nó có sẵn Wifi, và đó chính là vì sao Intel đầu tư mạnh vàoArduino và cho ra đời board mạch phát triển IoT Development Kit (códùng ngôn ngữArduino để lập trình)
- Bộ nhớ: Arduino có bộ nhớ để lưu trữ chương trình và dữ liệu Bộ nhớ này bao gồm
Trang 21- Chân nối: Arduino có các chân nối dùng để kết nối với các thành phân điện tử khácnhư cảm biến, đèn LED, motor và các thiết bị ngoại vi khác Các chân này thường được gánnhãn với các chức năng như đầu vào, đầu ra và các chức năng giao tiếp khác.
- Nút nhấn và LED: Một số phiên bản Arduino có nút nhấn và LED tích hợp sẵn đểlàm việc cho chương trình, gỡ lỗi và hiển thị trạng thái
- Bo mạch và linh kiện khác: Arduino còn có các linh kiện và bo mạch khác như các
bộ tụ, điện trở và các thành phần bảo vệ để bảo vệ điều khiển và cải thiện hoạt động
Kiến trúc phần cứng của Arduino có thể thay đổi tùy thuộc vào phiên bản cụ thể của
bo mạch Nhưng các thành phần cơ bản này giúp Arduino trở thành một nền tảng phát triểnphần cứng linh hoạt và dễ sử dụng cho các dự án điện tử