PRÁCTICA FINAL 2019 DOMÓTICA Francisco Plaza Molina DNI. 08893258D 1254326 1. MEMORIA. Se nos ha planteado dar solución al control domótico de un edificio. El edificio deberá tener como función básica la seguridad, que se resume en que no se puede establecer ninguna actividad en la vivienda si no esta habilitada mediante un código de seguridad, y que permanecerá en el estado habilitado hasta que de manera similar se deshabilite. También deberán existir funcionalidades de confort : – – Control de luminosidad, debe permitir el encendido apagado de luces de manera total o selectiva, cuando se habilita la seguridad del edificio se apagaran todas. Control de temperatura debe permitir activar y desactivar los elementos necesarios para calentar o enfriar la vivienda. Para la realización del problema se nos pide además que usemos el protocolo KNX, por lo que a la hora de colocar los distintos elementos domóticos así como a la hora del cableada habrá que tener en cuenta este protocolo y sus características. 2. DESARROLLO. 2.1 Determinación de las características de funcionamiento de cada una de las funcionalidades deseadas. Las distintas funcionalidades definidas en el enunciado del problema son las siguientes: 1. Establecimiento de un sistema de seguridad resumido en que no se puede realizar ninguna actividad en la vivienda si no está habilitada mediante un código de seguridad. Para conseguir establecer esta funcionalidad se ha utilizado un teclado matricial conectado al bus principal y mediante lenguaje informático el objetivo ha sido conseguir que hasta la correcta introducción de una clave determinada no funcione nada en el hogar salvo el detector de intrusión, que al revés que todo lo demás deberá desactivarse mientras el sistema de seguridad esté activo. 2. Detección de intrusión. Para esta funcionalidad hemos utilizado distintos sensores de movimiento PIR colocados en distintos puntos del hogar con la clara idea de cubrir todo los espacios del mismo, en el punto anterior ya se ha explicado cual es el funcionamiento de este detector de intrusión. 3. Control de luminosidad. Esta funcionalidad ha sido sencilla de implementar colocando un sensor fotosensible LDR en el exterior que dará un voltaje alto siempre el que el valor leído desde el mismo esté por debajo de un determinado valor. 4. Control de temperatura. Esta funcionalidad también ha sido sencilla de implemetar, al igual que en el caso anterior se ha colocado un sensor térmico, en este caso en el interior del hogar, y en el momento que la temperatura medida está por debajo del valor que consideremos nosotros la calefacción se encenderá. 2.2 Pseudolenguaje la lógica de funcionamiento del sistema. Con el siguiente código de arduino funcionarían las cuatro funcionalidades descritas en el apartado 2.1. #include <Keypad.h> const byte rowsCount = 4; const byte columsCount = 4; char *clave="1234"; char *introducida="xxxx"; int indiceTeclado=0; char keys[rowsCount][columsCount] = { { '1','2','3', 'A' }, { '4','5','6', 'B' }, { '7','8','9', 'C' }, { '*','0','#', 'D' } }; const byte rowPins[rowsCount] = { 11, 10, 9, 8 }; const byte columnPins[columsCount] = { 7, 6, 5, 4 }; Keypad keypad = Keypad(makeKeymap(tecla), rowPins, columnPins, rowsCount, columsCount); //Hasta aquí todo son variables para el correcto funcionamiento del teclado y su activación con la contraseña float tempC; float temp; int pinLM35=0; int Tdeseada=25; int Calefaccion= x //variables para el sensor tértmico int LUZ = x; int ldrPin = A5; int luzmedida=0; int umbralLUZ=100; //Variables para el sensor fotosensible int ALARMA = x; // pin activación sistema aviso detección intruso int PIRPin = x; int estadoMov=0; // pin de entrada (PIR sensor) int acierto=1;//Esta variable se actualiza cada vez que introducimos la clave de forma correcta, de forma que si el valor es impar la seguridad estará activada y si es par estará desactivada void setup() { Serial.begin(9600); pinMode(Calefaccion,OUTPUT); digitalWrite(Calefaccion,LOW);//pin para activar calefacción pinMode(Luces, OUTPUT); pinMode(LdrPin, INPUT); digitalWrite(Luces,LOW);//pin para luces pinMode(ALARMA, OUTPUT); pinMode(PIRPin, INPUT); } void loop() { tempC = analogRead (pinLM35);//lectura sensor temp= (5.0*tempC*100.0)/1024.0;//conversión a ºC if (temp<Tdeseada){ digitalWrite(Calefaccion,HIGH); } else{ digitalWrite(Calefaccion,LOW); }//Con este sencillo if else ya tenemos diseñada nuestra calefacción //INICIO CODIGO SEGURIDAD tecla=teclado.getKey(); if (tecla != NO_KEY)//si se presionó una tecla { if (tecla == '#')//si tecleamos el caracter "#" del KeyPad comprobaremos si abrir la puerta, y reiniciaremos clave introducida { if (indiceTeclado==4) // Si no hemos introducido cuatro caracteres, ni comprobamos { bool coincide=true; for (int i=0;i<4;i++){ if (clave[i]!=introducida[i]) { coincide=false; Serial.println(" "); Serial.println("Clave INCORRECTA"); Serial.println(" "); break; //si uno de los caracteres no coincide, salimos del bucle } } if (coincide) { Serial.println(" "); Serial.println("Usuario Autorizado. Bienvenido"); Serial.println(" "); acierto++; } } Serial.println(); indiceTeclado=0; // Siempre que se pulse # "borramos" la clave } else // Si la tecla no es # { if (indiceTeclado < 4) // Cuando existan ya cuatro caracteres "pasamos de recibir más" { introducida[indiceTeclado]=tecla; indiceTeclado++; Serial.print(tecla); } } } if (acierto % 2== 0){//si es par significa que hemos introducido la contraseña, por lo que hemos de activar las luces acierto=acierto/2; // dividimos para que no se nos llene la memoria al aumentar el valor de acierto luzmedida = analogRead(ldrPin); if(luzmedida<umbralLUZ){//si estamos por debajo del humbral encendemos luces digitalWrite(LUZ,HIGH); } else{ digitalWrite(LUZ,LOW); val = digitalRead(PIRPin); if ( estadoMov == HIGH) //si está activado { digitalWrite(ALARMA, HIGH); //Se activa la alrma if (estadoMov == LOW) //si previamente estaba apagado { estadoMov = HIGH; } } else //si esta desactivado { digitalWrite(ALARMA, LOW); // Alarma OFF if (estadoMov == HIGH) //si previamente estaba encendido { estadoMov = LOW; } } else{//si no es par significa que la seguridad está activada y tenemos que desactivar el sensor de mov digitalWrite(LUZ,LOW) ; digitalWrite(ALARMA,LOW) } } A algunos pines se les ha dado valor, a otros se les ha asignado una “x”, ya que no es importante en este caso donde conectamos los pines sino el funcionamiento en sí del programa. 2.3 Planos del edificio. Los planos del edificio se adjuntan en la carpeta comprimida comprimido. 2.4 Material y presupuesto. Célula fotoconductora LDR GL05AP02 MAX7219-MAX7221 Datasheet Sensor de movimiento PIR SE-10 Teclado matricial C-5235 (12 teclas) Sensor temperatura TMP35 Nº Unidades Elemento Precio € (Unidad) Total € 1 1 Celula fotoconductora 1,9 1,9 2 1 MAX7219MAX7221 Datasheet 5,9 5,9 3 4 Sensor de movimiento PIR SE-10 13,79 55,16 4 1 Teclado matricial C5235 (12 teclas) 5,2 5,2 5 1 Sensor temperatura TMP35 2,7 2,7 6 10 Bombilla 1,9 19 7 6 Radiador 119,9 719,4 8 150 Cableado (m) 2,5 375 9 32 Mano de obra 20 640 TOTAL 1824,26