Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Reconocimiento de voz con Arduino y BitVoicer Server

Componentes y suministros

Arduino Micro
× 1
Desglose del micrófono Sparkfun Electret
× 1
BitVoicer Server
× 1
BitVoicer Server 1.0
× 1
LED (genérico)
× 3
Resistencia de 330 ohmios
× 3

Acerca de este proyecto

En esta publicación, voy a mostrar cómo usar una placa Arduino y un servidor BitVoicer para controlar algunos LED con comandos de voz. Usaré Arduino Micro en esta publicación, pero puedes usar cualquier placa Arduino que tengas a mano.

Se ejecutarán los siguientes procedimientos para transformar los comandos de voz en actividad LED:


  • Las ondas de audio serán capturadas y amplificadas por la placa Sparkfun Electret Breakout;
  • La señal amplificada se digitalizará y almacenará en búfer en Arduino utilizando su convertidor analógico a digital (ADC);
  • Las muestras de audio se transmitirán al servidor BitVoicer utilizando el puerto serie Arduino;
  • BitVoicerServer procesará el flujo de audio y reconocerá el discurso que contiene;
  • El habla reconocida se asignará a comandos predefinidos que se enviarán de vuelta al Arduino;
  • TheArduino identificará los comandos y realizará la acción adecuada.

El video de arriba muestra el resultado final de esta publicación. Tenga en cuenta en el video que BitVoicer Server también proporciona comentarios de voz sintetizados. Esta retroalimentación de voz se define en el servidor y se reproduce mediante el adaptador de audio del servidor, pero el audio sintetizado también podría enviarse al Arduino y reproducirse mediante un convertidor de digital a analógico (DAC). En mi próxima publicación, voy a mostrar cómo usar el Arduino DUE, un altavoz amplificado y otro para reproducir la voz sintetizada usando el propio Arduino.

Lista de materiales:


  • Arduino Micro (o cualquier otra placa Arduino):~ U $ 20.00
  • Desglose del micrófono Sparkfun Electret:U $ 7.95
  • BitVoicer Server 1.0 :U $ 9,90
  • Tablero de pruebas:~ U $ 10.00
  • 3 xLED:~ U $ 1,00
  • 3 resistencias de 330 ohmios:~ U $ 0,75
  • Cables de puente:~ U $ 0.30


PASO 1:Cableado


El primer paso es conectar el Arduino y la placa con los componentes como se muestra en las imágenes a continuación.

El detalle más importante aquí se refiere a la referencia analógica proporcionada al Arduino ADC. En mis pruebas, obtuve mejores resultados usando 3.3V con Sparkfun Electret Breakout. Es por eso que agregué un puente entre el pin de 3.3V y el pin AREF. Si decide usar la función analogRead (por cualquier motivo) mientras se aplica 3.3V al pin AREF, DEBE llamar a analogReference (EXTERNAL) antes de usar la función analogRead. De lo contrario, acortará el voltaje de referencia activo (generado internamente) y el pin AREF, posiblemente dañando el microcontrolador en su placa Arduino.


PASO 2:Subiendo el código al Arduino


Ahora debe cargar el siguiente código en su Arduino. Para mayor comodidad, el boceto de Arduino también está disponible en la sección Adjuntos en la parte inferior de esta publicación. Antes de cargar el código, debe instalar correctamente las bibliotecas del servidor BitVoicer en el IDE de Arduino (Importar una biblioteca .zip).

BVS_Demo1.ino

