15 Lệnh "Dừng" để ngắt động cơ

Một phần của tài liệu Thiết kế xe lăn hỗ trợ người khuyết tật (Trang 79)

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 hoà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 đã hồ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"); } if(myVR.load((uint8_t)traiRecord) <=4){ Serial.println("traiRecord loaded"); } if(myVR.load((uint8_t)dungRecord) <=5){ Serial.println("dungRecord loaded"); }} void loop()

{ int i; int ret;

ret = myVR.recognize(buf, 50);

if(ret>0){ switch(buf[1]){

case nhanhRecord:

78

digitalWrite(lnhanh, HIGH); digitalWrite(ltien, HIGH); digitalWrite(llui, LOW); digitalWrite(rnhanh, HIGH);

digitalWrite(rtien, HIGH); digitalWrite(rlui, LOW);

for(i = 0; i <= 100; i= i+20) //Speed up

{ analogWrite(lnhanh, i); analogWrite(rnhanh, i); } break;

case tienRecord: /** XE TIEN*/

digitalWrite(lnhanh, HIGH); digitalWrite(ltien, HIGH); digitalWrite(llui, LOW); digitalWrite(rnhanh, HIGH);

digitalWrite(rtien, HIGH); digitalWrite(rlui, LOW);

for(i = 0; i <= 50; i= i+10)

{ analogWrite(lnhanh, i); analogWrite(rnhanh, i); } break;

case luiRecord: /** XE CHAY LÙI */ digitalWrite(lnhanh, HIGH); digitalWrite(ltien, LOW);

digitalWrite(llui, HIGH); digitalWrite(rnhanh, HIGH);

digitalWrite(rtien, LOW); digitalWrite(rlui, HIGH);

for(i = 0; i <= 50; i= i+10)

{ analogWrite(lnhanh, i); analogWrite(rnhanh, i); } break; case traiRecord: /** XE RẼ TRÁI */

digitalWrite(lnhanh, LOW); digitalWrite(ltien, LOW);

digitalWrite(llui, LOW); digitalWrite(rnhanh, HIGH);

digitalWrite(rtien, HIGH);delay(100); digitalWrite(rlui, LOW);

for(i = 0; i <= 50; i= i+10)

{ analogWrite(rnhanh, i);delay(100); }

break;

case phaiRecord: /** XE RẼ PHẢI */

79

digitalWrite(llui, LOW); digitalWrite(rnhanh, LOW); digitalWrite(rtien, LOW); digitalWrite(rlui, LOW);

for(i = 0; i <= 50; i= i+10)

{ analogWrite(lnhanh, i);delay(100); } break;

case dungRecord:

/** DỪNG XE */

digitalWrite(lnhanh, LOW); digitalWrite(ltien, LOW);

digitalWrite(llui, LOW); digitalWrite(rnhanh, LOW);

digitalWrite(rtien, LOW); digitalWrite(rlui, LOW);

break;

default:

Serial.println("chức năng ghi âm không xác định");

break; }

/** giọng nói được nhận dạng */

printVR(buf); }}

Chương trình cho Module phát wifi ESP8266

#define BLYNK_PRINT Serial

#include <ESP8266WiFi.h>

#include <BlynkSimpleEsp8266.h>

char auth[] = "DwGKZSFyS4oP_FJcMH_Tiwf5MoN8uZ3K";

char ssid[] = "HTX TB L2_2.4G";

char pass[] = "htxtb2016"; #define lnhanh 5 //D1

80 #define ltien 4 //D2 #define llui 14 //D5 #define rnhanh 12 //D6 #define rtien 13//D7 #define rlui 15//D7 void setup() { Serial.begin(152000);

pinMode(lnhanh, OUTPUT);pinMode(ltien, OUTPUT);pinMode(llui, OUTPUT);

pinMode(rnhanh, OUTPUT);pinMode(rtien, OUTPUT);pinMode(rlui, OUTPUT);

Blynk.begin(auth, ssid, pass);

} void loop() { Blynk.run();} BLYNK_CONNECTED(){ Blynk.syncVirtual(V1);Blynk.syncVirtual(V2);Blynk.syncVirtual(V3);Blynk.sync Virtual(V4);Blynk.syncVirtual(V5);} int i; BLYNK_WRITE(V1) //tiến

{ int pinValue = param.asInt();

digitalWrite(lnhanh, HIGH);digitalWrite(ltien,pinValue);digitalWrite(llui, LOW); digitalWrite(rnhanh, HIGH);digitalWrite(rtien, pinValue);digitalWrite(rlui, LOW);

for(i = 0; i <= 50; i= i+10)

{ analogWrite(lnhanh, i); analogWrite(rnhanh, i);

}}

81

