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

Proyecto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconocimiento Voz

Componentes y suministros

Componente Cantidad Notas
Arduino Micro 1 Cualquier Arduino sirve
SparkFun Electret Microphone Breakout 1 Captura y amplifica audio
BitVoicer Server 1 Software reconocimiento voz (pago)
BitVoicer Server 1.0 1 Versión servidor
LED genérico 3 Rojo, Amarillo, Verde
Resistencia 330 ohm 3 Para LEDs

Sobre el proyecto

En esta entrada muestro cómo usar una placa Arduino y BitVoicer Server para controlar unos LEDs con comandos de voz. Usaré Arduino Micro, pero puedes usar cualquier Arduino.

Los siguientes procedimientos transforman comandos de voz en actividad de LEDs:

  1. Ondas de audio capturadas y amplificadas por SparkFun Electret Breakout.
  2. Señal amplificada digitalizada y bufferizada en Arduino usando su ADC (convertidor analógico-digital).
  3. Muestras de audio transmitidas a BitVoicer Server por puerto serie Arduino.
  4. BitVoicer Server procesa el stream y reconoce el habla.
  5. Voz reconocida se mapea a comandos predefinidos que se envían al Arduino.
  6. Arduino identifica comandos y ejecuta la acción correspondiente.

El video muestra el resultado final. BitVoicer Server también da feedback por voz sintetizada, definido en el servidor y reproducido por su adaptador de audio. El audio sintetizado también podría enviarse al Arduino y reproducirse con un DAC. En mi próxima entrada mostraré cómo usar Arduino DUE, amplificador y altavoz para reproducir voz sintetizada en el propio Arduino.

Lista de materiales:

PASO 1: Cableado

Primero cablea Arduino y protoboard con componentes como en las fotos.

Proyecto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconocimiento Voz
Proyecto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconocimiento Voz
Proyecto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconocimiento Voz
Proyecto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconocimiento Voz

Detalle crucial: La referencia analógica para el ADC del Arduino. En mis pruebas, mejores resultados usando 3.3V con SparkFun Electret Breakout. Por eso puse un puente entre pin 3.3V y AREF. Si usas analogRead() con 3.3V en AREF, DEBES llamar analogReference(EXTERNAL) antes de analogRead(). Si no, cortocircuitas la referencia interna activa con el pin AREF, pudiendo dañar el microcontrolador.

PASO 2: Subir código a Arduino

Sube el código de abajo. El sketch también está en Adjuntos. Antes, instala las bibliotecas BitVoicer Server en Arduino IDE (Importar biblioteca .zip).

El sketch BVS_Demo1.ino tiene 4 partes principales:

  1. Referencias biblioteca y variables: Incluye BVSP.h y BVSMic.h (proveídas por BitSophia, en carpeta instalación BitVoicer Server). Declara constantes y variables. Clase BVSP comunica con servidor, BVSMic captura y almacena muestras audio.
  2. Setup(): Inicializa comunicación serie, clases BVSP y BVSMic, y establece "manejador de eventos" (puntero a función) para evento frameReceived.
  3. Loop(): Tres acciones: solicita info estado al servidor (keepAlive()), comprueba si servidor envió datos y procesa (receive()), controla grabación y envío streams audio (isSREAvailable(), startRecording(), stopRecording(), sendStream()).
  4. BVSP_frameReceived(): Se llama cada vez que receive() detecta trama completa. Ejecuta comando desde BitVoicer Server. Comando = 2 bytes: byte 0 = pin, byte 1 = valor pin. Uso analogWrite() para establecer valor en pin.

PASO 3: Importar objetos solución BitVoicer Server

Configura BitVoicer Server para trabajar con Arduino. Tiene 4 objetos principales: Ubicaciones, Dispositivos, BinaryData, Esquemas de Voz.

Puedes importar todos los objetos que usé desde los archivos abajo. Uno contiene Dispositivos, otro Esquema de Voz y Comandos.

Devices.sof

VoiceSchema.sof

PASO 4: Conclusión

¡Eso es todo! Espero que te guste.

Tienes todo para ejecutar la demo del video. En el video empiezo habilitando dispositivo ArduinoMicro en BitVoicer Server Manager. Al habilitarse, Arduino detecta motor reconocimiento voz disponible y empieza a enviar audio al servidor.

Puedes seguir resultados en herramienta Server Monitor del BitVoicer Server Manager.

En mi próxima entrada mostraré cómo reproducir voz sintetizada con Arduino DUE.

