ArduHome
Introducción
¿Alguna vez has soñado con tener una casa inteligente? ArduHome es el asistente que llevas esperando todo este tiempo. Pudiendo ser construido por ti mismo, ArduHome llega para revolucionar el mercado de la domótica.
¿Pero cómo consigo mi ArduHome? En primer lugar, vamos a introducir en qué consiste. A rasgos generales, se trata de un asistente de voz inteligente con el que se pueden controlar muchas tareas, que facilitan la calidad de vida en el hogar.
Explicación general
En cuanto a las funcionalidades que hemos implementado, la principal es el reconocimiento de voz. De esta dependen las restantes funcionalidades, ya que es el pilar central con el que podemos controlarlo todo. De esta forma, mediante distintos comandos de voz, podemos activar distintas tareas como el reproductor de música, encender luces o encender el ventilador. Además, se han incorporado funcionalidades extra mediante una pantalla que muestra información referente a la temperatura y la humedad. Así mismo, también nos preocupamos por la salud del usuario e incorporamos sensor de ritmo cardiaco, además de su seguridad, mediante el sensor de incendios y derrumbamiento de la vivienda.
Componentes empleados
A continuación, se detallan los componentes empleados en el proyecto:
- Geeetech Voice Recognition Module with microphone control voice board.
- 2W 8R 8 Ohm 28MM Speaker Loudspeakers Horn for VCD EVD Thick 5.6MM
- 10 Pcs TO-92 Triode Transistor BC547 BC557 NPN PBP Low Power Transistors
- DFPlayer Mini MP3 Player Module MP3 Voice Audio Decoder Board For Supporting TF Card U-Disk IO/Serial Port/AD
- Sensor DHT 11
- Sensor de ritmo cardíaco KY-039
- Sensor de detección de incendios KY-036
- Sensor de inclinación KY-020
- Motor
- Buzzer
- Leds x4
- DSD TECH USB a TTL convertidor serie CP2102 con 4 PIN Dupont Cable
Presupuesto
El precio de cada componente se detalla a continuación:
- x2 Arduino Uno -> 19.99€ c/u Amazon
- x1 Pack sensores -> 7.99$ c/u Banggood
- x1 Módulo de reconocimiento de voz -> 18.99$ c/u Banggood
- x1 Pack 10 transistores -> 1.83$ c/u Banggood
- x1 Adaptador SD para Arduino -> 1.99$ c/u Banggood
- x1 Altavoz 8 ohmios 2W Arduino -> 2.24$ c/u Banggood
- x1 Pack 120 cables -> 5.99€ c/u Amazon
- x1 Adaptador USB Serial -> 7.99€ c/u Amazon
- x1 Caja de cartón duro -> 7.50€ c/u Maxi China Alcorcón
- x1 Lámina de cartón duro -> 2.50€ Maxi China Alcorcón
- x1 Pack herramientas para manejar los materiales (tijeras, pegamento, segueta, soldador, …) -> Gratis
En total, el desembolso asciende a 53,81 €, dado que contábamos con los dos Arduino Uno.
Librerías utilizadas
Además, hemos empleado las siguientes librerías, que explicaremos más adelante:
- LiquidCrystal
- DFPlayerMini
- SoftwareSerial
- DHT
Explicación de las funcionalidades
Reconocimiento de voz
La implementación del reconocimiento de voz se realiza mediante el modulo de Geeetech anteriormente mencionado.
Para la grabación de los comandos de voz, se ha necesitado utilizar un micrófono externo al que el módulo traía por defecto, puesto que el componente vino defectuoso. Además, se ha necesitado utilizar un USB serial para realizar la conexión con el ordenador, y poder utilizar el programa DockLight, mediante el que se introdujeron los mandatos. Esto se puede realizar hasta alcanzar un máximo de 15 comandos, distribuidos en 3 grupos de 5. En ello residía una de las mayores complicaciones del proyecto, dado que el módulo únicamente permite activar un grupo de comandos de voz. Sin embargo, esto
Como hemos comentado, esta es la pieza clave de nuestro proyecto.
Una vez iniciada la ejecución, ArduHome comenzará saludándonos. A partir de ahí, basta con indicarle la tarea que tiene que realizar.
Las comandos de voz que ArduHome detectará son los siguientes:
- Luces: Tras indicarselo, ArduHome nos preguntará qué luces queremos modificar. Si dicha luz se encuentra encendida, se apagará, y viceversa. Se ofrecen las siguientes opciones:
- Salón
- Cocina
- Habitación
- Garaje
- Todas
- Música: ArduHome preguntará qué queremos que haga, en referencia al apartado música. En ese momento, podremos indicarle varias opciones:
- Play
- Pausa
- Siguiente
- Anterior
- Fiesta: En este caso, ArduHome seleccionará una canción aleatoria a su elección y comenzará a encender y apagar las luces de la casa de igual manera aleatoria.
- Ventilador: ArduHome activará o desactivará el ventilador en función de cómo se encuentre antes de la petición.
- Hola: Si saludamos a ArduHome, nos devolverá el saludo y preguntará qué tal estamos.
Reproductor de música
El reproductor de música consta de un altavoz, un lector y una tarjeta microSD para almacenar los archivos de audio que queramos reproducir (en formato mp3). Es capaz de comenzar a reproducir una pista de audio mediante el comando de voz “play”, pasar a la siguiente pista mediante el comando “siguiente”, volver a la pista anterior mediante el comando “anterior”, y pausarla mediante el comando “pausa”. Además, hemos implementado la función de “fiesta”, mediante la cual comenzará a sonar música (de una pista elegida al azar) y las luces se encenderán de manera aleatoria.
Luces
La iluminación del hogar se encuentra dividida en distintas estancias. De esta forma, podemos encender las luces correspondiente a cada habitación de forma independiente mediante los comandos “baño”, “salón”, “habitación” y “garaje” . El sistema es capaz de reconocer si las luces están encendidas o apagadas, por lo que nos basta con decir el nombre de la estancia para que se apague si está encendida o viceversa. Además, también se pueden activar todas las luces a la vez mediante el comando de voz “todas”.
El asistente nos dará retroalimentación mientras realiza las tareas. Por ejemplo, dice “encendiendo” o “apagando” justo antes de encender o apagar una luz. De forma análoga, dice “que empiece la fiesta” si hemos escogido la opción de fiesta.
Sensor de derrumbamiento
El sensor de derrumbamiento nos avisará si la casa se está derrumbando, por ejemplo por la acción de un terremoto o un fallo en los cimientos. Para detectarlo, se cuenta con un sensor que mide la inclinación, de forma de que si la casa comienza a inclinarse se muestra un mensaje por pantalla que alerta del peligro de derrumbe.
Sensor de incendios
El sensor de incendios alertará mediante el pitido de un buzzer cuando detecte que hay fuego en una distancia relativamente cercana.
Sensor de temperatura y humedad
El sensor de temperatura y humedad detecta lo dicho en tiempo real, y lo muestra por la pantalla LCD implementada.
Sensor de ritmo cardíaco
Situando el dedo en el sensor de ritmo cardíaco, es capaz de indicarnos en tiempo real nuestra frecuencia cardíaca, mostrándola mediante la pantalla LCD.
Pantalla LCD
La pantalla LCD es el perfecto acompañante de la asistencia por voz. Mediante ella, ArduHome nos indica ciertos datos de la casa, como la temperatura o humedad actual, los indicadores de inclinación y detección de fuego, o nuestro ritmo cardíaco cuando sea necesario.
Librerías
LiquidCrystal
Esta librería se utiliza para poder tener manejo sobre la pantalla LCD de 16 pines que tenemos, y tener más accesibles sus funcionalidades, tales como la configuración de la pantalla o la limpieza cuando se escriba algo. Es una librería auxiliar que hemos incluido en nuestro proyecto, ya que programar nosotros incluso el código de esta librería sería un trabajo más duro que el propio proyecto en sí.
Más información: https://www.arduino.cc/en/Reference/LiquidCrystal
DFPlayerMini
Esta es otra librería auxiliar en la que nos hemos apoyado para realizar toda la funcionalidad referida a la reproducción de audio. Como hemos comentado arriba, nuestra casa domótica tiene la opción de reproducirla, pararla, reproducir la siguiente canción o reproducir la anterior.
Esta librería nos permite utilizar funciones ya programadas que nos evitan perder tiempo en entenderlas y así podemos probarlas y utilizarlas directamente.
Descarga: https://github.com/DFRobot/DFRobotDFPlayerMini
SoftwareSerial
Por defecto, Arduino permite realizar comunicaciones seriales por hardware mediante los pines digitales 0 y 1. Mediante esta librería, se permite simular dicho comportamiento por software, permitiendo utilizar pines diferentes para realizar el mismo comportamiento.
Más información: https://www.arduino.cc/en/Reference/SoftwareSerial
DHT
La librería DHT permite manejar de manera más sencilla el módulo de detección de humedad y temperatura.
Descarga:
- http://docs.google.com/file/d/0B0hsUkhqWH97NnM5QWZlN0ZsYVE/edit?usp=sharing
- https://github.com/adafruit/DHT-sensor-library
Problemas encontrados
Al principio, cuando recibimos todos los componentes, intentamos grabar el audio, pero resultó que nos faltaba un componente fundamental, que era el adaptador USB serial para poder grabar los comandos. Además de no disponer del USB serial, el micrófono que nos mandaron no funcionaba, por lo que tuvimos que apañarnos con uno de peor calidad, que montamos de manera independiente. Esto supuso el tener que pedir el nuevo componente y retrasar un poco más el trabajo.
Una vez que conseguimos grabar el audio, estuvimos intentando probar varios sensores e implementar nuevas funcionalidades para nuestra casa domótica. Cuando nos dispusimos a esto, vimos que algunos sensores no funcionaban correctamente, o funcionaban de manera intermitente, por lo que tuvimos que eliminar ciertas funcionalidades que en un principio deseábamos implementar.
También tuvimos problemas con la pantalla LCD, ya que la única que disponíamos necesitaba de un conector especial que no teníamos (y que curiosamente no encontramos repuesto por Internet). Por ello, tuvimos que comprar más cables (un pack de 120) y conectar minuciosamente cada uno de los 16 pines que eran necesarios para nuestra pantalla.
Hemos tenido problemas debido a que necesitamos muchas conexiones de pines por la gran cantidad de sensores, aunque al final lo hemos conseguido con dos Arduino Uno. Además, como íbamos trabajando en paralelo, juntar los diferentes códigos de los sensores e integrar todo ha sido más difícil de lo que pensábamos.
En último lugar, cabe mencionar que lo que más problemas nos ha causado ha sido el reconocimiento de voz. Por un lado, por distintos fallos con la importación de librerías, además de que en Internet tampoco hay mucha documentación sobre esto. Por otro lado, la mala calidad del micrófono y las veces que éste nos fallaba, lo que hizo que el reconocimiento de voz se eternizara hasta que finalmente conseguimos grabar los comandos.
El último gran problema está, de nuevo, relacionado con los propios comandos de voz. El módulo utilizado únicamente permite activar un grupo de 5 comandos de manera simultánea, por lo que, si esto acabase así, veríamos muy limitadas las funcionalidades implementadas. En el único manual del módulo que localizamos, se recomendaba realizar la activación de grupos y la grabación de comandos mediante Docklight, un programa externo. Sin embargo, para poder utilizar la totalidad de grupos de comandos y poder acceder a los 15 mandatos de voz, conseguimos comunicarnos con el módulo de voz en tiempo de ejecución e indicarle mediante escrituras hexadecimales los diferentes cambios de grupos necesarios. Esto desembocó en un rediseño de la agrupación de comandos, agrupándolos en diferentes secciones temáticas.
Algunas imágenes del proceso
A continuación se muestras algunas imágenes que hicimos durante el desarrollo del proyecto.
Video explicativo
A continuación, se incorpora un video resumen de los materiales necesarios para construir ArduHome y su funcionamiento:
¿Por qué elegir ArduHome? Comparativa con otras alternativas comerciales
Do it yourself
Está claro que no se puede competir tan fácilmente con gigantes en el mercado como Google o Amazon… Pero lo mejor de este proyecto, ¡Es que puedes hacer tú mismo! A tu medida y según tus preferencias, mientras como nosotros, aprendes del proceso. Todo es mucho más enriquecedor cuando lo haces tú mismo y no te limitas a comprarlo para utilizarlo.
Código
Por último, se adjunta el código utilizado para implementar la funcionalidad de ambas placas Arduino:
//ARDUINO 1 - RECONOCIMIENTO DE VOZ, RESPUESTAS A COMANDOS Y MP3 //Includes #include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial myPlayerSerial(10, 11); //DFPlayer SoftwareSerial myVoiceSerial(2, 3); //Voice Module DFRobotDFPlayerMini myDFPlayer; int grupo_activo=1; //Variabe que indica el grupo actual //Leds// //In and Out int led1 = 5; //Salon int led2 = 6; //Cocina int led3 = 9; //Bano int led4 = A2; //Garaje //LDR// int ldrPin=A0; //Variables byte com = 0; int luzSalon=0; int luzBano=0; int luzCocina=0; int luzGaraje=0; int ldrStatus; int fiesta=0; int pista_actual=10; int motor=12; int motorOn=0; int comAlarma=13; int alarma=0; //Grupo 1 //Luces,musica,ventilador, alarma, hola //Grupo 2 //Salon, baño, cocina, garaje encender todas(luces) //Grupo 3 //Play, pause, ant,sig, fiesta void importGroup(int n){ myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write(0x37);//Compact mode delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); if(n==1){ myVoiceSerial.write(0xAA); myVoiceSerial.write(0x21);//Import group 1 } if(n==2){ myVoiceSerial.write(0xAA); myVoiceSerial.write(0x22);//Import group 2 } else{ myVoiceSerial.write(0xAA); myVoiceSerial.write(0x23);//Import group 3 } } void fiestaHandler(){ if(fiesta==1){ if(random(2)==1){ digitalWrite(led1, HIGH); }else{ digitalWrite(led1, LOW); } if(random(2)==1){ digitalWrite(led2, HIGH); }else{ digitalWrite(led2, LOW); } if(random(2)==1){ digitalWrite(led3, HIGH); }else{ digitalWrite(led3, LOW); } if(random(2)==1){ digitalWrite(led4, HIGH); }else{ digitalWrite(led4, LOW); } delay(500); }else{ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); } } void setup() { Serial.begin(9600); // Set leds // pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(ldrPin,INPUT); pinMode(motor, OUTPUT); pinMode(comAlarma, OUTPUT); randomSeed(analogRead(A2)); myPlayerSerial.begin(9600); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(myPlayerSerial)) { Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.volume(30); //0-30 myDFPlayer.play(6); delay(1500); myDFPlayer.pause(); //Voice recognition myVoiceSerial.begin(9600); myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write(0x37);//Compact mode delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); importGroup(1); } void loop() { myVoiceSerial.listen(); ldrStatus=analogRead(ldrPin); while(grupo_activo==1){ com = myVoiceSerial.read(); if(com==0x11){ myDFPlayer.play(8); //¿Qué luz quieres cambiar? delay(1500); myDFPlayer.pause(); grupo_activo=2; myVoiceSerial.listen(); importGroup(2); } if(com==0x12){ myDFPlayer.play(9); grupo_activo=3; myVoiceSerial.listen(); importGroup(3); } if(com==0x13){ if(motorOn==1){ Serial.print("Ventilador no"); digitalWrite(motor, LOW); motorOn=0; }else{ Serial.print("Ventilador"); digitalWrite(motor, HIGH); motorOn=1; } } if(com==0x15){ myDFPlayer.play(6); //Play - Hola qué tal delay(1500); myDFPlayer.pause(); } } while(grupo_activo==2){ com = myVoiceSerial.read(); if(com==0x11){ Serial.print("Luz salon"); if(luzSalon==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Salon encendida"); digitalWrite(led1, HIGH); luzSalon=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Salon apagada"); //Apagar luz// digitalWrite(led1, LOW); luzSalon=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x12){ //Luz Bano if(luzBano==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Bano encendida"); digitalWrite(led3, HIGH); luzBano=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Bano apagada"); //Apagar luz// digitalWrite(led3, LOW); luzBano=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x13){ //Luz Cocina if(luzCocina==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Cocina encendida"); digitalWrite(led3, HIGH); luzCocina=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Cocina apagada"); //Apagar luz// digitalWrite(led3, LOW); luzCocina=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x14){ //Luz garaje if(luzGaraje==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Garaje encendida"); digitalWrite(led4, HIGH); luzGaraje=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Garaje apagada"); //Apagar luz// digitalWrite(led4, LOW); luzGaraje=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x15){ //Encender todas myDFPlayer.play(5); //Activado delay(1500); myDFPlayer.pause(); //Encender luces// Serial.write("Todas"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); luzSalon=1; luzBano=1; luzCocina=1; luzGaraje=1; grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } } while(grupo_activo==3){ com = myVoiceSerial.read(); if(com==0x11){ //Play música myDFPlayer.play(pista_actual); } if(com==0x12){ //Pausar música myDFPlayer.pause(); grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x13){ //Pone la canción anterior Serial.print("Anterior"); if(pista_actual>10){ pista_actual--; }else{ pista_actual=13; } myDFPlayer.play(pista_actual); } if(com==0x14){ Serial.print("Siguiente"); if(pista_actual<13){ pista_actual++; }else{ pista_actual=10; } myDFPlayer.play(pista_actual); } if(com==0x15){ if(fiesta==0){ Serial.print("Fiesta"); myDFPlayer.play(7); delay(2000); myDFPlayer.play(random(10,14)); fiesta=1; }else{ Serial.print("Fiesta fuera"); myDFPlayer.pause(); fiesta=0; grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } } fiestaHandler(); } delay(1000); } #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial myPlayerSerial(10, 11); //DFPlayer SoftwareSerial myVoiceSerial(2, 3); //Voice Module DFRobotDFPlayerMini myDFPlayer; int grupo_activo=1; //Variabe que indica el grupo actual //Leds// //In and Out int led1 = 5; //Salon int led2 = 6; //Cocina int led3 = 9; //Bano int led4 = A2; //Garaje //LDR// int ldrPin=A0; //Variables byte com = 0; int luzSalon=0; int luzBano=0; int luzCocina=0; int luzGaraje=0; int ldrStatus; int fiesta=0; int pista_actual=10; int motor=12; int motorOn=0; int comAlarma=13; int alarma=0; //Grupo 1 //Luces,musica,ventilador, alarma, hola //Grupo 2 //Salon, baño, cocina, garaje encender todas(luces) //Grupo 3 //Play, pause, ant,sig, fiesta void importGroup(int n){ myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write(0x37);//Compact mode delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); if(n==1){ myVoiceSerial.write(0xAA); myVoiceSerial.write(0x21);//Import group 1 } if(n==2){ myVoiceSerial.write(0xAA); myVoiceSerial.write(0x22);//Import group 2 } else{ myVoiceSerial.write(0xAA); myVoiceSerial.write(0x23);//Import group 3 } } void fiestaHandler(){ if(fiesta==1){ if(random(2)==1){ digitalWrite(led1, HIGH); }else{ digitalWrite(led1, LOW); } if(random(2)==1){ digitalWrite(led2, HIGH); }else{ digitalWrite(led2, LOW); } if(random(2)==1){ digitalWrite(led3, HIGH); }else{ digitalWrite(led3, LOW); } if(random(2)==1){ digitalWrite(led4, HIGH); }else{ digitalWrite(led4, LOW); } delay(500); }else{ digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); } } void setup() { Serial.begin(9600); // Set leds // pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(ldrPin,INPUT); pinMode(motor, OUTPUT); pinMode(comAlarma, OUTPUT); randomSeed(analogRead(A2)); myPlayerSerial.begin(9600); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(myPlayerSerial)) { Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.volume(30); //0-30 myDFPlayer.play(6); delay(1500); myDFPlayer.pause(); //Voice recognition myVoiceSerial.begin(9600); myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write(0x37);//Compact mode delay(100); myVoiceSerial.write(0xAA); myVoiceSerial.write((byte)0x00);//Waiting delay(100); importGroup(1); } void loop() { myVoiceSerial.listen(); ldrStatus=analogRead(ldrPin); while(grupo_activo==1){ com = myVoiceSerial.read(); if(com==0x11){ myDFPlayer.play(8); //¿Qué luz quieres cambiar? delay(1500); myDFPlayer.pause(); grupo_activo=2; myVoiceSerial.listen(); importGroup(2); } if(com==0x12){ myDFPlayer.play(9); grupo_activo=3; myVoiceSerial.listen(); importGroup(3); } if(com==0x13){ if(motorOn==1){ Serial.print("Ventilador no"); digitalWrite(motor, LOW); motorOn=0; }else{ Serial.print("Ventilador"); digitalWrite(motor, HIGH); motorOn=1; } } if(com==0x15){ myDFPlayer.play(6); //Play - Hola qué tal delay(1500); myDFPlayer.pause(); } } while(grupo_activo==2){ com = myVoiceSerial.read(); if(com==0x11){ Serial.print("Luz salon"); if(luzSalon==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Salon encendida"); digitalWrite(led1, HIGH); luzSalon=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Salon apagada"); //Apagar luz// digitalWrite(led1, LOW); luzSalon=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x12){ //Luz Bano if(luzBano==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Bano encendida"); digitalWrite(led3, HIGH); luzBano=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Bano apagada"); //Apagar luz// digitalWrite(led3, LOW); luzBano=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x13){ //Luz Cocina if(luzCocina==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Cocina encendida"); digitalWrite(led3, HIGH); luzCocina=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Cocina apagada"); //Apagar luz// digitalWrite(led3, LOW); luzCocina=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x14){ //Luz garaje if(luzGaraje==0){ myDFPlayer.play(5); //Encendiendo delay(2000); myDFPlayer.pause(); Serial.print("Garaje encendida"); digitalWrite(led4, HIGH); luzGaraje=1; } else{ myDFPlayer.play(2); //Apagando delay(2000); myDFPlayer.pause(); Serial.print("Garaje apagada"); //Apagar luz// digitalWrite(led4, LOW); luzGaraje=0; } grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x15){ //Encender todas myDFPlayer.play(5); //Activado delay(1500); myDFPlayer.pause(); //Encender luces// Serial.write("Todas"); digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); luzSalon=1; luzBano=1; luzCocina=1; luzGaraje=1; grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } } while(grupo_activo==3){ com = myVoiceSerial.read(); if(com==0x11){ //Play música myDFPlayer.play(pista_actual); } if(com==0x12){ //Pausar música myDFPlayer.pause(); grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } if(com==0x13){ //Pone la canción anterior Serial.print("Anterior"); if(pista_actual>10){ pista_actual--; }else{ pista_actual=13; } myDFPlayer.play(pista_actual); } if(com==0x14){ Serial.print("Siguiente"); if(pista_actual<13){ pista_actual++; }else{ pista_actual=10; } myDFPlayer.play(pista_actual); } if(com==0x15){ if(fiesta==0){ Serial.print("Fiesta"); myDFPlayer.play(7); delay(2000); myDFPlayer.play(random(10,14)); fiesta=1; }else{ Serial.print("Fiesta fuera"); myDFPlayer.pause(); fiesta=0; grupo_activo=1; myVoiceSerial.listen(); importGroup(1); } } fiestaHandler(); } delay(1000); }
//ARDUINO 2 - PANTALLA LCD Y LECTURA DE SENSORES // Includes sensor de temperatura y humedad #include <dht.h> // Includes pantalla lcd #include <LiquidCrystal.h> LiquidCrystal lcd(7,8,9,10,11,12); // set the LCD address to 0x27 for a 16 chars and 2 line display dht DHT; #define DHT11_PIN 13 // Sensor cardiaco int sensor_pin = 0; double alpha = 0.75; int period = 20; double refresh = 0.0; // Sensor inclinacion int SENSORINCLINACION = 5; int ESTADO; // Motor int MOTOR = 2; int buzzer = 4; // selecciona el pin para el zumbador // Sensor temperatura y humedad int valorSensor = 0; // variable para almacenar el valor proveniente del sensor void setup(){ Serial.begin(9600); // declarar buzzer como una SALIDA: pinMode(A1,INPUT); pinMode(buzzer, OUTPUT); pinMode(MOTOR,OUTPUT); pinMode(SENSORINCLINACION, INPUT); } void loop() { static double old_value=0; static double old_refresh=0; lcd.begin(16,2); // Ritmo cardiaco int beat = analogRead(A1); double value = alpha * old_value + (0 - alpha) * beat; refresh = value - old_value; old_value=value; old_refresh=refresh; // Inclinacion ESTADO = digitalRead(SENSORINCLINACION); int chk = DHT.read11(DHT11_PIN); if(DHT.temperature>32) { digitalWrite(MOTOR,HIGH); } else { digitalWrite(MOTOR,LOW); } valorSensor = analogRead(A0); // Humedad y temperatura lcd.setCursor(0,0); lcd.print("Temperature = "); lcd.print(DHT.temperature); lcd.print("Fuego = "); if(valorSensor < 650) { lcd.print("positivo "); digitalWrite(buzzer, HIGH); } else { lcd.print("negativo "); digitalWrite(buzzer, LOW); } lcd.setCursor(0,1); lcd.print("Humidity = "); lcd.print(DHT.humidity); if (ESTADO == HIGH) { lcd.print(" Peligro derrumbe"); } else { lcd.print(" Sin peligro"); } delay(1300); for(int i=0;i<19;i++) { lcd.scrollDisplayLeft(); } delay(1300); lcd.clear(); lcd.setCursor(0,0); lcd.print("Latido: "); lcd.setCursor(0,1); lcd.print(beat/10); lcd.print(" "); delay(1300); }
Autoría
Este proyecto ha sido realizado por:
- Carlos Colmenero Gómez-Cambronero
- Álvaro López Sierra
- Pablo Bayona González
- Sergio Arévalo Gil
Alumnos del Doble Grado en Diseño y Desarrollo de Videojuegos e Ingeniería de Computadores de la Universidad Rey Juan Carlos.