Amazon Echo basado en Arduino usando 1Sheeld
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 30 | ||||
| × | 3 |
Herramientas y máquinas necesarias
| ||||
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Hace unos meses visité a un amigo mío y me sorprendió el Amazon Echo que tenía.
Puede reproducir música, controlar las luces de la casa, darme noticias y el estado del clima, e incluso la fecha y la hora, todo eso con solo comandos de voz.
En ese momento, el creador dentro de mí gritó "¡por qué no lo hago yo mismo!".
Y desde ese día comencé a buscar componentes que pudieran ayudarme a hacer un Amazon Echo basado en arduino, hasta que encontré el increíble 1Sheeld.
1Sheeld es una plataforma para Arduino que le permite acceder a los sensores y capacidades de su teléfono inteligente y le permite usarlos en sus proyectos Arduino.
Básicamente, es un escudo de hardware que se encuentra en la parte superior de su placa Arduino y se comunica a través de Bluetooth con esta aplicación de Android, para transferir datos entre ella y su teléfono inteligente.
Puede consultar el tutorial de introducción en el sitio web de 1Sheeld que lo llevará paso a paso hasta que pueda operar 1Sheeld sin problemas y es una referencia increíble para grandes proyectos de Arduino.
He usado en este proyecto cinco escudos de los más de 40 escudos en el 1Sheeld.
El primero es el Escudo de reconocimiento de voz que solía controlar todo el sistema con comandos de voz, es un escudo muy simple que puedo activarlo con solo 1 línea de código: VoiceRecognition.start ();
Luego usé el Escudo del reproductor de música lo que me permite acceder al reproductor de música del teléfono inteligente y elegir las pistas que quiero reproducir sin problemas, en realidad es muy simple que solo usé esta línea para reproducir el escudo del reproductor de música: MusicPlayer.play ();
El tercer escudo que utilicé es uno de los más importantes del proyecto, es el Escudo de texto a voz que agregan al proyecto una interacción humanoide que alguien está respondiendo por lo que estás diciendo, fue tan fácil hacer que el sistema respondiera: TextToSpeech.say ("time in cairo is");
Después de activar el escudo Text to Speech, he activado el escudo del reloj que devuelven el reloj en tiempo real y luego el sistema puede responder con la hora una vez que lo solicité, ¡increíble! ¿no? :), y puedo obtener fácilmente la hora actual en mi teléfono usando esta función: Clock.queryDateAndTime ();
El último escudo que utilicé es el Escudo de Internet que en mi opinión es el escudo más poderoso en 1Sheeld, usé ese escudo para obtener el estado actual del clima en mi ciudad natal usando una API del sitio web "openweathermap" donde puedo llamar a la API con esa línea: HttpRequest request1 ("/ * la dirección API * /");
Paso 1:reúna los componentes
- Arduino 101 $ 30.99
- 1Sheeld + tablero $ 54.94
- iPhone $ 155.5
- Tubería de PVC $ 2
- Tira de LED $ 5
- Fuente de alimentación de 12 V $ 7
- Tablero de relés $ 3
- Jerséis y cables $ 3
- 3 transistores NPN $ 1
Paso 2:
Haga agujeros en la tubería para permitir que salga el sonido
Paso 3:
Pinte la tubería de PVC con spray negro
Paso 4:haz el cableado
- Conecte las tiras de LED a los transistores y la fuente de alimentación
- Conecte la lámpara a la placa de relés y terminales de CA
- Conecte la placa de relés y las tiras de LED a la placa Arduino 101 como se menciona en el código a continuación
- Monte todo eso con el iPhone dentro del tubo de PVC
Paso 5:Configure la biblioteca 1Sheeld
Puede administrar cualquier biblioteca desde el IDE de Arduino. Simplemente haga clic en Sketch>> Incluir biblioteca>> Administrar bibliotecas>> escriba OneSheeld>> luego haga clic en instalar y estará listo para comenzar. O puede descargar la biblioteca desde aquí:http://1sheeld.com/downloads/ Luego abra su IDE de Arduino y luego elija el boceto de la barra de menú>> Incluir biblioteca>> agregar archivo .zip> > luego elija el archivo zip yo recién descargado.
Paso 6:Instale la aplicación 1Sheeld
Descargue la aplicación móvil 1Sheeld del sitio web o puede visitar Apple Play Store o Google Play Store para obtener la aplicación.
Paso 7:accede a los escudos
Siga el tutorial de introducción de 1Sheeld y al final elija los siguientes escudos
- Reconocimiento de voz
- Texto a voz
- Reloj
- Internet
- Reproductor de música
Luego presione el botón de escudo múltiple.
Código
- código de eco de Amazon
Código de eco de Amazon Arduino
/ * OPCIONAL:Para reducir el tamaño compilado de la biblioteca y limitar su uso de memoria, puede especificar qué escudos desea incluir en su boceto definiendo CUSTOM_SETTINGS y los escudos respectivos INCLUDE_ define. * / # definir CUSTOM_SETTINGS # definir INCLUDE_INTERNET_SHIELD # definir INCLUDE_VOICE_RECOGNIZER_SHIELD # definir INCLUDE_TEXT_TO_SPEECH_SHIELD # definir INCLUDE_MUSIC_PLAYER_SHIELD # definir INCLUDE_HIELDel_liblioteca. * / # include/ * crea un valor inicial para el contador de milisegundos. * / unsigned long previousMillis =0; / * crea un estado inicial para llamar a alexa. * / bool state =0; / * Llame a una api que devolverá el estado del tiempo en el cairo, egipto. * / HttpRequest request1 ("http://api.openweathermap.org/data/2.5/weather?q=Cairo,EG&appid=43d95b4cf5d0573e2dfe5186c160017a"); / * define los 3 transistores en los pines 3,5 y 6. * / # define strip1 3 # define strip2 6 # define strip3 5 / * define la lámpara en el pin 13. * / int lamp =13; / * define la variable que mantendrá las horas y las miniuts. * / int hora, minuto; / * Crea 2 arrys de caracteres para capturar la cadena que deseas de la oración. * / char b [4]; char c [4]; / * define variables para contener la hora y las miniaturas en una cadena. * / String strh, strm; / * define la variable para mantener el estado del día am o pm. * / String noon; / * Comandos de voz establecidos por el usuario. * / const char mainCommand [] ="alexa"; const char weatherCommand [] ="cómo está el clima hoy"; const char playCommand [] ="reproducir música"; const char clockCommand [] ="qué hora es"; const char stopCommand [] ="detener"; const char lightonCommand [] ="encender las luces"; const char lightoffCommand [] ="apagar las luces"; void setup () {/ * Iniciar comunicación. * / OneSheeld.begin (); / * establece las tiras de led y la lámpara en salida. * / pinMode (strip1, SALIDA); pinMode (strip2, SALIDA); pinMode (strip3, SALIDA); pinMode (lámpara, SALIDA); / * Suscríbete a la devolución de llamada exitosa para la solicitud. * / request1.setOnSuccess (&onSuccess1); / * Suscribirse a las respuestas de valor json. * / request1.getResponse (). setOnJsonResponse (&onJsonReply1); / * en una voz reconocida, llame a la función "myfunction". * / VoiceRecognition.setOnNewCommand (&myFunction);} void loop () {/ * hace un retraso de 5 segundos usando el contador de milisegundos para mantener viva la detección de voz. * / unsigned long currentMillis =millis (); if (currentMillis - previousMillis> =5000) {previousMillis =currentMillis; / * obtén la hora actual en tu teléfono. * / Clock.queryDateAndTime (); / * iniciar el reconocimiento de voz. * / VoiceRecognition.start (); } / * guardar la hora y los minutos del teléfono inteligente en variables. * / hora =Clock.getHours (); minuto =Clock.getMinutes (); / * detecta el estado de la hora si es am o pm. * / if (hora> 12) {hora - =12; mediodía ="P M"; } else {mediodía ="A M"; } / * guarda la hora y los minutos como cadena. * / strh =Cadena (hora); strm =String (minuto); / * guarda la cadena en una matriz de caracteres. * / strh.toCharArray (b, 4); strm.toCharArray (c, 4);} / * Esta función se invocará cada vez que se dé un nuevo comando. * / void myFunction (char * commandSpoken) {/ * comprueba si alguien llama a alexa o no. * / if (! strcmp (mainCommand, VoiceRecognition.getLastCommand ())) {alexon (); MusicPlayer.setVolume (5); / * en caso afirmativo, haga que el estado sea =1. * / estado =1; } / * compruebe si pidió reproducir música después de llamar a alexa. * / if (! strcmp (playCommand, VoiceRecognition.getLastCommand ()) &&estado ==1) {alexoff (); MusicPlayer.play (); retraso (10000); MusicPlayer.stop (); estado =0; } / * compruebe si pidió obtener el estado del tiempo después de llamar a alexa. * / else if (! strcmp (weatherCommand, VoiceRecognition.getLastCommand ()) &&estado ==1) {alexoff (); Internet.performGet (solicitud1); / * Espere 5 segundos. * / OneSheeld.delay (5000); estado =0; } / * compruebe si pidió la hora después de llamar a alexa. * / if (! strcmp (clockCommand, VoiceRecognition.getLastCommand ()) &&estado ==1) {alexoff (); / * 1Sheeld responde usando conversión de texto a voz. * / TextToSpeech.say ("el tiempo en el cairo es"); retraso (1300); TextToSpeech.say (b); retraso (600); TextToSpeech.say (c); retraso (800); TextToSpeech.say (mediodía); retraso (500); estado =0; } / * compruebe si pidió encender la lámpara después de llamar a alexa. * / if (! strcmp (lightonCommand, VoiceRecognition.getLastCommand ()) &&estado ==1) {alexoff (); digitalWrite (lámpara, ALTA); TextToSpeech.say ("las luces encendidas"); retraso (6000); estado =0; } / * comprueba si pediste apagar la lámpara después de llamar a alexa. * / else if (! strcmp (lightoffCommand, VoiceRecognition.getLastCommand ()) &&estado ==1) {alexoff (); digitalWrite (lámpara, BAJA); TextToSpeech.say ("las luces apagadas"); retraso (3000); estado =0; }} void onSuccess1 (HttpResponse &response1) {/ * Usando la respuesta para consultar la cadena Json hasta el valor requerido. * / / * es decir, obtenga el valor de 'main' en el primer objeto de la matriz 'weather' en la respuesta. * / / * Siempre que la respuesta esté en formato JSON. * / response1 ["clima"] [0] ["principal"]. query (); delay (200); } void onJsonReply1 (JsonKeyChain &hell, char * output) {if (hell ==request1.getResponse () ["weather"] [0] ["main"]) {TextToSpeech.say ("el tiempo hoy en el cairo es" ); retraso (2000); / * 1Sheeld responde usando el escudo de texto a voz. * / TextToSpeech.say (salida); }} void alexon () {/ * Enciende las tiras en orden como el mismo orden de Amazon echo. * / digitalWrite (strip1, HIGH); retraso (200); digitalWrite (strip2, HIGH); retraso (200); digitalWrite (strip3, HIGH); } void alexoff () {/ * Apaga las tiras. * / digitalWrite (strip1, LOW); digitalWrite (strip2, LOW); digitalWrite (strip3, LOW); }
Esquemas
Proceso de manufactura
- Envía los datos del sensor de un Arduino a otro usando Firebase
- Dados digitales Arduino
- Control remoto universal usando Arduino, 1Sheeld y Android
- Controlador de juego Arduino
- Sonda usando arduino y visualización en procesamiento IDE
- Pixel Chaser Game
- Control del brillo del LED usando Bolt y Arduino
- Brazo robótico simple e inteligente con Arduino
- Tanque de WalaBeer
- Radio FM usando Arduino y RDA8057M
- NeoMatrix Arduino Pong