1. Trang chủ
  2. » Tất cả

(Đồ án hcmute) điều khiển robot bằng giọng nói sử dụng smartphone

77 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP NGÀNH CNKT ĐIỆN TỬ TRUYỀN THÔNG ĐIỀU KHIỂN ROBOT BẰNG GIỌNG NÓI SỬ DỤNG SMARTPHONE GVHD: TS NGUYỄN THANH HẢI SVTH: TRƯƠNG NGUYỄN QUANG HUY MSSV: 12141442 SKL 0 Tp Hồ Chí Minh, tháng năm 2014 an TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO ĐỒ ÁN TỐT NGHIỆP ĐIỀU KHIỂN ROBOT BẰNG GIỌNG NÓI SỬ DỤNG SMARTPHONE SVTH: TRƯƠNG NGUYỄN QUANG HUY MSSV: 12141442 Khoá: 12 Ngành: CNKT Điện tử Truyền thông GVHD: TS NGUYỄN THANH HẢI Tp Hồ Chí Minh, tháng năm 2014 an CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** Tp Hồ Chí Minh, ngày tháng năm 2016 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Trương Nguyễn Quang Huy MSSV: 12141442 Ngành: CNKT Điện tử Truyền Thông Lớp: 12141CLDT1 Giảng viên hướng dẫn: TS Nguyễn Thanh Hải ĐT: 01694150270 Ngày nhận đề tài: Ngày nộp đề tài: Tên đề tài : Điều khiển robot giọng nói sử dụng SmartPhone Các số liệu, tài liệu ban đầu: Nội dung thực đề tài: Sản phẩm: GIẢNG VIÊN HƯỚNG DẪN an CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Họ tên Sinh viên: Trương Nguyễn Quang Huy MSSV: 12141442 Ngành: CNKT Điện tử, Truyền thông Tên đề tài: Điều khiển robot giọng nói sử dụng SmartPhone Họ tên Giáo viên hướng dẫn: TS Nguyễn Thanh Hải NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng Giáo viên hướng dẫn (Ký & ghi rõ họ tên) an năm 20… CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc ******* PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ tên Sinh viên: Trương Nguyễn Quang Huy MSSV: 12141442 Ngành: CNKT Điện tử, Truyền thông Tên đề tài: Điều khiển robot giọng nói sử dụng SmartPhone Họ tên Giáo viên phản biện: NHẬN XÉT Về nội dung đề tài & khối lượng thực hiện: Ưu điểm: Khuyết điểm: Đề nghị cho bảo vệ hay không? Đánh giá loại: Điểm:……………….(Bằng chữ: ) Tp Hồ Chí Minh, ngày tháng Giáo viên phản biện (Ký & ghi rõ họ tên) an năm 20… LỜI CẢM ƠN Để hoàn thành đồ án tốt nghiệp này, lời em xin bày tỏ lòng biết ơn sâu sắc đến thầy TS Nguyễn Thanh Hải, tận tình hướng dẫn suốt trình em thực đồ án Em xin chân thành cảm ơn quý thầy, cô trường Đại Học Sư Phạm Kỹ Thuật TP.HCM, đặc biệt thầy cô khoa Điện - Điện Tử, nhiệt tình giúp đỡ, truyền đạt kiến thức suốt q trình học tập nhóm trường Vốn kiến thức tiếp thu trình học tập khơng tảng cho q trình thực đồ án tốt nghiệp mà hành trang quý báu cho sự nghiệp nhóm sau Em xin cảm ơn sự ủng hộ giúp đỡ nhiệt tình gia đình, bạn bè, người thân động viên, giúp đỡ nhóm suốt q trình học tập thực đồ án tốt nghiệp Mặc dù cố gắng hết sức, song chắn đồ án khơng tránh khỏi thiếu sót Em mong nhận sự thơng cảm bảo tận tình quý thầy cô bạn Cuối em xin kính chúc q Thầy, Cơ, gia đình bạn bè dồi sức khỏe thành công sự nghiệp Xin chân thành cảm ơn! Người thực đề tài Trương Nguyễn Quang Huy iv an TÓM TẮT Hiện nay, Nhận dạng tiếng nói điện thoại động thông minh ( Smart Phone) ngày phát triển giới nhiên việc nhận dạng tiếng nói bắt đầu xuất Việt Nam vài năm trở lại xa lạ với nhiều người; thêm vào việc lập trình ứng dụng điện thoại ngày phổ biến dễ tiếp cận hết Với mục đích muốn tiếp cận với cơng nghệ nhận dạng tiếng nói mảng lập trình ứng dụng điện thoại di động em mong muốn tự tạo ứng dụng nhận diện giọng nói riêng mình, sử dụng kiến thức học mơn lập trình Android dựa tảng mã nguồn mở lập trình ứng dụng, em tạo thành cơng ứng dụng nhận diện giọng nói sử dụng ứng dụng để điều khiển xe robot: Ứng dụng tạo phần mềm Android Studio có biểu tượng nút nhấn đơn giản dễ thực thao tác, ứng dụng nhận diện giọng nói sử dụng Google Voice Input để chuyển đổi giọng nói sau dùng Bluetooth để gửi liệu chuyển đổi đến xe robot Xe robot thiết kế nhỏ, đơn giản, cấu tạo gồm bánh xe, ứng dụng vi điều khiển ATMEGA 328 để điều khiển mạch điều khiển động xe hoạt động dựa câu lệnh nhận từ ứng dụng nhận diện giọng nói v an MỤC LỤC CHƯƠNG DẪN NHẬP 1.1 Đặt vấn đề 1.2 Lý chọn đề tài 1.4 Nội dung nghiên cứu .2 1.5 Giới hạn 1.6 Bố cục đề tài CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu bo mạch Arduino .4 2.1.1 Giới thiệu bo mạch Arduino UNO R3 2.1.2 Phần mềm lập trình 2.2 Giới thiệu mạch giao tiếp Bluetooth HC 05 2.2.1 Mô tả mạch 2.2.2 Giao tiếp Bluetooth HC05 2.3 Chuẩn truyền liệu .9 2.3.1 Ưu điểm 10 2.3.2 Nhược điểm 10 2.4 Giới thiệu Android Studio 10 2.4.1 Sơ lượt sử dụng Android Studio 11 2.4.2 Cấu trúc project Android Studio 14 2.5 Giới thiệu cảm biến siêu âm SRF-05 18 CHƯƠNG THIẾT KẾ HỆ THỐNG 20 3.1 Giới thiệu hệ thống 20 3.2 Sơ đồ khối toàn hệ thống 20 3.3 Thiết kế ứng dụng dùng Android Studio 22 3.3.1 Lưu đồ cho ứng dụng nhận diện giọng nói 22 3.3.2 Thiết kế ứng dụng nhận diện giọng nói 23 3.4 Thiết kế Robot 27 3.4.1 Giới thiệu mạch điều khiển động L298 .27 3.4.2 Giới thiệu động DC giảm tốc 28 3.4.3 Cấu tạo phần khung xe Robo t 29 vi an 3.4.4 Tính tốn khoảng cách sử dụng cảm biến siêu âm SRF 05 30 3.4.5 Lưu đồ cho chương trình Arduino 33 3.4.6 Sơ đồ mạch nguyên lý 35 CHƯƠNG KẾT QUẢ NGHIÊN CỨU 37 4.1 Ứng dụng nhận diện giọng nói SmartPhone 37 4.2 Thiết kế xe robot .39 4.3 Hoạt động toàn hệ thống 43 CHƯƠNG KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 48 5.1 Kết luận 48 5.2 Hướng phát triển .48 vii an DANH MỤC CÁC TỪ VIẾT TẮT SDK: Software Development Kit IDE: Intergrated Development Environment API: Application Programming Interface Bluetooth SPP: Bluetooth Serial Port Profile viii an ĐỒ ÁN TỐT NGHIỆP PHỤ LỤC 1: CODE ARDUINO #include #define TRIGGER_PIN 12 // định nghĩa chân trigger chân số 12 #define ECHO_PIN 11 // định nghĩa chân echo chân số 11 #define MAX_DISTANCE 200 // khoảng cách lớn mà ta muốn xác lập (tính theo cm) Tầm cảm biến đo khoảng thừ 400-500cm String voice; //Motor A int enA = 9; int in1 = 7; int in2 = 6; //Motor B int in3 = 5; int in4 = 4; int enB = 3; int speed1 = 200; // điều khiển tốc độ PWM int i; unsigned int khoangcach; unsigned int uS; boolean trangthai=0; 50 an ĐỒ ÁN TỐT NGHIỆP NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Thiết lập cho thư viện NEWPING biết chân echo, chân trigger khoảng cách lớn để đo void auto1(){ trangthai=1; digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, speed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, speed1); } void go(){ trangthai=0; digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, speed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, speed1); delay(5000); digitalWrite(in1, LOW); 51 an ĐỒ ÁN TỐT NGHIỆP digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void reverse(){ trangthai=0; digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, speed1); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, speed1); delay(5000); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void Stop(){ trangthai=0; digitalWrite(in1, LOW); digitalWrite(in2, LOW); 52 an ĐỒ ÁN TỐT NGHIỆP digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void left(){ trangthai=1; digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, speed1); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, speed1); delay(450); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, speed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, speed1); } void right(){ trangthai=1; 53 an ĐỒ ÁN TỐT NGHIỆP digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, speed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, speed1); delay(450); digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, speed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, speed1); } void turn_left(){ trangthai=0; digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(enA, speed1); 54 an ĐỒ ÁN TỐT NGHIỆP digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enB, speed1); delay(450); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void turn_right(){ trangthai=0; digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(enA, speed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enB, speed1); delay(450); digitalWrite(in1, LOW); 55 an ĐỒ ÁN TỐT NGHIỆP digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void setup() { Serial.begin(9600); pinMode(in1, OUTPUT); //Set control pins to be outputs pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); digitalWrite(enA, LOW); digitalWrite(enB, LOW); } void loop() { uS = sonar.ping(); 56 an ĐỒ ÁN TỐT NGHIỆP khoangcach=uS/US_ROUNDTRIP_CM; if((khoangcach 0) { if(voice =="tự động") {auto1();} else if(voice =="xe chạy") {go();} else if(voice == "dừng xe"){Stop();} else if(voice == "rẽ trái") {left();} else if(voice == "rẽ phải") {right();} else if(voice == "đằng sau") {reverse();} else if(voice == "quay trái") {turn_left();} 58 an ĐỒ ÁN TỐT NGHIỆP else if(voice == "quay phải") {turn_right();} else if(voice == "tăng tốc") {speed1=255; go();} else if(voice == "tốc độ bình thường") {speed1=200; go();} else if(voice == "giảm tốc") {speed1=100; go();} voice=""; } } } 59 an ĐỒ ÁN TỐT NGHIỆP PHỤ LỤC 2: CODE ANDROID STUDIO Code file activity_main.xml (thiết kế layout) 60 an ĐỒ ÁN TỐT NGHIỆP Code file MainActivity.java (lập trình đối tượng) package com.example.huy.voiceblue; import android.app.Activity; import import import import import import import import import android.content.Intent; android.os.Bundle; android.speech.RecognizerIntent; android.support.v7.app.AppCompatActivity; android.util.Log; android.view.View; android.widget.Button; android.widget.ImageButton; android.widget.Toast; import java.util.ArrayList; import app.akexorcist.bluetotohspp.library.BluetoothSPP; import app.akexorcist.bluetotohspp.library.BluetoothState; import app.akexorcist.bluetotohspp.library.DeviceList; public class MainActivity extends AppCompatActivity { BluetoothSPP bt; private static final int RQS_RECOGNITION =1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt = new BluetoothSPP(this); if(!bt.isBluetoothAvailable()) { Toast.makeText(getApplicationContext() , "Bluetooth is not available" , Toast.LENGTH_SHORT).show(); finish(); } bt.setBluetoothConnectionListener(new BluetoothSPP.BluetoothConnectionListener() { public void onDeviceConnected(String name, String address) { Toast.makeText(getApplicationContext() , "Connected to " + name , Toast.LENGTH_SHORT).show(); } public void onDeviceDisconnected() { Toast.makeText(getApplicationContext() , "Connection lost" , Toast.LENGTH_SHORT).show(); } public void onDeviceConnectionFailed() { Log.i("Check", "Unable to connect"); } }); 61 an ĐỒ ÁN TỐT NGHIỆP bt.setAutoConnectionListener(new BluetoothSPP.AutoConnectionListener() { public void onNewConnection(String name, String address) { Log.i("Check", "New Connection - " + name + " - " + address); } public void onAutoConnectionStarted() { Log.i("Check", "Auto menu_connection started"); } }); Button btnConnect = (Button)findViewById(R.id.btnConnect); btnConnect.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ if(bt.getServiceState() == BluetoothState.STATE_CONNECTED) { bt.disconnect(); } else { Intent intent = new Intent(getApplicationContext(), DeviceList.class); startActivityForResult(intent, BluetoothState.REQUEST_CONNECT_DEVICE); } } }); } public void onDestroy() { super.onDestroy(); bt.stopService(); } public void onStart() { super.onStart(); if(!bt.isBluetoothEnabled()) { bt.enable(); } else { if(!bt.isServiceAvailable()) { bt.setupService(); bt.startService(BluetoothState.DEVICE_OTHER); setup(); } } } public void setup() { ImageButton btnSend = (ImageButton)findViewById(R.id.imbtnSend); btnSend.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Intent intent=new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerInt ent.LANGUAGE_MODEL_FREE_FORM); 62 an ĐỒ ÁN TỐT NGHIỆP intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"Speech to Recognize"); startActivityForResult(intent,RQS_RECOGNITION); } }); } public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == BluetoothState.REQUEST_CONNECT_DEVICE) { if(resultCode == Activity.RESULT_OK) bt.connect(data); } else if(requestCode == BluetoothState.REQUEST_ENABLE_BT) { if(resultCode == Activity.RESULT_OK) { bt.setupService(); } else { Toast.makeText(getApplicationContext() , "Bluetooth was not enabled." , Toast.LENGTH_SHORT).show(); finish(); } } if((requestCode == RQS_RECOGNITION)& (resultCode==RESULT_OK)){ ArrayList result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); bt.send(result.get(0).toString()+"#",true); Toast.makeText(getApplicationContext(),result.get(0).toString(), Toast.LENGTH_SHORT).show(); } } } 63 an S an K L 0 ... tích giọng nói sau gửi tính hiệu đến xử lý dùng tín hiệu để điều khiển động vận hành robot người sử dụng có u cầu Khối phân tích giọng nói em sử dụng SmartPhone tạo ứng dụng SmartPhone Ứng dụng. .. lĩnh ứng dụng nhận diện giọng nói điện thoại động, khả lập trình điện thoại lập trình điều khiển thiết bị, em xin thực đề tài ? ?Điều khiển robot giọng nói sử dụng SMARTPHONE? ?? an ĐỒ ÁN TỐT NGHIỆP... diện giọng nói riêng mình, sử dụng kiến thức học môn lập trình Android dựa tảng mã nguồn mở lập trình ứng dụng, em tạo thành cơng ứng dụng nhận diện giọng nói sử dụng ứng dụng để điều khiển

Ngày đăng: 02/02/2023, 09:07

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN