entrada-POST

En esta entrada del curso de programación con Protocoder vamos a aprender cómo controlar mediante la voz un Printbot.

Para controlar el Printbot, en este caso el PrintBot Evolution, utilizaremos un “sketch” de Arduino que, entre otras cosas, controlará el movimiento, y un programa de Protocoder en el que utilizaremos el control por voz.

Código Arduino

El código Arduino se ha explicado en esta entrada por si quieres volver a recordarlo. No se necesita realizar ninguna modificación. Crearemos el código de Protocoder para que funcione con ese código Arduino.

EVO-ILU

Para que el PrintBot entre en los diferentes modos, tanto de movimiento automático como manual, el código Arduino espera recibir ciertas palabras clave:

  • Movimiento manual: avanzar, retroceder, izquierda, derecha y 180
  • Movimiento automático: obstáculos, siguelíneas y sigueluz

En la función writeData determinamos qué palabra se ha leído a través de la conexión Bluetooth y determinamos cuáles serán las funciones a realizar:

Código Protocoder

Voice-Control

En Protocoder vamos a crear una interfaz que conecte por Bluetooth y envíe cadenas de caracteres a la placa Zum o Arduino con módulo Bluetooth. Para crear la interfaz, utilizaremos la cabecera que venimos utilizando en los programas de Protocoder:

Para controlar la conexión Bluetooth utilizaremos un botón para conectar y otro para desconectar.

boton1

Al pulsar sobre connect, aparecerá un diálogo donde podremos escoger el dispositivo al que conectarnos, que previamente se ha emparejado a través de los ajustes Bluetooth de Android.

Al pulsar sobre Disconnect, se cerrará la conexión y cambiaremos el valor de la variable btStatus a false, que utilizamos para conocer el estado de la conexión Bluetooth desde otras partes del programa.

Además, utilizamos la función send para enviar cadenas de caracteres a través de Bluetooth:

La variable rightOrder la utilizamos para determinar si las ordenes que se han leído por los comandos de voz son correctas o no. En el caso de que sean correctas imprimirá en pantalla la orden que se ha dicho. En el caso de que sean incorrectas se mostrará un mensaje de error.

Para utilizar el control por voz, creamos un botón en el que incluiremos la función y creamos dos variables str, a la que asignaremos el texto a enviar por Bluetooth, y rightOrder.

boton2

En primer lugar se comprueba que hayamos conectado a Bluetooth con la orden if(btStatus). Si se ha conectado, se iniciará el reconocimiento por voz con la función media.voiceRecognition(function (text){ });. Cuando se haya detectado alguna palabra, se comparará con las ordenes preestablecidas, se asignará la palabra clave a enviar a la variable str y asignaremos el valor true a la variable rightOrder. Si rightOrder tiene el valor true se modificará el texto de pantalla por la orden a enviar y se enviará a través de la función send().

Para continuar, generamos la variable de texto que utilizaremos para mostrar por pantalla el texto que se ha reconocido mediante comandos de voz y cambiamos su tamaño a 40:

boton3

Para finalizar, creamos un botón de parada para mayor seguridad, aunque también es posible parar el PrintBot mediante comandos de voz:

boton4

¡Hasta la próxima!

3 comentarios

  1. Hola Luis, a ver si me puedes echar una mano
    Resulta que cad vez que pulso sobre el boton conectar me salta en la pantalla de android una ventana que pone
    Connect to device
    ————————-
    Adafruit EZ-link 4200 98;76:B6:00:42:00

    Se queda parado hasta que pulso sobre las letras de Adafruit etc y salta otra ventana mas oscura que pone

    Protocoder se ha detenido
    ————————————-
    Aceptar

    Utilizo una table samsung galaxi s4 con android 4.4.2 y un arduino nano AT/mega 328
    Tampoco consigo ver el scrit ejemplo de bluetootn, me pasa los mismo a intentar conectar.
    He intentado vincular el dispositivo primero delde la tablet y da lo mismo. Tampoco vale pulsar sobre desconectar.

    Alguna idea de que puede pasar ??
    Gracias

    1. Luis Díaz

      Hola Nolo,

      ¿Has vinculado previamente el dispositivo a través de los ajustes Android? Por otra parte, creo que el arduino nano no tendrá varios puertos serie, por lo que tendrás que utilizar software serial.

      Puedes utilizar console.log(“Texto a mostrar”); dentro de Protocoder para imprimir mensajes y ver en que punto se cierra la aplicación.

      Un saludo.

  2. Hola buenas tardes, tengo un problema con el reconocimiento de voz, pulso sobre el botón de “voice recognition” y me pone:
    “tell me something!” le doy cualquier instrucción y me dice: “Toque para hablar” toco y denuevo “reintentando…” y se me cierra, ¿alguna solución? Gracias.

Los comentarios están cerrados.