Discurso controlado Quadropod (5 / 6 paso)

Paso 5: codificación

Arduino:

Lanzamiento de Arduino y abrir un dibujo nuevo. Lamentablemente no tengo tiempo suficiente para enseñarle los conceptos básicos de Arduino. Usted puede ver algunos tutoriales si te apetece. Así que esto es lo que vamos a hacer, una vez que usted abre un bosquejo nuevo: archivo >> nuevo o Ctrl + N.

Copiar pegar el código siguiente (o descargar el archivo adjunto). Debo Oddbot otra vez por haberme ayudado con la parte de movimiento de la código muuucho muuuucho detrás.

El código:

 /* Title: Speech Controlled Quadropod Author: Adith Jagadish Boloor Comments: This code is free for you to use, modify or simply stare at when you are really bored. */ #include <Servo.h> // Servo Library // Starting positions of the servos #define FLHcenter 1500 #define FRHcenter 1500 #define RLHcenter 1520 #define RRHcenter 1450 #define FLKcenter 1150 #define FRKcenter 1220 #define RLKcenter 1220 #define RRKcenter 1210 // Here you can change servo pin numbers corresponding // to your specific connections #define FLHpin 46 // Front Left Hip servo pin #define FRHpin 52 // Front Right Hip servo pin #define RLHpin 28 // Rear Left Hip servo pin #define RRHpin 13 // Rear Right Hip servo pin #define FLKpin 47 // Front Left Knee servo pin #define FRKpin 53 // Front Right Knee servo pin #define RLKpin 29 // Rear Left Knee servo pin #define RRKpin 12 // Rear Right Knee servo pin // Buffer for the speech message char INBYTE; // LEDs!!!!! If you choose to use 'em int led1 = 27; int led2 = 11; int led3 = 45; int led4 = 26; // Some constants for the bot's motions, yes you may // play with them to get the best performance int Time = 90; int LShift = 280; int RShift = 280; int Raise = 550; // Define servos Servo FLHservo; Servo FRHservo; Servo RLHservo; Servo RRHservo; Servo FLKservo; Servo FRKservo; Servo RLKservo; Servo RRKservo; void setup() { // Attach servos (digitally) FLHservo.attach(FLHpin); FRHservo.attach(FRHpin); RLHservo.attach(RLHpin); RRHservo.attach(RRHpin); FLKservo.attach(FLKpin); FRKservo.attach(FRKpin); RLKservo.attach(RLKpin); RRKservo.attach(RRKpin); // Attach LEDs (digitally) pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); Serial.begin(9600); // Center servos FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter+700); FRKservo.writeMicroseconds(FRKcenter+700); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); delay(500); // Prints out the controls mapped to different letters Serial.println("wasd - movement"); Serial.println("z - sleep"); Serial.println("x - play dead"); Serial.println("i - sit"); Serial.println("u - stand"); Serial.println("q - wake up"); } void loop() { Serial.println("Ready to accept command"); while (!Serial.available()); // stay here so long as COM port is empty INBYTE = Serial.read(); // read next available byte delay(50); if (INBYTE == 'q') // wake up - flashes LEDs if you used them { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); } else if (INBYTE == 'z') //Sleeps { FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter+700); FRKservo.writeMicroseconds(FRKcenter+700); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); delay(1000); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); delay(200); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); delay(200); } else if (INBYTE == 'u') // stand Up { // Center servos FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter); FRKservo.writeMicroseconds(FRKcenter); RLKservo.writeMicroseconds(RLKcenter); RRKservo.writeMicroseconds(RRKcenter); delay(1000); } else if (INBYTE == 'x') // plays dead X { FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter); RRHservo.writeMicroseconds(RRHcenter); FLKservo.writeMicroseconds(FLKcenter+700); FRKservo.writeMicroseconds(FRKcenter+700); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); delay(1000); } else if (INBYTE == 'i') //sits { FLHservo.writeMicroseconds(FLHcenter); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter-600); RRHservo.writeMicroseconds(RRHcenter+600); FLKservo.writeMicroseconds(FLKcenter); FRKservo.writeMicroseconds(FRKcenter); RLKservo.writeMicroseconds(RLKcenter+700); RRKservo.writeMicroseconds(RRKcenter+700); } else if (INBYTE == 'h') //shake Hands { FLHservo.writeMicroseconds(FLHcenter-600); FRHservo.writeMicroseconds(FRHcenter); RLHservo.writeMicroseconds(RLHcenter-600); RRHservo.writeMicroseconds(RRHcenter+600); FLKservo.writeMicroseconds(FLKcenter+600); FRKservo.writeMicroseconds(FRKcenter); RLKservo.writeMicroseconds(RLKcenter-700); RRKservo.writeMicroseconds(RRKcenter+700); delay(1000); FLKservo.writeMicroseconds(FLKcenter+300); delay(200); FLKservo.writeMicroseconds(FLKcenter+600); delay(200); FLKservo.writeMicroseconds(FLKcenter+300); delay(200); FLKservo.writeMicroseconds(FLKcenter+600); delay(200); } else if(INBYTE == 'w') // run forward { LShift=300; RShift=300; for(int i=0;i<5;i++) { Run(); } } else if(INBYTE == 'a') // turn left { LShift=-300; RShift=300; for(int i=0;i<3;i++) { Run(); } } else if(INBYTE == 'd') // turn right { LShift=300; RShift=-300; for(int i=0;i<3;i++) { Run(); } } else if(INBYTE == 's') // run back { LShift=-300; RShift=-300; for(int i=0;i<5;i++) { Run(); } } } void Run() { FRKservo.writeMicroseconds(FRKcenter+Raise); // raise front right leg RLKservo.writeMicroseconds(RLKcenter+Raise-10); // raise rear left leg FLHservo.writeMicroseconds(FLHcenter+LShift); // move front left leg backward RRHservo.writeMicroseconds(RRHcenter-RShift); // move rear right leg backward delay(Time/2); FRHservo.writeMicroseconds(FRHcenter+RShift); // move front right leg forward RLHservo.writeMicroseconds(RLHcenter-LShift); // move rear left leg forward delay(Time); FRKservo.writeMicroseconds(FRKcenter); // lower front right leg RLKservo.writeMicroseconds(RLKcenter); // lower rear left leg delay(Time); FLKservo.writeMicroseconds(FLKcenter+Raise); // raise front left leg RRKservo.writeMicroseconds(RRKcenter+Raise); // raise rear right leg FRHservo.writeMicroseconds(FRHcenter-RShift); // move front right leg backward RLHservo.writeMicroseconds(RLHcenter+LShift); // move rear left leg backward delay(Time/2); FLHservo.writeMicroseconds(FLHcenter-LShift); // move front left leg forward RRHservo.writeMicroseconds(RRHcenter+RShift); // move rear right leg forward delay(Time); FLKservo.writeMicroseconds(FLKcenter); // lower front left leg RRKservo.writeMicroseconds(RRKcenter); // lower rear right leg delay(Time); } 