Este boceto tiene cuatro partes principales:


  • Referencias de bibliotecas y declaración de variables:las dos primeras líneas incluyen referencias a las bibliotecas BVSP y BVSMic. Estas bibliotecas son proporcionadas por BitSophia y se pueden encontrar en la carpeta de instalación de BitVoicer Server. Las otras líneas declaran constantes y variables utilizadas a lo largo del boceto. La clase BVSP se usa para comunicarse con BitVoicer Server y la clase BVSMic se usa para capturar y almacenar muestras de audio.
  • Función de configuración:esta función inicializa la comunicación en serie, la clase BVSP, la clase BVSMic y establece el "controlador de eventos" (en realidad es un puntero de función) para el evento frameReceived.
  • Función de bucle:esta función realiza tres acciones importantes:solicita información de estado al servidor (función keepAlive ()), comprueba si el servidor ha enviado datos y procesa los datos recibidos (función recibir ()), y controla la grabación y el envío de audio streams (funciones isSREAvailable (), startRecording (), stopRecording () y sendStream ()).
  • BVSP_frameReceivedfunction:esta función se llama cada vez que la función Receive () identifica que se ha recibido un cuadro completo. Aquí ejecuto el comando enviado desde BitVoicer Server. El comando contiene 2 bytes. El primer byte indica el pin y el segundo byte indica el valor del pin. Yo uso la función analogWrite () para establecer el valor apropiado para el pin.


PASO 3:Importación de objetos de la solución del servidor BitVoicer


Ahora tienes que configurar BitVoicer Server para que funcione con Arduino. BitVoicer Server tiene cuatro objetos de solución principales:ubicaciones, dispositivos, datos binarios y esquemas de voz.

Las ubicaciones representan la ubicación física donde se instala un dispositivo. En mi caso, creé una ubicación llamada Casa.

Los dispositivos son los clientes de BitVoicer Server. Creé un dispositivo mixto, lo llamé ArduinoMicro e ingresé la configuración de comunicación. NOTA SOBRE ARDUINO MICRO :utiliza RTS y DTR, por lo que debe habilitar estas configuraciones en la pestaña de comunicación. También creé un dispositivo SystemSpeaker para sintetizar voz usando el adaptador de audio del servidor.

BinaryData es un tipo de comando que BitVoicer Server puede enviar a los dispositivos cliente. En realidad, son matrices de bytes que puede vincular a comandos. Cuando BitVoicer Server reconoce la voz relacionada con ese comando, envía la matriz de bytes al dispositivo de destino. Creé un objeto BinaryData para cada valor de pin y los nombré ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff y así sucesivamente. Terminé con 18 objetos BinaryData en mi solución, por lo que le sugiero que descargue e importe los objetos desde VoiceSchema.sof archivo a continuación.

Los esquemas de voz son donde todo se junta. Definen qué oraciones deben reconocerse y qué comandos ejecutar. Para cada oración, puede definir tantos comandos como necesite y el orden en que se ejecutarán. También puede definir retrasos entre comandos. Así es como logré realizar la secuencia de acciones que ves en el video.

Puede importar (Importar objetos de solución) todos los objetos de solución que utilicé en esta publicación desde los archivos a continuación. Uno contiene los dispositivos y el otro contiene el esquema de voz y sus comandos.

Devices.sof


VoiceSchema.sof

PASO 4:Conclusión


¡Eso es! Espero que les haya gustado.

Tiene todo lo que necesita para ejecutar la demostración que se muestra en el video. Tenga en cuenta que en el video comencé habilitando el dispositivo ArduinoMicro en BitVoicer Server Manager. Tan pronto como se habilita, Arduino identifica un motor de reconocimiento de voz disponible y comienza a transmitir audio al servidor BitVoicer.

Puede seguir los resultados del reconocimiento en la herramienta Server Monitor disponible en BitVoicer Server Manager.

En mi próxima publicación, mostraré cómo se puede reproducir el habla sintetizada usando un Arduino DUE.


Código

  • BVS_Demo1.ino
