Este proyecto es similar a la de mi primer (de correos), pero ahora usar streaming de audio para enviar audio a BitVoicer.
El esquema de fritzing que añadí a este instructable muestra cómo alambré mi placa de Arduino.
También estoy agregando un par de fotos y un video de YouTube del proyecto.
Por desgracia, el bosquejo que escribí para mi primer post ya no es compatible con la nueva versión de BitVoicer. Aquí está el bosquejo nuevo:
#include < BitVoicer11.h >
Crea una instancia de la clase BitVoicerSerial True si tiendas la herramienta de calibración de Audio Streaming void setup() void loop() Esta función se ejecuta cada vez que los datos en serie están disponibles Realiza los cambios de LED según el valor de
BitVoicerSerial bvSerial = BitVoicerSerial();
se está ejecutando
sampleTest boolean = false;
Almacena el tipo de datos obtenido por getData()
tipo de datos byte = 0;
Configura los pines y variables por defecto
pinR int = 3;
int pinY = 5;
pinG de int = 6;
int lightLevel = 0;
{
Establece la referencia analógica externa (pin AREF)
¡ ADVERTENCIA! Si nada es conectado al pin AREF,
Esta función debe ser llamada primero. De lo contrario, será
dañar la Junta.
bvSerial.setAnalogReference(BV_EXTERNAL);
Configura el microcontrolador para realizar más rápidos analógicos lecturas
en el pin especificado
bvSerial.setAudioInput(0);
Comienza comunicación serie a 115200 bps
Serial.Begin(115200);
Configura la pinModes
pinMode (pinR, salida);
pinMode (pinY, salida);
pinMode (pinG, salida);
}
{
Captura audio y lo envía a BitVoicer si el Audio
Herramienta de calibración de streaming se está ejecutando
Si (sampleTest == true)
{
El valor pasado a la función es el tiempo
(en microsegundos) que la función tiene que esperar antes de
realizar la lectura. Se utiliza para alcanzar sobre
8000 lecturas por segundo.
bvSerial.processAudio(46);
}
Captura audio y lo envía a BitVoicer si el discurso
Reconocimiento está en marcha
Si (bvSerial.engineRunning)
{
El valor pasado a la función es el tiempo
(en microsegundos) que la función tiene que esperar antes de
realizar la lectura. Se utiliza para alcanzar sobre
8000 lecturas por segundo.
bvSerial.processAudio(46);
}
}
en el buffer serial después de un bucle
void serialEvent()
{
Lee el buffer serial y almacena el tipo de datos recibidos
tipo de datos = bvSerial.getData();
Cambia el valor de sampleTest si los datos recibidos fue
el comando de muestreo de arranque/parada
Si (dataType == BV_COMMAND)
sampleTest = bvSerial.cmdData;
Señales motor de BitVoicer de reconocimiento de voz para iniciar
escuchar streams de audio después del estado de engineRunning
fue recibido
Si (dataType == BV_STATUS & & bvSerial.engineRunning == true)
bvSerial.startStopListening();
Comprueba si el tipo de datos es el mismo que el de la
Esquema de la voz
Si (dataType == BV_STR)
setLEDs();
}
bvSerial.strData
void setLEDs()
{
Si (bvSerial.strData == "wake")
{
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
digitalWrite (pinR, HIGH);
digitalWrite (pinY, alto);
digitalWrite (pinG, HIGH);
Delay(200);
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
Delay(200);
digitalWrite (pinR, HIGH);
digitalWrite (pinY, alto);
digitalWrite (pinG, HIGH);
Delay(200);
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
Delay(200);
digitalWrite (pinR, HIGH);
digitalWrite (pinY, alto);
digitalWrite (pinG, HIGH);
Delay(200);
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
lightLevel = 0;
}
else if (bvSerial.strData == "sueño")
{
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
digitalWrite (pinR, HIGH);
digitalWrite (pinY, alto);
digitalWrite (pinG, HIGH);
Delay(200);
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
Delay(200);
digitalWrite (pinR, HIGH);
digitalWrite (pinY, alto);
digitalWrite (pinG, HIGH);
Delay(200);
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
lightLevel = 0;
}
else if (bvSerial.strData == "RH")
{
digitalWrite (pinR, HIGH);
lightLevel = 255;
}
else if (bvSerial.strData == "RL")
{
digitalWrite (pinR, LOW);
lightLevel = 0;
}
else if (bvSerial.strData == "YH")
{
digitalWrite (pinY, alto);
lightLevel = 255;
}
else if (bvSerial.strData == "YL")
{
digitalWrite (pinY, baja);
lightLevel = 0;
}
else if (bvSerial.strData == "GH")
{
digitalWrite (pinG, HIGH);
lightLevel = 255;
}
else if (bvSerial.strData == "GL")
{
digitalWrite (pinG, LOW);
lightLevel = 0;
}
else if (bvSerial.strData == "ALLON")
{
digitalWrite (pinR, HIGH);
digitalWrite (pinY, alto);
digitalWrite (pinG, HIGH);
lightLevel = 255;
}
else if (bvSerial.strData == "ALLOFF")
{
digitalWrite (pinR, LOW);
digitalWrite (pinY, baja);
digitalWrite (pinG, LOW);
lightLevel = 0;
}
else if (bvSerial.strData == "más brillante")
{
Si (lightLevel < 255)
{
lightLevel += 85;
analogWrite (pinR, lightLevel);
analogWrite (pinY, lightLevel);
analogWrite (pinG, lightLevel);
}
}
else if (bvSerial.strData == "más oscuro")
{
Si (lightLevel > 0)
{
lightLevel-= 85;
analogWrite (pinR, lightLevel);
analogWrite (pinY, lightLevel);
analogWrite (pinG, lightLevel);
}
}
otra cosa
{
bvSerial.startStopListening();
bvSerial.sendToBV ("ERROR:" + bvSerial.strData);
bvSerial.startStopListening();
}
}
El esquema de la voz de BitVoicer usé puede descargarse de: http://www.justbuss.xpg.com.br/BitVoicerTest2.zip (tienes que tener el BitVoicer instalado para poder abrirlo).
Ahora quiero controlar algunas cosas (luces y ventilador celling) en casa. Sugerencias son bienvenidas.