Los LEDs hacen básica lo mismo que hicieron en mi última (de proyecto), pero ahora eliminado la conexión de cable de PC, así que por fin puedo tener un discurso activado Arduino en cualquier lugar llega a mi red inalámbrica.
Aquí está el video de YouTube del proyecto:
He utilizado un módulo WiFly de Roving Networks (https://www.sparkfun.com/products/10822) porque he leido por ahí que trabajaría con el XBee Shield tenía (https://www.sparkfun.com/products/9976). Por desgracia, descubrí la manera más dura que un diodo entre el TX del Arduino y la RX de WiFly estaba bloqueando la señal. Tuve que rasgar el diodo y añadir un divisor del voltaje entre los pines de TX/RX del Arduino y el módulo WiFly porque el pin RX de la WiFly es tolerante de 3.3V y el TX del Arduino trabaja a 5V. No parece ser el mejor enfoque, pero funcionó y pude enviar y recibir datos desde el módulo. Me enteré que Sparkfun lanzó una nueva versión de los XBee Shield (https://www.sparkfun.com/products/10854) y que la palanca de cambios nivel diodo fue sustituido con un desplazador de nivel MOSFET más robusto. Esto debería solucionar el problema del diodo.
Creo que podría utilizarse cualquiera de los siguientes módulos. Sólo tienes que encontrar que uno de ellos mejor adapta a sus necesidades:
- http://arduino.cc/en/Main/ArduinoWiFiShield
- http://www.rovingnetworks.com/products/RN171XV
- https://www.sparkfun.com/pages/xbee_guide (necesita un XBee Explorer Dongle para conectar el XBee a su computadora: https://www.sparkfun.com/products/9819)
-Muchos otros escudos de Arduino WiFi puede encontrarse aquí: http://postscapes.com/arduino-wifi
El proceso de configuración del módulo WiFly puede ser complicado, así que también estoy añadiendo un tutorial paso a paso sobre cómo hacerlo. En mi caso, utilizo un punto de acceso regular o router de D-Link para implementar mi red inalámbrica privada. Este tutorial debería funcionar con cualquier punto de acceso ahi.
1. Desconecte el equipo de cualquier red inalámbrica
2. Configure el GPIO9 pin del módulo WiFly a alta (3,3 v) en el poder. Esto permite modo adhoc en el módulo. He usado los 3, 3V fuente de la placa Arduino y un cable de puente normal. Después de la de encendido, retire el cable y seguir los siguientes pasos. Hoja de datos de módulo: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-XV-DS.pdf
3. en tu computadora, buscar redes disponibles y conectarse a la red de módulo WiFly (WiFly-GSX-XX). Puede tomar unos segundos antes de que su equipo obtiene una dirección IP del módulo.
4. descargar y ejecutar un software libre llamado TeraTerm (http://www.rovingnetworks.com/resources/download/86/Teraterm)
5. Introduzca los ajustes siguientes y haga clic en Aceptar: dirección IP: 169.254.1.1; Puerto TCP: 2000; Servicio: Telnet; Protocolo: IPv4
6. usted debe ver la palabra "* Hola *" en la pantalla.
7. tipo de $$$ para entrar en modo de comandos
8. tipo de exploración y pulse Entrar para buscar puntos de acceso disponibles
9. Si su red utiliza la autenticación de WPA, utilice el comando ajustar el frase de wlan para ajustar el frase. Para WEP, establezca la clave usando el conjunto clave de wlan comando. Mi red es WEP asegurado, por lo que tuve que usar el segundo mando. El problema es que se debe ingresar la clave ASCII/hexadecimal codificado y debe tener exactamente 26 caracteres. Encontré esta página que convierte texto a ASCII/HEX: http://www.string-functions.com/string-hex.aspx.
10. Escriba set ssid de la wlan , donde XXXX es el SSID de red (mirar los resultados del paso 8)
11. Guardar el tipo
12. tipo join (mirar los resultados del paso 8)
13. el WiFly GSX-XX desaparecerá de la lista de red de windows
14. cierre Teraterm
15. Vuelva a conectar su ordenador a su red inalámbrica local
16. Apague la placa Arduino y back ON
17. Anote el número IP asignado al módulo WiFly por su punto de acceso (por lo general, usted puede encontrar esta información en la página DHCP del punto de acceso)
18. abrir Teratem con la nueva dirección IP y las otros ajustes del paso 5
19. tipo de $$$ para entrar en modo de comandos
20. tipo set comm cerca de 0 y pulse Entrar
21. tipo set comm abrir 0 y pulse Entrar
22. tipo set comm remoto 0 y pulse Entrar
23. tipo establecer comm tamaño 1460 y pulse Entrar
24. tipo set comm tiempo 1000 y pulse Entrar
25. tipo set comm baudios 115200 y pulse Entrar (el misma velocidad utilicé en mi sketch)
26. tipo de Guardar y pulse Entrar
27. tipo de salida y pulse Entrar
28. cierre Teraterm
Ahora el módulo WiFly debe ser capaces de comunicarse con BitVoicer y tu PC. Manual del usuario de WiFly puede descargarse aquí: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Wireless/WiFi/WiFly-RN-UM.pdf
Este es el bosquejo que utiliza para controlar los LED, capturar audio e interactuar con BitVoicer:
#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 BitVocier usé puede descargarse aquí: http://www.justbuss.xpg.com.br/BitVoicerTest3.zip
Si usted tiene cualquier pregunta acerca de este proyecto, por favor lo publique aquí, así que nadie puede leer la respuesta.