BVS_Demo1.ino Arduino
 #include  #include  // Define el pin Arduino que se usará para capturar audio #define BVSM_AUDIO_INPUT 5 // Define los pines LED # define RED_LED_PIN 6 # define YELLOW_LED_PIN 9 # define GREEN_LED_PIN 10 // Define las constantes que se pasarán como parámetros a // la función BVSP.beginconst unsigned long STATUS_REQUEST_TIMEOUT =1000; const unsigned long STATUS_REQUEST_INTERVAL =2000; // Define el tamaño del búfer de audio const int AUDIO_BUFFER_SIZE =64; / / Define el tamaño del bufferconst de recepción int RECEIVE_BUFFER_SIZE =2; // Inicializa una nueva instancia global de la clase BVSP BVSP bvsp =BVSP (); // Inicializa una nueva instancia global de la clase BVSMic BVSMic bvsm =BVSMic (); / / Crea un búfer que se usará para leer muestras grabadas // del byte de clase BVSMic audioBuffer [AUDIO_BUFFER_SIZE]; // Crea un búfer que se usará para leer los comandos enviados // desde BitVoicer Server.// Byte 0 =pin número // Byte 1 =pin valuebyte receiveBuffer [RECEIVE_BUFFER _SIZE]; void setup () {// Configura los modos pin pinMode (RED_LED_PIN, OUTPUT); pinMode (AMARILLO_LED_PIN, SALIDA); pinMode (GREEN_LED_PIN, SALIDA); // Inicia la comunicación en serie a 115200 bps Serial.begin (115200); // Establece el puerto serie Arduino que se utilizará para // la comunicación, cuánto tiempo pasará antes de que se agote el // tiempo de espera de una solicitud de estado y con qué frecuencia se deben enviar las solicitudes de estado al // servidor BitVoicer. bvsp.begin (Serie, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL); // Define la función que manejará el evento frameReceived // bvsp.frameReceived =BVSP_frameReceived; // Prepara el temporizador de clase BVSMic bvsm.begin ();} void loop () {// Comprueba si ha transcurrido el intervalo de solicitud de estado y, // si lo ha hecho, envía una solicitud de estado al servidor BitVoicer bvsp.keepAlive (); // Comprueba si hay datos disponibles en el búfer del puerto serie // y procesa su contenido de acuerdo con las especificaciones // del BitVoicer Server Protocol bvsp.receive (); // Comprueba si hay un SRE disponible. Si hay uno, // comienza a grabar. if (bvsp.isSREAvailable ()) {// Si la clase BVSMic no está grabando, configura la entrada // de audio y comienza a grabar if (! bvsm.isRecording) {bvsm.setAudioInput (BVSM_AUDIO_INPUT, EXTERNAL); bvsm.startRecording (); } // Comprueba si la clase BVSMic tiene muestras disponibles if (bvsm.available) {// Se asegura de que el modo de entrada sea STREAM_MODE antes de // transmitir el flujo if (bvsp.inboundMode ==FRAMED_MODE) bvsp.setInboundMode (STREAM_MODE); // Lee las muestras de audio de la clase BVSMic int bytesRead =bvsm.read (audioBuffer, AUDIO_BUFFER_SIZE); // Envía el flujo de audio a BitVoicer Server bvsp.sendStream (audioBuffer, bytesRead); }} else {// No hay SRE disponible. Si la clase BVSMic está grabando, // la detiene. if (bvsm.isRecording) bvsm.stopRecording (); }} // Maneja el evento frameReceived void BVSP_frameReceived (byte dataType, int payloadSize) {// Comprueba si el frame recibido contiene datos binarios // 0x07 =Datos binarios (matriz de bytes) if (dataType ==DATA_TYPE_BINARY) {// Si 2 Se recibieron bytes, procese el comando. if (bvsp.getReceivedBytes (recibirBuffer, RECEIVE_BUFFER_SIZE) ==RECEIVE_BUFFER_SIZE) {analogWrite (recibirBuffer [0], recibirBuffer [1]); }}} 

Esquemas


Proceso de manufactura

  1. Sistema de asistencia que usa Arduino y RFID con Python
  2. Sensor DHT11 con LED y altavoz piezoeléctrico
  3. Arduino Temp. Monitor y reloj en tiempo real con pantalla 3.2
  4. Controlar un robot Roomba con Arduino y un dispositivo Android
  5. Voltímetro de bricolaje con Arduino y una pantalla Nokia 5110
  6. Control del servomotor con Arduino y MPU6050
  7. Módulo GPS u-blox LEA-6H 02 con Arduino y Python
  8. Cómo leer la temperatura y la humedad en Blynk con DHT11
  9. Reconocimiento y síntesis de voz con Arduino
  10. Cubo LED 4x4x4 con Arduino Uno y 1sheeld
  11. Pantalla de ubicación GPS con protectores de pantalla GPS y TFT