Đề tài “Sử dụng kit Raspberry chế tạo xe tự vận hành” tập trung nghiên cứu Board Raspberry Pi B+ với các thiết bị ngoại vi, tìm hiểu về cảm biến siêu âm SRF05, Motor Servo, LCD Nokia 511
Trang 1KHOA ĐIỆN - ĐIỆN TỬ
ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THÔNG
SỬ DỤNG KIT RASPBERRY CHẾ TẠO XE TỰ VẬN HÀNH
GVHD: ThS NGUYỄN DUY THẢO SVTH: DI TRỌNG KHOA
MSSV: 12141109 SVTH: ĐỖ VĂN PHÚ MSSV: 12141169
S K L 0 0 4 5 4 2
Trang 2KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP -
Trang 3KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP
Trang 4Chuyên ngành: Kỹ thuật Điện - Điện tử Mã ngành: 01
Hệ đào tạo: Đại học chính quy Mã hệ: 1
Khóa 2012 Lớp:12141
I TÊN ĐỀ TÀI: Sử dụng kit Raspberry chế tạo xe tự vận hành
II NHIỆM VỤ
1 Các số liệu ban đầu:
2 Nội dung thực hiện:
NỘI DUNG 1: Nghiên cứu kit Raspberry, Sensor SRF05
NỘI DUNG 2: Kết nối hệ thống
NỘI DUNG 3: Lập trình
NỘI DUNG 4: Thi công và cân chỉnh mạch
NỘI DUNG 5: Chạy thử nghiệm hệ thống
NỘI DUNG 6: Đánh giá kết quả thực hiện
III NGÀY GIAO NHIỆM VỤ: 10/03/2016
IV NGÀY HOÀN THÀNH NHIỆM VỤ: 07/07/2016
V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS Nguyễn Duy Thảo
CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP
Trang 5TP HỒ CHÍ MINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC
KHOA ĐIỆN-ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP
PHIẾU ĐÁNH GIÁ KHÓA LUẬN TỐT NGHIỆP
(Dùng cho giáo viên hướng dẫn)
I Thông tin chung
Họ và tên sinh viên: Di Trọng Khoa MSSV: 12141109
Họ và tên sinh viên: Đỗ Văn Phú MSSV:12141169
Tên đề tài: Sử dụng kit Raspberry chế tạo xe tự vận hành
Họ và tên giáo viên hướng dẫn: Th.S Nguyễn Duy Thảo
II Nhận xét về khóa luận
2.1 Đánh giá chung (hoàn thành bao nhiêu phần trăm mục tiêu của đề tài):
2.2 Ưu điểm của đề tài:
2.3 Khuyết điểm của đề tài:
2.4 Thái độ làm việc của sinh viên:
2.5 Kết quả chính thu được:
2.6 Đề nghị: Được bảo vệ Không được bảo vệ
Tp HCM, ngày … tháng… năm 2016
Giáo viên hướng dẫn
(Ký và ghi rõ họ tên)
Trang 6TRƯỜNG ĐẠI HỌC SPKT TPHCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Khoa Điện - Điện Tử Độc lập - Tự do - Hạnh phúc
Bộ Môn Điện Tử Công Nghiệp
Tp Hồ Chí Minh, ngày 31 tháng 03 năm 2016
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
(Bản lịch trình này được đóng vào đồ án)
Họ tên sinh viên 1: Di Trọng Khoa
Lớp:12141DT2B MSSV:12141109
Họ tên sinh viên 2: Đỗ Văn Phú
Lớp:12141DT2B MSSV:12141169
Tên đề tài: Sử dụng kit Raspberry chế tạo xe tự vận hành
Tuần 1 Tìm đề tài
Tuần 2 Nghiên cứu tìm tài liệu
Tuần 3 Nghiên cứu Raspberry, thư viện, phần mềm
Tuần 4 Nghiên cứu Sensor SRF05
Tuần 5 Kết nối hệ thống
Tuần 6 Lập trình
Tuần 7 Thi công và cân chỉnh mạch
Tuần 8 Chạy thử nghiệm hệ thống
Tuần 9 Hoàn chỉnh mô hình phần cứng
Tuần 10 Viết báo cáo
Tuần 11 Hoàn chỉnh báo cáo
Tuần 12 In ấn
GV HƯỚNG DẪN
(Ký và ghi rõ họ và tên)
Trang 7LỜI CAM ĐOAN
Đề tài này là do nhóm tôi tự thực hiện dựa vào một số tài liệu trước đó và không sao chép hoàn toàn từ tài liệu hay công trình đã có trước đó
Nhóm người thực hiện đề tài
Di Trong Khoa Đỗ Văn Phú
Trang 8Chúng tôi xin chân thành cảm ơn quý thầy cô trong bộ môn Điện Tử Công Nghiệp đã trang bị cho em kiến thức và giúp đỡ em giải quyết những khó khăn trong quá trình làm đồ án
Đặc biệt chúng tôi xin chân thành cảm ơn thầy hướng dẫn Th.S Nguyễn Duy Thảo đã tận tình giúp đỡ trong quá trình lựa chọn đê tài và hỗ trợ chúng tôi trong quá trình thực hiện
Cuối cùng chúng tôi xin cảm ơn gia đình và bạn bè đã khích lệ, giúp đỡ và ủng
hộ chúng tôi trong suốt quá trình thực hiện
Nhóm người thực hiện đề tài
Di Trọng Khoa Đỗ Văn Phú
Trang 9Trang bìa i
Nhiệm vụ đồ án …ii
Phiếu giao nhiệm vụ đồ án iii
Phiếu đánh giá của GVHD iv
Lịch trình v
Cam đoan vi
Lời cảm ơn vii
Mục lục viii
Liệt kê bảng x
Liệt kê hình vẽ xi
Tóm tắt xiii
Chương 1 TỔNG QUAN 1
1.1 ĐẶT VẤN ĐỀ 1
1.2 MỤC TIÊU 1
1.3 NỘI DUNG NGHIÊN CỨU 2
1.4 GIỚI HẠN 2
1.5 BỐ CỤC 2
Chương 2 CƠ SỞ LÝ THUYẾT 3
2.1 RASPBERRY PI 3
2.1.1 Giới thiệu về Board Raspberry Pi 3
2.1.2 Cấu hình của Raspberry Pi 4
2.1.3 Kết nối của Raspberry Pi B+ 5
2.1.4 Giới thiệu hệ điều hành cho Kit Raspberry 7
2.2 NGÔN NGỮ LẬP TRÌNH PYTHON 8
2.2.1 Khái niệm Python 8
2.2.2 Đặc điểm của ngôn ngữ lập trình Python 8
Chương 3 TÍNH TOÁN VÀ THIẾT KẾ 12
3.1 YÊU CẦU BÀI TOÁN 12
3.1.1 Thiết kế phần cứng 12
3.1.2 Yêu cầu phần mềm 12
3.1.3 Yêu cầu vật cản, địa hình 12
3.2 PHƯƠNG ÁN THIẾT KẾ PHẦN CỨNG HỆ THỐNG 13
Trang 103.2.2 Chức năng các khối 13
3.2.3 Sơ đồ kết nối của toàn mạch 14
Chương 4 THI CÔNG HỆ THỐNG 35
4.1 THI CÔNG MÔ HÌNH XE 35
4.2 LẬP TRÌNH HỆ THỐNG 38
4.2.1 Thi công lưu đồ giải thuật 38
4.2.2 Chương trình chính xử lý của hệ thống 42
Chương 5 KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 47
5.1 KẾT QUẢ 47
5.2 NHẬN XÉT VÀ ĐÁNH GIÁ 49
Chương 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 50
6.1 KẾT LUẬN 50
6.2 HƯỚNG PHÁT TRIỂN 50
TÀI LIỆU THAM KHẢO 51
PHỤ LỤC 52
Trang 11Bảng Trang
Bảng 3.1: Bảng mô tả các chân module……… 22
Bảng 3.2: Bảng tín hiệu module ……… 22
Bảng 3.3: Chức năng các chân LCD ……… 26
Bảng 3.4: Bảng giá trị bit LCD ……… 28
Bảng 3.5: Ý nghĩa các bit D, E ……… 29
Bảng 5.1: Bảng thông số kỹ thuật của xe tự vận hành………48
Trang 12Hình Trang
Hình 2.1: Board Raspberry Pi B+ 3
Hình 2.2: Những thông số sơ lược về Raspberry Pi B v2 5
Hình 2.3: Sơ đồ chân GPIO của Raspberry Pi Model B+ 6
Hình 2.4: Raspberry Pi và các thiết bị kết nối 7
Hình 3.1: Sơ đồ khối hệ thống xe tự vận hành 13
Hình 3.2: Cảm biến siêu âm SRF05 14
Hình 3.3: Giản đồ định thời SRF05 15
Hình 3.4: Kết nối chung của cảm biến siêu âm 16
Hình 3.5: Sơ đồ kết nối cảm biến siêu âm với Raspberry 18
Hình 3.6: Động cơ servo mini TowerPro SG90 18
Hình 3.7: Các xung và các hướng xoay tương ứng của motor servo 20
Hình 3.8: Sơ đồ kết nối servo với kit Raspberry 21
Hình 3.9: Module L9110 22
Hình 3.10: Sơ đồ kết nối module L9110 với kit Raspberry 23
Hình 3.11: Động cơ DC 24
Hình 3.12: Thông số động cơ DC 24
Hình 3.13: LCD nokia 5110 25
Hình 3.14: Thanh ghi lưu trữ Command 27
Hình 3.15: Thanh ghi lưu trữ data 27
Hình 3.16: Dạng sóng điều khiển của LCD 27
Hình 3.17: Lệnh Set địa chỉ dòng 28
Hình 3.18: Lệnh Set địa chỉ cột 28
Hình 3.19: Lệnh cài đặt hiển thị 29
Hình 3.20: Sơ đồ kết nối LCD Nokia 5110 với kit Raspberry 30
Hình 3.21: Module cảm biến vật cản hồng ngoại HN2 30
Hình 3.22: Sơ đồ kết nối 2 module cảm biến hồng ngoại vật cản với kit Raspberry 32
Hình 3.23: Sơ đồ kết nối các module với kit Raspberry của toàn hệ thống 33
Hình 4.1: Cách bố trí tổng thể mô hình xe nhìn từ trên xuống 35
Hình 4.2: Cách bố trí tổng thể mô hình xe nhìn từ phía dưới xe 36
Hình 4.3: Cách bố trí tổng thể mô hình xe nhìn từ phía trước 36
Trang 13Hình 4.5: Lưu đồ chương trình chính 38
Hình 4.6: Lưu đồ giải thuật chương trình con xe tự hành 39
Hình 4.7 Lưu đồ chương trình đo khoảng cách 40
Hình 4.8: Lưu đồ giải thuật chương trình con xe theo dõi 41
Hình 4.9: Lưu đồ giải thuật chương trình con xác lập trạng thái xe 42
Trang 14Trong vấn đề tránh vật cản, bài toán được quan tâm nhiều nhất là tìm đường về đích
mà không chạm vật cản trên đường đi Môi trường làm việc của xe hoàn toàn không được biết trước hoặc chỉ biết được một phần, xe hoàn toàn phải nhờ vào sự cảm nhận môi trường thông qua cảm biến gắn trên nó để dò đường và tìm ra hướng đi thích hợp nhất để đi
Đề tài “Sử dụng kit Raspberry chế tạo xe tự vận hành” tập trung nghiên cứu Board Raspberry Pi B+ với các thiết bị ngoại vi, tìm hiểu về cảm biến siêu âm SRF05, Motor Servo, LCD Nokia 5110, PWM, lập trình thông qua ngôn ngữ Python
Xe tự tránh vật cản là một chiếc xe thông minh Xe sẽ tự dừng lại khi phát hiện vật cản với khoảng cách nhỏ hơn 20 cm và tự động né tránh vật cản, đưa ra hướng đi thích hợp (thông thoáng không có vật cản) mà không cần một tác động vật lý hay tác động khác nào
Trang 15Chương 1: TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Trong vấn đề tránh vật cản, bài toán được quan tâm nhiều nhất là tìm đường về đích mà không chạm vật cản trên đường đi Môi trường làm việc của xe hoàn toàn không được biết trước hoặc chỉ biết được một phần, xe hoàn toàn phải nhờ vào sự cảm nhận môi trường thông qua cảm biến gắn trên nó để dò đường và tìm ra hướng đi thích hợp nhất để đi Tuy vậy nó có hạn chế là đòi hỏi nhiều lệnh tính toán và bộ nhớ, và đặc biệt tình huống xấu có thể xảy ra nếu bản đồ môi trường làm việc không thích hợp đối với cảm biến gây ra nhiễu cảm biến Trong khi đó, xe tự dò đường chỉ biết được thông tin xung quanh qua sensor cảm nhận môi trường gắn cùng
Vì thế, xe tự dò đường có thể không hoàn thành việc tới đích (mặc dù thực tế có đường đi tới đích), khái niệm tối ưu không có ý nghĩa trong bài toán này Tuy nhiên, yêu cầu tính toán, dung lượng nhớ thấp cùng tính linh hoạt cao (như tránh được vật cản ngay cả khi vật đó di động) khiến vấn đề tự động né tránh và tìm kiếm hướng đi thích hợp là cấp thiết hơn bao giờ hết
Xu hướng tự động hóa nên nhóm thực hiện đề tài “SỬ DỤNG KIT RASPBERRY CHẾ TẠO XE TỰ VẬN HÀNH”
1.2 MỤC TIÊU
- Nắm được về cấu trúc, đặc tính kỹ thuật, giao tiếp của Raspberry Pi
- Sử dụng kit Raspberrry vào tự động hoá
- Tìm hiểu đặc tính của các linh kiện sử dụng
- Nắm được tổng quát ngôn ngữ lập trình Python
- Chế tạo xe tự tránh vật cản cơ bản hoạt động tự động, dừng khi có vật cản và quét tìm kiếm được hướng ít có vật cản nhất để đi đến hướng đó
Trang 161.3 NỘI DUNG NGHIÊN CỨU
- NỘI DUNG 1: Nghiên cứu kit Raspberry, Sensor SRF05
- NỘI DUNG 2: Kết nối hệ thống
- NỘI DUNG 3: Lập trình
- NỘI DUNG 4: Thi công và cân chỉnh mạch
- NỘI DUNG 5: Chạy thử nghiệm hệ thống
- NỘI DUNG 6: Đánh giá kết quả thực hiện
- NỘI DUNG 7: Viết báo cáo và bảo vệ đề tài
1.4 GIỚI HẠN
Xe chỉ là một mô hình đơn giản, nhỏ, mang tính chất thí nghiệm, chưa có nhiều tính năng phức tạp Vật cản là những vật không có tính chất hấp thụ hay phản xạ sóng siêu âm
Xe tự dò đường chỉ biết được thông tin xung quanh qua sensor
1.5 BỐ CỤC
Chương 1: TỔNG QUAN
Chương này trình bày đặt vấn đề dẫn nhập lý do chọn đề tài, mục tiêu, nôi dung nghiên cứu, các giới hạn thông số và bố cục đồ án
Chương 2: CƠ SỞ LÝ THUYẾT
Nội dung chương này trình bày giới thiệu nội dung chính của các linh kiện, module, phần mềm được sử dụng trong đề tài
Chương 3: THIẾT KẾ VÀ TÍNH TOÁN
Chương này trình bày thiết kế phần cứng, yêu cầu phần mềm, thiết kế sơ đồ khối
và sơ đồ nguyên lý của đề tài
Chương 4: THI CÔNG HỆ THỐNG
Chương này trình bày việc lập trình hệ nội dung của đề tài bao gồm lưu đồ giải thuật, chương trình, phần mềm và ngôn ngữ lập trình của đề tài
Chương 5: KẾT QUẢ, NHẬN XÉT VÀ ĐÁNH GIÁ
Chương này trình bày kết quả thi công đề tài và đưa ra nhận xét và đánh giá
Chương 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Nội dung trình bày kết luận và hướng phát triển của đề tài
Trang 17Chương 2: CƠ SỞ LÝ THUYẾT
Vấn đề đặt ra của đề tài là xe tự hành sử dụng kit Raspberry, ngôn ngữ lập trình thông dụng dễ dàng sử dụng và hỗ trợ đầy đủ trên kit là ngôn ngữ Python
2.1 RASPBERRY PI
2.1.1 Giới thiệu về board Raspberry Pi
Raspberry Pi là một chiếc máy tính tí hon chạy hệ điều hành Linux ra mắt vào tháng 2 năm 2012 Ban đầu Raspberry Pi được phát triển dựa trên ý tưởng tiến sĩ Eben Upton tại đại học Cambridge muốn tạo ra một chiếc máy tính giá rẻ để học sinh có thể
dễ dàng tiếp cận và khám phá thế giới tin học
Raspberry Pi (RPi) là một máy tính siêu nhỏ, chỉ có kích thước như 1 chiếc thẻ ATM rút tiền Người dùng chỉ cần 1 bàn phím, 1 màn hình có cổng HDMI/DVI, 1 nguồn USB 5V và 1 dây micro USB là đã có thể sử dụng RPi như 1 máy tính bình thường Rpi có thể chạy các ứng dụng văn phòng, nghe nhạc, xem phim độ nét cao
Hình 2.1.Board Raspberry Pi B+
Trang 182.1.2 Cấu hình của Raspberry Pi [1]
Trái tim của Pi là vi xử lý Broadcom BCM2835 chạy ở tốc độ 700mHz Đây là vi
xử lý SoC (system-on-chip) tức là hầu hết mọi thành phần của hệ thống gồm CPU, GPU cũng như audio, communication chip đều được tích hợp trong một Chip SoC này nằm ngay bên dưới chip memory Hynix 512 MB màu đen ở giữa board
Tùy theo model mà Raspberry sử dụng chip khác nhau:
Raspberry Pi model A: Broadcom BCM2835 với 256MB RAM
Raspberry Pi model B v1: Broadcom BCM2835 với 256MB RAM
Raspberry Pi model B v2: Broadcom BCM2835 với 512MB RAM
RAM được tích hợp sẵn trong đế chip nên bạn không thể nâng cấp RAM cho Pi CPU BMC2835 sử dụng nhân ARM1176JZFS (ARM11) cho hiệu năng cao và giá thành thấp SoC này khác với CPU ở trong PC thông thường ở chỗ nó được chế tạo dựa trên kiến trúc tập lệnh (Instruction Set Architect – ISA) là ARM chứ không phải kiến trúc x86 như của Intel ARM có ISA dạng rút gọn RISC và tiêu thụ điện năng rất thấp nên phù hợp với thiết bị di động
Cắm RPi vào cổng USB của máy tính có thể cấp nguồn cho pi hoạt động ở mức bình thường, không sử dụng các kết nối internet như LAN và wifi
Rpi có nhiều ứng dụng từ đơn giản đến phức tạp có thể kể đến như: dùng RPI làm trung tâm giải trí đa phương tiện, internet tv, ổ đĩa sao lưu dự phòng trên mạng nội bộ, kết hợp với webcam làm hệ thống phát hiện chuyển động, nhận diện khuôn mặt, điều khiển robot, nhận và gửi tin nhắn gsm với usb 3g, điều khiển tắt/mở đèn trong nhà, và còn rất nhiều ứng dụng khác
Trang 19Hình 2.1 Những thông số sơ lược về Raspberry Pi B v2 2.1.3 Kết nối của Raspberry Pi B+
Khe cắm thẻ nhớ: sử dụng loại thẻ SD Card, đây là nơi lưu trữ hệ điều hành và tất
cả các dữ liệu hoạt động của Raspberry Pi Dung lượng của thẻ nhớ phải từ 2GB trở lên để đảm bảo cho hệ thống hoạt động tốt
Micro USB Power: RPi có thể sử dụng đến 700mA tại mức áp 5V khi bạn sử dụng nhiều thiết bị USB và cổng LAN Do đó để RPi hoạt động ổn định, chúng tôi khuyến cáo bạn sử dụng bộ nguồn USB 5V 1A Ngoài việc cấp nguồn cho Pi thông qua cổng micro USB, bạn có thể cấp nguồn trực tiếp vào cổng GPIO (5V và Gnd) Nếu bạn không am hiểu về điện tử thì cách này không được khuyến cáo Điện áp quá mức 5V cấp trực tiếp vào GPIO có thể gây hư hỏng các thiết bị cắm vào cổng USB, chip quản
lý USB và LAN Tốt nhất nên sử dụng 1 nguồn switching chuyển về 5V hoặc sử dụng
IC LM7805
TFT Touch Screen: nơi đây sẽ giúp cho bạn có thể kết nối Raspberry Pi với màn hình cảm ứng để hiển thị và sử dụng Raspberry một cách trực quan nhất Chúng ta có thể thực hiện các tác vụ tương đương như khi sử dụng chuột và bàn phím
Camera expansion: khe cắm này là để cắm modem camera vào Raspberry Pi Khi sản xuất Raspberry Pi thì nhà sản xuất còn sản xuất thêm một modem camera 5MP nhưng người mua không được hỗ trợ mà phải mua thêm Chúng ta có thể chụp hình, quay phim, làm việc tất cả các tác vụ như trên một camera bình thường
Trang 20Cổng HDMI: cổng này dùng để kết nối với các thiết bị có hổ trợ chuẩn kết nối HDMI, nếu thiết bị của chúng ta không hổ trợ HDMI mà chỉ hổ trợ VGA thì chúng ta phải sử dụng một dây cáp chuyển đổi từ HDMI sang VGA Thường thì cổng này dùng
để kết nối ra màn hình, tivi, máy chiếu, để hiển thị giao diện của hệ điều hành Cổng kết nối Ethenet: dùng để kết nối internet, mạng Lan, truy cập SSH
4 cổng USB: dùng để kết nối với chuột, bàn phím, usb, usb 3g, usb wifi và các thiết
bị có hổ trợ cổng USB
STEREO AUDIO: dùng để kết nối với tai nghe, loa, và các thiết bị ân thanh có cổng Jack 3.5mm
TV: dùng để kết nối và phát tín hiệu hình ảnh lên Tivi
GPIO: Raspberry Pi cung cấp nhiều cổng GPIO, giao tiếp SPI, I2C, Serial.Các cổng GPIO được sử dụng để xuất/nhận giá trị 0/1 ra/vào từ bên ngoài Giao tiếp SPI, I2C, Serial có thể được dùng để kết nối trực tiếp với các vi điều khiển khác Đặc biệt phù hợp cho những ai cần điều khiển các thiết bị điện tử ngoại vi
Hình 2.3 Sơ đồ chân GPIO của Raspberry Pi Model B+
Trang 212.1.4 Giới thiệu hệ điều hành cho kit Raspberry
Sau phần giới thiệu Raspberry Pi và cấu tạo kế đến là phần thực hành với Pi Khác với vi điều khiển có thể chạy ngay sau khi load chương trình điều khiển, Pi cần có hệ điều hành để hoạt động
Các hệ điều hành hiện tại mà Raspberry Pi hổ trợ:
- NOOBS (New Out Of Box Software): đây là hệ điều hành cơ bản nhất của R-Pi, không hổ trợ giao diện mà chỉ dùng giao diện dòng lệnh
- Raspbian: được tạo nên từ hệ điều hành Debian của linux chuyên dùng cho các dòng máy tính, có giao diện như 1 máy tính, hổ trợ cả về mạng, và giao tiếp vào ra
- Pidora: tạo nên từ phiên bản hệ điều hành Fedora của linux, cũng hổ trợ tốt về giao diện, mạng và giao tiếp vào ra
- RaspBMC: tạo ra để chuyên dùng giải trí, sử dụng giao diện XBMC media center, giao diện thường thấy trong các TIVI internet hiện nay
- OpenELEC: một phiên bản dùng giao diện XBMC Mediacenter khác, hổ trợ nhanh
và thân thiện cho người sử dụng
- RISC OS: phiên bản hệ điều hành rút gọn với tính năng hoạt động nhanh nhất trong các hệ điều hành
- Arch: phiên bản hệ điều hành phát triển riêng cho các dòng kít dùng chip ARM
Hình 2.2 Raspberry Pi và các thiết bị kết nối
với nó
Trang 22NGÔN NGỮ LẬP TRÌNH PYTHON
2.2.1 Khái niệm Python [4]
Python là một ngôn ngữ lập trình thông dịch do guido van Rossum tạo ra năm 1990.python hoàn toàn tạo kiểu động và dung cơ chế cấp phát bộ nhớ tự động; do vậy
nó tự tự như perl, ruby, scheme, smalltalk, và tcl Python được phát triển trong một dự
án mở, do tổ chức phi lợi nhuận python software foundation quản lý
Theo đánh giá của Eric S Raymond Python là ngôn ngữ có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu, như nhận định của chính Guido van Rossumtrong một bài phỏng vấn ông
Ban đầu, Python được phát triển để chạy trên nền unix Nhưng rồi theo thời gian,
nó đã “bành trướng” sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, WindowsLinux và các hệ điều hành khác thuộc họ Unix Mặc dù sự phát triển của Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum hiện nay vẫn là tác giả chủ yếu của Python Ông giữ vai trò chủ chốt trong việc quyết định hướng phát triển của Python
2.2.2 Đặc điểm của ngôn ngữ lập trình Python
Python được thiết kế để trở thành một ngôn ngữ dễ học, mã nguồn dễ đọc, bố cục trực quan, dễ hiểu, thể hiện qua các điểm sau:
Từ khóa: Python tăng cường sử dụng từ khóa tiếng Anh, hạn chế các kí hiệu và cấu
trúc cú pháp so với các ngôn ngữ khác Python là một ngôn ngữ phân biệt kiểu chữ HOA, chữ thường Như C/C++, các từ khóa của Python đều ở dạng chữ thường
Khối lệnh: Trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp kí hiệu hoặc từ khóa Ví dụ, trong C/C++, cặp ngoặc nhọn {} được dùng để bao bọc một khối lệnh Python, trái lại, có một cách rất đặc biệt để tạo khối lệnh, đó là thụt các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa
nó và có thể sử dụng dấu tab hoặc khoảng trống để thụt các câu lệnh vào
Trang 23Khả năng mở rộng: Python có thể được mở rộng: nếu biết sử dụng C, người dùng có
thể dễ dàng viết và tích hợp vào Python nhiều hàm tùy theo nhu cầu Các hàm này sẽ trở thành hàm xây dựng sẵn (built-in) của Python Ta cũng có thể mở rộng chức năng của trình thông dịch, hoặc liên kết các chương trình Python với các thư viện chỉ ở dạng nhị phân (như các thư viện đồ họa do nhà sản xuất thiết bị cung cấp) Hơn thế nữa, ta cũng có thể liên kết trình thông dịch của Python với các ứng dụng viết từ C và sử dụng
nó như là một mở rộng hoặc một ngôn ngữ dòng lệnh phụ trợ cho ứng dụng đó
Trình thông dịch: Python là một ngôn ngữ lập trình dạng thông dịch, do đó có ưu điểm tiết kiệm thời gian phát triển ứng dụng vì không cần phải thực hiện biên dịch và liên kết Trình thông dịch có thể được sử dụng để chạy file script, hoặc cũng có thể được sử dụng theo cách tương tác Ở chế độ tương tác, trình thông dịch Python tương tự shell của các hệ điều hành họ Unix, tại đó, ta có thể nhập vào từng biểu thức rồi gõ Enter , và kết quả thực thi sẽ được hiển thị ngay lập tức Đặc điểm này rất hữu ích cho người mới học, giúp họ nghiên cứu tính năng của ngôn ngữ; hoặc để các lập trình viên chạy thử mã lệnh trong suốt quá trình phát triển phần mềm Ngoài ra, cũng
có thể tận dụng đặc điểm này để thực hiện các phép tính như với máy tính bỏ túi Lệnh và cấu trúc điều khiển: Mỗi câu lệnh trong Python nằm trên một dòng mã nguồn và người dùng không cần phải kết thúc câu lệnh bằng bất kì kí tự gì Cũng như các ngôn ngữ khác, Python cũng có các cấu trúc điều khiển Chúng bao gồm:
Cấu trúc rẽ nhánh: cấu trúc if (có thể sử dụng thêm elif hoặc else), dùng để thực thi
có điều kiện một khối mã cụ thể
Lệnh while: chạy một khối mã cụ thể cho đến khi điều kiện lặp có giá trị false Vòng lặp for: lặp qua từng phần tử của một dãy, mỗi phần tử sẽ được đưa vào biến cục
bộ để sử dụng với khối mã trong vòng lặp
Lớp, đối tượng: Python cũng có từ khóa class dùng để khai báo lớp (sử dụng trong lập trình hướng đối tượng) và lệnh def dùng để định nghĩa hàm
Trang 24Hệ thống kiểu dữ liệu: Python sử dụng hệ thống kiểu duck typing, còn gọi là latent typing (tự động xác định kiểu) Có nghĩa là, Python không kiểm tra các ràng buộc về kiểu dữ liệu tại thời điểm dịch, mà là tại thời điểm thực thi Khi thực thi, nếu một thao tác trên một đối tượng bị thất bại, thì có nghĩa là đối tượng đó không sử dụng một kiểu thích hợp Python cũng là một ngôn ngữ định kiểu mạnh Nó cấm mọi thao tác không hợp lệ, ví dụ cộng một con số vào chuỗi kí tự Sử dụng Python, ta không cần phải khai báo biến Biến được xem là đã khai báo nếu nó được gán một giá trị lần đầu tiên Căn
cứ vào mỗi lần gán, Python sẽ tự động xác định kiểu dữ liệu của biến Python có một
số kiểu dữ liệu thông dụng sau:
Int, long: số nguyên (trong phiên bản 3.x long được nhập vào trong kiểu int) Độ
dài của kiểu số nguyên là tùy ý, chỉ bị giới hạn bởi bộ nhớ máy tính
Float: số thực
complex: số phức, chẳng hạn 5+4j
list: dãy trong đó các phần tử của nó có thể được thay đổi, chẳng hạn
[8, 2, 'b', -1.5] Kiểu dãy khác với kiểu mảng (array) thường gặp trong các ngôn ngữ lập trình ở chỗ các phần tử của dãy không nhất thiết có kiểu giống nhau Ngoài ra phần
tử của dãy còn có thể là một dãy khác
tuple: dãy trong đó các phần tử của nó không thể thay đổi
str: chuỗi kí tự Từng kí tự trong chuỗi không thể thay đổi Chuỗi kí tự được đặt trong dấu nháy đơn, hoặc nháy kép
dict: từ điển, còn gọi là "hashtable": là một cặp các dữ liệu được gắn theo kiểu {từ khóa: giá trị}, trong đó các từ khóa trong một từ điển nhất thiết phải khác nhau Chẳng hạn {1: "Python", 2: "Pascal"}
set: một tập không xếp theo thứ tự, ở đó, mỗi phần tử chỉ xuất hiện một lần
Ngoài ra, Python còn có nhiều kiểu dữ liệu khác
Module: Python cho phép chia chương trình thành các module để có thể sử dụng lại trong các chương trình khác Nó cũng cung cấp sẵn một tập hợp các modules chuẩn
mà lập trình viên có thể sử dụng lại trong chương trình của họ Các module này cung cấp nhiều chức năng hữu ích, như các hàm truy xuất tập tin, các lời gọi hệ thống, trợ giúp lập trình mạng (socket), …
Đa năng:
Trang 25 Python là một ngôn ngữ lập trình đơn giản nhưng rất hiệu quả
So với Unix shell, Python hỗ trợ các chương trình lớn hơn và cung cấp nhiều cấu trúc hơn
So với C, Python cung cấp nhiều cơ chế kiểm tra lỗi hơn Nó cũng có sẵn nhiều kiểu dữ liệu cấp cao, ví dụ như các mảng (array) linh hoạt và từ điển (dictionary) mà ta sẽ phải mất nhiều thời gian nếu viết bằng C
Python là một ngôn ngữ lập trình cấp cao có thể đáp ứng phần lớn yêu cầu của lập trình viên
Python thích hợp với các chương trình lớn hơn cả AWK và Perl
Python được sử dụng để lập trình Web Nó có thể được sử dụng như một ngôn ngữ kịch bản
Python được thiết kế để có thể nhúng và phục vụ như một ngôn ngữ kịch bản để tuỳ biến và mở rộng các ứng dụng lớn hơn
Python có khả năng giao tiếp đến hầu hết các loại cơ sở dữ liệu, có khả năng xử lí văn bản, tài liệu hiệu quả, và có thể làm việc tốt với các công nghệ Web khác
Python đặc biệt hiệu quả trong lập trình tính toán khoa học nhờ các công cụ như Python Imaging Library, pyVTK, MayaVi 3D Visualization Toolkits, Numeric Python, ScientificPython…
Python có thể được sử dụng để phát triển các ứng dụng Desktop Lập trình viên có thể dùng wxPython, PyQt, PyGtk để phát triển các ứng dụng giao diện đồ họa (GUI) chất lượng cao
Python cũng có sẵn một unit testing framework để tạo ra các các bộ test (test suites)
Trang 26Chương 3 TÍNH TOÁN VÀ THIẾT KẾ
3.1 YÊU CẦU BÀI TOÁN
Bên cạnh đó xe có thể phát hiện vật cản khoảng cách khoảng 7cm thông qua cảm biến hồng ngoại, chuyển hướng di chuyển theo vật cản
Tốc độ động cơ của bánh xe khi chạy thẳng và quẹo có thể điều chỉnh theo ý muốn của người dung thông qua các nút nhấn, hiển thị thông tin trên LCD
3.1.2 Yêu cầu phần mềm
Chương trình điều khiển, kiểm tra, xử lý để đưa xe tránh những vật cản trên đường
đi cũng như đi lùi lại khi gặp đường cụt và xe tự động di chuyển theo vật và kết nối với kit thông qua sóng wifi
3.1.3 Yêu cầu vật cản, địa hình
Vật cản là những vật không có khả năng hấp thụ hay phản xạ sóng siêu âm Bề mặt đường đi của xe tưng đối bằng phẳng, ít dốc, không gian xung quanh phải không có những vật có thể thu phát sóng siêu âm Vật cản phải cao từ 15cm trở lên thì xe mới phát hiện
Trang 273.2 PHƯƠNG ÁN THIẾT KẾ PHẦN CỨNG HỆ THỐNG
Để đáp ứng được yêu cầu phần cứng của hệ thống nhóm có phác thảo sơ đồ khối
3.2.1 Sơ đồ khối
Khối Điều Khiển Trung Tâm
Khối Cảm Biến
Khối Nút Nhấn
Khối Công Suất
Khối Hiển Thị
Hình 3.1 Sơ đồ khối hệ thống xe tự vận hành 3.2.2 Chức năng các khối
Khối nguồn: dùng nguồn pin dự phòng 5V/2A để cung cấp cho KIT Raspberry Pi, động cơ servo, và cảm biến siêu âm chạy ổn định Dùng thêm 1 nguồn pin 6 viên pin 1.5V/AA cung cấp cho khối công suất điều khiển động cơ bánh xe Theo tính toán thì cảm biến siêu âm cần 50mA, 2 động cơ DC cần 600mA, motor servo cần 200-400mA.Với việc gắn thêm nguồn Pin hỗ trợ thì ta có 2 bộ nguồn kết hợp đủ để cung cấp cho nhu cầu của toàn mach: 1A cho KIT và 1A cho các khối còn lại
Khối công suất: điều khiển xe chạy theo tín hiệu từ khối điều khiển trung tâm
Khối cảm biến: Nhận biết có vật cản hay không thực hiện đo khoảng cách trước mặt xe, giá trị đo được sẽ được trả về khối điều khiển trung tâm liên tục
Khối nút nhấn: Điều chỉnh chế độ và tốc độ của xe
Khối hiển thị: Hiển thị thông số và các giá trị điều chỉnh
Trang 28Khối điều khiển trung tâm: Là KIT Raspberry Pi, chịu trách nhiệm điều khiển các khối công suất, khối cảm biến, khối hiển thị xử lý thông số được đưa vào thông qua nút nhấn như chế đô, tốc độ của xe Giá trị khoảng cách từ cảm biến siêu âm đưa về được KIT xử lý và lựa chọn Nếu lớn hơn khoảng cách quy định thì dừng động cơ bánh xe lại KIT điều khiển motor servo quay theo hướng trước mặt xe, số lần quay là
3 lần: Ban đầu cảm biến ở vị trí trung tâm theo hướng thẳng của xe sau đó quay qua trái 90 độ, tiếp tục quay qua phải 180 độ cuối cùng trở về vị trí ban đầu (hướng nhìn đối điện với mặt trước của cảm biến) Với mỗi lần quay như vậy thì cảm biến siêu âm gắn trên motor servo sẽ đo khoảng cách và trả giá trị về KIT Sau khi xử lý và so sánh các khoảng cách trả về sau 3 lần đo, KIT sẽ điều khiển xe quay về hướng trống nhất Cảm biến tiếp túc đo và cho phép xe chạy nếu trước mặt không có vật cản
3.2.3 Thiết kế sơ đồ kết nối của toàn hệ thống
Yêu cầu 1: Xe tự vận hành có thể di chuyển được là nhờ vào sự cảm nhận thông tin
xung quanh qua cảm biến sẽ gửi dữ liệu về Kit điều khiển trung tâm sau đó sẽ giúp xe
di chuyển Trên thị trường hiện nay có rất nhiều loại cảm biến như cảm biến quang, cảm biến tiệm cận, cảm biến siêu âm …trong đó cảm biến siêu âm SRF05 giá tương đối rẻ và dễ giao tiếp nên nhóm chọn sử dụng cảm biến siêu âm SRF05, SRF05 như đôi mắt của xe robot, giúp thu hồi tín hiệu xem trên đường đi có vật cản hay không để
có xe xử lý phù hợp, chuẩn giao tiếp SPI
Hình 3.2 Cảm biến siêu âm SRF05
SRF05 cho phép sử dụng một chân duy nhất cho cả kích hoạt và phản hồi, do đó tiết kiệm giá trị trên chân điều khiển Khi chân chế độ không kết nối thì SRF05 hoạt động riêng biệt chân kích hoạt và chân hồi tiếp như SRF04 SRF05 bao gồm một thời gian trễ trước khi phản hồi để mang lại điều khiển chậm hơn chẳng hạn như bộ điều khiển thời gian cơ bản Stamps và Picaxe để thực hiện các xung lệnh
Trang 29Cảm biến siêu âm SFR05 có giá tương đối rẻ và dễ giao tiếp nên nhóm chọn sử dụng cảm biến siêu âm SRF05, SRF05 như đôi mắt của xe robot, giúp thu hồi tín hiệu xem trên đường đi có vật cản hay không để có xe xử lý phù hợp
Nguyên lý hoạt động của cảm biến siêu âm khá đơn giản Đầu tiên 1 chùm sóng siêu âm được phát ra, khi đụng vật thể sẽ bị dội ngược lại Sau đó người ta sẽ đo khoảng thời gian từ lúc bắt đầu nhận được tín hiệu phản hồi về cho tới khi kết thúc việc nhận tín hiệu này
Các chế độ của SRF05
Chế độ 1: Tương ứng SRF04 – tách biệt kích hoạt và phản hồi
Chế độ này sử dụng riêng biệt chân kích hoạt và chân phản hồi và là chế độ đơn giản nhất để sử dụng Tất cả các chương trình điển hình cho SRF04 sẽ làm việc cho SRF05 ở chế độ này Để sử dụng chế độ này, chỉ cần chân chế độ không kết nối – SRF05 có một nội dung trên chân này
Hình 3.3 Giản đồ định thời SRF05
Chế độ 2: Dùng một chân cho cả kích hoạt và phản hồi:
Chế độ này sử dụng một chân duy nhất cho cả tín hiệu kích hoạt và phản hồi, và được thiết kế để lưu các giả trị trên chân lên bộ điều khiển nhúng Để sử dụng chế độ này chân chế độ kết nối vào chân mass Tín hiệu hồi tiếp sẽ xuất hiện trên cùng một chân với tín hiệu kích hoạt SRF05 sẽ không tăng dòng phản hồi cho đến 700uS sau khi kết thúc các tín hiệu kích hoạt
Trang 30Hình 3.4 Kết nối chung của cảm biến siêu âm
Để sử dụng chế độ 2 với các Stamps BS2 cơ bản chỉ cần sử dụng PULSOUT và PULSIN trên cùng 1 chân như sau:
- SRF05 PIN 15 sử dụng pin cho cả 2 và kích hoạt echo
- Range VAR Word xác định phạm vi biến 16 bit
- SRF05 = 0 bắt đầu bằng pin thấp
- PULSOUT SRF05, 5 đưa ra kích hoạt pulse 10uS
- PULSIN SRF05,11Range echo đo thời gian
- Range = Range/29 để chuyển đổi sang cm (chia 74 cho inch)
Tính toán khoảng cách: Giản đồ định thời SRF05 thể hiện ở 2 chế độ trên, chỉ cần cung cấp một đoạn xung ngắn 10uS kích hoạt đầu vào để bắt đầu đo khoảng cách Các SRF05 sẽ cho ra một chu kỳ 8 burst của siêu âm ở 40Khz và tăng cao dòng phản hồi của nó (hoặc kích hoạt chế độ dòng 2) Sau đó chờ phản hồi và ngay sau khi phát hiện
nó giảm các dòng phản hồi lại Dòng phản hồi là một xung có chiều rộng tỷ lệ với khoảng cách đến đối tượng Bằng cách đo xung ta hoàn toàn có thể tính toán khoảng cách theo inch/centimet
Giải thuật xử lý và thu nhận khoảng cách trả về
Đầu tiên tiến hành định nghĩa chân TRIG và ECHO với chân TRIG định nghĩa là ngõ ra (OUTPUT) phát xung và chân ECHO là ngõ vào (INPUT) nhận lại xung siêu
âm phản xạ lại khi gặp vật cản, như vậy khoảng cách trả về để Raspbery xử lý chính là khoảng thời gian từ lúc phát đi tới lúc nhận về sóng siêu âm, tiến hành tính toán sẽ có được khoảng cách từ xe đến vật cản
Công thức tính:
Trang 31d = (𝑡𝑒𝑛𝑑−𝑡𝑠𝑡𝑎𝑟𝑡) 𝑥 34300
2 (cm) (3.1)
tend: thời gian cuối cùng khi chân echo ở mức cao
tstart: thời gian bắt đầu khi chân echo ở mức cao
d: khoảng cách từ cảm biến đến vật (cm)
Vận tốc sóng siêu âm trong môi trường không khí ở 20°C là 34300 cm/s
Kết nối cảm biến siêu âm SRF-05 với kit Raspberry:
- Chân GPIO 20 kết nối với chân xung tín hiệu vào (Trigger Pulse Input)
- Chân GPIO 21 kết nối với chân xung tín hiệu ra (Echo Pulse Output)
- Chân VCC nối với 5V (PIN 2)
- Chân GND nối vào GROUND (PIN 6)
Hình 3.5 Sơ đồ kết nối giữa cảm biến siêu âm với kit Raspberry
Yêu cầu 2: Cảm biến có thể xác định được khoảng cách 3 hướng trái, phải, thẳng ta
cần sử dụng 1 loại động cơ quay sero và nhóm chúng em lựa chọn động cơ servo mini TowerPro SG90 để thực hiện đề tài này
Trang 32Hình 3.6 Động cơ servo mini TowerPro SG90
Trang 33Các TowerPro SG90 nhỏ servo có trọng lượng nhẹ, chất lượng cao và nhanh như chớp Servo được thiết kế để làm việc với hầu hết các hệ thống điều khiển vô tuyến Đó là với hiệu suất tuyệt vời sẽ đưa bạn đến một chân trời của các chuyến bay Các SG90 nhỏ servo với các phụ kiện hoàn hảo cho máy bay trực thăng R/C, máy bay, xe hơi, thuyền và xe tải sử dụng
Thông số kỹ thuật của động cơ servo SG90 9G:
Loại bánh răng, vỏ: nhựa
Tương thích với JR & Futaba
Điện áp hoạt động: 4.2-6V
Góc quay: 180°
Chiều dài dây cáp Servo: 250mm
Phạm vi ứng dụng: Máy bay trực, robot nhỏ, cánh tay robot và thuyền
Chức năng của dây:
Dây Nâu: Ground
Trang 340 độ 90 độ 180 độ Xung cạnh lên: 0.5ms 1.5ms 2.5ms
Hình 3.7 Các xung và các hướng xoay tương ứng của motor servo
Chu kỳ xung: 20ms
Khi động cơ quay với độ rộng xung tương ứng thì Động cơ servo mini TowerPro SG90 quay đế vị trí tương ứng với độ rộng của xung cạnh lên thì sẽ không quay nữa cho dù ta vẫn còn cấp xung cho nó
Kết nối động cơ Servo với kit Raspberry Pi:
Chọn chân GPIO 25 kết nối với chân màu cam của motor servo, chân này hoạt động như một chân kích xung Tùy vào độ rộng xung đưa vào chân này mà ta điều khiển được hướng xoay của servo
- Chân Đỏ nối vào 5V (PIN 2)
- Chân Nâu nối vào GROUND (PIN 6)
- Chân Cam nối vào GPIO 25(PIN 22)
Trang 35Hình 3.8 Sơ đồ kết nối servo với kit Raspberry Yêu cầu 3: Để điều khiển được trục bánh xe quay ta sử dụng 1 loại động cơ Yêu cầu
là động cơ này có thể điều khiển được trục bánh xe quay trên thị trường có rất nhiều loại như động cơ bước, động cơ điện một chiều DC Yêu cầu của đề tài chúng em là
mô hình nhỏ công suất không lớn vì thế nhóm chúng em lựa chọn động cơ một chiều
DC
Động cơ hoạt động cần sử dụng một mạch chuyển đổi từ nguồn cung cấp cho động cơ để điều khiển bánh xe có thể quay Trong đề tài này nhóm chúng em sử dụng module L9110 điều khiển được 2 động cơ