Điều khiển nhận bằng cử chỉ và giọng nói (có code)

49 416 0
Điều khiển nhận bằng cử chỉ và giọng nói (có code)

Đ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

Điều khiển nhận bằng cử chỉ và giọng nói (có code)............................. Điều khiển nhận bằng cử chỉ và giọng nói (có code)............................. Điều khiển nhận bằng cử chỉ và giọng nói (có code)............................. Điều khiển nhận bằng cử chỉ và giọng nói (có code)............................. Điều khiển nhận bằng cử chỉ và giọng nói (có code).............................

ĐỒ ÁN TỐT NGHIỆP ĐIỀU KHIỂN NHỆN BẰNG CỬ CHỈ VÀ GIỌNG NĨI MỤC LỤC DANH MỤC CÁC HÌNH VẼ DANH MỤC CÁC BẢNG BIỂU DANH MỤC CÁC TỪ VIẾT TẮT DC Direct Current I2C Inter-Intergrated-Circuit IC Integrated Circuit LCD Liquid Crystal Display Rx Receiver Tx Transmitter UART Universal Asynchronous Receiver/Transmitter SPI Serial Peripheral Bus ĐỒ ÁN TỐT NGHIỆP Trang 6/44 CHƯƠNG - GIỚI THIỆU ĐỀ TÀI 1.1 Giới thiệu Trong năm trở lại đây, việc nghiên cứu chuyển động robot di chuyển chân thu hút nhiều người quan tâm khả di chuyển linh hoạt địa hình phức tạp địa hình lồi lỡm, sỏi, đá,… VOICE GESTURE RF BUTTON Hình 1-1: Bộ điều khiển nhện chân - Robot nhện có chân chân gồm bậc tự Do việc di chuyển trở nên linh hoạt, nhiên q trình tính tốn chuyển động khớp có chút phức tạp - Bộ điều khiển điều khiển nhện nhiều lệnh như: giọng nói, cử nút nhấn - Robot nhện tiến, lùi, qua trái, qua phải, đứng, ngồi - Đề tài sử dụng vi điều khiển ATmega328p, module nhận diện giọng nói, module nhận dạng cử APDS-9960, điều khiển truyền lệnh qua sóng RF 1.2 Mục tiêu đề tài Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 7/44 - Thiết kế mạch vi điều khiển, hiểu cảm biến nhận dạng cử APDS -9960, cảm biến nhận dạng giọng nói - Biết cách di chuyển nhện - Hoàn thành phần cứng nhện - 1.3 Hướng nghiên cứu Hiểu cách hoạt động module nhận dạng cử chỉ, nhận dạng giọng nói - Tìm hiểu thuật toán di chuyển nhện chân CHƯƠNG THIẾT KẾ HỆ THỐNG Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 8/44 1.4 Sơ đồ khối BỘ ĐIỀU KHIỂN RF - Voice Nhện chân - Gesture - Button - LCD Hình 2-2: Sơ đồ tổng quan hệ thống 1.1.1 Khối phát I2C I2CNguồn (Pin) Voice T AR USPI Gesture MCU Button NRF24L01 Hình 2-2: Sơ đồ khối phát Chức khối phát: - Nguồn: dùng để cấp nguồn vi điều khiển module khác - Voice, Gesture, Button: tín hiệu đầu vào để điều khiển nhện Điều khiển nhện cử giọng nói LCD ĐỒ ÁN TỐT NGHIỆP Trang 9/44 - MCU: vi điều khiển ATmega328p - Màn hình hiển thị: LCD16x2 - NRF24L01: để truyền tín hiệu điều khiển tới khối thu 1.1.2 Khối thu Nguồn (Pin) SPI MCU NRF24L01 Servo Hình 2-3: Sơ đồ khối thu Chức khối thu: - Nguồn: pin dùng để cấp nguồn cho vi điều khiển servo module khác - NRF24L01: module nhận tín hiệu từ phía phát - MCU: vi điều khiển ATmega328p - Servo: dùng để điều khiển chân robot nhện 1.5 Các linh kiện module Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 10/44 1.1.3 Voice Recognition RV3 [1] Hình 2-4: Module Voice Recognition RV3 [2] Sơ đồ chân module Voice Recognition RV3 - VCC: Chân cấp nguồn 5V - GND: Chân GND - TX, RX: transmitter/receiver Đặc tính module Voice Recognition RV3 - Module hỗ trợ tối đa 80 lệnh, lệnh tối đa 1.5s - Điều khiển dễ dàng qua UART/GPIO - Hỗ trợ thư viện arduino 1.1.4 APDS-9960 [3] Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 35/44 radio.write(msg, 1); radio.write(msg, 1); } if (digitalRead(nutnhan7) == LOW) { Serial.println("vaytay-nhan"); lcd.setCursor(12,0); lcd.print("Vtay"); msg[0] = 206; radio.write(msg, 1); radio.write(msg, 1); } if (digitalRead(nutnhan8) == LOW) { Serial.println("battay-nhan"); lcd.setCursor(12,0); lcd.print("Btay"); msg[0] = 207; radio.write(msg, 1); radio.write(msg, 1); } voice(); } void interruptRoutine() { Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 36/44 isr_flag = 1; } void handleGesture() { if ( apds.isGestureAvailable() ) { switch ( apds.readGesture() ) { case DIR_UP: Serial.println("UP"); lcd.setCursor(4,0); lcd.print("Tien"); msg[0] = 000; radio.write(msg, 1); radio.write(msg, 1); break; case DIR_DOWN: Serial.println("DOWN"); lcd.setCursor(4,0); lcd.print("Lui "); msg[0] = 001; radio.write(msg, 1); radio.write(msg, 1); break; case DIR_LEFT: Serial.println("LEFT"); lcd.setCursor(4,0); lcd.print("Trai"); msg[0] = 010; radio.write(msg, 1); radio.write(msg, 1); Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 37/44 break; case DIR_RIGHT: Serial.println("RIGHT"); lcd.setCursor(4,0); lcd.print("Phai"); msg[0] = 011; radio.write(msg, 1); radio.write(msg, 1); break; case DIR_NEAR: Serial.println("NEAR"); lcd.setCursor(4,0); lcd.print("Ngoi"); msg[0] = 100; radio.write(msg, 1); radio.write(msg, 1); break; case DIR_FAR: Serial.println("FAR"); lcd.setCursor(4,0); lcd.print("Dung"); msg[0] = 101; radio.write(msg, 1); radio.write(msg, 1); break; default: Serial.println("NONE"); } } Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 38/44 } void voice() { int ret; ret = myVR.recognize(buf, 50); if(ret>0) { switch(buf[1]){ case dung: Serial.println("dung"); lcd.setCursor(9,1); lcd.print("Dung"); msg[0] = 101; radio.write(msg, 1); radio.write(msg, 1); break; case ngoi: Serial.println("ngoi"); lcd.setCursor(9,1); lcd.print("Ngoi"); msg[0] = 100; radio.write(msg, 1); radio.write(msg, 1); break; case tien: Serial.println("tien"); lcd.setCursor(9,1); lcd.print("Tien"); Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 39/44 msg[0] = 000; radio.write(msg, 1); radio.write(msg, 1); break; case lui: Serial.println("lui"); lcd.setCursor(9,1); lcd.print("Lui "); msg[0] = 001; radio.write(msg, 1); radio.write(msg, 1); break; case quatrai: Serial.println("qua trai"); lcd.setCursor(9,1); lcd.print("Trai"); msg[0] = 010; radio.write(msg, 1); radio.write(msg, 1); break; case quaphai: Serial.println("qua phai"); lcd.setCursor(9,1); lcd.print("Phai"); msg[0] = 011; radio.write(msg, 1); radio.write(msg, 1); break; Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 40/44 default: Serial.println("Lenh khong xac dinh"); break; } } //end if ret > } Code thu: #include float move_speed; const float leg_move_speed = 10; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; Servo myservo7; Servo myservo8; Servo myservoA0; Servo myservoA1; Servo myservoA2; Servo myservoA3; Servo myservoA4; // create servo object to control a servo // twelve servo objects can be created on most boards //int pos = 0; // variable to store the servo position void setup() { Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 41/44 Serial.begin(9600); myservo2.attach(2); myservo3.attach(3); myservo4.attach(4); myservo5.attach(5); myservo6.attach(6); myservo7.attach(7); myservo8.attach(8); myservoA0.attach(A0); myservoA1.attach(A1); myservoA2.attach(A2); myservoA3.attach(A3); myservoA4.attach(A4); // attaches the servo on pin to the servo object //CHAN myservo2.write(28); myservo3.write(30); myservo4.write(130); /////////////////// //CHAN1 myservo5.write(152); myservo6.write(152); myservo7.write(50); /////////////////// //CHAN myservo8.write(152); myservoA0.write(152); myservoA1.write(90); /////////////////// Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 42/44 //CHAN3 myservoA2.write(28); myservoA3.write(28); myservoA4.write(90); } void loop() { if (Serial.available()>0) //delay(30); { state = Serial.read(); Serial.println(state); } else { state = 0; } switch (state) { case'a': stand(); break; case'b': if (!is_stand()) stand(); step_forward(1); // delay(2000); break; Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 43/44 case'e': if (!is_stand()) stand(); step_back(5); // delay(2000); break; case'f': if (!is_stand()) stand(); turn_left(5); break; case'g': hand_wave(3); break; case'h': if (!is_stand()) stand(); turn_right(5); break; default: break; } radioHandler(); } void radioHandler(){ if (radio.available()){ radio.read(msg, 1); Serial.println(msg[0]); if (msg[0] == 111) Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 44/44 { if (!is_stand()) stand(); step_forward(1); } if(msg[0] == 110) {phai} delay(10); } else{Serial.println("khong co tin hieu }; void stand() { //CHAN myservo2.write(70); myservo3.write(65); myservo4.write(130); /////////////////// //CHAN1 myservo5.write(110); myservo6.write(120); myservo7.write(50); /////////////////// //CHAN myservo8.write(100); myservoA0.write(120); myservoA1.write(90); /////////////////// //CHAN3 myservoA2.write(70); Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 45/44 myservoA3.write(65); myservoA4.write(85); } void sit() { //CHAN myservo2.write(28); myservo3.write(30); myservo4.write(130); /////////////////// //CHAN1 myservo5.write(152); myservo6.write(152); myservo7.write(50); /////////////////// //CHAN myservo8.write(152); myservoA0.write(152); myservoA1.write(90); /////////////////// //CHAN3 myservoA2.write(28); myservoA3.write(28); myservoA4.write(90); } void step_forward() { // chan Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 46/44 myservo8.write(120); delay(20); myservoA1.write(30); delay(20); myservoA0.write(120); delay(20); myservo8.write(100); delay(20); /////////////////// delay(1000); ///////////////////// //CHAN myservo2.write(70); myservo3.write(65); myservo4.write(70); delay(100); /////////////////// //CHAN1 myservo5.write(110); myservo6.write(80); myservo7.write(50); delay(100); /////////////////// //CHAN myservo8.write(100); myservoA0.write(90); Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 47/44 myservoA1.write(60); delay(100); /////////////////// //CHAN3 myservoA2.write(70); myservoA3.write(65); myservoA4.write(130); delay(1000); ////////////////// //chan myservo5.write(110); myservo6.write(120); myservo7.write(90); delay (1000); ///////////////// //CHAN myservo2.write(70); delay(500); myservo3.write(65); delay(500); myservo4.write(130); delay(500); //CHAN3 myservoA2.write(70); myservoA3.write(65); myservoA4.write(100); Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 48/44 delay(1000); } void phai() { //CHAN myservo8.write(100); myservoA0.write(120); myservoA1.write(30); // delay(200); myservo4.write(135); myservoA4.write(135); delay(500); //CHAN myservo2.write(70); myservo3.write(65); myservo4.write(30); //delay(100); myservoA1.write(50); delay(500); //CHAN1 myservo5.write(110); myservo6.write(120); myservo7.write(50); // delay(100); myservo4.write(70); delay(500); Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 49/44 //CHAN3 myservoA2.write(70); myservoA3.write(65); myservoA4.write(60); // delay(500); myservo7.write(70); } Điều khiển nhện cử giọng nói ... để cấp nguồn vi điều khiển module khác - Voice, Gesture, Button: tín hiệu đầu vào để điều khiển nhện Điều khiển nhện cử giọng nói LCD ĐỒ ÁN TỐT NGHIỆP Trang 9/44 - MCU: vi điều khiển ATmega328p... để điều khiển nhện: Voice recognition Tiến Lùi Trái Phải Gesture Nút nhấn Bảng 3-1: Tổng hợp lệnh điều khiển nhện 1.8 Sơ đồ nguyên lý vi điều khiển mạch in 1.1.11 Bên thu Điều khiển nhện cử giọng. .. đề tài Điều khiển nhện cử giọng nói ĐỒ ÁN TỐT NGHIỆP Trang 7/44 - Thiết kế mạch vi điều khiển, hiểu cảm biến nhận dạng cử APDS -9960, cảm biến nhận dạng giọng nói - Biết cách di chuyển nhện -

Ngày đăng: 23/02/2018, 19:44

Từ khóa liên quan

Mục lục

  • DANH MỤC CÁC HÌNH VẼ

  • DANH MỤC CÁC BẢNG BIỂU

  • DANH MỤC CÁC TỪ VIẾT TẮT

  • CHƯƠNG 1. GIỚI THIỆU ĐỀ TÀI

    • 1.1 Giới thiệu

    • 1.2 Mục tiêu đề tài

    • 1.3 Hướng nghiên cứu

    • CHƯƠNG 2. THIẾT KẾ HỆ THỐNG

      • 1.4 Sơ đồ khối

        • 1.1.1 Khối phát

        • 1.1.2 Khối thu

        • 1.5 Các linh kiện module

          • 1.1.3 Voice Recognition RV3 [1]

          • 1.1.4 APDS-9960 [3]

          • 1.1.5 LCD 16x2

          • 1.1.6 Vi điều khiển ATmega328p [7]

          • 1.1.7 Servo S9G

          • 1.1.8 NRF24L01

          • CHƯƠNG 3. LẬP TRÌNH VÀ THIẾT KẾ MẠCH

            • 1.6 Lưu đồ thuật toán

              • 1.1.9 Bên phát

              • 1.1.10 Bên thu

              • 1.7 Nguyên lý hoạt động của mạch

              • 1.8 Sơ đồ nguyên lý vi điều khiển và mạch in

                • 1.1.11 Bên thu

                • 1.1.12 Bên phát

                • 1.1.13 Hoàn thành nhện và tay điều khiển

Tài liệu cùng người dùng

Tài liệu liên quan