Justo antes de que usted puede cargar el código, haga lo siguiente:

Abra el administrador de dispositivos y buscar puertos (COM & LPT).

Nota el puerto activo para tu Arduino. Se podría decir USB Serial Port (COM3) así que para mí el COM puerto 3, esta puede ser diferente para usted.

Herramientas de >> Junta >> Arduino Mega o Mega 2560 (imagen 2)

Herramientas >> procesador >> ATMega 1280 (imagen 3)

Herramientas >> Puerto >> puerto COM3 (3 para mi caso sólo!!!!) (imagen 4)

Ahora puedes pulsar el botón de upload y si todo va suave, debe subir con éxito y el robot debe estar en su vientre con cuatro piernas estiradas hacia fuera simétricamente con un constante parpadeo de los LED de la HC 06.

Si recibe este error durante la carga:

AVRDUDE: stk500_getsync(): no sincronizado: resp = 0xe0

Sólo Desconecte el módulo HC06, cargar el código y gancho nuevo.

OK me di cuenta de algo mientras estaba de prueba y escribir este tutorial. No es necesario BitVoicer y Python, basta que cualquiera de ellos. BitVoicer lo hace todo por usted y su motor de reconocimiento de voz es muy potente pero que cuesta $5 mientras que el reconocimiento de voz de python utiliza la API de voz de Google por lo que a veces puede dar unos resultados realmente extraños y tiene algunas más código, por lo que la elección es suya.

Bluetooth

Muy bien justo antes de que nos movemos en el bit de reconocimiento de voz mediante BitVoicer o Python, permite enlazar el bluetooth de tu PC al 06 HC de tu bot. Asegúrese de que funciona el bluetooth en tu PC antes de proceder porque me tardé 5 horas para darse cuenta de que mi laptop no viene con un bluetooth incorporado y tuve que pedir un módulo.

