BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
ĐỒ ÁN TỐT NGHIỆP
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN
THÔNG
ĐỀ TÀI:
THIẾT KẾ VÀ THI CÔNG THIẾT BỊ
NHẬN DẠNG CHUYỂN ĐỘNG CỦA
ĐẦU CÓ TÍCH HỢP CẢM BIẾN GIA
TỐC CHO VIỆC ĐIỀU KHIỂN XE
LĂN
GVHD: ThS. TRẦN ĐĂNG KHOA
SVTH1: HUỲNH NGỌC PHIÊN (15141235)
SVTH2: PHẠM NGỌC QUỐC (15141260)
TP. Hồ Chí Minh, ngày 20 tháng 12 năm 2019
B
103 trang |
Chia sẻ: huong20 | Ngày: 13/01/2022 | Lượt xem: 450 | Lượt tải: 1
Tóm tắt tài liệu Đồ án Thiết kế và thi công thiết bị nhận dạng chuyển động của đầu có tích hợp cảm biến gia tốc cho việc điều khiển xe lăn, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
BỘ GIÁO DỤC & ĐÀO TẠO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP. HỒ CHÍ MINH
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
ĐỒ ÁN TỐT NGHIỆP
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN
THÔNG
ĐỀ TÀI:
THIẾT KẾ VÀ THI CÔNG THIẾT BỊ
NHẬN DẠNG CHUYỂN ĐỘNG CỦA
ĐẦU TÍCH HỢP CẢM BIẾN GIA TỐC
CHO VIỆC ĐIỀU KHIỂN XE LĂN
GVHD: ThS. TRẦN ĐĂNG KHOA
SVTH1: HUỲNH NGỌC PHIÊN (15141235)
SVTH2: PHẠM NGỌC QUỐC (15141260)
TP. Hồ Chí Minh, ngày 20 tháng 12 năm 2019
TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT
KHOA ĐIỆN-ĐIỆN TỬ NAM
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC
----o0o----
TP. HCM, ngày 20 tháng 12 năm 2019
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên: Huỳnh Ngọc Phiên MSSV: 15141235
Phạm Ngọc Quốc MSSV: 15141260
Chuyên ngành: KT thuật Điện tử truyền thông Mã ngành: 141
Hệ đào tạo: Đại học chính quy Mã hệ: 1
Khóa: 2015 Lớp: 159410A
I. TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG THIẾT BỊ NHẬN DẠNG
CHUYỂN ĐỘNG CỦA ĐẦU TÍCH HỢP CẢM BIẾN GIA TỐC CHO VIỆC
ĐIỀU KHIỂN XE LĂN
II. NHIỆM VỤ:
1. Các số liệu ban đầu:
- Kích thước mô hình: Bộ điều khiển động cơ DC (chiều dài 16cm, chiều rộng 8cm,
chiều cao 6cm), thiết bị nhận diện cử động đầu (tai nghe chụp tai SONY).
- Thiết bị nhận diện cử động đầu bằng cảm biến gia tốc và con quay thiết kế trên tai
nghe chụp tai SONY.
- Bộ điều khiển động cơ DC 24VDC bằng cầu H nhận lệnh điều khiển từ thiết bị nhận
diện cử động đầu bằng bluetooth.
- Sử dụng 2 cảm biến hồng ngoại để phát hiện vật cản.
- Arduino Nano được sử dùng làm bộ xử lý trung tâm cho cả bộ điều khiển động cơ
và thiết bị nhận dạng chuyển động của đầu.
2. Nội dung thực hiện:
- Tìm hiểu nguyên lí hoạt động của cảm biến gia tốc, các cảm biến khác như khoảng
cách, các chuẩn truyền như I2C, UART.
ii
- Phân tích các tín hiệu từ cảm biến gia tốc để biết được các dữ liệu khi người dùng
muốn đi sang trái, phải, tới, lui. Phân tích tín hiệu từ các cảm biến khác để nhận biết
các trường hợp nguy hiểm cho người dùng trên xe lăn.
- Từ các dữ liệu đã phân tích được từ cảm biến gia tốc tiến hành kết hợp với vi điều
khiển trung tâm để lập trình điều khiển các hướng di chuyển của xe lăn.
- Từ các dữ liệu thu được từ các cảm biến khác như lực, khoảng cách, v.v để thiết kế
hệ thống cảnh báo và bảo đảm an toàn cho người sử dụng.
- Kết hợp tất cả các phần là xe lăn, cảm biến, vi điều khiển và lập trình cho hệ thống.
- Kết hợp điều khiển xe lăn bằng đầu và điều khiển xe lăn bằng ứng dụng di động
thông qua wifi.
- Tiến hành chạy thử nghiệm, chỉnh sửa và hoàn thiện thêm tính năng cho xe lăn.
- Tiến hành nhận xét, đánh giá chung toàn hệ thống
- Tiến hành viết báo cáo đề án
- Báo cáo đề tài tốt nghiệp
III. NGÀY GIAO NHIỆM VỤ: 02/09/2019
IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 25/12/2019
V. HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: ThS. Trần Đăng Khoa
CÁN BỘ HƯỚNG DẪN BM. ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
iii
TRƯỜNG ĐH SPKT TP. HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT
KHOA ĐIỆN-ĐIỆN TỬ NAM
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH ĐỘC LẬP - TỰ DO - HẠNH PHÚC
----o0o----
TP. HCM, ngày 20 tháng 12 năm 2019
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP
Họ tên sinh viên 1: Huỳnh Ngọc Phiên
Lớp: 159410A MSSV: 15141235
Họ tên sinh viên 2: Phạm Ngọc Quốc
Lớp: 159410A MSSV: 15141260
Tên đề tài: THIẾT KẾ VÀ THI CÔNG THIẾT BỊ NHẬN DẠNG CHUYỂN
ĐỘNG CỦA ĐẦU TÍCH HỢP CẢM BIẾN GIA TỐC CHO VIỆC
ĐIỀU KHIỂN XE LĂN
Xác nhận
Tuần/ngày Nội dung
GVHD
1 - Liên hệ với GVHD nhận đề tài tốt nghiệp
(02/09/2019 –
08/09/2019)
2 - Nộp đề cương chi tiết đề tài tốt nghiệp
(09/09/2019 –
15/09/2019)
3 - Tìm hiểu về cảm biến gia tốc (accelerometer)
(16/09/2019 – - Tìm hiểu về cảm biến con quay (gyroscope)
22/09/2019) - Tìm hiểu cách kết hợp gia tốc và con quay để tính
góc quay
4 - Tìm hiểu về Arduino Nano
(23/09/2019 – - Tìm hiểu về kết nối không dây qua Bluetooth
29/09/2019)
5 - Tiến hành mua đầy đủ linh kiện
(30/09/2019 – - Xây dựng mô hình để thực hiện nghiên cứu
06/10/2019)
6 - Tiến hành lấy dữ liệu từ cảm biến gia tốc và con
(07/10/2019 – quay dựa trên các cử động của đầu (quay trái, quay
13/10/2019) phải, gật trước, gật sau)
- Tiến hành phân chia trường hợp từ dữ liệu thu được
- Tiến hành lập trình cho Arduino Nano dựa trên các
trường hợp của dữ liệu thu được
7 - Tiến hành thiết kế phần cứng cho thiết bị nhận diện
(14/10/2019 – dạng chuyển động của dầu trên tai nghe chuụp tai
20/10/2019) - Tiến hành thí nghiệm thực tế bằng đầu, kết quả hiển
thị trên serial port của Arduino và 4 LED đơn trượng
trưng cho 4 hướng trái, phải, tiến, lùi.
8 - Thiết kế bộ điều khiển động cơ DC
iv
(21/10/2019 – - Kết nối thiết bị nhận dạng chuyển động của đầu và
27/10/2019) bộ điều khiển động cơ DC bằng module bluetooth
HC-05
9 - Lắp ráp, kết hợp xe lăn điện với bộ điều khiển động
(28/10/2019 – cơ DC và thiết bị nhận dạng chuyển động của đầu
03/11/2019) - Tiến hành chạy thử nghiệm trên mô hình thực tế
10 - Chạy thực tế trên xe để nhận biết được sự khác biệt
(04/11/2019 – lúc lấy dữ liệu không có chạy thực tế và lúc chạy thực
10/11/2019) tế
- Tiến hành sửa lỗi code dựa trên 4 động tác (gật tới,
gật lùi, quay trái, quay phải)
- Nghiên cứu thiết kế thêm cảm biển phát hiện vật cản
11 - Chạy thực tế và tiếp tụ hoàn thiện phần lập trình cho
(11/11/2019 – nhận biết dạng chuyển động của đầu (gật tới, gật lùi,
17/11/2019) quay trái, quay phải)
- Chạy thử nghiệm cảm biến phát hiện vật cản
- Sửa lỗi phần cứng và phần lập trình
12 - Tiến hành thiết kế điều khiển xe lăn bằng ứng dụng
(18/11/2019 – di động thông qua wifi
24/11/2019) - Kết hợp điều khiển bằng ứng dụng di động và cử
động của đầu trên cùng 1 thiết bị
- Tiến hành chạy thử nghiệm xe lăn điện điều khiển
bằng ứng dụng di động và sửa lỗi
- Viết luận văn
13 - Chạy thử nghiệm toàn bộ xe lăn điện
(15/11/2019 – - Viết luận văn
01/12/2019)
14 - Hoàn chỉnh, cân chỉnh toàn bộ xe lăn điện (phần
(02/12/2019 – ứng và phần mềm)
08/12/2019) - Viết hoàn chỉnh luận văn
15 - Hoàn chỉnh luận văn
(09/12/2019 – - Nộp luận văn
15/12/2019) - Phản biện
16 - Báo cáo trước hội đồng
(16/12/2019 –
22/12/2019)
GVHD
(Ký và ghi rõ họ tên)
v
LỜI CAM ĐOAN
Đề tài này là do tôi tự thực hiện dựa vào một số tài liệu và không sao chép từ tài liệu
hay công trình đã có trước đó và hiện tại.
Người thực hiện đề tài
Sinh viên 1 Sinh viên 2
Huỳnh Ngọc Phiên Phạm Ngọc Quốc
vi
LỜI CẢM ƠN
Em xin gửi lời cảm ơn sâu sắc đến thầy Trần Đăng Khoa – Giảng viên bộ môn
Điện tử công nghiệp – y sinh, cùng các thầy cô khác trong bộ môn đã tạo điều kiện về
kiến thức cũng như cơ sở vật chất trong quá trình chúng em thực hiện đề tài.
Em cũng gửi lời cảm ơn đến các bạn cùng thực hiện đề tài khác tại phòng lab y
sinh đã chia sẻ trao đổi những kinh nghiệm kiến thức để nhóm có thể hoàn thiện đề tài.
Cảm ơn gia đình đã luôn bên cạnh nhóm trong quá trình thực hiện đề tài.
Xin chân thành cảm ơn!
Người thực hiện đề tài
Sinh viên 1 Sinh viên 2
Huỳnh Ngọc Phiên Phạm Ngọc Quốc
vii
MỤC LỤC
TRANG BÌAi
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ............................................................................... ii
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP ..................................................... iv
LỜI CAM ĐOAN ........................................................................................................... vi
LỜI CẢM ƠN ................................................................................................................ vii
MỤC LỤC ................................................................................................................... viii
LIỆT KÊ HÌNH ............................................................................................................... x
LIỆT KÊ BẢNG .......................................................................................................... xiii
TÓM TẮT ..................................................................................................................... xiv
Chương 1. TỔNG QUAN................................................................................................ 1
1.1. ĐẶT VẤN ĐỀ: .................................................................................................. 1
1.2. MỤC TIÊU: ....................................................................................................... 2
1.3. NỘI DUNG NGHIÊN CỨU: ............................................................................. 2
1.4. GIỚI HẠN: ........................................................................................................ 3
1.5. BỐ CỤC: ............................................................................................................ 3
Chương 2. CƠ SỞ LÍ THUYẾT ...................................................................................... 4
2.1. Chuyển động của đầu trong không gian: ........................................................... 4
2.1.1. Phương hướng trong không gian:................................................................ 4
2.1.2. Chuyển động của đầu trong không gian 3 chiều: ........................................ 5
2.2. Gới thiệu phần cứng: .......................................................................................... 6
2.2.1. Cảm biến gia tốc: ........................................................................................ 6
2.2.2. Arduino Nano: ........................................................................................... 10
2.2.3. Module thu phát Wifi ESP8266 Node MCU: ........................................... 13
2.2.4. Mạch thu phát Bluetooth HC-05: .............................................................. 15
2.2.5. Mạch Điều Khiển Động Cơ DC BTS7960 43A (1 Động Cơ): ................. 17
2.2.6. Động cơ Servo SG90: ............................................................................... 19
2.2.7. Cảm biến hồng ngoại Analog SHARP - GP2Y0A02YK0F ..................... 20
2.2.8. Pin Sạc Lipo 2000mAh 3.7V (LP803860): ............................................... 21
2.2.9. TP4056 Mạch Sạc Pin MiniUSB 1A: ....................................................... 23
2.2.10. Mạch Giảm Áp DC LM2596 3A: ............................................................. 25
2.2.11. Chuẩn giáo tiếp I2C: ................................................................................. 26
viii
Chương 3. TÍNH TOÁN VÀ THIẾT KẾ ...................................................................... 28
3.1. GIỚI THIỆU: ................................................................................................... 28
3.2. TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG: .................................................... 28
3.2.1. Thiết kế sơ đồ khối hệ thống: .................................................................... 28
3.2.2. Tính toán và thiết kế mạch: ....................................................................... 30
3.2.3. Thiết kế sơ đồ nguyên lí toàn hệ thống: .................................................... 39
Chương 4. THI CÔNG HỆ THỐNG ............................................................................. 41
4.1. GIỚI THIỆU: ................................................................................................... 41
4.2. THI CÔNG HỆ THỐNG: ................................................................................ 41
4.2.1. Thiết kế phần cứng cho hệ thống: ................................................................. 41
4.2.2. Lắp ráp và kiểm tra: ...................................................................................... 43
4.4. LẬP TRÌNH HỆ THỐNG: .............................................................................. 49
4.4.1. Lưu đồ giải thuật: ............................................................................................. 49
4.4.2. Phần mềm lập trình cho vi điều khiển: ......................................................... 53
4.4.2. Phần mềm điện thoại: ................................................................................... 57
4.5. LẬP TRÌNH MÔ PHỎNG: ............................................................................. 60
4.5.1. Lưu đồ lập trình mô phỏng: .......................................................................... 60
4.6. VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG: ................................................. 61
4.6.1. Viết tài liệu hướng dẫn sử dụng: .................................................................. 61
4.6.1. Quy trình thao tác: ........................................................................................ 61
Chương 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ ........................................................ 63
5.1. KẾT QUẢ: ....................................................................................................... 63
5.2. NHẬN XÉT_ĐÁNH GIÁ: .............................................................................. 71
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN .................................................. 73
6.1. KẾT LUẬN: ..................................................................................................... 73
6.1.1. Đạt được: ................................................................................................... 73
6.1.2. Chưa đạt được: .......................................................................................... 73
6.1. HƯỚNG PHÁT TRIỂN: .................................................................................. 73
TÀI LIỆU THAM KHẢO .................................................................................................
PHỤ LỤC ..........................................................................................................................
ix
LIỆT KÊ HÌNH
Trang
Hình 2.1. Góc quay của vector trên không gian 2 chiều ................................................. 4
Hình 2.2. Góc Euler – miêu tả phương hướng trong không gian. .................................. 4
Hình 2.3. Biểu diễn roll, pitch và yaw trong không gian ................................................ 5
Hình 2.4. Biểu diễn chuyển động của đầu bằng Roll, Pitch và Yaw. ............................. 5
Hình 2.5. Robot tự cân bằng ứng dụng cảm biến gia tốc ............................................... 5
Hình 2.6. Mô hình cảm biến gia tốc cơ bản .................................................................... 7
Hình 2.7. Con quay hồi chuyển ...................................................................................... 7
Hình 2.8. Hình ảnh thực tế của MPU6050 ..................................................................... 8
Hình 2.9. Sơ đồ nguyên lý của cảm biến GY 521 sử dụng chip MPU6050 ................... 9
Hình 2.10. Hình ảnh thực tế của Arduino Nano V3.0 .................................................. 11
Hình 2.11. Mạch nguyên lí của module Arduino Nano V3.0 ....................................... 13
Hình 2.12. Input/Output Pins của Arduino Nano ......................................................... 13
Hình 2.13. Hình ảnh thực tế của NodeMCU ESP8266 ................................................ 15
Hình 2.14. Sơ đồ nguyên lí PINOUT NodeMCU ESP8266 ......................................... 16
Hình 2.15. PINOUT của NodeMCU ............................................................................ 17
Hình 2.16. Hình ảnh thực tế của HC-05 ....................................................................... 18
Hình 2.17. Pinout của HC-05 ........................................................................................ 19
Hình 2.18. Hình ảnh thực tế của mạch điều khiển động cơ DC BTS7960 ................... 20
Hình 2.19. Sơ đồ chân của BTS7960 ............................................................................ 21
Hình 2.20. Hình ảnh động cơ ServoSG90 .................................................................... 22
Hình 2.21. Cảm biến hồng ngoại Sharp ........................................................................ 23
Hình 2.22. Sơ đồ chân của cảm bến khoảng cách SHARP .......................................... 24
Hình 2.23. Hình ảnh thực tế của Pin sạc Lipo 2000mAh LP803860 ........................... 25
Hình 2.24. Hình ảnh thực tế của mạch sạc TP4056 ...................................................... 26
Hình 2.25. Sơ đồ nguyên lí của TP4066 ....................................................................... 28
Hình 2.26. Hình ảnh thực tế của mạch giảm áp LM2596 ............................................. 30
Hình 2.27. Sơ đồ nguyên lý của LM2596 ..................................................................... 30
Hình 2.28. Mô hình hoạt động của I2C ........................................................................ 31
Hình 3.1. Sơ đồ khối toàn bộ hệ thống ......................................................................... 33
Hình 3.2. Sơ đồ kết nối MPU6050 với Arduino Nano ................................................. 35
x
Hình 3.3. Sơ đồ kết nối module HC-05 với Arduino Nano để phát Bluetooth. ........... 37
Hình 3.4. Sơ đồ kết nối cài đặt HC-05 .......................................................................... 37
Hình 3.5. Sơ đồ kết nối module sạc Pin và Pin LIPO ................................................... 38
Hình 3.6. Sơ đồ nguyên lí nhận dạng chuyển động của đầu......................................... 39
Hình 3.7. Sơ đồ nguyên lí của khối nhận dữ liệu Bluetooth ......................................... 40
Hình 3.8. Sơ đồ nguyên lí kết nối 2 cảm biến khoảng cách với Arduino Nano ........... 41
Hình 3.9. Mô hình kết hợp cảm biến khoảng cách và động cơ Servo để quét ............. 41
Hình 3.10. Sơ đồ nguyên lí kết nối 2 động cơ servo với Arduino Nano ...................... 42
Hình 3.11. Sơ đồ nguyên lí khối điều khiển động cơ DC ............................................. 42
Hình 3.12. Sơ đồ nguyên lí bộ điều khiển động cơ của xe lăn ..................................... 43
Hình 3.13. Sơ đồ nguyên lí toàn mạch.......................................................................... 46
Hình 4.1. Sơ đồ vị trí linh kiện trên tai nghe chụp tai .................................................. 46
Hình 4.2. Sắp xếp linh kiện trong bộ điều khiển động cơ DC xe lăn ........................... 49
Hình 4.4. Hình ảnh Arduino Nano trên bộ điều khiển .................................................. 50
Hình 4.5. Hình ảnh BTS7960 trên bộ điều khiển động cơ ........................................... 50
Hình 4.6. Hình ảnh HC-05 trên bộ điều khiển .............................................................. 51
Hình 4.7. Khối bảm biến và điều hướng cảm biến ....................................................... 52
Hình 4.8. Hình ảnh bên hông của bộ điều khiển có input là USB. ............................... 52
Hình 4.9. Hình ảnh bên hông trái của bộ điều khiển có công tắc cấp nguồn cho các
linh kiện trong bộ điều khiển tránh sự cố xảy ra .......................................................... 53
Hình 4.10. Hình ảnh Pin LIPO và mạch such TP4056 của nó một bên tai nghe. ....... 53
Hình 4.11. Hình ảnh của board Arduino Nano bên một phần của tai nghe. ................. 54
Hình 4.12. Hình ảnh của module HC05 một bên của tai nghe ..................................... 54
Hình 4.13. Hình ảnh NodeMCU bên trong tai nghe ..................................................... 55
Hình 4.13. Hình ảnh cảm biến MPU6050 được gắn trên tai nghe. .............................. 55
Hình 4.14. Hình ảnh tai nghe sau khi đã hang thiện ..................................................... 56
Hình 4.15. Lưu đồ thuật toán chung cho toàn bộ hệ thống .......................................... 57
Hình 4.16. Chương trình con điều khiển xe bằng đầu .................................................. 58
Hình 4.17. Lưu đồ chương trình con điều khiển bằng ứng dụng. ................................. 59
Hình 4.18. Logo phần mềm ARDUINO IDE ............................................................... 60
Hình 4.19. Cách tải phần mềm ..................................................................................... 61
Hình 4.20. Giao diện Arduino IDE ............................................................................... 61
xi
Hình 4.21. Ứng dụng BLYNK ...................................................................................... 63
Hình 4.22. Các bước tạo 1 project trong BLYNK ........................................................ 63
Hình 4.23. Cách thêm nút nhấn điều khiển. ................................................................. 64
Hình 4.24. Cách lấy Token ........................................................................................... 64
Hình 4.25. Giao diện ứng dụng trên di động ................................................................ 65
Hình 4.26. Lưu đồ thuật toán mô phỏng cảm biến ....................................................... 66
Hình 4.27. Mô phỏng chuyển động của cảm biến bằng Roll – Pitch -Yaw ................. 66
Hình 4.28. Lưu đồ các sử dụng xe lăn điều khiển. ....................................................... 70
Hình 5.1. Hình ảnh tai nghe nhận dạng chuyển động của đầu ..................................... 70
Hình 5.2. Module điều khiển động cơ DC của xe lăn .................................................. 70
Hình 5.3. Hình ảnh mặt sau của xe lăn ......................................................................... 71
Hình 5.4. Hình ảnh mặt trước của xe lăn ...................................................................... 71
Hình 5.5. Tín hiệu Roll và Pitch cảu ACCEL trước khi qua bộ lọc Complementary. . 72
Hình 5.6. Tín hiệu Roll và Pitch cảu GYRO trước khi qua bộ lọc Complementary. ... 73
Hình 5.7. Roll và Pitch sau khi qua bộ lọc Complementary. ........................................ 73
Hình 5.8. Dữ liệu cảm biến khi gật đầu về trước .......................................................... 74
Hình 5.9. Dữ liệu cảm biến khi ngửa đàu ra sau ........................................................... 74
Hình 5.10. Dữ liệu cảm biến khi quay đầu sang trái ..................................................... 75
Hình 5.11. Dữ liệu cảm biến khi quay đầu sang phải ................................................... 75
Hình 5.12. Khi ngủ gật sẽ có thông báo trên điện thoại di động và qua email ............. 76
Hình 5.13. Khi phát hiện vật cản xe tự động dừng lại .................................................. 76
xii
LIỆT KÊ BẢNG
Trang
Bảng 2.1. Các lệnh thông dụng HC-05 ......................................................................... 19
Bảng 2.2. Thông số RPROG và IBAT của TP4056 ..................................................... 28
Bảng 3.1. Thống kê dòng tải của thiết bị nhận dạng ..................................................... 40
Bảng 3.2. Thống kê dòng tải của bộ điều khiển động cơ xe lăn ................................... 44
Bảng 4.1. Danh sách các linh kiện ................................................................................ 47
Bảng 4.2. Thanh ghi reset và khởi tạo cảm biến ........................................................... 61
Bảng 4.3. Thanh ghi lưu giá trị của ACCEL ................................................................ 62
Bảng 4.4. Giá trị giới hạn của cảm biến ACCEL ......................................................... 62
Bảng 4.5. Giá trị giới hạn của cảm biến GYRO ........................................................... 62
Bảng 5.1. Thống kê kết quả điều khiển......................................................................... 72
xiii
TÓM TẮT
Chúng ta đang sống trong thời đại mà các thiết bị, dụng cụ đã và đang được nghiên
cứu, phát triển cho phép chúng hoạt động một cách tự động và thông minh hơn. Sự ra
đời của xe lăn là bước ngoặc lớn đối với người khuyết tật, từ xe lăn chạy bằng sức người
cho đến những chiếc xe lăn điện hiện đại hỗ trợ cho người dùng. Xe lăn điện ngày càng
trở nên quan trọng như là một công nghệ hỗ trợ, thiết bị phục hồi sức khỏe và số lượng
người tăng lên đáng kể.
Hiện nay có nhiều loại xe lăn điện điều khiển như: xe lăn điện điều khiển bằng
joystick, xe lăn điện điều khiển bằng giọng nói, xe lăn điện điều khiển qua ứng dụng di
động. Trong đề tài này nhóm nghiên cứu, thiết kế và thi công bộ điều khiển xe lăn điện
điều khiển bằng các cử động của đầu để hướng đến những người khuyết tật, bệnh nhân
không có khả năng sử dụng tay để điều khiển.
Đề tài “Nghiên cứu, thiết kế và thi công bộ điều khiển xe lăn điện bằng các cử
động của đầu” đã hoàn thành được phần điều khiển xe lăn điện bằng các cử động của
đầu như quay trái, quay phải, gật về phía trước, gật về phía sau dựa trên cảm biến gia
tốc (accelerometer) kết hợp với cảm biến con quay hồi chuyển (gyroscope). Ngoài phần
điều khiển bằng đầu, xe lăn còn có thêm chức năng điều khiển được qua ứng dụng di
động mã nguồn mở Blynk, có thể tự động thông báo cho người thân khi có sự cố như
ngủ gật xảy ra, tự động dừng lại khi phát hiện vật cản phía trước và phía sau.
xiv
CHƯƠNG 1: TỔNG QUAN
Chương 1. TỔNG QUAN
1.1. ĐẶT VẤN ĐỀ:
Công nghệ ngày càng phát triển, nhất là trong thời kì của nên công nghiệp 4.0 thì
mọi thứ đều được thực hiện một cách tự động, thông minh, nhanh chóng và tiện lợi cho
người sử dụng. Theo số liệu thống kê năm 2019 thì có tới 7% dân số Việt Nam tương
đương với 6.2 triệu người khuyết tật, trong số đó số người khuyết tật vận động chiếm
đến 35% (Theo Zing.vn). Đi vào vấn đề liên quan đến sự di chuyển của các người khuyết
tật, các bệnh nhân đang trong quá trình hồi phục chức năng cũng được đáp ứng rất chu
đáo như sự xuất hiện của xe lăn điện, góp phần tiết kiệm được sức lực của người thân
và cũng như bản thân người ngồi xe lăn.
Hiện nay trên thị trường có phổ biến các loại xe lăn điều khiển bằng trục
(joystick), ứng dụng di động. Vấn đề đang tồn tại ở đây là những xe lăn điện hiện nay
hầu hết đều chưa hướng đến những người tàn tật không có khả năng sử dụng tay để điều
khiển.
Một số phương pháp điều khiển xe lăn điện hiện nay như: Bộ điều khiển thường
là một bên tay vịn của xe lăn có gắn thêm một số các nút điều khiển hướng cho phép
người dùng có thể dùng tay để tinh chỉnh và điều khiển ở nhiều chế độ khác nhau. Trong
một số trường hợp bộ điều khiển có thể được gắn ở phía sau để người phụ tá hỗ trợ thay
vì người ngồi xe lăn. Xe lăn hỗ trợ bộ điều khiển này có thể được thiết kế để có thể sử
dụng ở trong nhà mà ngoài trời [1]. Chúng ta có thể nhận thấy rằng trong cuộc sống
hàng ngày cử chỉ là một trong những hành vi giao tiếp mà con người có thể dễ dàng sử
dụng một cách dễ dàng, ví dụ như là cử chỉ của cánh tay, bàn tay, ngón tay đều được sử
dụng. Điều khiển xe lăn bằng các cử chỉ của tay ứng dụng những hành động này vào
trong việc điều khiển và áp dụng công nghệ xử lý ảnh để xử lý các cử chỉ của tay [2].
Vấn đề ở trên một là chưa hướng đến người khuyết tật cả tay chân và nếu có thì
cũng đang nằm quá trình nghiên cứu hoàn thiện. Nhằm giải quyết vấn đề đó nhóm thực
hiện đề tài “THIẾT KẾ VÀ THI CÔNG THIẾT BỊ NHẬN DẠNG CHUYỂN
ĐỘNG CỦA ĐẦU TÍCH HỢP CẢM BIẾN GIA TỐC CHO VIỆC ĐIỀU KHIỂN
XE LĂN”. Mục tiêu hướng tới những người tàn tật, bệnh nhân không có khả năng điều
khiển tay, xe lăn điện bây giờ có thể điều khiển được bằng những động tác của đầu người
sử dụng, ngoài ra còn tích hợp thêm các tính năng khác để thuận tiện cho người sử dụng
như điều khiển qua ứng dụng, cảnh báo nguye nghiểm
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 1
CHƯƠNG 1: TỔNG QUAN
1.2. MỤC TIÊU:
Thiết kế và thì công xe lăn điều khiển bằng cử động của đầu dựa trên cảm biến
gia tốc kết hợp với con quay hổi chuyển MPU6050, sử dụng vi điều khiển trung tâm là
module Arduino Nano kết hợp với module ESP8266 NodeMCU để điều khiển.
Nghiên cứu thiết kế phần nhận dạng tín hiệu của đầu (gật tới, gật sau, quay sang
trái, quay sang phải) bằng cảm biến kết hợp với Arduino Nano. Truyền dạng cử động
của đầu dến bộ điều khiển động cơ để tiến hành điều khiển bằng Bluetooth.
Thiết kế phần điều khiển xe lăn qua ứng dụng di động mã nguồn mở Blynk kết
hợp với cảnh báo nếu gặp tình huống nghi hiển như ngủ gật, tự động phát hiện vật cản
và dừng lại dựa trên cảm biến hông ngoại Sharp.
1.3. NỘI DUNG NGHIÊN CỨU:
• NỘI DUNG 1: Nghiên cứu, tìm hiểu về cảm biến gia tốc, con quay hồi chuyển
(MPU6050), Arduino Nano, cảm biến hồng ngoài SHARP, NodeMCU, BLYNK.
• NỘI DUNG 2: Thu thập dữ liệu chuyển động (gật tới, gật sau, quay trái, quay
phải) của đầu dựa trên cảm biến gia tốc (accelerometer) và con quay hồi chuyển
(gyroscope) được tích hợp trên MPU6050.
• NỘI DUNG 3: Thiết kế giải thuật, lập trình cho Arduino Nano dựa trên các dữ
liệu đã thu được từ cảm biến để điều hướng xe lăn.
• NỘI DUNG 4: Thiết kế bộ điều khiển động cơ DC để nhận tín hiệu từ thiết bị
nhận dạng chuyển động của đầu bằng Bluetooth để điều khiển xe lăn đã có sẵn 2
động cơ DC.
• NỘI DUNG 5: Tích hợp thêm cảm biến khoảng cách nhận diện vật cản, ứng dụng
cảnh báo nguy hiểm, kết hợp điều khiển xe lăn bằng ứng dụng di động Blynk.
• NỘI DUNG 6: Kết hợp tất cả các phần nhận dạng tín hiệu, điều khiển, hệ thống
an toàn vào trên cùng một xe lăn. Tiến hành chạy thử nghiệm và hiệu chỉnh.
• NỘI DUNG 7: Đánh giá kết quả thực hiện
• NỘI DUNG 8: Viết báo cáo
• NỘI DUNG 9: Bảo vệ đề tài
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 2
CHƯƠNG 1: TỔNG QUAN
1.4. GIỚI HẠN:
• Kích thước của thiết bị nhận dạng tín hiệu chuyển động c... khiển các thuật toán dừng lại khi phát hiện vật cản.
Khối điều hướng cảm biến: Sử dụng động cơ servo để điều hướng góc quay
cảm biến khoảng cách trong khoảng 40 – 140 độ để quét vật cản. Nhận tín hiệu từ
vi điều khiển để điều hướng. Dừng lại mỗi khi phát hiện vật cản và ngược lại di
chuyển qua lại khi không có vật cản xuất hiện.
Khối điều khiển motor DC: Sử dụng cầu H để nhận tín hiệu từ vi điều khiển
trung tâm để điều khiển động cơ theo 5 cách: tới, lui, rẽ trái, rẽ phải, dừng lại.
Khối vi truyền và nhận: Sử dụng ứng dụng Blynk để điều khiển xe lăn, tín
hiệu được gửi đến bộ xử lí phụ để xử lí trước. Nhận tín hiệu từ bộ vi xử lí phụ để
cảnh báo người dùng khi có sự cố xảy ra.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 29
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Khối vi xử lí phụ: Nhận tín hiệu từ khối truyền dữ và nhận dữ liệu để xử lí
trước khi đưa đến vi xử lí trung tâm để phát tín hiệu đi điều khiển động cơ. Nhận
dữ liệu từ vi xử lí trung tâm về các sự cố xảy ra và truyền đến khối truyền và nhận
dữ liệu để cảnh báo người dùng và người thân của người dùng.
3.2.2. Tính toán và thiết kế mạch:
a. Thiết kế khối cảm biến gia tốc MPU6050:
Khối cảm biến dùng cảm biến GY 521 sử dụng chip MPU6050 để kết nối với
bộ điều khiển trung tâm Arduino Nano V3.0
Sơ đồ kết nối khối cảm biến giá tốc MPU6050 GY 521 được kết nối với vi điều
khiển như sau:
Hình 3.2. Sơ đồ kết nối MPU6050 với Arduino Nano
Nguồn cung cấp cho cảm biển là VCC = 3.7 VDC (Cảm biến hoạt động trong
khoảng 3 – 5 VDC. Dòng hoạt động tối đa là:3.9mA nếu sử dụng hết 6DOF.
MPU6050 giao tiếp với Arduino Nano bằng I2C:
- Chân A4 (SDA) của Arduino nổi tương ứng với chân SDA của MPU6050
- Chân A5 (SCL) sẽ nối với chân SCL của cảm biến.
b. Thiết kế khối vi xử lý phụ (NodeMCU):
Sử dụng NODEMCU để nhận dữ liệu từ ứng dụng di động để truyền bit điều
khiển cho Arduino Nano (vi điều khiển trung tâm).
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 30
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Hình 3.2. Sơ đồ kết nối NODEMCU đến Arduino Nano
Khối vi xử lí phụ (NODEMCU) có nguồn cung cấp là: 5VDC – Imax là 170mA.
NODEMCU được kết nối với WiFi:
- SSID: ControlWheelchair
- PSWD: hnphien1234
Khối vi xử lí phụ sẽ nhận dữ liệu từ ứng dụng di động có một cần joystick ảo
để xử lí và gửi 5 tín hiệu về cho vi xử lí trung tâm để tiến hành kết hợp lập trình.
Các tín hiệu đó lần lượt là: cho phép rẽ trái, cho phép rẽ phải, cho phép tiến, cho
phép lùi, cho phép dừng lại và cho phép điều khiển bằng ứng dụng hay không. Các
chân digital của NodeMCU được nối lần lượt với Arduino Nano là:
- D0 – D7, D1 – D8, D2 – D9, D3 – D10, D4 – D11, D6 – D12
- Khi cho phép thì các chân output tương ứng của NodeMCU sẽ được đưa lên
mức cao. Vi xử lí trung tâm tiến hành đọc các chân input của mình và xử lí.
c. Thiết kế khối phát Bluetooth:
Sau khi đã xử lí được tín hiệu tiến hành thiết kế bộ phát Bluetooth để truyên dữ
liệu đến cho bộ điều khiển động cơ tiến hành vân hành xe lăn.
Sử dụng Module thu và nhận Bluetooth HC-05 để phát Bluetooth.
Hình 3.3. Sơ đồ kết nối module HC-05 với Arduino Nano để phát Bluetooth.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 31
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Trước khi tiến hành hoàn thành mạch điện như trên ta tiến hành cài đặt cho
module HC-05 thành mạch phát (Master) như sau:
Kết nối mạch điện như sau:
Hình 3.4. Sơ đồ kết nối cài đặt HC-05
Các bước cài đặt HC05 (Master):
- Nạp code trắng cho Arduino Nano
- Chuyển baund của serial port sang 38400 baund (mặc định)
- Chọn Both NL & CL
- Gõ AT
- Gõ AT tiếp để vào AT Command
- AT + Role = 1 để cài đặt HC05 làm master phát dữ liệu
- AT + CMODE = 0 chỉ kết nối với 1 thiết bị
- AT + PSWD = 12345678 là mật khẩu của người dùng đặt để tránh kết nối
không cần thiết
- AT + BIND = để tiến hành kết nối
Sau khi cài đặt xong ta tiến hành kết nối mạch như hình 3.3.
Nguồn cung cấp cho HC-05 là 3.7VDC tương thích với dải hoạt động 3.3 ~
5VDC của module HC-05.
Module Bluetooth giao tiếp với Arduino Nano qua TX, RX chuẩn UART
Tiến hành kết nối Tx của HC-05 với Rx của Arduino Nano và Rx của HC-05
với Tx của Arduino Nano.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 32
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Khi cấp điện sẽ tự động kết nối với HC-05 có địa chỉ và mật khẩu đã cài đặt ở
trước đó.
Dòng điện khi hoạt động: khi Pairing 30 mA, sau khi pairing hoạt động truyền
nhận bình thường 8 mA.
d. Thiết kế khối sạc cho Pin Lipo 2000mAh 3.7V - 1A:
Hình 3.5. Sơ đồ kết nối module sạc Pin và Pin LIPO
Nguồn cung cấp cho TP4056 là 5V – 1A.
Có thể cung cấp bằng cổng Mini-B USB hoăc nguồn ngoài tại Vin+ và Vin-.
Module có đèn báo hiệu: đèn xanh là pin đã đầy và đèn đỏ là đang sạc.
Module có chế độ tự ngắt khi đầy Pin và có mạch bảo vệ.
e. Thiết kế khối xử lí trung tâm của thiết bị nhận dạng cử động đầu:
Sau khi thiết kế từng phần của thiết bị nhận dạng chuyển động bao gồm: khối
sạc pin, khối phát Bluetooth, khối cảm biến, khối xử lí phụ ta tiến hành hoàn thiện
thiết kế của mạch nhận diện tín hiệu cử động của đầu.
Hình 3.6. Sơ đồ nguyên lí nhận dạng chuyển động của đầu.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 33
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Sơ đồ trên là sự kết hợp cảu các khổi kể trên.
- Nguồn VOUT-PIN là nguồn Pin dương ra cung cấp cho cả mạch.
- Rx Tx của HC05 nối tương ứng với Tx Rx của Arduino Nano
- SCL và SDA của MPU6050 nối tương ứng với A4 và A5 của Arduino Nano
- NodeMCU gưi 6 đường output digital đến cho Arduino Nano để xử lí. Còn
NodeMCU thì nhận được tín hiệu từ ứng dụng di động thông qua Wifi.
Tính toán thiết kế nguồn Pin cho mạch sẽ tiến hành sau.
f. Thiết kế khối nhận Bluetooth:
Phần này ta thiết kế giống như khối phát Bluetooth chỉ khác ở những điểm để
chuyển Module HC-05 thành Slave (nhận).
Ta cũng có sơ đồ nguyên lí như sau:
Hình 3.7. Sơ đồ nguyên lí của khối nhận dữ liệu Bluetooth
Các bước cài đặt HC05 (Slave):
- Nạp code trắng cho Arduino Nano
- Chuyển baund của serial port sang 38400 baund (mặc định)
- Chọn Both NL & CL
- Gõ AT
- Gõ AT tiếp để vào AT Command
- AT + Role = 0 để cài đặt HC05 làm slave phát dữ liệu
- AT + CMODE = 0 chỉ kết nối với 1 thiết bị
Nguồn sử dụng của HC-05 vẫn là 3.7V nằm trong ngưỡng 3~5 VDC phù hợp
với yêu cầu.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 34
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Dòng hoạt động sau khi pairing là 8mA.
g. Thiết kế khối cảm biến khoảng cách:
Sử dụng 2 cảm biến đo khoảng cách hồng ngoại SHARP để đo khoảng cách.
Cảm biến khoảng cách này sử dụng ngõ ra Analog có điện áp hoạt động là 4.5
VDC – 5.5 VDC.
Dòng hoạt động trung bình là: 33mA
Khoảng cách có thể đo được là từ 30 -150 cm.
Sơ đồ nguyên lí kết nối của 2 cảm biến hồng ngoại:
Hình 3.8. Sơ đồ nguyên lí kết nối 2 cảm biến khoảng cách với Arduino Nano
Cảm biến phía trước được đọc bởi kênh analog A4
Cảm biến phía sau được đọc bởi kênh analog A0
Vì để tránh nhiễu nên có đặt tụ C = 10F vào giữa VCC và GND của cảm biến.
Hiệu quá chống nhiễu giảm đáng kể.
h. Thiết kế khối điều hướng cho cảm biến:
Kết hợp động cơ servo gắn trên có cảm biến khoảng cách để cảm biến quét một
góc nhất định do người thiết kế đặt ra.
Hình 3.9. Mô hình kết hợp cảm biến khoảng cách và động cơ Servo để quét
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 35
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Ta sử dụng động cơ servo 9G cho mô hình trên. Ưu điểm của nó là nhỏ gọn dễ
dàng sử dụng và lập trình.
Hình 3.10. Sơ đồ nguyên lí kết nối 2 động cơ servo với Arduino Nano
Động cơ servo sử 9G sử dụng nguồn 5VDC
Dòng hoạt động của động cơ servo: 220mA ± 50mA
Phạm vi quét của động cơ là: 0 – 180 độ. Nhưng trong đề tài giới hạn lại chỉ
còn 40 – 140 độ.
i. Thiết kế khối điều khiển động cơ DC dùng cầu H (BTS7960):
Hình 3.11. Sơ đồ nguyên lí khối điều khiển động cơ DC
Mạch BTS7960 sử dụng nguồn động cơ là 24VDC chiệu được dòng tải 40A.
Mạch BTS7960 có tín hiệu logic điều khiển từ 3.3V – 5V
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 36
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Các chân L-EN và R-EN của từng module BTS7960 lần lượt được nối với các
I/O 4 và 8 của Arduino Nano để điều khiển cho phép động cơ trái và phải hoạt
động.
Các chân LPWM và RPWM của từng module BTS7960 lần lượt cũng được nối
với các chân I/O D3 – D5 – D6 – D11 để băm xung PWM giúp điều khiển tốc độ
hoặt động của động cơ DC.
j. Thiết kế khối xử lí trung tâm cho bộ điều khiển động cơ xe lăn:
Từ những khối trên ta tiến hành kết hợp lại với nhau để hoàn thiện bộ điều khiển
động cơ xe lăn. Bộ này là sự kết hợp của các khối nhận tín hiệu Bluetooth, khối
cảm biến khoảng cách, khối điều hướng cảm biến khoảng cách, khối nguồn (thiết
kế sau).
Hình 3.12. Sơ đồ nguyên lí bộ điều khiển động cơ của xe lăn
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 37
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Hoạt động của mạch như sau:
HC-05 đảm nhận vai trò là Slave nhận tín hiệu từ thiết bị nhận dạng chuyển
động của đầu.
Arduino Nano nhận tín hiệu từ HC-05 kết hợp với dữ liệu từ cảm biến để điều
khiển 2 module BTS7960 điều khiển 2 động cơ trái và phải.
Động cơ servo có vai trò điều hướng cho 2 cảm biến quét 40 – 140 độ, khi phát
hiện có vật cản Arduino Nano truyền lệnh cho 2 động cơ Servo dừng lại cho đến
khi không cần vật cản.
k. Thiết kế khối nguồn cho 2 phần (thiết bị nhận dạng chuyển động và bộ
điều khiển động cơ xe lăn):
• Khối nguồn cho thiết bị nhận dạng chuyển động của hệ thống:
Bảng 3.1. Thống kê dòng tải của thiết bị nhận dạng
Linh kiện Dòng tiêu thụ (mA) Số lượng
I/O Arduino Nano IAR = 40 10
NodeMCU INODE = 170 1
MPU6050 IMPU = 3.9 1
HC-05 IHC = 30 1
Tổng dòng tiêu thụ là:
IMAX = IAR + INODE + IMPU + IHC (3.1)
= 40x10 + 170 + 30 + 3.9
= 603.9 (mA)
Chọn khối nguồn là Pin LIPO 2000mAh (1A) – 3.7V là đủ để cung cấp cho
thiết bị nhận dạng chuyển động của xe lăn.
Thời lượng sử dụng Pin:
Ta có:
(A.V.µ)
t (3.2)
= 푃
Trong đó:
- t: thời gian sử dụng
- A: dung lượng PIN
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 38
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
- V: điện áp sử dụng
- P: Công suất tải
- µ: hệ số sử dụng (µ = 0.7)
Nên ta có thể tính được thời lượng sử dụng PIN là:
t = (AVµ)/P = (2000*3.7*0.7)/(3.7*603.9)
= 2.3(h)
• Khối nguồn cho bộ điều khiển động cơ xe lăn:
Bảng 3.2. Thống kê dòng tải của bộ điều khiển động cơ xe lăn
Linh kiện Dòng tiêu thụ (mA) Số lượng
I/O Arduino Nano IAR = 40 11
HC-05 IHC = 30 1
BTS7960 IBTS = 200 2
SHARP GP2Y0A02YK0F ISH = 33 2
Servo 9G ISER = 220 2
Tổng dòng tiêu thụ là:
IMAX = IAR + IHC + IBTS + ISH + ISER (3.2)
= 40x11 + 30 + 200x2 + 33x2 + 220x2
= 440 + 30 + 400 + 66 + 440
= 1376 (mA)
Chọn khối nguồn là mạch giảm áp LS2596 có ngõ ra IMAX = 3A, V = 5VDC là
đủ trong trường hợp này để mạch hoạt động một cách ổn định.
Tương tự ta có thời lượng sử dụng Acquy là:
(A.V.µ)
t = = (12000*24*0.7)/((5*1376) + (7.2*2000*2))
푃
= 201600/35680 = 5.7 (h)
3.2.3. Thiết kế sơ đồ nguyên lí toàn hệ thống:
Sơ đồ nguyên lí gồm 2 phần chính là cho tai nghe (thiết bị nhận dạng tín hiệu
chuyển động) và sơ đồ nguyên lí phần điều khiển động cơ DC của xe lắn
Hai phần liên kết với nhau qua tín hiệu không dây Bluetooth.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 39
CHƯƠNG 3: TÍNH TOÁN VÀ THIẾT KẾ
Hình 3.13. Sơ đồ nguyên lí toàn mạch
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 40
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Chương 4. THI CÔNG HỆ THỐNG
4.1. GIỚI THIỆU:
Trong phần này, sau khi đã thiết kế xong mạch nguyên lí cho những phần của
toàn bộ xe lăn. Tiến hành rắp ráp các thành phần của hệ thống lại với nhau để hoàn thành
xe lăn như:
- Thi công thiết bị nhận dạng chuyển động của đầu
- Thi công bộ điều khiển động cơ DC xe lăn
Ở dự án lần này nhóm không thiết kế mạch in mà thiết kế dựa trên những mô
hình cõ sẵn như tai nghe, hộp linh kiện.
Sau khi đã thiết kế, rắp ráp xong sẽ tiến hành lập trình cho hệ thống. Những phần
cần lập trình là:
- Thiết bị nhận dạng chuyển động
- Thiết bị nhận tín hiệu từ ứng dụng di động qua WiFi được tích hợp trên cùng một
phần cứng với thiết bị nhận dạng chuyển động
- Bộ điều khiển động cơ DC xe lăn
4.2. THI CÔNG HỆ THỐNG:
4.2.1. Thiết kế phần cứng cho hệ thống:
Như đã nói ở trên, dự án lần này thiết kế dựa trên mô hình có sẵn, với sự kết
hợp của những module khác nhau. Nên đề tài sẽ không có phần mạch in.
Sau khi đã thiết kế xong sơ đồ nguyên lí cho từng phần. Ta tiến hành rắp ráp
từng phần lại với nhau theo sơ đồ nguyên lí dựa trên phần cứng có sẵn như tai nghe
chụp tai, hộp linh kiện.
Dựa vào sơ đồ nguyên lí. Ta liệt kê danh sách linh kiện, module cần có:
Bảng 4.1. Danh sách các linh kiện
Chú
STT Tên linh kiện Giá trị SL
thích
1 Arduino Nano V3.0 2
2 NodeMCU ESP8266 1
Cảm biến hồng ngoại SHARP
3 2
GP2Y0A02YK0F
4 Động cơ Servo 9G 2
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 41
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Module thu nhận bluetooth HC-
5 2
05
Module điều khiển động cơ DC
6 2
BTS7960
7 Mạch giảm áp LS72596 1
8 Mạch sạc pin LIPO (5V – 1A) 1
9 Pin LIPO 2000mAh 1
10 Đèn LED đỏ 1
11 Tụ 10F 2
Cảm biến gia tốc GY 521
12 1
MPU6050
Các linh kiện của hệ thống sẽ được thiết kế dựa trên mô hình phần kinh sau:
• Thiết bị nhận dạng chuyển động của đầu:
Hình 4.1. Sơ đồ vị trí linh kiện trên tai nghe chụp tai.
Tai nghe sẽ có 2 bên tai trong đó tai bên trái ta sẽ để PIN và mạch sạc, tai còn
lại sẽ có thể để những bộ điều khiển như NodeMCU, Arduino Nano và HC-05
Cảm biến sẽ để ở trên đỉnh đầu nhận dạng tín hiệu chuyển động.
Thiết bị di động để gửi tín hiệu về NodeMCU điều khiển xe lăn bằng ứng dụng
di động.
Có 2 cổng Mini-B USB ở 2 bên dưới chụp tai để sạc cấp nguồn sạc PIN cũng
như nạp chương trinh cho vi xử lí trung tâm.
• Bộ điều khiển động cơ DC của xe lăn:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 42
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Hình 4.2. Sắp xếp linh kiện trong bộ điều khiển động cơ DC xe lăn
Bộ điều khiển động cơ M1, M2 của xe lăn sắp xếp như hình, có 2 ngõ vào
input là nguồn 24V – 15A để động cơ hoạt động và một cổng Mini-B USB để nạp
code cho Arduino Nano đảm nhận vai trò vi xử lí trung tâm.
4.2.2. Lắp ráp và kiểm tra:
a. Lắp ráp khối nguồn cho bộ điều khiển động cơ:
Hình 4.3. Khối nguồn của bộ điều khiển động cơ LS72590
Tiến hành lắp ráp khối nguồn vào bộ điều khiển động cơ đầu tiên.
Cấp nguồn 24VDC – 15A vào mạch giảm áp sau đó tiến hành vặn biến trở sao
cho áp về 5V đèn LED sáng thì mạch xem như đã xong khối nguồn.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 43
CHƯƠNG 4: THI CÔNG HỆ THỐNG
b. Lắp ráp khối vi xử lí trung tâm Arduino Nano vào bộ điều khiển:
Hình 4.4. Hình ảnh Arduino Nano trên bộ điều khiển
Tiến hành lắp áp board Arduino Nano V3.0 và bộ điều khiển
Sau khi lắp ráp xong tiến hành cấp nguồn 5VDC vừa mới chỉnh xong, sau đó
tiens nạp code cho Arduino Nano rồi xem kết quả trên Serial Port để kiểm tra.
Kiểm tra nguồn lại lần nữa để đảm bảo board hoạt động tốt nhất
c. Lắp ráp khối điều khiển động cơ bao gồm 2 BTS7960:
Hình 4.5. Hình ảnh BTS7960 trên bộ điều khiển động cơ.
Tiến hành lắp ráp 2 BTS7960 như trên.
Kết nối với nguồn và các chân điều khiển được nối đến Arduino Nano.
Nạp chương trình điều khiển động cơ sau đo đo áp ra của 2 đầu M+ và M- có
module để kiểm tra xem động cơ còn hoạt động hay không.
d. Lắp ráp khối nhận tín hiệu Bluetooth HC-05:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 44
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Hình 4.6. Hình ảnh HC-05 trên bộ điều khiển
Sau khi láp ráp xong trên hộp tiến hành thử xem module Bluetooth còn hoạt
động tốt không:
Kết nối Tx Rx của HC05 với Rx Tx của Arduino Nano và bật chế độ AT lên
để xem module Bluetooth còn hoạt động tốt không.
e. Lắp ráp cảm biến vào cho bộ điều khiển:
Hình 4.7. Khối bảm biến và điều hướng cảm biến
Sau khi đã kết nối cảm biến với bộ điều khiển ta vẫn tiếp tục nạp code cho
Arduino Nano để kiểm tra cảm biến.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 45
CHƯƠNG 4: THI CÔNG HỆ THỐNG
f. Hoàn thiện bộ điều khiển động cơ DC của xe lăn:
Hình 4.8. Hình ảnh bên hông của bộ điều khiển có input là USB.
Hình 4.9. Hình ảnh bên hông trái của bộ điều khiển có công tắc cấp nguồn
cho các linh kiện trong bộ điều khiển tránh sự cố xảy ra.
g. Lắp ráp khối nguồn cho tai nghe nhận dạng chuyển động:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 46
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Hình 4.10. Hình ảnh Pin LIPO và mạch such TP4056 của nó một bên
tai nghe.
Sau khi lắp ráp xong:
Đo xem pin đã đủ điện áp chưa. Điện áp hết pin là 3VDC
Tiến hành sạc thử xem mạch sạc có còn hoạt động không. Nếu như hiện đèn
LED màu đỏ trên mạch sạc tức là còn hoạt động bình thường, màu xanh tức là Pin
đã đầy.
h. Lắp ráp khối vi xử lí trung tâm cho tai nghe nhận dạng chuyển động của
đầu:
Hình 4.11. Hình ảnh của board Arduino Nano bên một phần của tai nghe.
Cấp nguồn cho board mạch.
Tiến hành nạp code để kiểm tra xem board có hoạt động tốt hay không.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 47
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Nếu hoàn tất bước kiểm tra thì chuyển sang bước tiếp theo.
i. Lắp ráp khối truyến tín hiệu Bluetooth cho dạng chuyển động:
Hình 4.12. Hình ảnh của module HC05 một bên của tai nghe
Tiến hành cấp điện cho cả Arduino Nano và HC05
Nạp code kiểm tra cho Arduino Nano sau đó bật chế độ AT Command của
HC05 để kiểm tra xem module còn hoạt động tốt hay là không
j. Lắp ráp khối xử lí phụ (NodeMCU):
Hình 4.13. Hình ảnh NodeMCU bên trong tai nghe
Sau khi lắp ráp xong tiến hành cấp nguồn cho NodeMCU
Tiến hành bật WiFi và kiểm tra xem NodeMCU đã được kết nối với WiFi hay
chưa, xem NodeMCU có hoạt động tốt hay không.
k. Lắp ráp cảm biến cho tai nghe:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Hình 4.13. Hình ảnh cảm biến MPU6050 được gắn trên tai nghe.
Tiến hành cấp nguồn cho cảm biến.
Nạp code ví dụ có sẵn trong thư viện để có thẻ kiểm tra dữ liệu của tai nghe ra
có đúng hay chưa.
l. Hoàn thiện tai nghe:
Hình 4.14. Hình ảnh tai nghe sau khi đã hang thiện
Tai nghe có 1 công tắc Switch và 2 cổng USB Mini-B để sạc điện cho Pin và
nạp code cho vi xử lí trung tâm
Nạp code cho vi xử lí trung tâm và kiểm tra toàn bộ tai nghe
4.4. LẬP TRÌNH HỆ THỐNG:
4.4.1. Lưu đồ giải thuật:
a. Giải thích quy trình vận hành hệ thống kể từ lúc đầu tiên.
- Cấp điện cho thiết bị nhận dạng chuyển động của đầu
- Cấp điện cho động cơ và bộ điều khiển động cơ
- Chờ kết nối Bluetooth và WiFi
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49
CHƯƠNG 4: THI CÔNG HỆ THỐNG
- Sa khi đã kết nối thành công thì tiến hành điều khiển xe lăn bằng các cử
động của đầu như quay trái, quay phải, tiến, lùi.
- Bật ứng dụng di động tiến hành điều khiển bằng ứng dùng. Khi điều khiển
bằng ứng dụng thì chế độ điều khiển bằng đầu sẽ tự ngắt để tránh xung
đột.
b. Thiết kế lưu đồ chính của hệ thống:
Bắt đầu
Khởi tạo cảm biến, Servo,
Bluetooth, WiFi
Kiểm tra nút nhấn từ ứng dụng di
động
Nút nhấn trên APP bật Đ
S
Điều khiển xe bằng đầu Điều khiển xe bằng APP
Hình 4.15. Lưu đồ thuật toán chung cho toàn bộ hệ thống.
Giải thích lưu đồ thuật toán:
Khi bắt đầu chương trình sẽ bắt đầu khởi tạo nhận tín hiệu từ cảm biến, cấp
nguồn cho servo, phát tín hiệu, nhận tín hiệu WiFi.
Nếu ứng dụng di động tắt hoặc ứng dụng không được bật thì sẽ hoạt động theo
luồng điều khiển xe lăn bằng đầu.
Nếu ứng dụng được bật và nút nhấn được bật thì xe lăn chạy theo tín hiệu từ
ứng dụng di động mà không chạy theo tín hiệu cảm biến từ đầu.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50
CHƯƠNG 4: THI CÔNG HỆ THỐNG
• Lưu đồ thuật toán chương trình con điều khiển xe lăn bằng đầu:
Bắt đầu
Bật công tắc
Đ
Quay đầu sang trái Đ Không có sự cố Đ Xe rẽ trái
S
Quay đầu sang phải Đ Không có sự cố Đ Xe rẽ phải
S
S
Gật đầu về trước Đ Không có sự cố Đ Xe đi tới
S
S
Gật đầu ra sau Đ Không có sự cố Đ Xe đi lùi
Xe dừng, servo
S S
dừng và thông báo
Kết thúc
Hình 4.16. Chương trình con điều khiển xe bằng đầu
Giải thích lưu đồ thuật toán:
Khi bắt đầu chương trình sẽ kiểm tra công tắc, nếu công tắc không được bật thì
sẽ kết thúc, không thực hiện chức năng nào
Khi công tắc được bật thì tiếp theo chương trình sẽ kiểm tra các dạng chuyển
động của đầu, khi nhận được một dạng chuyển động nào đó sẽ kiểm tra xem có sự sự cố
xỷ ra hay không, nếu không thì mới đi theo hướng được yêu cầu. Nếu có sự cố xảy ra
thì sẽ cho xe dừng lại và thông báo qua ứng dụng, email.
Tiếp tục quay lại kiểm tra từ nút nhấn.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51
CHƯƠNG 4: THI CÔNG HỆ THỐNG
• Lưu đồ thuật toán chương trình con điều khiển xe lăn qua ứng dụng di
động:
Bắt đầu
Bật nút nhân cho
phép trên APP
Đ
Joystick sang trái Đ Không có sự cố Đ Xe rẽ trái
S
Joystick sang phải Đ Không có sự cố Đ Xe rẽ phải
S
S
Joystick lên trên Đ Không có sự cố Đ Xe đi tới
S
S
Joystick xuống dưới Đ Không có sự cố Đ Xe đi lùi
Xe dừng, servo
S S
dừng và thông báo
Kết thúc
Hình 4.17. Lưu đồ chương trình con điều khiển bằng ứng dụng.
Giải thích lưu đồ thuật toán:
Khi bắt đầu chương trình sẽ kiểm tra nút nhấn, nếu nút nhấn được bật thì
tiến hành điều khiển bằng Joystick trên ứng dụng còn không thì không có gì xảy
ra
Khi nút nhấn được bật thì tiếp theo chương trình sẽ kiểm tra các dạng
chuyển động của Joystick, khi nhận được một dạng chuyển động nào đó của
joystick sẽ kiểm tra xem có sự sự cố xỷ ra hay không, nếu không thì mới đi theo
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52
CHƯƠNG 4: THI CÔNG HỆ THỐNG
hướng được yêu cầu. Nếu có sự cố xảy ra thì sẽ cho xe dừng lại và thông báo qua
ứng dụng, email.
Tiếp tục quay lại kiểm tra từ nút nhấn.
4.4.2. Phần mềm lập trình cho vi điều khiển:
a. Giới thiệu phần mềm:
Hình 4.18. Logo phần mềm ARDUINO IDE
Aduino IDE là môi trường phát triển tích hợp mã nguồn mở, cho phép
người dùng dễ dàng viết code và tải nó lên bo mạch. Môi trường phát triển được
viết bằng Java dựa trên ngôn ngữ lập trình xử lý và phần mềm mã nguồn mở
khác. Phần mềm này hỗ trợ cho một loạt các bo mạch Arduino như Arduino Uno,
Nano, Mega, Pro hay Pro Mini,.... Ngôn ngữ tổng quát cho Arduino là C và C++,
do đó phần mềm phù hợp cho những lập trình viên đã quen thuộc với cả 2 ngôn
ngữ này. Các tính năng như làm nổi bật cú pháp, thụt đầu dòng tự động,...làm
cho nó trở thành một sự thay thế hiện đại cho các IDE khác. Arduino IDE có thư
viện code mẫu quá phong phú, viết chương trình trên Arduino IDE khá dễ dàng
cộng thêm phần mềm hoàn toàn miễn phí cho người dùng.
Để tải phần mềm Arduino IDE phiên bản mới nhất hiện nay là 1.8.8. Truy
cập vào website https://www.arduino.cc/en/Main/Software.
Hình 4.19. Cách tải phần mềm
Tiếp theo, chọn Windows Installer để sử dụng cho hệ điều hành Windows
hoặc có thể lựa chọn các hệ điều hành khác tương tự.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Sau khi hoàn tất việc tải phần mềm, ta tiến hành cài đặt dễ dàng.
Hình 4.20. Giao diện Arduino IDE
b. Viết chương trình cho hệ thống:
Chương trình đọc dữ liệu và chuyển đổi dữ liệu cảm biến:
#include
const int MPU = 0x68; // Địa chỉ I2C của MPU6050
float AccX, AccY, AccZ;
float GyroX, GyroY, GyroZ;
float accAngleX, accAngleY, gyroAngleX, gyroAngleY, gyroAngleZ;
float roll, pitch, yaw;
float AccErrorX, AccErrorY, GyroErrorX, GyroErrorY, GyroErrorZ;
float elapsedTime, currentTime, previousTime;
int c = 0;
void setup() {
Serial.begin(19200);
Wire.begin(); // Bắt đầu Wire
Wire.beginTransmission(MPU); // Bắt đầu kết nối với MPU6050
(0x68)
Wire.write(0x6B);
Wire.write(0x00); // Reset
Wire.endTransmission(true); Kết thúc quá trình truyền
//Chương trình con tính lỗi offset cho cảm biến
calculate_IMU_error();
delay(20);
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54
CHƯƠNG 4: THI CÔNG HỆ THỐNG
}
void loop() {
// === ĐỌC DỮ LIỆU CẢM BIẾN ACC=== //
Wire.beginTransmission(MPU);
Wire.write(0x3B); // Bắt đầu với địa chỉ 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true); // Đọc tổng cộng 6 register. Mỗi
giá trị X, Y, Z được lưu trong 2 thanh ghi.
//Từ datasheet của MPU6050 để lấy range 2g ta cần chia giá trị
đọc được cho 16584
AccX = (Wire.read() << 8 | Wire.read()) / 16384.0; // X-axis
value
AccY = (Wire.read() << 8 | Wire.read()) / 16384.0; // Y-axis
value
AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0; // Z-axis
value
// Tính Roll và Pitch dựa trên dữ liệu gốc của cảm biến
accAngleX = (atan(AccY / sqrt(pow(AccX, 2) + pow(AccZ, 2))) *
180 / PI);
accAngleY = (atan(-1 * AccX / sqrt(pow(AccY, 2) + pow(AccZ, 2)))
* 180 / PI);
// === ĐỌC GIÁ TRỊ GYRO === //
previousTime = currentTime;
currentTime = millis();
elapsedTime = (currentTime - previousTime) / 1000;
Wire.beginTransmission(MPU);
Wire.write(0x43); // Địa chỉ đầu tiên
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true); //
GyroX = (Wire.read() << 8 | Wire.read()) / 131.0;
GyroY = (Wire.read() << 8 | Wire.read()) / 131.0;
GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0;
// Tính góc Roll – Pitch – Yaw từ dữ liệu GYRO
gyroAngleX = gyroAngleX + GyroX * elapsedTime;
gyroAngleY = gyroAngleY + GyroY * elapsedTime;
yaw = yaw + GyroZ * elapsedTime;
// Bộ lọc complementary filter: Tính Roll – Pitch từ 2 dữ liệu
GYRO và ACCEL
roll = 0.96 * gyroAngleX + 0.04 * accAngleX;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55
CHƯƠNG 4: THI CÔNG HỆ THỐNG
pitch = 0.96 * gyroAngleY + 0.04 * accAngleY;
}
Giải thích chương trình:
- Đầu tiên ta cần khai báo thư viên Wire.h (thư viện được sử dụng cho kết nối I2C).
- Trong phần setup của chương trình ta cần khởi tạo thư viện wire.h và khởi tạo lại
địa chỉ cảm biến thông qua thanh ghi:
Bảng 4.2. Thanh ghi reset và khởi tạo cảm biến
Register Register
Bit7 Bit6 Bit5 Bit4 Bit 3 Bit2 Bit1 Bit0
(HEX) (DEC)
Device
6B 107 SLEEP CYCLE - TEMP CLKSEL[2:0]
Reset
- Chúng ta bắt đầu vòng lặp để bắt đầu lấy dữ liệu cảm biến và lập trình
- Dữ liệu của cảm biến được lưu bới 2 bytes cho 1 trục trong 3 trục (x axis, y axis,
z axis).
Bảng 4.3. Thanh ghi lưu giá trị của ACCEL
Register Register
Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
(HEX) (DEC)
3B 59 ACCEL_XOUT [15:8]
3C 60 ACCEL_XOUT [7:0]
3D 61 ACCEL_YOUT [15:8]
3E 62 ACCEL_YOUT [7:0]
3F 63 ACCEL_ZOUT [15:8]
40 64 ACCEL_ZOUT [7:0]
- Để chuyển đổi giá trị cảm biến ACCEL sang giới hạn từ -1g - +1g (dễ dang tính
toán góc quay cho phần sau) ta có thể chuyển dổi dựa trên datasheet của cảm biến
Bảng 4.4. Giá trị giới hạn của cảm biến ACCEL
AFS_SEL Full Scale Range LSB Sensitivity
0 ±2g 16384 LSB/g
1 ±4g 8192 LSB/g
2 ±8g 4096 LSB/g
3 ±16g 2048 LSB/g
- Tương tự với giá trị của GYRO ta cũng có:
Bảng 4.5. Giá trị giới hạn của cảm biến GYRO
AFS_SEL Full Scale Range LSB Sensitivity
0 ±250 0 /s 131 LSB/g
1 ±500 0 /s 65.5 LSB/g
2 ±1000 0 /s 32.8 LSB/g
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56
CHƯƠNG 4: THI CÔNG HỆ THỐNG
3 ±2000 0 /s 16.4 LSB/g
- Sau khi đã lấy được các dữ liệu cần thiết từ 2 cảm biến ACCEL và GYRO ta tiến
hành tổng hợp dữ liệu để có thể tính toán ra góc quay và lập trình:
Tính Roll và Pitch từ dữ liệu của ACCEL: AccX2
180
Roll = arctan(AccY/√(퐴푐푐푋2 + 퐴푐푐푍2)* (4.1)
휋
180
Pitch = arctan(-1*AccX/√(퐴푐푐푌2 + 퐴푐푐푍2)* (4.2)
휋
Trong đó:
AccX, AccY, AccX là 3 giá trị đọc được từ cảm biến ACCEL
4.4.2. Phần mềm điện thoại:
a. Giới thiệu:
Hình 4.21. Ứng dụng BLYNK
Blynk là một ứng dụng iOS và Android để kiểm soát thiết bị Esp8266,
Arduino, Raspberry Pi và thiết bị khác trên Internet.
Đặc điểm:
Blynk không bị ràng buộc với những phần cứng. Thay vào đó, nó hỗ trợ phần
cứng cho bạn lựa chọn
b. Các bước thực hiện:
Bước 1: Tạo project
Hình 4.22. Các bước tạo 1 project trong BLYNK
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Ta thực hiện lần lượt các thao tác:
- Create new project: tạo một một dự án mới và đặt tên cho dự án
- Select your hardware: chọn phần cứng cần thực hiện. Trong đề tài là NodeMCU
ESP8266
- Conection type: chọn loại kết nối. Trong đề tà là WiFi
Bước 2: Thêm nút nhấn điều khiển
Hình 4.23. Cách thêm nút nhấn điều khiển.
Các thao tác để thêm một nút nhấn:
- Trong mục Widget Box ta chọn Button
- Sau khi đã chọn nút nhân ta tiến hành cài đặt cho nút nhấn
- PIN ở đây ta có thể chọn Digital hoặc Virtal. Với digital ta sẽ chọn GPIO tương
ứng với GPIO của phần cứng ta đã chọn trước đó
- Sau khi đã cài đặt PIN xong ta tiến hành cài đặt MODE: Có 2 mode là PUSH và
SWITCH.
- Sau khi đã cài đặt xong ta nhấn CONTINUE để tiếp tục quá trình
Bước 3: Lấy TOKEN
- Để có thế kết nối được với phần cứng, ta cần đồng bộ TOKEN của tài khoản
Blynk với phần TOKEN của phần cứng
- Có 2 cách để lấy TOKEN là qua mã code QR và qua Email tùy vào người
sử dụng mong muốn.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58
CHƯƠNG 4: THI CÔNG HỆ THỐNG
Hình 4.24. Cách lấy Token
Bước 4: Hoàn thành các phần còn lại
Hình 4.25. Giao diện ứng dụng trên di động
Sau khi đã hoàn thành các bước cài đặt ta sẽ được giao diện điều khiển xe
lăn qua ứng dụng di động như hình.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59
CHƯƠNG 4: THI CÔNG HỆ THỐNG
4.5. LẬP TRÌNH MÔ PHỎNG:
4.5.1. Lưu đồ lập trình mô phỏng:
Bắt đầu
Đọc giá trị cảm biến
Tính Roll, Pitch và
...n
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
Chương 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
5.1. KẾT QUẢ:
Qua quá trình nghiên cứu, thiết kế và thì công để tài trong vòn 15 tuần, những
kết quả nghiên cứu, đạt được:
• Biết sử dụng Arduino Nano V3.0 để ứng dụng trong lập trình điều khiển: kết nối
với các module khác như module wifi, module thu phát Bluetooth, biêt cách kết
hợp các loại cảm biến để xử lí
• Biết sử dụng NodeMCU để ứng dụng trong công nghệ thu phát wifi từ đó mà
nhận dữ liệu từ các thiết bị khác qua wifi. Trong dự án NodeMCU nhận dữ liệu
từ ứng dụng di động đẻ tiến hành sử lí và liên kết với Arduino Nano điều khiển
xe lăn.
• Biết sử dụng module thu phát Bluetooth nhằm kết nối 2 Arduino Nano lại với
nhau đảm bảo thẩm mỹ và thuận tiện cho việc sử dụng.
• Biết sử dụng cảm biến gia tốc (accelerometer) và cảm biến con quay hồi chuyển
(gyroscope) từ đó đưa về vi điều khiển tiến hành tính toán và tạo ra các giá trị
thích hợp để thuận tiện cho việc lập trình thuạt toán.
• Biết sử dụng cảm biến khoảng cách hồng ngoại: đã dùng cảm biến hông ngoại để
đo khoảng cách từ đó phát hiện được vật cản mà có những xử lí phù hợp như
dừng xe lại, cảnh báo
• Biết sử dụng động cơ servo: ứng dụng động cơ servo vao trong điều hướng của
cảm biến. Quét một góc nhất định trong vùng nào đó để cảm biến hoạt động theo.
Biết cách lập trình để động cơ servo quay nhanh hoặc quay chậm tùy theo ý muốn
của người sử dụng
• Biết cách sử dụng module điều khiển 1 động cơ BTS7960 để tiến hành băm xung
PWM điều khiển tốc độ động cơ. Kết hợp 2 module lại với nhau qua vi xử lí để
điều khiển 2 động cơ DC
• Biết cách ứng dụng Blynk vào trong lập trình điều khiển thiết bị qua Wifi. Blynk
là ứng dụng mã nguồn mở như inventor của Google nhưng lại dễ dàng sử dụng
hơn.
• Biết sử dụng trình Arduino IDE để lập trình cho 3 bộ vi xử lí Arduino Nano và
NodeMCU ESP8266.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
5.1.1. Tai nghe nhận dạng chuyển động của đầu:
Hình 5.1. Hình ảnh tai nghe nhận dạng chuyển động của đầu
5.1.2. Module điều khiển động cơ DC của xe lăn:
Hình 5.2. Module điều khiển động cơ DC của xe lăn
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 64
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
5.1.3. Toàn bộ xe lăn:
Hình 5.3. Hình ảnh mặt sau của xe lăn
Hình 5.4. Hình ảnh mặt trước của xe lăn
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 65
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
5.1.4. Bộ lọc Complementary:
Trong quá trình thu thập dữ liệu cảm biến luôn có nhiễu không đáng có xảy ra đó
là lí do chúng ta cần xử lí trước khi đem đi tính toán. Ở đây ta ứng dụng bộ lọc
Complementary.
Bộ lọc Complementary:
angle = (1-alpha)*(gyro) + (alpha)*(acc) (4.3)
Trong đó:
- angle: góc quay (roll, pitch)
- alpha: hệ số bộ lọc
- gyro: là góc quay tính từ gyro
- acc: là góc quay tính từ acc
Chọn hệ số alpha: Ta chọn hệ só alpha là 0.98 của dữ liệu đọc được từ cảm biến
GYRO bởi vì nó rất chính xác và không bị ảnh hưởng bởi các lực bên ngoài. Tuy
nhiên theo thời gian tín hiệu từ GYRO sẽ có xu hướng có lỗi theo thời gian nên
ta sử dụng 0.02 của tín hiệu ACCEL đủ để bù đắp mà lỗi theo thời gian GYRO
gây ra.
Thay vào ta được:
Pitch = 0.98*PitchACC + 0.02*PitchGYRO (4.4)
Roll = 0.98*RollACC + 0.02*RollGYRO (4.5)
Hình 5.5. Tín hiệu Roll và Pitch cảu ACCEL trước khi qua bộ lọc Complementary.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 66
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
Tín hiệu nhận được bị nhiễu rất nhiều do tác động của ngoại lực không biết trước
được ở môi trương xung quanh.
Hình 5.6. Tín hiệu Roll và Pitch cảu GYRO trước khi qua bộ lọc Complementary.
Dữ liễu của GYRO ít bị nhiễu hơn tuy nhiên lại có xu hướng không ổn định có
xuất hiện gợn sóng sai số.
Hình 5.7. Roll và Pitch sau khi qua bộ lọc Complementary.
- Màu xanh dương: Roll
- Màu đỏ: Pitch
Ta thấy sau khi qua bộ lọc tín hiệu rất ổn định và ít tác dụng của ngoại lực lên
ACCEL và sai số theo thời gian của GYRO
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 67
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
5.1.5. Dữ liệu từ cảm biến:
Kết quả dữ liệu lấy được từ cảm biến và tính toán qua bộ lọc để nhận dạng được
tín hiệu như: quay đầu sang trái, quay đầu sang phải, gật đầu về trước, ngửa đầu ra sau.
Hình 5.8. Dữ liệu cảm biến khi gật đầu về trước
Dữ liệu của trục Roll giảm về âm khi gật đầu về trước.
Khi ta trở lại vị trí cũ, dữ liệu cũng quay lại vị trị 0 ban đầu.
Hình 5.9. Dữ liệu cảm biến khi ngửa đàu ra sau
Dữ liệu của trục Roll tăng về dương khi gật đầu về trước.
Khi ta trở lại vị trí cũ, dữ liệu cũng quay lại vị trị 0 ban đầu.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 68
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
Hình 5.10. Dữ liệu cảm biến khi quay đầu sang trái
Dữ liệu của trục Yaw tăng về âm khi gật đầu về trước.
Khi ta trở lại vị trí cũ, dữ liệu cũng quay lại vị trị 0 ban đầu.
Hình 5.11. Dữ liệu cảm biến khi quay đầu sang phải
Dữ liệu của trục Yaw tăng về dương khi gật đầu về trước.
Khi ta trở lại vị trí cũ, dữ liệu cũng quay lại vị trị 0 ban đầu.
5.1.5. Kết quá thực nghiệm:
a. Chạy thực nghiệm
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 69
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
Hình 5.12. Khi ngủ gật sẽ có thông báo trên điện thoại di động và qua email
Hình 5.13. Khi phát hiện vật cản xe tự động dừng lại
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 70
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
b. Kết quả thống kê chạy thực nghiệm:
Bảng 5.1. Thống kê kết quả điều khiển
Tỉ lệ
Số lần Số lần
Tình huống Số lần đạt thành
thực hiện không đạt
công
Quay đầu sang trái 50 47 3 86%
Quay đầu sang trái 50 46 4 88%
Gật đầu đến trước 50 49 1 98%
Gật đầu về sau 50 48 2 96%
Phát hiện vật cản 50 48 2 96%
Ngủ gật 20 18 2 90%
Từ bảng kết quả trên tiến hành kiểm ra thì rút ra được các nguyên nhân sau đây:
• Quay trái, quay phải có tỉ lệ thấp hơn các phần còn lại là do trục chịu ảnh hưởng
khi quay trái phải là trục YAW. Trục này sẽ bị ảnh hưởng khi xe dừng lại, do
quán tính của xe, nên thông số thay đổi làm ảnh hưởng đến kết quả.
• Gật tới, gật lui có độ chính xác cao, một số lần lỗi có thể là do người dùng gật
chưa đúng cách
• Ngủ gật chưa có tình huống thức tế nên độ chính xác của kiểm tra chỉ là tương
đối, mang bản chất định tính.
Phát hiện vật cản có độ chính xác cao với những vật trong phạm vi dưới 100cm còn
ngoài ra do độ nhiễu của cảm biến nên xảy ra ai số.
5.2. NHẬN XÉT_ĐÁNH GIÁ:
Sau khi hoàn thành hệ thống. Trải qua quá trình chạy thử nghiệm và chạy thật có
những thông số sau:
• Xe vận hành được trong môi trường địa hình bằng phẳng.
• Tai nghe nhận dạng chuyển động của đầu phù hợp với nhiều kích thước đầu của
người sử dụng, có thể căn chỉnh cho phù hợp với người sử dụng, tùy nhiên vẫn
còn một số dây điện truyền tín hiệu lộ ra ngoài phần nào giảm bớt tính thẩm mỹ
của thiết bị.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 71
CHƯƠNG 5: KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ
• Bộ điều khiển động cơ tương thích với 2 động cơ của xe lăn. Bộ điều khiển chắc
chắn được cố định cần thận tuy nhiên quá trình đi dây bên trong còn chưa thật sự
tốt, đường dây rất rối và khó khăn để bảo trì sau này.
• Cảm biến hoạt động tốt tùy nhiên bộ điều hướng của cảm biến còn chưa thật sự
tối ưu, còn bị giật khi quay. Cảm biến theo yêu cầu phải đo từ 30 -150 cm nhưng
trong thực tế đo được lại cho thấy trong khoảng từ 120 -150 cm cảm biến đo
không ổn định khi ở khoảng cách ngắn hơn.
• Thời gian đáp ứng của tai nghe với bộ điều khiển xe lăn còn khá chậm (3 – 5s).
Mục đích đạt được yêu cầu phải nhanh hơn (khoảng 1s) để thuận tiện cho người
dùng.
• Điều khiển xe lăn qua ứng dụng di động mượt mà, tuy nhiên trong điều kiện WiFi
không tốt hoặc không ổn đinh thì hệ thống điều khiển qua ứng dụng cũng không
ổn định theo.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 72
CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
6.1. KẾT LUẬN:
6.1.1. Đạt được:
Sau quá trình nghiên cứu, phát triển chỉnh sửa thì kết quả thu được so với những
mục tiêu đã đặt ra là:
• Thiết kế được thiết bị nhận dạng chuyển động của đầu: làm được khoảng 95%
những yêu cầu đặt ra về phần cứng, về mặt thẩm mỹ đạt mức tốt so với mục tiêu
ban đầu đặt ra. Hiệu suất từ những thí nghiệm ở trên thì đạt được trên 85% về
phương diện nhận dạng chuyển động của đầu.
• Bộ điều khiển động cơ DC của xe lăn: đã hoàn thành yêu cầu lúc ban đầu đặt ra
không những vậy còn có thêm các chức năng phát hiện vật cản tự động dừng lại,
thông báo. Về mặt thẩm mỹ thì đạt mức khá so với mục tiêu
• Sau khi lắp ráp các phần lại vào xe lăn, xe lăn tổng thể đã đạt yêu cầu về mục
tiêu ban đầu là: có thể điều khiển bằng đầu, có thể điều khiển bằng ứng dụng, có
thể ngăn chặn tình huống nguy hiểm. Về hiệu suất của xe lăn xét tổng thể thì từ
những thí nghiệm chạy thực tế cho thấy hiệu suất đạt được ở mức khá, một số lỗi
xuất hiện do người dùng và do nhiễu cảm biến và tác động lực không tính toán
trước như quán tính của xe lăn khi dừng lại.
6.1.2. Chưa đạt được:
Bên cạnh những kết quả đạt được thì vẫn còn tồn tại hạn chế, chưa đạt được:
• Quay trái, quay phải để điều khiển xe lăn vẫn chưa đạt được hiệu suất tốt nhất,
vẫn còn tồn tại lỗi do nhiễu cảm biến, quán tính của xe lăn khi dừng lại.
• Khi phát hiện vật cản yêu cầu servo dừng lại, servo vẫn dừng lại những bị giật
giật chưa tìm hiểu ra nguyên nhân và cách khắc phục tuy điều này không ảnh
hưởng đến kết quả của việc phát hiện vật cản
• Nhận dạng tín hiệu theo dạng xét ngưỡng (xét lớn hơn hoặc bé hơn một hằng số
nào đó của 3 trục Roll – Pitch – Yaw) còn nhiều hạn chế.
6.1. HƯỚNG PHÁT TRIỂN:
Những hướng phát triển khả thi của đề tài:
• Áp dụng machine learning vào trong lập trình nhận dạng chuyển động của đầu
để tăng độ chính xác của nhận dạng cử động, thêm được nhiều động tác phức tạp.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 73
CHƯƠNG 6: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
• Áp dụng điều khiển bằng giọng nói cho xe lăn để tăng thêm tính năng cho xe lăn
• Thêm camera để người thân có thể theo dõi được tránh những sự cố đáng tiết
không đáng có xảy ra.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 74
TÀI LIỆU THAM KHẢO
TÀI LIỆU THAM KHẢO
[1] Trần Hoàng Phi – Trương Văn Vinh, Thiết kế - Chế tạo xe lăn điện cho người
khuyết tật phần cơ, trong Đồ án tốt nghiệp Đại Học Sư Phạm Kỹ Thuật TP. Hồ
Chí Minh (2015).
[2] Ngô Tùng, Chế xe lăn điều khiển bằng... đầu, tienphong.vn (Nhịp sống - Cộng
đồng mạng – Tài năng trẻ) 10/04/2018.
[3] David Sarver - Marc Ackerman, Pitch, roll, and yaw: Describing the spatial
orientation of dentofacial traits, Researchgate April 2007
[4] Hoàng Minh Công, “Giáo trình cảm biến công nghiệp”, Đại Học Bách Khóa Đà
Nẵng 2004.
[5] Lê Cảnh Trung - Phạm Quang Huy, “Lập trình điều khiển với Arduino”, NXB
Khoa học và kỹ thuật.
[6] Lê Mỹ Hà – Phạm Quang Huy, “Lập trình IOT với Arduino”, NXB Thanh Niên.
[7] Anisha Cotta, Naik Trupti Devidas, “Wireless communication using HC05
Bluetooth module interfaced with arduino”, International Journal of Science,
Engineering and Technology Research (IJSETR) Volume 5, Issue 4, April 2016.
[8] H P Ramadhan, G Mansur, "Permanent magnet DC motor control by using
arduino and motor drive module BTS7960", IOP Conference Series: Materials
Science and Engineering.
[9] Benne de Bakker, "How to use a SHARP GP2Y0A21YK0F IR Distance Sensor
with Arduino", Makerguides.com
[10] Nguyễn Đình Phú, “Giáo trình vi xử lý II”, NXB ĐH Quốc Gia Tp.HCM, 2007.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
PHỤ LỤC
❖ Phần code nhận dạng tín hiệu:
#include
#include
#include
#include
#define TxD 6
#define RxD 5
#define BT_LEFT 7
#define BT_RIGHT 8
#define BT_FOR 9
#define BT_BACK 10
#define BT_STOP 11
#define BT_SW 12
int BT_LEFT_STATE = 0;
int BT_RIGHT_STATE = 0;
int BT_FOR_STATE = 0;
int BT_BACK_STATE = 0;
int BT_STOP_STATE = 0;
int BT_SW_STATE = 0;
SoftwareSerial mySerial(RxD, TxD);//RX-TX
SimpleKalmanFilter simpleKalmanFilter_R(1, 1, 0.001);
SimpleKalmanFilter simpleKalmanFilter_P(1, 1, 0.001);
SimpleKalmanFilter simpleKalmanFilter_Y(1, 1, 0.001);
const int MPU = 0x68; // MPU6050 I2C address
//DECLARE VARIABLE FOR GETTING RAWDATA
float AccX, AccY, AccZ;
float GyroX, GyroY, GyroZ;
float accAngleX, accAngleY, gyroAngleX, gyroAngleY, gyroAngleZ;
float roll, pitch, yaw, rollF, pitchF, yawF;
float AccErrorX, AccErrorY, GyroErrorX, GyroErrorY, GyroErrorZ;
float elapsedTime, currentTime, previousTime;
float Gy_ER_X, Gy_ER_Y, Gy_ER_Z, STOP_FLAG_L, STOP_FLAG_R,
STOP_FLAG_F, STOP_FLAG_B;
//DECLARE FOR YAW CHANGING
float yawF_Temp, ENA_BACK_YAW;
int ENA_L_ON = 0, ENA_L_OFF = 0, ENA_R_ON = 0, ENA_R_OFF = 0;
int TURN_L_ENA = 0, TURN_R_ENA = 0;
//DECLARE FOR PITCH CHANGING
float pitchF_Temp, ENA_BACK_PITCH;
int ENA_L_ON_P = 0, ENA_L_OFF_P = 0, ENA_R_ON_P = 0, ENA_R_OFF_P =
0;
int TURN_L_ENA_P = 0, TURN_R_ENA_P = 0;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
//DECLARE FOR ROLL CHANGING
float rollF_Temp, ENA_BACK_ROLL;
int ENA_F_ON_R = 0, ENA_F_OFF_R = 0, ENA_B_ON_R = 0, ENA_B_OFF_R =
0;
int TURN_F_ENA_R = 0, TURN_B_ENA_R = 0;
//SET VARIABLE FOR GETTING ERROR
int c = 0;
void setup() {
mySerial.begin(38400);
Serial.begin(38400);
Wire.begin(); // Initialize comunication
Wire.beginTransmission(MPU); // Start communication with
MPU6050 // MPU=0x68
Wire.write(0x6B); // Talk to the register 6B
Wire.write(0x00); // Make reset - place a 0 into
the 6B register
Wire.endTransmission(true); //end the transmission
pinMode(13,OUTPUT);
pinMode(BT_LEFT,INPUT);
pinMode(BT_RIGHT,INPUT);
pinMode(BT_FOR,INPUT);
pinMode(BT_BACK,INPUT);
pinMode(BT_STOP,INPUT);
//GET ERROR CONST
Gy_ER_X = calculate_IMU_error_X();
Gy_ER_Y = calculate_IMU_error_Y();
Gy_ER_Z = calculate_IMU_error_Z();
delay(20);
}
void loop() {
// === Read acceleromter data === //
Wire.beginTransmission(MPU);
Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true); // Read 6 registers total, each
axis value is stored in 2 registers
//For a range of +-2g, we need to divide the raw values by 16384,
according to the datasheet
AccX = (Wire.read() << 8 | Wire.read()) / 16384.0; // X-axis value
AccY = (Wire.read() << 8 | Wire.read()) / 16384.0; // Y-axis value
AccZ = (Wire.read() << 8 | Wire.read()) / 16384.0; // Z-axis value
// // Calculating Roll and Pitch from the accelerometer data
// accAngleX = (atan(AccY / sqrt(pow(AccX, 2) + pow(AccZ, 2))) *
180 / PI); // AccErrorX ~(0.58) See the calculate_IMU_error()custom
function for more details
// accAngleY = (atan(-1 * AccX / sqrt(pow(AccY, 2) + pow(AccZ, 2)))
* 180 / PI); // AccErrorY ~(-1.58)
// === Read gyroscope data === //
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
previousTime = currentTime; // Previous time is stored
before the actual time read
currentTime = millis(); // Current time actual time
read
elapsedTime = (currentTime - previousTime) / 1000; // Divide by
1000 to get seconds
Wire.beginTransmission(MPU);
Wire.write(0x43); // Gyro data first register address 0x43
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true); // Read 4 registers total, each
axis value is stored in 2 registers
GyroX = (Wire.read() << 8 | Wire.read()) / 131.0; // For a
250deg/s range we have to divide first the raw value by 131.0,
according to the datasheet
GyroY = (Wire.read() << 8 | Wire.read()) / 131.0;
GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0;
// // Correct the outputs with the calculated error values
// GyroX = GyroX - Gy_ER_X; // GyroErrorX
// GyroY = GyroY - Gy_ER_Y; // GyroErrorY
// GyroZ = GyroZ - Gy_ER_Z; // GyroErrorZ
// // Currently the raw values are in degrees per seconds, deg/s,
so we need to multiply by sendonds (s) to get the angle in degrees
// gyroAngleX = gyroAngleX + GyroX * elapsedTime; // deg/s * s =
deg
// gyroAngleY = gyroAngleY + GyroY * elapsedTime;
// Complementary filter - combine acceleromter and gyro angle values
yaw = yaw + (GyroZ - Gy_ER_Z) * elapsedTime;
roll = 0.98 * (roll + (GyroX - Gy_ER_X) * elapsedTime) + 0.02 *
((atan(AccY / sqrt(pow(AccX, 2) + pow(AccZ, 2))) * 180 / PI));
pitch = 0.98 * (pitch + (GyroY - Gy_ER_Y) * elapsedTime) + 0.02 *
((atan(-1 * AccX / sqrt(pow(AccY, 2) + pow(AccZ, 2))) * 180 / PI));
yawF = simpleKalmanFilter_Y.updateEstimate((float)yaw);
rollF = simpleKalmanFilter_R.updateEstimate((float)roll);
pitchF = simpleKalmanFilter_P.updateEstimate((float)pitch);
//--------------------------CONTROL ------------------------------
//----------------------------------------------------------------
//CONTROL LEFT - RIGHT VIA YAW:
//TRACK POSITION
ENA_BACK_YAW = yawF - yawF_Temp;
ENA_BACK_PITCH = pitchF - pitchF_Temp;
ENA_BACK_ROLL = rollF - rollF_Temp;
//SET BUTTON:
if ((ENA_BACK_YAW > 0.1) && (yawF > 25)){
ENA_L_ON = 100;
ENA_L_OFF = 0;
Timer1.detachInterrupt();
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
if ((ENA_BACK_YAW 7)){
ENA_L_OFF = 100;
ENA_L_ON = 0;
yaw=0;
Timer1.initialize(1500000);
Timer1.attachInterrupt(Blink);
}
if ((ENA_BACK_YAW < -0.1) && (yawF < -25)){
ENA_R_ON = 100;
ENA_R_OFF = 0;
Timer1.detachInterrupt();
}
if ((ENA_BACK_YAW > 0.1)&& (yawF < -7)) {
ENA_R_OFF = 100;
ENA_R_ON = 0;
yaw=0 ;
Timer1.initialize(1500000);
Timer1.attachInterrupt(Blink);
}
//----------------------------------------------------------------
//CONTROL ROLL----------------------------------------------------
//SET BUTTON:
if ((ENA_BACK_ROLL > 0.15) && (rollF > 20)){
ENA_F_ON_R = 100;
ENA_F_OFF_R = 0;
Timer1.detachInterrupt();
}
if ((ENA_BACK_ROLL 7)){
ENA_F_OFF_R = 100;
ENA_F_ON_R = 0;
gyroAngleX = 0;
accAngleX = 0;
Timer1.detachInterrupt();
}
if ((ENA_BACK_ROLL < -0.15) && (rollF < -20)){
ENA_B_ON_R = 100;
ENA_B_OFF_R = 0;
Timer1.detachInterrupt();
}
if ((ENA_BACK_ROLL > 0.15)&& (rollF < -15)) {
ENA_B_OFF_R = 100;
ENA_B_ON_R = 0;
gyroAngleX = 0;
accAngleX = 0;
Timer1.detachInterrupt();
}
//SET MODE FOR CONTROLING FORWARD - BACKWARD
if (ENA_F_ON_R == 100){
TURN_F_ENA_R = 1;
TURN_L_ENA = 0;
TURN_R_ENA = 0;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
}
if (ENA_F_OFF_R == 100){
TURN_F_ENA_R = 0;
}
if (ENA_B_ON_R == 100){
TURN_B_ENA_R = 1;
TURN_L_ENA = 0;
TURN_R_ENA = 0;
}
if (ENA_B_OFF_R == 100){
TURN_B_ENA_R = 0;
}
//SET MODE FOR CONTROLING LEFT - RIGHT
if (ENA_L_ON == 100){
TURN_L_ENA = 1;
TURN_F_ENA_R = 0;
TURN_B_ENA_R = 0;
}
if (ENA_L_OFF == 100){
TURN_L_ENA = 0;
}
if (ENA_R_ON == 100){
TURN_R_ENA = 1;
TURN_F_ENA_R = 0;
TURN_B_ENA_R = 0;
}
if (ENA_R_OFF == 100){
TURN_R_ENA = 0;
}
//READ NODEMCU
BT_LEFT_STATE = digitalRead(BT_LEFT);
BT_RIGHT_STATE = digitalRead(BT_RIGHT);
BT_FOR_STATE = digitalRead(BT_FOR);
BT_BACK_STATE = digitalRead(BT_BACK);
BT_STOP_STATE = digitalRead(BT_STOP);
BT_SW_STATE = digitalRead(BT_SW);
//----------------------------------------------------------------
//CONTROL LEFT - RIGHT (YAW - PITCH) - CONTROL FORWARD AND BACKWARD
VIA ROLL CHANGING
if (((TURN_F_ENA_R == 1) && (BT_SW_STATE == 0)) || ((BT_FOR_STATE
== 1) && (BT_RIGHT_STATE == 0) && (BT_LEFT_STATE == 0) &&
(BT_BACK_STATE == 0) && (BT_STOP_STATE == 0) && (BT_SW_STATE == 1)))
{
Serial.println("FOR");
mySerial.print('3');
}
if (((TURN_B_ENA_R == 1) && (BT_SW_STATE == 0)) || ((BT_FOR_STATE
== 0) && (BT_RIGHT_STATE == 0) && (BT_LEFT_STATE == 0) &&
(BT_BACK_STATE == 1) && (BT_STOP_STATE == 0) && (BT_SW_STATE == 1)))
{
Serial.println("BACK");
mySerial.print('2');
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
if (((TURN_L_ENA == 1) && (BT_SW_STATE == 0)) || ((BT_FOR_STATE ==
0) && (BT_RIGHT_STATE == 0) && (BT_LEFT_STATE == 1) &&
(BT_BACK_STATE == 0) && (BT_STOP_STATE == 0) && (BT_SW_STATE == 1)))
{
Serial.println("LEFT");
mySerial.print('1');
}
if (((TURN_R_ENA == 1) && (BT_SW_STATE == 0)) || ((BT_FOR_STATE ==
0) && (BT_RIGHT_STATE == 1) && (BT_LEFT_STATE == 0) &&
(BT_BACK_STATE == 0) && (BT_STOP_STATE == 0) && (BT_SW_STATE == 1)))
{
Serial.println("RIGHT");
mySerial.print('4');
}
//----------------------------------------------------------------
STOP
if (((TURN_L_ENA == 0) && (TURN_R_ENA == 0) && (TURN_F_ENA_R == 0)
&& (TURN_B_ENA_R == 0)) && ((BT_FOR_STATE == 0) && (BT_RIGHT_STATE
== 0) && (BT_LEFT_STATE == 0) && (BT_BACK_STATE == 0) &&
(BT_STOP_STATE == 1)))
{
Serial.println("STOP");
mySerial.print('6');
}
//----------------------------------------------------------------
//YAW - PTICH - ROLL CHANGE DETECTION
yawF_Temp = yawF;
pitchF_Temp = pitchF;
rollF_Temp = rollF;
// Serial.print(rollF);
// Serial.print(" ");
// Serial.print(pitchF);
// Serial.print(" ");
// Serial.println(yawF);
}
void Blink()
{//digitalWrite(13,!digitalRead(13));
yaw=0; //trình phục vụ ngắt
}
❖ Phần code chương trình con tính OFFSET cho cảm biến:
//BY ME:
float calculate_IMU_error_X() {
c = 0;
// Read gyro values 200 times
while (c < 200) {
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
Wire.requestFrom(MPU, 6, true);
GyroX = Wire.read() << 8 | Wire.read();
GyroY = Wire.read() << 8 | Wire.read();
GyroZ = Wire.read() << 8 | Wire.read();
// Sum all readings
GyroErrorX = GyroErrorX + (GyroX / 131.0);
c++;
}
//Divide the sum by 200 to get the error value
GyroErrorX = GyroErrorX / 200;
return GyroErrorX;
}
float calculate_IMU_error_Y() {
c = 0;
// Read gyro values 200 times
while (c < 200) {
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true);
GyroX = Wire.read() << 8 | Wire.read();
GyroY = Wire.read() << 8 | Wire.read();
GyroZ = Wire.read() << 8 | Wire.read();
// Sum all readings
GyroErrorY = GyroErrorY + (GyroY / 131.0);
c++;
}
//Divide the sum by 200 to get the error value
GyroErrorY = GyroErrorY / 200;
return GyroErrorY;
}
float calculate_IMU_error_Z() {
c = 0;
// Read gyro values 200 times
while (c < 200) {
Wire.beginTransmission(MPU);
Wire.write(0x43);
Wire.endTransmission(false);
Wire.requestFrom(MPU, 6, true);
GyroX = Wire.read() << 8 | Wire.read();
GyroY = Wire.read() << 8 | Wire.read();
GyroZ = Wire.read() << 8 | Wire.read();
// Sum all readings
GyroErrorZ = GyroErrorZ + (GyroZ / 131.0);
c++;
}
//Divide the sum by 200 to get the error value
GyroErrorZ = GyroErrorZ / 200;
return GyroErrorZ;
}
❖ Phần code điều khiển dộng cơ DC:
#include
#include
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
#define irF A0
#define irB A4
#define modelF 20150
#define modelB 20150
// ir: the pin where your sensor is attached
// model: an int that determines your sensor: 1080 for GP2Y0A21Y
// 20150 for GP2Y0A02Y
// (working distance
range according to the datasheets)
#include
Servo myservo;
SharpIR SharpIRB(irF, modelF);
SharpIR SharpIRF(irB, modelB);
SoftwareSerial mySerial(2, 7); // RX, TX
int RPWM1 = 3;
int LPWM1 = 5;
int RPWM2 = 11;
int LPWM2 = 6;
int ENA_F = 0, ENA_B = 0;
int M1_EN = 4;
int M2_EN = 8;
byte bluetoothByte = 0; //khai báo biến nhận bluetooth
byte node = 0; //khai báo biến nhận bluetooth
int fadeValue = 75 ;
int posL = 0;
int posR = 0;
int TempR = 0;
int TempL = 0;
void setup() {
myservo.attach(10);
pinMode(RPWM1, OUTPUT);
pinMode(LPWM1, OUTPUT);
pinMode(RPWM2, OUTPUT);
pinMode(LPWM2, OUTPUT);
pinMode(M1_EN, OUTPUT);
pinMode(M2_EN, OUTPUT);
Serial.begin(9600); //mo cong Serial
mySerial.begin(38400);
Serial.println("START!");
}
void loop()
{
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
for (posR = 40; posR <= 140; posR += 2) { // goes from 0
degrees to 180 degrees
// in steps of 1 degree
while (mySerial.available() > 0)
{
bluetoothByte = mySerial.read();
}
if (ENA_F == 0) {
myservo.write(posR); // tell servo to go to
position in variable 'pos'
}
int disF = SharpIRF.distance();
int disB = SharpIRB.distance();
// Serial.println(disF);
// Serial.println(disB);
if ((disF < 70) || (disB < 70)) {
ENA_F = 1;
}
if ((disF > 70) && (disB > 70)) {
ENA_F = 0;
}
if (bluetoothByte == 51) //so 3
{
Serial.println("MOVE FORWARD IS OK!");
//dunglai();
dithang();
}
if ((bluetoothByte == 54)||(ENA_F == 1)) // so 6
{
Serial.println("STOP IS OK!");
dunglai();
}
if ((bluetoothByte == 50)&&(ENA_F == 0)) //so 2
{
Serial.println("MOVE BACKWARD IS OK!");
//dunglai();
lui();
}
if (bluetoothByte == 49) // so 1
{
Serial.println("TURN LEFT IS OK!");
//dunglai();
quaytrai();
}
if (bluetoothByte == 52)// so 4
{
Serial.println("TURN RIGHT IS OK!");
//dunglai();
quayphai();
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
}
for (posL = 140; posL >= 40; posL -= 2) { // goes from 180
degrees to 0 degrees
while (mySerial.available() > 0)
{
bluetoothByte = mySerial.read();
}
if (ENA_F == 0){
myservo.write(posL); // tell servo to go to
position in variable 'pos'
}
int disF = SharpIRF.distance();
int disB = SharpIRB.distance();
if ((disF < 70) || (disB < 70)) {
ENA_F = 1;
}
if ((disF > 70) && (disB > 70)) {
ENA_F = 0;
}
if (bluetoothByte == 51) //so 3
{
Serial.println("MOVE FORWARD IS OK!");
//dunglai();
dithang();
}
if ((bluetoothByte == 54)||(ENA_F == 1)) // so 6
{
Serial.println("STOP IS OK!");
dunglai();
}
if ((bluetoothByte == 50)&&(ENA_F == 0)) //so 2
{
Serial.println("MOVE BACKWARD IS OK!");
//dunglai();
lui();
}
if (bluetoothByte == 49) // so 1
{
Serial.println("TURN LEFT IS OK!");
//dunglai();
quaytrai();
}
if (bluetoothByte == 52)// so 4
{
Serial.println("TURN RIGHT IS OK!");
//dunglai();
quayphai();
}
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
}
// Phần điều khiển động cơ, mình viết như thế này...MAX dễ hiểu
luôn:
void dunglai()
{
digitalWrite(M1_EN, LOW);
digitalWrite(M2_EN, LOW);
analogWrite(RPWM1, 0);
analogWrite(LPWM1, 0);
analogWrite(RPWM2, 0);
analogWrite(LPWM2, 0);
}
void dithang()
{
digitalWrite(M1_EN, HIGH);
digitalWrite(M2_EN, HIGH);
analogWrite(RPWM1, fadeValue);
analogWrite(LPWM1, 0);
analogWrite(RPWM2, fadeValue);
analogWrite(LPWM2, 0);
}
void lui()
{
digitalWrite(M1_EN, HIGH);
digitalWrite(M2_EN, HIGH);
analogWrite(RPWM1, 0);
analogWrite(LPWM1, fadeValue);
analogWrite(RPWM2, 0);
analogWrite(LPWM2, fadeValue);
}
void quaytrai()
{
digitalWrite(M1_EN, HIGH);
digitalWrite(M2_EN, HIGH);
analogWrite(RPWM1, 0);
analogWrite(LPWM1, 0);
analogWrite(RPWM2, fadeValue);
analogWrite(LPWM2, 0);
}
void quayphai()
{
digitalWrite(M1_EN, HIGH);
digitalWrite(M2_EN, HIGH);
analogWrite(RPWM1, fadeValue);
analogWrite(LPWM1, 0);
analogWrite(RPWM2, 0);
analogWrite(LPWM2, 0);
}
❖ Phần code của NodeMCU nhận tín hiệu từ ứng dụng di động:
/*
* gungor 01/01/2019
*/
#define BLYNK_PRINT Serial
#include
#include
#define LEFT D0
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
#define RIGHT D1
#define FOR D2
#define BACK D3
#define STOP D4
// You should get Auth Token in the Blynk App.
char auth[] = "rCsKWpoV-Zf742lLMQ2uZrzWcyQTz66p"; //YourToken
// Your WiFi credentials.
char ssid[] = "ControlWheelchair"; //YourNetworkName
char pass[] = "hnphien1234"; //YourPassword
BLYNK_WRITE(V1) {
int*= param[0].asInt();
int y = param[1].asInt();
if ((x 27) && (y < 153)){
Serial.print('1'); //LEFT
digitalWrite(LEFT, HIGH);
digitalWrite(RIGHT, LOW);
digitalWrite(FOR, LOW);
digitalWrite(BACK, LOW);
digitalWrite(STOP, LOW);
}
else if ((x > 153) && (y > 27) && (y < 153)){
Serial.print('4'); //RIGHT
digitalWrite(RIGHT, HIGH);
digitalWrite(LEFT, LOW);
digitalWrite(FOR, LOW);
digitalWrite(BACK, LOW);
digitalWrite(STOP, LOW);
}
else if ((y > 153) && (x > 27) && (x < 153)){
Serial.print('3'); //FOR
digitalWrite(FOR, HIGH);
digitalWrite(RIGHT, LOW);
digitalWrite(LEFT, LOW);
digitalWrite(BACK, LOW);
digitalWrite(STOP, LOW);
}
else if ((y 27) && (x < 153)){
Serial.print('2'); //BACK
digitalWrite(BACK, HIGH);
digitalWrite(RIGHT, LOW);
digitalWrite(FOR, LOW);
digitalWrite(LEFT, LOW);
digitalWrite(STOP, LOW);
}
else {
Serial.print('6'); //STOP
digitalWrite(STOP, HIGH);
digitalWrite(RIGHT, LOW);
digitalWrite(FOR, LOW);
digitalWrite(BACK, LOW);
digitalWrite(LEFT, LOW);
}
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
PHỤ LỤC
void setup() {
pinMode(LEFT, OUTPUT);
pinMode(RIGHT, OUTPUT);
pinMode(FOR, OUTPUT);
pinMode(BACK, OUTPUT);
pinMode(STOP, OUTPUT);
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
}
void loop() {
Blynk.run();
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH
Các file đính kèm theo tài liệu này:
- do_an_thiet_ke_va_thi_cong_thiet_bi_nhan_dang_chuyen_dong_cu.pdf