4.2.3 Sơ đồ nguyên lí của khối điều khiển động cơ bằng Arduino
Arduino cấp nguồn cho 2 mạch điều khiển động cơ. Mạch điều khiển động cơ BTS7960 được kết nối với Arduino với 2 chức năng chính là dùng để điều khiển motor quay thuận hoặc nghịch. Các tín hiệu từ VR3 sẽ được Arduino xử lý và xuất ra để điểu khiển bts7960 trái và bts7960 phải
Chân L_EN và R_EN dùng để điều khiển tốc độ của động cơ Chiều chuyển động của motor:
Khi R_PWM=1 và L_PWM=0 thì motor quay theo chiều thuận Khi R_PWM=0 và L_PWM=1 thì motor quay theo chiều nghịch Khi R_PWM=0 và L_PWM=0 thì motor sẽ khơng quay
Hình 4. 7 Sơ đồ nguyên lí của khối điều khiển động cơ bằng Arduino
56
4.2.4 Sơ đồ nguyên lí của khối điều khiển động cơ bằng Esp8266
Cũng tương tự như Arduino, mạch thu phát wifi esp8266 cũng dùng để điều khiển các chân L_EN, R_EN, L_PWM và R_PWM
Nhờ nguồn cấp cho BTS7960 có sẵn từ Arduino, thì esp8266 sẽ khơng cần cấp VCC và GND và cách điều khiển BTS7960 cũng tương tự như Arduino
Hình 4. 8 Sơ đồ ngun lí của khối điều khiển động cơ bằng Esp8266
4.2.5 Sơ đồ ngun lí của khối nguồn động cơ
Hình 4. 9 Sơ đồ nguyên lí của khối nguồn động cơ
Với mạch điều khiển động cơ BTS7960 điều khiển các động cơ cần điện áp lớn thì nguồn pin 24V là nguồn thích hợp
Khi nhận tín hiệu từ L_EN, R_EN, L_PWM và R_PWM
Khi R_PWM=1 và L_PWM=0 thì M+sẽ được cấp nguồn dương (B+) và M- sẽ được cấp nguồn âm (B-), làm cho motor quay theo chiều thuận
Khi R_PWM=0 và L_PWM=1 thì M+sẽ được cấp nguồn dương (B-) và M- sẽ được cấp nguồn âm (B+), làm cho motor quay theo chiều nghịch
Khi R_PWM=0 và L_PWM=0 thì M+ và M- sẽ khơng nhận nguồn
57
Chương 5
THI CÔNG
5.1. Lập trình hệ thống
5.1.1 Lưu đồ giải thuật tồn hệ thống
Hình 5. 1 Lưu đồ giải thuật tồn hệ thống
Giải thích lưu đồ tồn hệ thống: Khi cấp điện hệ thống, chương trình bắt đầu chạy. Nguồn vào là các tín hiệu từ app (khi người dùng nhấn các phím điều hướng trên), các lệnh thoại từ giọng nói của người đọc.
58
Đầu tiên sẽ kiểm tra xem có bất kì giọng đọc nào khơng, nếu có thì sẽ tiếp tục kiểm tra là có đang nhấn app hay khơng. Nếu lúc đó cũng có tín hiệu từ app thì sẽ ưu tiên thực hiện lệnh của app, nếu khơng có tín hiệu từ app thì mới thực hiện lệnh của giọng nói.
Nếu đầu tiên thấy khơng có lệnh nào từ giọng nói, sẽ bắt đầu tiếp tục kiểm tra rằng app có tín hiệu điều khiển hay khơng, nếu có thì sẽ thực hiện lệnh nhận được từ app. Nếu khơng có lệnh từ cả app và của cả giọng nói thì sẽ quay lại từ đầu để thực hiện phần nói hoặc nhấn lại và đi kiểm tra tiếp tục.
59
5.1.2 Lưu đồ giải thuật điều khiển bằng App Blynk
Hình 5. 3 Lưu đồ giải thuật bằng App Blynk
Giải thích lưu đồ điều khiển bằng app:
Khi cấp nguồn cho hệ thống hoạt động, ta bắt đầu nhập tín hiệu đầu vào bằng cách nhấn đè nút bất kì mà ta muốn điều khiển của app trên màn hình điện thoại.
Khối kiểm tra phím điều hướng xe lăn: Khi có nhấn đè một trong các nút tới, lui, trái, phải (chỉ được nhấn một phím) thì lệnh đó sẽ kích hoạt tín hiệu điều khiển lên mức 1 và được gửi sang chương trình chính để điều khiển xe theo hướng đó. Khi bng phím ra hoặc chuyển hướng thì tín hiệu điều khiển sẽ quay về mức 0.
60
5.1.3 Lưu đồ giải thuật điều khiển bằng giọng nói
Hình 5. 4 Lưu đồ giải thuật toàn điều khiển bằng giọng nói
Giải thích lưu đồ điều khiển bằng giọng nói:
Khi cấp nguồn khởi động hệ thống thì ta bắt đầu đọc các lệnh thoại mà đã từng huấn luyện (nhanh, tới, lui, trái, phải, dừng) để nạp tín hiệu đầu vào
Đầu tiên, kiểm tra lệnh thoại nói "tới". Nếu có nhận dạng được lệnh "tới" này từ Module nhận dạng giọng nói thì sẽ xuất đi một tín hiệu để báo hiệu có lệnh tới và gửi sang chương trình điều khiển xe lăn theo hướng tới.
61
Nếu đầu tiên khơng nhận được tín hiệu "tới" thì sẽ tiếp tục đi kiểm tra xem có tín hiệu "lui", nếu có tín hiệu "lui" thì cũng gửi tín hiệu đó sang chương trình điều khiển xe và lần lượt cứ thế ta kiểm tra các lệnh "trái", "phải", "dừng","nhanh". Khi thực hiện một lệnh thoại thì các tín hiệu của các lệnh thoại khác sẽ bị quay về mức không.
Riêng đối với lệnh thoại "dừng" nếu có tín hiệu (lên mức 1) thì sẽ làm các tín hiệu khác bị reset trở về mức 0 hết.
5.2. Giao diện điều khiển và hướng dẫn sử dụng app Blynk 5.2.1 Giới thiệu Blynk 5.2.1 Giới thiệu Blynk
Blynk là một phần mềm được thiết kế cho Internet of Things (IoT), phục vụ cho các nhu cầu tiếp cận IoT, là một Platform để chúng ta có thể tự tạo ra một sản phẩm IoT do it yourself (DIY) một cách dễ dàng nhất. Nó có thể:
- Điều khiển các thiết bị phần cứng từ xa. - Hiển thị dữ liệu cảm biến.
- Lưu trữ dữ liệu… và nhiều điều thú vị khác. Blynk hoạt động như thế nào?
Có ba thành phần chính trong nền tảng:
- Blynk App - cho phép tạo giao diện cho sản phẩm bằng cách kéo thả các widget khác nhau mà nhà cung cấp đã thiết kế sẵn.
- Blynk Server - chịu trách nhiệm xử lý dữ liệu trung tâm giữa điện thoại, máy tính bảng và phần cứng. Chúng ta có thể sử dụng Blynk Cloud của Blynk cung cấp hoặc tự tạo máy chủ Blynk riêng của mình. Vì đây là mã nguồn mở, nên mọi người đều có thể dễ dàng intergrate vào các thiết bị và thậm chí có thể sử dụng Raspberry Pi làm server của mỗi cá nhân.
- Library Blynk – support cho hầu hết tất cả các nền tảng phần cứng phổ biến - cho phép giao tiếp với máy chủ và xử lý tất cả các lệnh đến và đi.
62
Bây giờ hãy tưởng tượng: mỗi khi chúng ta nhấn một nút trong ứng dụng Blynk, yêu cầu sẽ chuyển đến server của Blynk, server sẽ kết nối đến phần cứng thông qua library. Tương tự thiết bị phần cứng sẽ truyền dữ liệu ngược lại đến server.
Hình 5. 5 Cách thức giao tiếp
Tính năng, đặc điểm
- Cung cấp API & giao diện người dùng tương tự cho tất cả các thiết bị và phần cứng được hỗ trợ
- Kết nối với server bằng cách sử dụng: - Wifi
- Bluetooth và BLE
- Ethernet
- USB (Serial)
- GSM
Các tiện ích trên giao diện được cung cấp dễ sử dụng:
- Thao tác kéo thả trực tiếp giao diện mà không cần viết mã.
- Dễ dàng tích hợp và thêm chức năng mới bằng cách sử dụng các cổng kết nối
63
- Theo dõi lịch sử dữ liệu.
- Thông tin liên lạc từ thiết bị đến thiết bị bằng Widget.
- Gửi email, tweet, thơng báo realtime, v.v.... được cập nhật các tính năng liên tục và còn rất nhiều các phiên bản.
5.2.2 Hướng dẫn sử dụng app Blynk
(Cách thức cài đặt và setup có trong phần phụ lục)
Chúng ta có giao diện điều khiển như sau:
Hình 5. 6 Giao diện điều khiển xe
Trước khi bắt đầu thiết kế App điều khiển nhóm đã đặt ra một số các yêu cầu về giao diện và tính năng như: giao diện đơn giản, dễ sử dụng, chỉ cần một lần chạm là có thể tiến hành di chuyển. App cũng hướng tới sự đơn giản dễ dàng thao tác.
64
Khi bấm phím “Tiến”, “Lùi”, “Trái”, “Phải”, “ Dừng”:
Hình 5. 7 Khi bấm "Tiến" và "Lùi"
65
Hình 5. 9 Khi bấm "Dừng"
5.3. Giới thiệu phần lập trình vi điều khiển
Giới thiệu phần mềm lập trình Arduino IDE
Mơi trường phát triển tích hợp (IDE) của Arduino là một ứng dụng đa nền tảng được viết bằng Java. Nó được thiết kế để dành cho những người mới tập làm quen với lĩnh vực phát triển phần mềm. Nó bao gồm một chương trình code editor với các chức năng như đánh dấu cú pháp, và tự động canh lề, cũng như compile (biên dịch) và upload chương trình lên board chỉ với 1 cú nhấp chuột.
Đề tài sử dụng phần mềm Arduino IDE để lập trình cho Arduino UNO R3 và ESP8266 NodeMCU. Ngơn ngữ được sử dụng ở ArduinoIDE là C và C++. Tất cả đều là mã nguồn mở, được đóng góp và hỗ trợ rất nhiều từ cộng đồng, rất thích hợp cho những ai mới bắt đầu tìm hiểu hoặc không chuyên để dễ dàng tiếp cận, nắm bắt và triển khai nhanh chóng. Arduino IDE hoạt động được trên cả 3 nền tảng: Windows, MAC OS và Linux
66
Hình 5. 10 Code mẫu
5.4 Hướng dẫn sử dụng bằng giọng nói
(Quy trình cho VR3 học có trong phụ luc)
Bước1: Đối với xe lăn chúng ta nhấn cơng tắc sang vị trí “ON” để cấp nguồn cho xe và hộp điều khiển.
Bước2: Sau khi cấp nguồn cho mơ hình xe thì chúng ta bắt đầu đọc các lệnh điều khiển vào micro đã được huấn luyện cho module nhận dạng giọng nói VR3.
Hình 5. 11 Bộ xử lí VR3 khi vừa bật cơng tắc ON
Khi đó ta bắt đầu nói vào Micro, bộ xử lí sẽ bắt đầu tiếp nhận giọng nói, lọc giọng và nhận dạng như hình bên dưới khi ta đọc lên
67
Hình 5. 12 Khi đọc lệnh "nhanh" vào micro
Hình 5. 13 Khi đọc lệnh "Tiến" và “Lùi” vào micro
Khi đọc lệnh khác 1 lệnh trước đó, hệ thống sẽ tự động xóa lệnh trước đó và cài đặt lại bộ xử lí để tiếp nhận thơng tin kế tiếp. Cũng tương tự như lệnh “Tiến” và “Lùi nhưng lệnh trái và phải được cài đặt để rẽ trái hoặc phải 1 giây:
68
Hình 5. 15 Lệnh "Dừng" để ngắt động cơ
5.5 Thiết kế
5.5.1 Thiết kế mơ hình
Hình 5. 16 Mơ hình xe lăn mơ phỏng
69
5.5.2 Mơ hình thực tế
Hình 5. 18 Bánh xe được thiết kế thêm nhông sên dĩa và thiết kế phần đế để động cơ
Sau khi lắp ráp hồn thiện tất cả cơng đoạn:
70
Hình 5. 20 Mơ hình xe lăn mặt bên và mặt sau
71
Chương 6
ĐÁNH GIÁ KẾT QUẢ VÀ KẾT LUẬN
Sau nhiều tuần tìm hiểu, nghiên cứu trên các tài liệu đồng thời vận dụng các kiến thức đã được học trong suốt 4 năm, nhóm chúng em đã hoàn thành xong đề tài “Thiết kế xe lăn hỗ trợ người khuyết tật”.
6.1 Kết luận. 6.1.1 Tổng quát. 6.1.1 Tổng quát.
Những kết quả và kinh nghiệm đã đạt được sau khi nhóm chúng em hồn thành đề tài này là:
- Cải tiến thiết kế và thi cơng hồn chỉnh mơ hình xe lăn chạy bằng điện có hai chế độ điều khiển gồm:
✓ Điều khiển bằng giọng nói.
✓ Điều khiển bằng điện thoại.
- Xe có các chức năng có thể điều khiển gồm: dừng, chạy tiến, lùi, rẽ trái, rẽ phải và điều chỉnh được tốc độ xe.
- Nghiên cứu và tìm hiểu cấu tạo, chức năng của module ESP8266 NodeMCU,
biết cách lập trình cho module ESP8266 tạo một điểm truy cập Wifi, từ đó điện thoại có thể kết nối với Wifi này để truyền nhận dữ liệu điều khiển mơ hình.
- Nghiên cứu và tìm hiểu cấu tạo, chức năng của module nhận dạng giọng nói
VR3, biết cách lập trình cho module VR3 để điều khiển xe lăn.
- Biết cách sử dụng phần mềm Blynk xây dựng ứng dụng điều khiển mơ hình
trên điện thoại Android.
72
6.1.2 Ưu điểm
- Xe lăn có thể chạy được trên nhiều địa hình khác nhau như: lên, xuống dốc,
đường gồ ghề,…
- Di chuyển dễ dàng, khớp lệnh người dùng
- Giá thành thấp
- Gọn nhẹ, dễ sắp xếp
- Không tiêu hao sức lực, đồng thời khơng cần có người phía sau hỗ trợ nên rất tiện dụng.
- Thích hợp với nhiều đối tượng sử dụng khác nhau: người già, trẻ em, người
khuyết tật, người rất cần hạn chế vận động, đặc biệt là trong thời gian dài. - Tạo tâm lý thoải mái, tự do nên hỗ trợ cuộc sống người dùng tốt hơn.
- Thơng minh, tích hợp 2 chế độ điều khiển: hoặc điều khiển bằng giọng nói,
hoặc điều khiển bằng điện thoại
6.1.3 Nhược điểm.
Bên cạnh các kết quả đạt được thì mơ hình xe lăn vẫn cịn một số hạn chế nhất định:
- Vì điều khiển thông qua internet nên bắt buộc phụ thuộc vào điện thoại - Nguồn hoạt động chính của xe là pin nên có hạn chế về thời gian sử dụng
- Trọng lượng xe phụ thuộc vào pin
6.2 Hướng phát triển
Mơ hình xe lăn hiện tại chỉ đang trong giai đoạn chạy thử nghiệm, vì vậy để mơ hình này có thể hồn thiện hơn, nhóm xin đưa ra phương án nhằm cải thiện mơ hình để có thể triên khai áp dụng thực tế:
- Kết hợp với cảm biến phát hiện vật cản.
- Có thêm chế độ hiển thị dung lượng pin trên app điều khiển
- Hướng tới nhiều đối tượng người dùng hơn, ví dụ như người mù, người câm
73
TÀI LIỆU THAM KHẢO
Sách tham khảo
[1] PGS.TS. Nguyễn Hữu Phương, “Mạch số dùng cho sinh viên đại học ngành điện tử, tự động hóa, viễn thơng, tin học, v.v.”, Nhà xuất bản Thống kê, 2004.
[2] Nguyễn Văn Hiệp, “Giáo trình Lập trình Android trong ứng dụng điều khiển”, Nhà xuất bản đại học quốc gia TP. Hồ Chí Minh.
[3] “Giáo trình điện tử cơ bản” Trần Thu Hà, Trương Thị Bích Ngà, Nguyễn Thị Lưỡng,.. --Tp. Hồ Chí Minh: Đại học Quốc gia Tp.HCM,2013.
Trang Web tham khảo
[4] “Arduino”, truy cập ngày 6/11/2019, đường dẫn: https://vi.wikipedia.org/wiki/Arduino
[5] “Arduino là gì và những ứng dụng của nó trong cuộc sống”, truy cập ngày 6/11/2019, đường dẫn: https://quantrimang.com/arduino-la-gi-va-ung-dung-cua-no- trong-cuoc-song-145388
[6] “Động cơ giảm tốc là gì? Motor giảm tốc có gì khác so với hộp giảm tốc? Khái niệm hộp giảm tốc?”, truy cập ngày 6/11/2019, đường dẫn:
http://www.namtrung.com.vn/document/dong-co-giam-toc-la-gi-hop-giam-toc-la-gi
[7] “WiFi Access Point”, truy cập ngày 13/11/2019, đường dẫn: https://arduino.esp8266.vn/wifi/access-point.html#softap
[8] “Internet Of Things (IoT) : cho người mới bắt đầu”, truy cập ngày 13/11/2019, đường dẫn: https://iotmakervn.github.io/iot-starter-book/#_esp8266
[9] truy cập ngày 14/11/2019, đường dẫn: https://viblo.asia/p/machine-learning- that-thu-vi-6-nhan-dien-giong-noi-1Je5E8DylnL
74
[10] Ths. Hà Đình Dũng, Giáo trình kỹ thuật âm thanh, truy cập ngày 14/11/2019, đường dẫn: https://xemtailieu.com/tai-lieu/giao-trinh-ky-thuat-am-thanh-ths-ha- dinh-dung.1573504.html
75
PHỤ LỤC
Chương trình cho Module nhận diện giọng nói VR3
#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h
VR myVR(10,11); uint8_t records[7];
uint8_t buf[64];
int lnhanh = 2 ;int ltien = 3; int llui = 4;
int rnhanh = 5; int rtien = 6; int rlui = 7;
#define nhanhRecord (0) #define tienRecord (1)
#define luiRecord (2) #define traiRecord (3)
#define phaiRecord (4) #define dungRecord (5)
void printSignature(uint8_t *buf, int len)
{ int i;
for(i=0; i<len; i++){
if(buf[i]>0x19 && buf[i]<0x7F){
Serial.write(buf[i]); } else{ Serial.print("["); Serial.print(buf[i], HEX); Serial.print("]"); } }}
76
void printVR(uint8_t *buf)
{ Serial.println("VR Index\tGroup\tRecordNum\tSignature"); Serial.print(buf[2], DEC); Serial.print("\t\t"); if(buf[0] == 0xFF){ Serial.print("NONE"); } else if(buf[0]&0x80){ Serial.print("UG "); Serial.print(buf[0]&(~0x80), DEC); } else{ Serial.print("SG "); Serial.print(buf[0], DEC); } Serial.print("\t"); Serial.print(buf[1], DEC); Serial.print("\t\t"); if(buf[3]>0){ printSignature(buf+4, buf[3]); } else{ Serial.print("NONE"); } Serial.println("\r\n");} void setup() //sua
{ myVR.begin(9600);
Serial.begin(115200);
Serial.println("Module nhận dạng giọng nói");
pinMode(lnhanh, OUTPUT); pinMode(ltien, OUTPUT); pinMode(llui, OUTPUT); pinMode(rnhanh, OUTPUT);
77
pinMode(rtien, OUTPUT); pinMode(rlui, OUTPUT);
if(myVR.clear() == 0){
Serial.println("Đã xóa nhận dạng");
}else{
Serial.println("Khơng tìm thấy mạch nhận diện giọng nói");
Serial.println("Vui lòng kiểm tra kết nối và khởi động lại Arduino."); while(1); } if(myVR.load((uint8_t)nhanhRecord) <=0){ Serial.println("nhanhRecord loaded"); } if(myVR.load((uint8_t)tienRecord) <=1){ Serial.println("tienRecord loaded"); } if(myVR.load((uint8_t)luiRecord) <=2){ Serial.println("luiRecord loaded"); } if(myVR.load((uint8_t)phaiRecord) <=3){ Serial.println("phaiRecord loaded"); }