Ahora enciende tu bot a través de USB o la batería. OMG cuando hace este tutorial final!!!!!! Paciencia! Estás casi allí.

  1. Click derecho en el icono dispositivos Bluetooth en la barra de la bandeja y haga clic en Agregar nuevo dispositivo.
  2. Que buscar y buscar y buscar hasta HC - 06 aparece
    Si no demuestran para arriba después de probar en algún momento comprobar si usted puede encontrar el dispositivo usando su teléfono móvil (todos excepto los teléfonos de Apple deben ser capaces de detectarlo). Si no sabe que hay algo mal con su HC-06 y que necesita solucionarlo por comprobación de las conexiones.
  3. Haga doble clic.
  4. En el siguiente diálogo cuadro Seleccione Enter el dispositivo sincronización código y tipo en 1234. Luego debe instalar el HC 06 al ordenador.
  5. Ahora esta parte es importante abrir el administrador de dispositivos (Inicio >> Administrador de dispositivos)
  6. Ir a puertos (COM & LPT) y anote los puertos COM utilizados por el Bluetooth.
    COM10 y COM21 para mi caso.

BitVoicer (opción 1)

Puede descargar BitVoicer de aquí.

Lo primero es lo primero, si no eres un hablante de inglés americano puede cambiar el idioma/acento que BitVoicer intentará reconocer. Para hacer esto, vaya al archivo >> idiomas adicionales y van a instalan su idioma/acento preferido.

Ahora estamos listos para añadir algunos comandos. Para que vamos a agregar dos comandos a saber levantarse y sentarse. Puede editar o añadir más comandos más adelante. Los pasos son los siguientes:

  1. Ir a archivo para crear un nuevo esquema >> nueva.
  2. Cambiar el tipo de datos de comando predeterminado a char.
  3. Haga clic en Agregar nueva frase
  4. Escriba en "stand up" (sin comillas)
  5. Haga clic en Agregar nueva frase
  6. Escriba en "sentarse" (nuevamente sin comillas)
  7. Ahora abajo en oración anagramas, cambiar los tipos de datos de ambos comandos a char si no ya char.
  8. Stand tipo comando como usted y para sentarse tipo i.
  9. Su pantalla debe parecerse a imagen 5.
  10. Guardar el esquema en un directorio que es conveniente para usted.
  11. Ahora abrir preferencias de archivo >> Preferencias y relleno en el material.
    Las tres cosas que serán diferentes para ti será la carpeta por defecto, idioma de reconocimiento de voz y el nombre del puerto.
  12. Su nombre del puerto se corresponden a su puerto de COM que su Bluetooth utiliza que encontraste en el paso 6 en Bluetooth. Pruebe primero el número menor.
  13. Guardar de golpe.
  14. Ir al siguiente paso.

Python (opción 2)

Descargar Python (para este tutorial voy a usar la versión 3.4) que puede descargarse de https://www.python.org/download/releases/3.4.1/ 3.4 ¿por qué y no la versión 2.7? Así el reconocimiento de discurso que estamos utilizando sólo funciona en la versión 3.4 de python (ya sé que es una mierda pero bueno 3,4 > 2.7 derecho?)

Lo instala en C:\Python34 por conveniencia. Lo siguiente que tienes que hacer es descargar e instalar eclipse que es una interfaz para escribir su código a través de Python. Se puede descargar desde http://www.eclipse.org/downloads/ instale en C:\eclipse

Si recibe este error durante la ejecución de lo...

Un Java Runtime Environment (JRE) o Java Development Kit (JDK) deben estar disponibles para ejecutar Eclipse. Ninguna máquina virtual de Java fue encontrada después de buscar en las ubicaciones siguientes:
C:\eclipse\jre\bin\javaw.exe
javaw.exe en su ruta actual

Ir a la primera respuesta en http://stackoverflow.com/questions/2030434/eclipse-no-java-jre-jdk-no-virtual-machine

www.stackoverflow.com es el mejor lugar para encontrar ayuda para cualquier problema en python

Use este tutorial para instalar python en eclipse excepto en lugar de python 2.6 que debe elegir python 3.4. Como alternativa utilizar este tutorial para instalar python en Geany si usted decidió usar Geany que oigo es mucho mejor que eclipse pero no he tenido tiempo suficiente para migrar a él. Hay algo que llama 'bibliotecas' que usted necesita para acceder a la diferente funcionalidad de python. Ahora seguir adelante e instala algunas librerías que necesitamos para este proyecto. Para aquellos de ustedes que ya saben cómo instalar bibliotecas ir adelante instalar los mencionados y seguir el código.

