Projeto LED Controlado por Voz: Arduino Micro + BitVoicer Server para Reconhecimento de Fala
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino Micro | 1 |
| SparkFun Electret Microphone Breakout | 1 |
| BitVoicer Server | 1 |
| BitVoicer Server 1.0 | 1 |
| LED (genérico) | 3 |
| Resistor 330Ω | 3 |
Sobre o Projeto
Mostro como usar Arduino + BitVoicer Server para controlar LEDs com comandos de voz. Usei Arduino Micro, mas qualquer placa Arduino funciona.
Fluxo de transformação de voz em ação nos LEDs:
- Ondas de áudio capturadas e amplificadas pelo SparkFun Electret Breakout
- Sinal digitalizado e bufferizado no Arduino via ADC
- Amostras de áudio transmitidas ao BitVoicer Server via porta serial
- BitVoicer Server processa stream e reconhece fala
- Fala reconhecida mapeada a comandos pré-definidos → enviados ao Arduino
- Arduino identifica comandos e executa ação apropriada
Vídeo mostra resultado final. BitVoicer também fornece feedback por síntese de voz (reproduzido no áudio do servidor). No próximo post, mostrarei como reproduzir síntese no próprio Arduino DUE com amplificador e alto-falante.
Lista de Materiais
- Arduino Micro (ou outro): ~US$ 20
- SparkFun Electret Microphone Breakout: US$ 7.95
- BitVoicer Server 1.0: US$ 9.90
- Protoboard: ~US$ 10
- 3x LEDs: ~US$ 1
- 3x Resistores 330Ω: ~US$ 0.75
- Jumpers: ~US$ 0.30
Passo 1: Fiação
Monte Arduino e protoboard conforme imagens.
Detalhe crítico: Referência analógica para ADC do Arduino. Obtive melhores resultados com 3.3V no SparkFun Electret Breakout. Por isso, jumper entre pino 3.3V e AREF. Se usar analogRead() com 3.3V no AREF, DEVE chamar analogReference(EXTERNAL) antes! Caso contrário, curto-circuita referência interna ativa com pino AREF, podendo danificar o microcontrolador.
Passo 2: Carregando Código no Arduino
Carregue o código abaixo. Sketch também disponível em anexos. Antes, instale bibliotecas BitVoicer Server no Arduino IDE (Importar biblioteca .zip).
BVS_Demo1.ino
Sketch tem 4 partes principais:
- Referências e variáveis: Inclui bibliotecas
BVSPeBVSMic(pasta instalação BitVoicer). Constantes e variáveis globais. ClasseBVSP= comunicação com servidor;BVSMic= captura/armazenamento de áudio. - Setup: Inicializa serial, classes BVSP/BVSMic, define handler do evento
frameReceived. - Loop: 3 ações: solicita status ao servidor (
keepAlive()), verifica/processa dados recebidos (receive()), controla gravação/envio de stream de áudio (isSREAvailable(),startRecording(),stopRecording(),sendStream()). - BVSP_frameReceived: Chamado quando
receive()identifica frame completo. Executa comando do servidor: 2 bytes (byte 0 = pino, byte 1 = valor). UsaanalogWrite()no pino.
Passo 3: Importando Objetos da Solução BitVoicer Server
Configure BitVoicer Server para trabalhar com Arduino. 4 objetos principais: Locations, Devices, BinaryData, Voice Schemas.
- Locations: Local físico do dispositivo. Criei "Home".
- Devices: Clientes BitVoicer. Criei dispositivo "Mixed" chamado "ArduinoMicro" com configurações de comunicação. NOTA ARDUINO MICRO: usa RTS/DTR → habilite na aba comunicação. Também criei "SystemSpeaker" para síntese de voz no áudio do servidor.
- BinaryData: Tipo de comando (array de bytes) enviado a dispositivos. Criei um para cada valor de pino: ArduinoMicroGreenLedOn, ArduinoMicroGreenLedOff, etc. Total 18 objetos → sugiro importar dos arquivos
.sofabaixo. - Voice Schemas: Onde tudo se conecta. Definem frases reconhecidas e comandos a executar. Para cada frase, múltiplos comandos com ordem e delays. Assim criei as sequências do vídeo.
Importe todos objetos dos arquivos abaixo:
Devices.sof
VoiceSchema.sof
Passo 4: Conclusão
Pronto! No vídeo, iniciei habilitando dispositivo ArduinoMicro no BitVoicer Server Manager. Ao habilitar, Arduino detecta Speech Recognition Engine disponível e inicia streaming de áudio.
Acompanhe resultados no Server Monitor (BitVoicer Server Manager).
Próximo post: reproduzir síntese de voz no Arduino DUE.
Código
BVS_Demo1.ino (Arduino)
#include <BVSP.h>
#include <BVSMic.h>
// Pino de entrada de áudio
#define BVSM_AUDIO_INPUT 5
// Pinos dos 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;
// Tamanho buffers
const int AUDIO_BUFFER_SIZE = 64;
const int RECEIVE_BUFFER_SIZE = 2;
// Instâncias globais
BVSP bvsp = BVSP();
BVSMic bvsm = BVSMic();
byte audioBuffer[AUDIO_BUFFER_SIZE];
byte receiveBuffer[RECEIVE_BUFFER_SIZE]; // Byte 0 = pino, Byte 1 = valor
void setup() {
pinMode(RED_LED_PIN, OUTPUT);
pinMode(YELLOW_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
Serial.begin(115200);
bvsp.begin(Serial, STATUS_REQUEST_TIMEOUT, STATUS_REQUEST_INTERVAL);
bvsp.frameReceived = BVSP_frameReceived;
bvsm.begin();
}
void loop() {
bvsp.keepAlive();
bvsp.receive();
if (bvsp.isSREAvailable()) {
if (!bvsm.isRecording) {
bvsm.setAudioInput(BVSM_AUDIO_INPUT, EXTERNAL);
bvsm.startRecording();
}
if (bvsm.available) {
if (bvsp.inboundMode == FRAMED_MODE)
bvsp.setInboundMode(STREAM_MODE);
int bytesRead = bvsm.read(audioBuffer, AUDIO_BUFFER_SIZE);
bvsp.sendStream(audioBuffer, bytesRead);
}
} else {
if (bvsm.isRecording)
bvsm.stopRecording();
}
}
void BVSP_frameReceived(byte dataType, int payloadSize) {
if (dataType == DATA_TYPE_BINARY) { // 0x07 = dados binários
if (bvsp.getReceivedBytes(receiveBuffer, RECEIVE_BUFFER_SIZE) == RECEIVE_BUFFER_SIZE) {
analogWrite(receiveBuffer[0], receiveBuffer[1]);
}
}
}
Esquemático
Processo de manufatura
- Sistema de Presença RFID Confiável com Arduino e Python
- Projeto DHT11: Sensor Temperatura/Umidade com LEDs Indicadores e Buzzer
- Monitor de Temperatura e Relógio Tempo Real com Arduino Due e Display TFT 3.2"
- Controlar Roomba Create 2 com Arduino e Android: Guia Passo a Passo
- Construa um Voltímetro DIY com Arduino e Display Nokia 5110 – Guia Passo a Passo
- Arduino e MPU6050: Controle Preciso de Servomotores SG90 e MG996R
- Módulo GPS u-blox LEA‑6H 02: Guia de Integração com Arduino e Python
- Leitura de Temperatura e Umidade com DHT11 no Blynk – Tutorial Arduino Passo a Passo
- Dominando Reconhecimento e Síntese de Fala no Arduino Due
- Construa um Cubo de LED 4x4x4 com Arduino Uno e 1Sheeld – Projeto Interativo de LED