Código

BVS_Demo1.ino (Arduino)

#include <BVSP.h>
#include <BVSMic.h>

// Pin Arduino para captura audio
#define BVSM_AUDIO_INPUT 5

// Pines LEDs
#define RED_LED_PIN 6
#define YELLOW_LED_PIN 9
#define GREEN_LED_PIN 10

// Constantes para BVSP.begin
const unsigned long STATUS_REQUEST_TIMEOUT = 1000;
const unsigned long STATUS_REQUEST_INTERVAL = 2000;

// Tamaño buffer audio
const int AUDIO_BUFFER_SIZE = 64;

// Tamaño buffer recepción
const int RECEIVE_BUFFER_SIZE = 2;

// Instancia global BVSP
BVSP bvsp = BVSP();

// Instancia global BVSMic
BVSMic bvsm = BVSMic();

// Buffer para leer muestras grabadas de BVSMic
byte audioBuffer[AUDIO_BUFFER_SIZE];

// Buffer para leer comandos de BitVoicer Server
// Byte 0 = número pin, Byte 1 = valor pin
byte receiveBuffer[RECEIVE_BUFFER_SIZE];

void setup() {
  // Configura pines
  pinMode(RED_LED_PIN, OUTPUT);
  pinMode(YELLOW_LED_PIN, OUTPUT);
  pinMode(GREEN_LED_PIN, OUTPUT);

  // Comunicación serie a 115200 bps
  Serial.begin(115200);

  // Configura puerto serie, timeout e intervalo peticiones estado
  bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL);

  // Función manejadora evento frameReceived
  bvsp.frameReceived = BVSP_frameReceived;

  // Prepara timer BVSMic
  bvsm.begin();
}

void loop() {
  // Comprueba intervalo petición estado y envía a BitVoicer Server
  bvsp.keepAlive();

  // Procesa datos puerto serie según protocolo BitVoicer
  bvsp.receive();

  // Si hay SRE (Speech Recognition Engine) disponible, empieza grabación
  if (bvsp.isSREAvailable()) {
    // Si BVSMic no grabando, configura entrada audio y empieza
    if (!bvsm.isRecording) {
      bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL);
      bvsm.startRecording();
    }
    // Si BVSMic tiene muestras disponibles
    if (bvsm.available) {
      // Asegura modo STREAM_MODE antes de transmitir
      if (bvsp.inboundMode == FRAMED_MODE)
        bvsp.setInboundMode(STREAM_MODE);
      // Lee muestras de BVSMic
      int bytesRead = bvsm.read(audioBuffer, AUDIO_BUFFER_SIZE);
      // Envía stream audio a BitVoicer Server
      bvsp.sendStream(audioBuffer, bytesRead);
    }
  } else {
    // No hay SRE disponible. Si BVSMic grabando, para.
    if (bvsm.isRecording)
      bvsm.stopRecording();
  }
}

// Maneja evento frameReceived
void BVSP_frameReceived(byte dataType, int payloadSize) {
  // Comprueba si trama contiene datos binarios (0x07 = Binary data)
  if (dataType == DATA_TYPE_BINARY) {
    // Si se recibieron 2 bytes, procesa comando
    if (bvsp.getReceivedBytes(receiveBuffer, RECEIVE_BUFFER_SIZE) == RECEIVE_BUFFER_SIZE) {
      analogWrite(receiveBuffer[0], receiveBuffer[1]);
    }
  }
}

Esquemáticos

Proyecto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconocimiento Voz

Proceso de manufactura

  1. Sistema de Asistencia RFID Fiable con Arduino y Python
  2. Proyecto Sensor DHT11 Temperatura y Humedad con Indicadores LED y Altavoz Piezo
  3. Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
  4. Controla tu Roomba Create 2 con Arduino y Android: Guía Completa
  5. Construye un voltímetro DIY con Arduino y pantalla Nokia 5110 – Guía paso a paso
  6. Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
  7. Módulo GPS u-blox LEA‑6H 02: Guía de integración con Arduino y Python
  8. Leer Temperatura y Humedad con DHT11 en Blynk – Tutorial Paso a Paso con Arduino
  9. Dominando reconocimiento y síntesis de voz en Arduino Due
  10. Construye un Cubo LED 4x4x4 con Arduino Uno y 1Sheeld – Proyecto LED Interactivo
  11. Proyecto Arduino GPS y Pantalla TFT Táctil Shield: Visualización de Ubicación en Tiempo Real