Librerías:

PyBluez y PyAudio pueden instalarse mediante la descarga de la "... win32 py3.4.exe" versiones del enlace y simplemente ejecutar el archivo ejecutable (setup).

SpeechRecognition biblioteca es un poco complicado si eres nuevo en python. Abrir el enlace de 'download' arriba y haga clic en descargas. Descargar "SpeechRecognition-1.1.0.tar.gz (md5)". Extraer el contenido (no la carpeta que dice SpeechRecognition 1.1.0 pero cuál es en él) de la carpeta descargada (vía winRAR o cualquier extractor te apetece usar) en el directorio de python 3.4 (C:\Python34). Si aparece un cuadro de diálogo preguntando si desea reemplazar los archivos existentes, haga clic en sí a todos. Ahora vaya a la unidad C: y manteniendo Shift, click derecho sobre la carpeta que dice Python34 y haga clic en "ventana de comandos abierta aquí". Escriba "python setup.py install" sin las comillas y pulse Enter. Ahora usted debe tener todas las bibliotecas necesarias instaladas. ¡ Yay!

Abierto eclipse.

En la carpeta PythonTest del tutorial de crear un nuevo archivo llamado Speech_Controlled_Quadrapod.py similar a cómo se crea el pytest.py archivo que creó en el tutorial. Ahora pegar o descargar...

El código:

 # Title: Speech Controlled Quadrapod # Author: Adith Jagadish # Description: Uses Google's Speech Recognition API and python bluetooth library to control a quadrapod # How to: Say "stand up" to make bot stand up and say "sit down" to make it sit. # Say "stop listening to terminate the program" import bluetooth import speech_recognition as sr port = 1 bd_addr = "xx:xx:xx:xx:xx:xx" sock = bluetooth.BluetoothSocket( bluetooth.RFCOMM ) sock.connect((bd_addr, port)) r = sr.Recognizer() r.pause_threshold = 0.6 r.energy_threshold = 400 MESSAGE = "continue" print("Ready to accept command...\n") while (MESSAGE != "stop listening"): while (MESSAGE == "continue"): try: # use the default microphone as the audio source with sr.Microphone() as source: # listen for the first phrase and extract it into audio data audio = r.listen(source,timeout = None) # recognize speech using Google Speech Recognition print("Me: " + r.recognize(audio)) MESSAGE = str(r.recognize(audio)) except LookupError: # speech is unintelligible MESSAGE = "continue" print("Could not understand audio") if(MESSAGE == "sit down"): sock.send("i") elif(MESSAGE == "stand up"): sock.send("u") elif(MESSAGE == "stop listening"): break; MESSAGE = "continue" sock.close() print("\nProgram terminated.") 

El único cambio que necesita hacer es en la línea:

 bd_addr = "xx:xx:xx:xx:xx:xx" 

Haga clic derecho sobre el icono de bluetooth en la bandeja y haga clic en "Mostrar dispositivos de Bluetooth". Haga clic derecho sobre HC-06 y haga clic en propiedades. Ir a la pestaña Bluetooth y copiar el número de identificador único y pegue en el lugar de XX.


Que son buenos ir a la prueba.

Artículos Relacionados

Discurso controlado por Game Boy Advance

Discurso controlado por Game Boy Advance

Este es un proyecto trabajado en mi clase de electrónica en el Pomona College. Gracias al profesor Dwight Whitaker y Tony Grigsby por su ayuda y orientación a lo largo de este proyecto y el crédito a Jonathan Wong por la idea de este proyecto!Además,
Discurso controlado por mando a distancia IR

Discurso controlado por mando a distancia IR

IntroducciónEn este documento voy a explicar el proceso en la creación de un propulsor de la paralaje controlado por mando a distancia IR. Este Instructable explicare uno de varias maneras diferentes, esto podría lograrse se conectará el dispositivo
Proyectos de Carlitos: Inalámbrico controlado por discurso Arduino Robot

Proyectos de Carlitos: Inalámbrico controlado por discurso Arduino Robot