{ int pinValue = param.asInt();

digitalWrite(llui,pinValue);digitalWrite(rlui,pinValue);digitalWrite(ltien,LOW);

digitalWrite(rtien,LOW);digitalWrite(rnhanh, HIGH);digitalWrite(lnhanh, HIGH);

for(i = 0; i <= 50; i= i+10)

{analogWrite(lnhanh, i); analogWrite(rnhanh, i);

}}

BLYNK_WRITE(V3) //trái { int pinValue = param.asInt();

digitalWrite(lnhanh, LOW);digitalWrite(ltien, LOW);digitalWrite(llui, LOW);

digitalWrite(rnhanh, HIGH);digitalWrite(rtien,

pinValue);delay(100);digitalWrite(rlui, LOW); for(i = 0; i <= 50; i= i+10)

{analogWrite(lnhanh, i); analogWrite(rnhanh, i); }}

BLYNK_WRITE(V4) //phải

{ int pinValue = param.asInt();

digitalWrite(lnhanh, HIGH);digitalWrite(ltien,

pinValue);delay(100);digitalWrite(llui, LOW);

digitalWrite(rnhanh, LOW);digitalWrite(rtien, LOW);digitalWrite(rlui, LOW);

for(i = 0; i <= 50; i= i+10)

{ analogWrite(lnhanh, i); analogWrite(rnhanh, i);

}}

BLYNK_WRITE(V5) //dừng

{ int pinValue = param.asInt();

digitalWrite(lnhanh, LOW);digitalWrite(ltien, LOW);digitalWrite(llui, LOW);

digitalWrite(rnhanh, LOW);digitalWrite(rtien, LOW);digitalWrite(rlui, LOW);

82

Tao Project cho Blynk

Tạo tài khoản Blynk

Để có thể sử dụng App Blynk chúng ta cần phải đăng ký một tài khoản mới. Ở đây có 2 cách đăng ký bằng Facebook hoặc tạo một tài khoản mới (Create New Account). Việc đăng kí bằng Facebook sẽ mang lại khá nhiều rủi ro như: Tài khoản Facebook bị mất, đánh cắp, quên mật khẩu,… Do đo trong bài viết sẽ chỉ đề cập tới việc tạo tài khoản mới để tiện cho việc phục hồi cũng như tránh được phần lớn các rủi ro.

Đầu tiên để tạo tài khoản ta cần chọn mục (Create New Account)

Nhập thông tin tài khoản Gmail. Rồi nhấn Sign Up để tiến hành đăng ký.

83

Nhấn vào New Project để tạo một Project mới

Click vào Create để hoàn tất việc tạo mới

Blynk sẽ cấp cho các bạn một mã Token, mã này sẽ gửi trực tiếp vào Gmail mà lúc nãy bạn đăng ký.

84

Như vậy chúng ta đã hoàn thành việc đăng ký tài khoản và tạo một Project mới, Một Project mới sẽ có giao diện như sau:

85

Bước 1: Chọn nút “+” để thêm tiện ích Bước 2: Chọn tiện ích “Timer

Tùy chỉnh cho nút nhấn

86

Và tủy chỉnh nút button

87

Huấn luyện giọng nói cho module VR3

Trên Module Reco V3, lệnh thoại được lưu trữ trong một nhóm lớn như thư viện. Bất kỳ 7 lệnh thoại nào trong thư viện đều có thể được nhập vào bộ nhận dạng, nghĩa là chỉ có 7 lệnh có hiệu lực cùng một lúc.

Hình 5. 22 Số lệnh mà module có thể thực hiện

Ta tiến hành nạp code train bằng cách chọn File train có sẵn trong thư viện Module VR3

88

Hình 5. 23 Cửa sổ khi nạp code huấn luyên

Sau đó bấm nạp chương trình

89

Hình 5. 25 Cửa sổ khi nạp code huấn luyện xong

Ta nhập lệnh sigtrain 0 nhanh để huấn luyện giọng số 0 (nhanh). Ta đọc 2 lần vào Micro thu âm cùng một giọng.

90

Sau khi đọc 2 lần vào mic ta nhận được nếu kết quả là Success, tức là thành cơng cịn Cant Match thì phải làm lại

Hình 5. 27 Cửa sổ khi đã huấn luyện xong sigtrain 0 nhanh

Lập lại thao tác với 5 lệnh còn lại “sigtrain 1 tien” , “sigtrain 2 lui” , “sigtrain 3 trai” , “sigtrain 4 phải” , “sigtrain 5 dung”

91

Và load đã thành cơng.

Hình 5. 29 Cửa sổ khi load thành công

Cứ thế, ta chỉ cần nạp chương trình chính là có thể sử dụng những dữ liệu giọng nói này để nhận dạng.

Một phần của tài liệu Thiết kế xe lăn hỗ trợ người khuyết tật (Trang 79)

Tải bản đầy đủ (PDF)

(102 trang)