Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 85 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
85
Dung lượng
4,09 MB
Nội dung
Trang BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CƠ KHÍ ĐINH VĂN THIỆN THIẾT KẾ, CHẾ TẠO HỆ THỐNG ĐIỀU KHIỂN ĐÈN CỦA NHÀ THÔNG MINH SỬ DỤNG NHẬN DẠNG GIỌNG NÓI CHUYÊN ĐỀ TỐT NGHIỆP ĐẠI HỌC CHUYÊN NGÀNH CÔNG NGHỆ KĨ THUẬT CƠ ĐIỆN TỬ Nha Trang, tháng năm 2018 Trang BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CƠ KHÍ ĐINH VĂN THIỆN THIẾT KẾ, CHẾ TẠO HỆ THỐNG ĐIỀU KHIỂN ĐÈN CỦA NHÀ THÔNG MINH SỬ DỤNG NHẬN DẠNG GIỌNG NÓI CHUYÊN ĐỀ TỐT NGHIỆP ĐẠI HỌC CHUYÊN NGÀNH CÔNG NGHỆ KĨ THUẬT CƠ ĐIỆN TỬ GVHD: TS NGUYỄN THIÊN CHƯƠNG Nha Trang, tháng năm 2018 Trang LỜI CẢM ƠN Trong suốt trình học tập rèn luyện trường, bảo giảng dạy tận tình thầy cô môn Cơ điện tử giúp đỡ thầy cô, cán công nhân viên trường đại học Nha Trang giúp em tiếp thu kiến thức cách hiệu hành trang giúp em vững vàng bước vào tương lai Cho phép em xin gửi lời tri ân chân thành lới chúc sức khỏe đến tất thầy cô, cán bộ, công nhân viên nhà trường giúp đỡ em suốt thời gian em học tập rèn luyện trường Nhận hướng dẫn nhiệt tình thầy Nguyễn Thiên Chương với cố gắng thân giúp đỡ bạn bè, sau thời gian nghiên cứu em hồn thành chun đề « Thiết kế, chế tạo hệ thống điều khiển đèn nhà thông minh sử dụng nhận dạng giọng nói » hạn Để hồn thành chuyên đề tốt nghiệp, em xin gửi lời cảm ơn sâu sắc đến thầy Nguyễn Thiên Chương trực tiếp hướng dẫn, tận tình bảo khích lệ em suốt trình làm chuyên đề, cảm ơn thầy giúp đỡ em tháo gỡ khó khăn Có thành ngày hơm nay, em xin bày tỏ biết ơn đến gia đình, người thân bạn bè tạo điều kiện thuận lợi, giúp đỡ em gặp khó khăn hay nản lịng Mặc dù q trình thực cố gắng không tránh khỏi thiếu sót, mong góp ý, xây dựng từ quý thầy cô bạn bè Sinh viên thực ĐINH VĂN THIỆN Trang MỤC LỤC LỜI CẢM ƠN MỤC LỤC DANH MỤC HÌNH ẢNH DANH MỤC BẢNG 10 CÁC THUẬT NGỮ 11 PHẦN MỞ ĐẦU 12 CHƯƠNG 1: TỔNG QUAN VỀ NHÀ THÔNG MINH 13 1.1 Giới thiệu chung .13 1.1.1 Giới thiệu chung nhà thông minh 13 1.1.2 Hệ thống điều khiển nhà thông minh 15 1.1.3 Một số thành phần hệ thống nhà thông minh 17 1.2 Các hệ thống nhà thông minh nước .20 1.2.1 Nhà thông minh BKAV thuộc tập đồn cơng nghệ BKAV .20 1.2.2 Nhà thơng minh LUMI .22 1.2.3 Nhà thông minh ACIS 24 CHƯƠNG 2: PHƯƠNG PHÁP VÀ NỘI DUNG NGHIÊN CỨU 27 2.1 Phương pháp nghiên cứu 27 2.2 Nhận dạng giọng nói .28 2.3 Truyền nhận liệu qua mạng Internet .33 2.3.1 Các khái niệm .33 2.3.2 Giới thiệu MQTT .34 2.3 Yêu cầu hệ thống 38 2.3.1 Yêu cầu phần cứng 38 2.3.2 Yêu cầu phần mềm 39 2.4 Phương án thiết kế phần mềm 40 Trang 2.4.1 Sử dụng trí thơng minh nhân tạo Cortana 40 2.4.2 Sử dụng thư viện giọng nói Microsoft Visual Studio 41 2.4.3 Sử dụng thư viện giọng nói Android Studio 44 2.4.4 Lập trình cho ứng dụng Android Studio 45 2.5 Phương án thiết kế mạch điều khiển .50 2.5.1 Module wifi ESP8266 51 2.5.2 Lập trình cho ESP8266 Arduino IDE 54 2.6 Thiết kế mạch 57 2.7 Phương án thiết kế 57 2.8 Chế tạo 59 2.9 Phần mạch .60 2.10 Hướng dẫn cài đặt sử dụng ứng dụng 61 2.10.1 Hướng dẫn cài đặt 61 2.10.2 Hướng dẫn sử dụng 62 CHƯƠNG 3: KẾT QUẢ NGHIÊN CỨU VÀ THỬ NGHIỆM 64 3.1 Kiểm tra 64 3.2 Vận hành kiểm tra độ ổn định 64 3.2.1 Chạy thử nhận diện giọng nói 65 3.2.2 Chạy thử điều khiển nút nhấn 68 3.2.3 Chạy thử điều khiển giọng nói 68 3.3 Các yếu tố ảnh hưởng đến tính ổn định thời gian đáp ứng mơ hình 68 CHƯƠNG 4: KẾT LUẬN VÀ ĐỀ XUẤT 69 4.1 Kết luận 69 4.1.1 Kết đạt 69 4.1.2 Những vấn đề chưa đạt 69 4.2 Đề xuất 69 4.2.1 Đề xuất phần cứng 69 4.2.2 Đề xuất phần mềm .69 Trang TÀI LIỆU THAM KHẢO 70 PHỤ LỤC 71 Lập trình cho ESP8266 Arduino IDE 71 Lập trình phần mềm Android Studio .74 Lớp JAVA 74 Lớp XML 83 Các video giải thích code chạy thử 85 Trang DANH MỤC HÌNH ẢNH Hình 1.1 Smart house .13 Hình 1.2 Hệ thống ánh sáng thông minh 14 Hình 1.3 Nhà thơng minh điều khiển giọng nói 14 Hình 1.4 Hệ thống an tồn nhà thơng minh 15 Hình 1.5 Hệ thống điều khiển nhà thông minh cố định 15 Hình 1.6 Hệ thống điều khiển nhà thơng minh thiết bị di động 16 Hình 1.7 Hệ thống chiếu sáng thông minh .18 Hình 1.8 Hệ thống kéo mở rèm 19 Hình 1.9 Hệ thống báo cháy nhà thơng minh 20 Hình 1.10 BKAV Smarthome 21 Hình 1.11 Nhà thơng minh Lumi 22 Hình 1.12 Nhà thơng minh ACIS 24 Hình 2.1 Nhận dạng giọng nói Google Assistant 28 Hình 2.2 Phần mềm nhận diện giọng nói hoạt động nào? 29 Hình 2.3 Google Assistant 31 Hình 2.4 Siri iPhone 32 Hình 2.5 Kiến trúc mức cao (high-level) MQTT 35 Hình 2.6 OpenSource MQTT broker .35 Hình 2.7 Mơ hình chung kết nối 36 Hình 2.8 Giao diện trang web 37 Hình 2.9 Chọn Sign-up 37 Hình 2.10 Giao diện đăng nhập 38 Hình 2.11 Thơng tin Instance 38 Hình 2.12 Trí thơng minh nhân tạo Cortana 40 Hình 2.13 Phần mềm Visual Studio .42 Hình 2.14 Phần mềm Android Studio 44 Hình 2.15 Các lệnh nhận diện giọng nói 45 Trang Hình 2.16 Thơng tin Client MQTT 46 Hình 2.17 Các lệnh kết nối MQTT 46 Hình 2.18 Gửi lệnh kiểm tra MQTT 47 Hình 2.22 Gửi lệnh lênh MQTT 47 Hình 2.23 Code nhận lệnh giọng nói .48 Hình 2.24 Giao diện phần mềm 49 Hình 2.25 Thơng tin nút ấn-Layout text 49 Hình 2.4 ESP8266 -01 50 Hình 2.5 Wifi-Arduino 50 Hình 2.6 NodMCU ESP8266-12 51 Hình 2.7 NodMCU ESP8266-12E 51 Hình 2.8 Các phiên ESP8266 53 Hình 2.9 Giao diện Arduio IDE .54 Hình 2.10 Additional Board Manager URLs 55 Hình 2.11 Chọn mạch điều khiển 55 Hình 2.12 Tải thư viện ESP8266 56 Hình 2.13 Chọn mạch để lập trình 56 Hình Sơ đồ dây .57 Hình 2.14 Bản thiết kế mơ hình .58 Hình 2.27 Cắt fomat .59 Hinh 2.29 Phần khung nhà .59 Hình 2.24 Tiến hành trang trí mơ hình 60 Hình 2.31 Nối dây hệ thống LED, quạt relay 60 Hình 2.32 Lắp ráp mạch điều khiển .61 Hình 2.33 Chọn thiết bị cần cài đặt 62 Hình 2.34 Giao diện phần mềm 62 Hình 3.1 Đo điện áp đầu vào mơ hình .64 Hình 3.2 Chạy thử Module nhận diện giọng nói 65 Trang Hình 3.3 Đồ thị ảnh hưởng độ ồn 66 Hình 3.4 Giao diện naturalreaders.com 66 Hình 3.4 Mức độ nhận diện giọng nói khác 67 Trang 10 DANH MỤC BẢNG Bảng 3.1 Ảnh hưởng độ ồn tới Module nhận diện giọng nói 65 Bảng 3.2 Ảnh hưởng giọng nói khác .67 Trang 71 PHỤ LỤC Lập trình cho ESP8266 Arduino IDE #include #include void nhandl(char *tp, byte *ms, unsigned int length) { String topic(tp); String message = String ((char *)ms); message.remove(length); Serial.print("Co du lieu duoc truyen "); Serial.print(topic); Serial.println(message); if(topic=="A"&&message=="1") while (digitalRead(D0)==HIGH) { digitalWrite(D0, LOW); } if(topic=="A"&&message=="0") while (digitalRead(D0)==LOW) { digitalWrite(D0, HIGH); } if(topic=="B"&&message=="1") while (digitalRead(D1)==HIGH) { digitalWrite(D1, LOW); } if(topic=="B"&&message=="0") while (digitalRead(D1)==LOW) { digitalWrite(D1, HIGH); } if(topic=="C"&&message=="1") while (digitalRead(D2)==HIGH) { Trang 72 digitalWrite(D2, LOW); } if(topic=="C"&&message=="0") while (digitalRead(D2)==LOW) { digitalWrite(D2, HIGH); } if(topic=="D"&&message=="1") while (digitalRead(D3)==HIGH) { digitalWrite(D3, LOW); } if(topic=="D"&&message=="0") while (digitalRead(D3)==LOW) { digitalWrite(D3, HIGH); } } WiFiClient c; PubSubClient MQTT("m14.cloudmqtt.com",19963,nhandl,c); //server, port, callback, client void setup() { Serial.begin(9600); while(WiFi.status()!=WL_CONNECTED) { WiFi.begin("Steven", "tabcxyz123"); delay(100); break; } //Dam bao IC vao duoc wifi, neu khong duoc wifi thi se khong in thong bao Serial.println("\nDa vao duoc Internet"); while(1) { delay(500); if(MQTT.connect ("ESP","bewqsvno","sLVTYp8voqpa")) //clientID (tuy chon), username, password break; } Serial.println("\nDa vao duoc MQTT"); Trang 73 MQTT.publish("test", "Da ket noi cong MQTT"); MQTT.subscribe("A"); //Dang ki topic MQTT.subscribe("B"); MQTT.subscribe("C"); MQTT.subscribe("D"); pinMode(D0, OUTPUT); pinMode(D1, OUTPUT); pinMode(D2, OUTPUT); pinMode(D3, OUTPUT); digitalWrite(D0, HIGH); digitalWrite(D1, HIGH); digitalWrite(D2, HIGH); digitalWrite(D3, HIGH); } void loop() { MQTT.loop(); } Trang 74 Lập trình phần mềm Android Studio Lớp JAVA package com.example.steventee.jarvis; import android.content.ActivityNotFoundException; import android.content.Intent; import android.media.MediaPlayer; import android.speech.RecognizerIntent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import org.eclipse.paho.android.service.MqttAndroidClient; import org.eclipse.paho.client.mqttv3.IMqttActionListener; import org.eclipse.paho.client.mqttv3.IMqttToken; import org.eclipse.paho.client.mqttv3.MqttClient; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Locale; public class MainActivity extends AppCompatActivity { MediaPlayer myAudio; MediaPlayer myAudio1; MediaPlayer myA1; MediaPlayer myA0; MediaPlayer myB1; MediaPlayer myB0; MediaPlayer myC1; MediaPlayer myC0; MediaPlayer myD1; MediaPlayer myD0; int x=0; int w=0; int q=0; Trang 75 int u=0; static String MQTTHOST = "tcp://m14.cloudmqtt.com:19963"; static String USERNAME = "bewqsvno"; static String PASSWORD = "sLVTYp8voqpa"; MqttAndroidClient client; private Button button; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myAudio = MediaPlayer.create(MainActivity.this,R.raw.e); myAudio1 = MediaPlayer.create(MainActivity.this,R.raw.f); myA1 = MediaPlayer.create(MainActivity.this,R.raw.a1); myA0 = MediaPlayer.create(MainActivity.this,R.raw.a0); myB1 = MediaPlayer.create(MainActivity.this,R.raw.b1); myB0 = MediaPlayer.create(MainActivity.this,R.raw.b0); myC1 = MediaPlayer.create(MainActivity.this,R.raw.c1); myC0 = MediaPlayer.create(MainActivity.this,R.raw.c0); myD1 = MediaPlayer.create(MainActivity.this,R.raw.d1); myD0 = MediaPlayer.create(MainActivity.this,R.raw.d0); String clientId = MqttClient.generateClientId(); client = new MqttAndroidClient(this.getApplicationContext(), MQTTHOST, clientId); MqttConnectOptions options = new MqttConnectOptions(); options.setUserName(USERNAME); options.setPassword(PASSWORD.toCharArray()); try { IMqttToken token = client.connect(options); token.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { Toast.makeText(MainActivity.this, "Connected Steve!", Toast.LENGTH_LONG).show(); Trang 76 myAudio.start(); } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { Toast.makeText(MainActivity.this, "Connected Fail Steve!", Toast.LENGTH_LONG).show(); } }); } catch (MqttException e) { e.printStackTrace(); } textView = (TextView) this.findViewById(R.id.textView); button = (Button) this.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH); try{ startActivityForResult(intent,200); }catch (ActivityNotFoundException a){ Toast.makeText(getApplicationContext(),"Intent problem", Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 200){ if(resultCode == RESULT_OK && data != null){ ArrayList result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); Trang 77 textView.setText(result.get(0)); String a = textView.getText().toString().toLowerCase(); if(a.contains("on the green light")||a.contains("the green light on")) { String topic = "A"; String message = "1"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myA1.start(); } if(a.contains("off the green light")||a.contains("the green light off")) { String topic = "A"; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myA0.start(); } if(a.contains("on the blue light")||a.contains("the blue light on")) { String topic = "B"; String message = "1"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myB1.start(); } if(a.contains("off the blue light")||a.contains("the blue light off")) { String topic = "B"; Trang 78 String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myB0.start(); } if(a.contains("on the wall light")||a.contains("the wall light on")) { String topic = "C"; String message = "1"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myC1.start(); } if(a.contains("off the wall light")||a.contains("the wall light off")) { String topic = "C"; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myC0.start(); } if(a.contains("fan on")||a.contains("on the fan")) { String topic = "D"; String message = "1"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myD1.start(); Trang 79 } if(a.contains("fan off")||a.contains("off the fan")) { String topic = "D"; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myD0.start(); } } } } public void pub(View v){ String topic = "Check"; String message = "Successful"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myAudio1.start(); } @Override protected void onPause() { super.onPause(); myAudio.release(); } public void A(View v) { if(u==0) { String topic = "A"; String message = "1"; try { Trang 80 client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myA1.start(); u=1; } else { String topic = "A"; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myA0.start(); u=0; } } public void B(View v) { if(q==0) { String topic = "B"; String message = "1"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myB1.start(); q=1; } else { String topic = "B"; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); Trang 81 } catch (MqttException e) { e.printStackTrace(); } myB0.start(); q=0; } } public void C(View v) { if(w==0) { String topic = "C"; String message = "1"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myC1.start(); w=1; } else { String topic = "C"; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myC0.start(); w=0; } } public void D(View v) { if(x==0) { String topic = "D"; String message = "1"; Trang 82 try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myD1.start(); x=1; } else { String topic = "D" + ""; String message = "0"; try { client.publish(topic, message.getBytes(), 0, false); } catch (MqttException e) { e.printStackTrace(); } myD0.start(); x=0; } } } Trang 83 Lớp XML Các video giải thích code chạy thử Nhận dạng giọng nói: Giải thích code phần nhận dạng giọng nói Voice: chạy thử module nhận dạng giọng nói Nút nhấn: Giải thích code phần nút nhấn ESP: giải thích code phần đệm ESP 8266 Nhận lệnh giọng nói: Giải thích code phầ nhận diện giọng nói Demo: chạy thử tồn mơ hình ... em nhận thấy việc ứng dụng giọng nói vào điều khiển nhà thông minh chưa phổ biến, nên em định chọn đề tài ? ?Thiết kế, chế tạo hệ thống điều khiển đèn nhà thông minh sử dụng nhận dạng giọng nói? ?... an tồn nhà thơng minh 1.1.2 Hệ thống điều khiển nhà thông minh 1.1.2.1 Hệ thống điều khiển cố định Với hệ thống này, thiết bị lắp đặt lắp cố định nơi sử dụng, kể điều khiển Người sử dụng thiết. .. thơng minh » , đồng thời áp dụng kiến thức học để tạo sản phẩm sử dụng sống ngày, nên em lựa chọn đề tài ? ?Thiết kế, chế tạo hệ thống điều khiển đèn nhà thơng minh sử dụng nhận dạng giọng nói? ?