Todos soñamos con tener aparatos y máquinas que pueden obedecer a nuestros comandos hablados. Bien, vamos a tomar el primer paso para que esto suceda y construir un intervención controlada basada en Arduino robot móvil.Puedes estar pensando que hacer
Movimiento y discurso controlan por Wifi cámara Bluetooth coche

Movimiento y discurso controlan por Wifi cámara Bluetooth coche

Este instructable muestra cómo crear un movimiento y discurso controlado por coche con un wifi controles de cámara y bluetooth. Continuar con el siguiente paso para obtener una lista de piezas. Me inspiré en un producto visto aquíPaso 1: Lista de pie
Voz controlada por Arduino robot

Voz controlada por Arduino robot

Los zánganos son muy buenos juguetes y herramientas, pero generalmente no lo han hecho alguna habilidad extra. Me encanta volar cualquier modelo R/C y yo sólo quería hacer un drone de R/C que es un poco más inteligente que los modelos usuales. Por es
Sin ataduras, reconocimiento de voz y síntesis de voz con Arduino

Sin ataduras, reconocimiento de voz y síntesis de voz con Arduino

MOVI 'Mi propia voz interfaz' y es un escudo de Arduino con respaldo de kickstarter que hace muy fácil construir tus propios diálogos discurso a dispositivos de control en el IDE de Arduino. Este instructable rápida le muestra cómo empezar a configur
Drone controlado por voz

Drone controlado por voz

Este Instructable le guiará a través de cómo hacer un robot controlado por voz. Si tienen experiencia en codificación y quisiera intentar la codificación de la interfaz de la aplicación desde cero, habrá varios pasos para ayudar a guiarte en el camin
Yarcow (todavía otro Rover controlado por Wifi) - Makeblock, Arduino, Droidscript

Yarcow (todavía otro Rover controlado por Wifi) - Makeblock, Arduino, Droidscript

En este Instructable, veremos cómo construir a un rover web Wifi controlado basado en Makeblock Starter Kit de la robusteza y howto de Dave-Smart.Cómo es trabajo:El rover está controlado en un navegador (smartphone o computadora), los comandos enviar
Sin ataduras discurso diálogo con MOVI el Rasberry PI

Sin ataduras discurso diálogo con MOVI el Rasberry PI

El MOVI Arduino voz diálogo escudo es un escudo de Arduino que permite para añadir diálogo de voz a cualquier gadget que es Arduino controlado. Puedes entrenar tus propias oraciones y distintivo de llamada, viene con un front-end de audio y no necesi
Inicio de automatización de Control de voz - análisis del discurso de micrófono multi-Room

Inicio de automatización de Control de voz - análisis del discurso de micrófono multi-Room

¿Has sentido la necesidad de seguimiento de sus hábitos de uso de la palabra, controlar su hogar con su voz, o simplemente grabar desde micrófonos múltiples a la vez? Entonces estás de suerte! En este Instructable, aprenderás cómo instalar y utilizar
Cartulina K-9 controlado de Radio, que habla

Cartulina K-9 controlado de Radio, que habla

Doctor Who ha tenido muchos compañeros en los años, y cuando fans Haz preguntados "¿quién es tu favorito compañero Dr Who?", generalmente va escuchar respuestas como Rose Tyler, Sarah Jane Smith, el capitán jack Harkness, Leela y Jamie McCrimmon
Discurso de Arduino controlar y detectar obstáculos Robot

Discurso de Arduino controlar y detectar obstáculos Robot

Robot controlado por comandos de voz con Arduino y con teléfono Android de google voice a texto se controla mediante la aplicaciónhttp://make.robimek.com/Voice-Commands-Controlled-robot/Paso 1: materiales:1-android aplicaciones: https://play.google.c
Arduino controlado voz TV remoto

Arduino controlado voz TV remoto

ser estudiante universitario, puede llegar a ser bastante perezoso.  Esta fue la motivación detrás de mi proyecto para hacer un nuevo control remoto para mi TV que puede ser controlado desde mi teléfono, computadora o mi voz.Empecé este proyecto mi p
Discurso basado (EasyVR) 2.4GHz control de radio de largo alcance (1 km +)

Discurso basado (EasyVR) 2.4GHz control de radio de largo alcance (1 km +)

cumplir con mi proyecto == > basados en Arduino RC control con módulo de reconocimiento de discurso (EasyVR)La idea principal es bastante simple: conseguir un módulo de reconocimiento de discurso, enlazar a un microcontrolador, generar la correspondi