Tabla de elementos y funcionalidades:
Puede que en el taller encuentres estos sensores, o no, al igual que elementos como bombas u otros objetos. No te preocupes si no encuentras todos los componentes necesarios, simplemente simúlalos con lo que tengas. La motobomba puede ser un pequeño motor de CC o incluso un LED, el PIR puede ser un pulsador al igual que el detector de humedad, tu imaginación y los elementos de los que dispongas serán suficientes para crear tu casa inteligente.
Dedícale unos minutos a pensar por qué vas a sustituir cada uno de los elementos y plásmalos en una tabla. Incluye también en qué pines de la placa estarán conectados y la lógica a seguir. Como ves en la tabla siguiente hay un ejemplo, el cual debes ajustar a los elementos que puedas conseguir y añadir aquellos que se te ocurran.
Haz la maqueta de una casa de cartón, con sus habitaciones y sobre ella incluye todos los elementos. Recuerda dejar suficiente cable para conectarlos luego en la placa Arduino sin problemas. Una buena opción es llevarlos todos hacia el mismo lado de la casa y etiquetarlos para evitar errores. Aquí tienes un ejemplo de programación basado en la tabla anterior, aunque seguro que te gustará modificar cosas y sobre todo mejorarla. El programa es largo porque no está optimizado para que sea sencilla su interpretación.
El programa a realizar será el siguiente:
---------------------------------------------------------------------------
/* PROGRAMA de CONTROL. VIVIENDA DOMÓTICA
Este programa te puede servir de guía para desarrollar este proyecto.
Defino algunas variables por comodidad y mejor entendimiento del programa
mirando la tabla se ve a qué elemento corresponde cada variable
*/
int LDR, MB, SH, PIR, LE, A, C, MP, T;
//guarda el estado de la persiana
boolean persiana_subida=true;
void setup() {
// inicializamos las variables
LDR = 1;
MB = 1;
SH = 2;
PIR = 4;
LE = 5;
A = 6;
C = 7;
MP = 8;
T = 3;
//activamos el puerto serial para la depuracion
Serial.begin(9600);
pinMode(MB, OUTPUT);
pinMode(LE, OUTPUT);
pinMode(A, OUTPUT);
pinMode(C, OUTPUT);
pinMode(MP, OUTPUT);
pinMode(SH, INPUT);
pinMode(PIR, INPUT);
pinMode(T, INPUT);
}
void loop() {
//programamos logica LDR
if (analogRead(1)> 900) { //indica que es de noche
if (persiana_subida){//La persiana está subida y por tanto la bajamos
digitalWrite(MP,HIGH); //Baja persianas
delay(5000); //suponemos que las persianas tardan en bajar 5 segundos
digitalWrite(MP,LOW);//para motor persianas
persiana_subida=false; //para saber que la persiana esta abajo
}
digitalWrite(LE, HIGH); //enciende luces exteriores
}
else {
if(! persiana_subida){//La periana esta bajada y por tanto la subimos
digitalWrite(MP,HIGH); //Sube persianas
delay(5000); //suponemos que las persianas tardan en bajar 5 segundos
digitalWrite(MP,LOW);//para motor persianas
persiana_subida=true;//para saber que la persiana esta arriba
}
digitalWrite(LE,LOW);//apagamos luces
}
//programamos logica detector humedad
if (digitalRead(SH)==1) {//Hay humedad
digitalWrite(MB, HIGH);//arranca la motobomba
}
else {
digitalWrite(MB, LOW);//para la motobomba
}
//programamos logica detector presencia
if (digitalRead(PIR==1) && analogRead(LDR) >900){//Se detecta presencia y es de noche
digitalWrite(A, HIGH);//Activa alarma
}
else {
digitalWrite(A,LOW);
}
//programamos logica sensor temperatura
if (digitalRead(T)==1){
digitalWrite(C,HIGH); //enciende la caldera
}
else {
digitalWrite(C,LOW); //apaga la caldera
}
//mostramos lo que ocurre por monitor serial para poder depurar problemas
Serial.print("LDR=");
Serial.println(analogRead(1));
Serial.print("Detector Humedad=");
Serial.println(digitalRead(SH));
Serial.print("Detector Presencia=");
Serial.println(digitalRead(PIR));
Serial.print("Termostato=");
Serial.println(digitalRead(T));
delay (2000); //esperamos 2 segundos
}
---------------------------------------------------------------------------