Sistema domótico abierto de bajo coste para la mejora de la eficiencia energética
Full text
PROYECTO FINAL DE GRADO SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA AUTOR JAVIER BARRIO RUIZ DIRECTOR MANUEL LAMICH AROCAS GRADO EN INGENIERÍA ELECTRÓNICA INDUSTRIAL Y AUTOMÁTICA 19 DE MAYO DE 2017
AGRADECIMIENTOS Con las siguientes palabras me gustaría agradecer a todas aquellas personas que han hecho posible que este trabajo se lleve a cabo. En el ambito técnico del proyecto, me gustaría agradecer al PDI y PAS del Departamento de Ingeniería Electrónica de la UPC por permitirme hacer uso de los espacios y el material de los laboratorios. Especialmente a Juan Carlos Pineda, y a Manuel Lamich, el director del proyecto, por la ayuda que me han proporcionado durante el transcurso del proyecto. También quisiera agradecer a David Hurtado, desde el primer curso, mi compañero en la mayoría de laboratorios de la carrera, su apoyo e implicación en el proyecto. Agradecerles también a todos los compañeros de la universidad su compañía todos los años de ésta etapa. En lo personal, me gustaría agradecer a Aitor Aboy y Berta Porras su colaboración en la construcción de la maqueta. A mis padres y a mis amigos, el apoyo, la paciencia, la compresión y en especial, las facilidades que me han dado siempre. Dedicación especial para mi hermano Diego, y a mis abuelos Paulino y Francisca. Ellos me han inspirado, y me han dado razones más que suficientes para seguir creciendo como persona. Gracias a todos.
ÍNDEX 1. Introducción ..................................................................................................................... 7 1.1. Antecedentes ...................................................................................................... 7 1.2. Objetivos ............................................................................................................ 8 1.3. Motivación .......................................................................................................... 8 2. Domótica ........................................................................................................................... 9 2.1. Elementos de un sistema domótico ................................................................ 11 2.2. Modelos de arquitecturas ............................................................................... 12 2.3. Buses de transmisión ...................................................................................... 14 2.3.1. Protocolos de comunicación frecuentes en la domótica .............................................. 15 2.3.2. Niveles físicos frecuentes en la domótica ..................................................................... 19 2.4. Eficiencia energética........................................................................................ 23 3. Bus CAN ........................................................................................................................... 27 3.1. Características principales.............................................................................. 27 3.2. Especificaciones ............................................................................................... 29 3.2.1. Protocolo CAN ................................................................................................................. 29 3.2.2. Nivel físico ....................................................................................................................... 32 3.3. Detección de errores ....................................................................................... 36 3.4. Máscaras y filtros ............................................................................................. 39 4. Descripción de los elementos del sistema .......................................................... 40 4.1. Software utilizado ............................................................................................ 41 4.1.1. Arduino ............................................................................................................................ 41 4.1.2. NetIO App ........................................................................................................................ 42 4.1.3. Librerías .......................................................................................................................... 42 4.2. Hardware utilizado .......................................................................................... 44 4.2.1. Arduino ............................................................................................................................ 44 4.2.2. Módulos CAN ................................................................................................................... 47 4.2.3. Sensores .......................................................................................................................... 49 4.2.4. Actuadores ...................................................................................................................... 53 4.2.5. Otros ................................................................................................................................ 57 5. Desarrollo del proyecto ............................................................................................ 60 5.1. Diseño y especificaciones del sistema ............................................................ 60 5.1.1. Arquitectura del sistema ................................................................................................ 60 5.1.2. Comunicaciones del sistema .......................................................................................... 61 5.2. Funcionamiento del sistema ........................................................................... 62 5.3. Resultados ........................................................................................................ 75 5.3.1. Características del sistema............................................................................................. 76 5.3.2. Análisis económico ......................................................................................................... 79 5.3.3. Impacto energético ......................................................................................................... 82
6. Conclusiones ................................................................................................................. 84 6.1. Futuras mejoras del sistema ............................................................................... 85 7. Bibliografía y webgrafía ............................................................................................... 88 8. Anexos ................................................................................................................................. 92 8.1. Código del programa ....................................................................................... 92 8.1.1. Arduino Due ............................................................................................................................ 93 8.1.2. Arduino UNO - 1 ................................................................................................................... 110 8.1.3. Arduino UNO - 2 ................................................................................................................... 120 8.2. Conexionado de del sistema .......................................................................... 128 8.2.1. Arduino Due .......................................................................................................................... 129 8.2.2. Arduino UNO - 1 ................................................................................................................... 130 8.2.3. Arduino UNO - 2 ................................................................................................................... 131 8.3. Cálculos del sistema ....................................................................................... 132 8.4. Planos de la maqueta ......................................................................................... 135 8.5. Obtención de librerías ....................................................................................... 137 8.6. Datasheets .......................................................................................................... 137 CAN Specification 2.0 - Part A .................................................................................................... 139 SN65HVD230 CAN Transceiver ................................................................................................. 172 TJA1050 CAN Transceiver .......................................................................................................... 204 ÍNDEX DE IMÁGENES IMAGEN 1. DOMÓTICA ................................................................................................................ 9 IMAGEN 2. ELEMENTOS DE UN SISTEMA DOMÓTICO ........................................................... 11 IMAGEN 3. MODELO ARQUITECTURA CENTRALIZADA ........................................................ 12 IMAGEN 4. MODELO ARQUITECTURA DESCENTRALIZADA ................................................. 12 IMAGEN 5. MODELO ARQUITECTURA DISTRIBUIDA ............................................................ 13 IMAGEN 6. MODELO ARQUITECTURA MIXTA ........................................................................ 13 IMAGEN 7. NIVELES DEL MODELO OSI ................................................................................... 14 IMAGEN 8. LOGO DE KNX ......................................................................................................... 15 IMAGEN 9. LOGO DE VSCP ........................................................................................................ 16 IMAGEN 10. LOGO DE PROFIBUS ............................................................................................. 17 IMAGEN 11. LOGO DE MODBUS ............................................................................................... 18 IMAGEN 12. LOGO DE BACNET ................................................................................................ 18 IMAGEN 13. PAR TRENZADO ................................................................................................... 19 IMAGEN 14. CORRIENTES PORTADORAS ............................................................................... 19 IMAGEN 15. CABLE COAXIAL ................................................................................................... 20 IMAGEN 16. FIBRA ÓPTICA ...................................................................................................... 21 IMAGEN 17. LOGOS DE BLUETOOTH, WI-FI, ZIGBEE ............................................................. 22 IMAGEN 18. MONITORIZACIÓN DE UN SISTEMA DOMÓTICO .............................................. 26 IMAGEN 19. LOGO DE BUS CAN ............................................................................................... 29 IMAGEN 20. ESPECIFICACIÓN BUS CAN 2.0A ......................................................................... 29 IMAGEN 21. ESPECIFICACIÓN BUS CAN 2.0B ......................................................................... 30 IMAGEN 22. EJEMPLO DE CONEXIÓN FÍSICA BUS CAN ......................................................... 32
IMAGEN 23. CAPA FÍSICA DE BUS CAN ................................................................................... 32 IMAGEN 24. CONEXIÓN FÍSICA EN ANILLO ABIERTO ........................................................... 33 IMAGEN 25. LÍNEAS CAN-H Y CAN-L ....................................................................................... 34 IMAGEN 26. BITS DE RELLENO BUS CAN ................................................................................ 37 IMAGEN 27. ESQUEMA GENERAL DEL SISTEMA DOMÓTICO DISEÑADO ............................ 40 IMAGEN 28. ARDUINO UNO ...................................................................................................... 45 IMAGEN 30. ARDUINO ETHERNET SHIELD ............................................................................ 46 IMAGEN 29. ARDUINO DUE ...................................................................................................... 46 IMAGEN 31. SN65HVD230 CAN TRANSCEIVER...................................................................... 48 IMAGEN 32. SPI - CAN BUS MODULE ....................................................................................... 48 IMAGEN 33. SENSORIZACIÓN DEL HOGAR ............................................................................. 49 IMAGEN 34. DHT11 SHIELD ..................................................................................................... 50 IMAGEN 36. FUNCIONAMIENTO SENSOR INFRARROJOS ...................................................... 51 IMAGEN 35. LDR SHIELD .......................................................................................................... 51 IMAGEN 37. SENSOR DE INFRARROJOS .................................................................................. 52 IMAGEN 38. RELOJ RTC DS3231 .............................................................................................. 53 IMAGEN 39. LED ........................................................................................................................ 54 IMAGEN 40. MOTOR PASO A PASO 28BYJ-48 CON CONTROLADORA ULN2003 ................. 55 IMAGEN 41. VENTILADOR DE 5V............................................................................................. 56 IMAGEN 42. MÓDULO DE 4 RELÉS .......................................................................................... 57 IMAGEN 43. RESISTENCIA ........................................................................................................ 57 IMAGEN 44. TRANSISTOR......................................................................................................... 58 IMAGEN 45. CABLES DUPONT Y PROTOBOARD .......................................................................... 59 IMAGEN 46. MODELO DE ARQUITECTURA MIXTA DEL SISTEMA DISEÑADO .................... 60 IMAGEN 47. CONEXIÓN GENERAL DEL SISTEMA .................................................................. 62 IMAGEN 48. TRANSMISIÓN DE DATOS BUS CAN DEL SISTEMA ........................................... 63 IMAGEN 49. FUNCIÓN PRINTFRAME ...................................................................................... 64 IMAGEN 50. FUNCIÓN CAN.BEGIN ........................................................................................... 66 IMAGEN 51. FUNCIÓN LEEDATO ............................................................................................. 67 IMAGEN 52. TRANSMISIÓN DE DATOS ETHERNET DEL SISTEMA....................................... 71 IMAGEN 53. INCLUSIÓN DE LIBRERÍAS ETHERNET Y SPI .................................................... 72 IMAGEN 54. VARIABLES ETHERNET ....................................................................................... 72 IMAGEN 55. INICIALIZACIÓN DEL SERVIDOR ........................................................................ 72 IMAGEN 56. INICIO DE CONEXIÓN AL SERVIDOR .................................................................. 72 IMAGEN 57. CONEXIÓN EN NETIO APP ................................................................................... 73 IMAGEN 58. MENÚ BUTTON EN NETIO APP ........................................................................... 73 IMAGEN 59. MENÚ LABEL EN NETIO APP .............................................................................. 74 IMAGEN 60. COMANDO OK ....................................................................................................... 74 IMAGEN 61. MAQUETA DEL SISTEMA ..................................................................................... 75 IMAGEN 62. INTERFAZ VIRTUAL - PARTE 1 ........................................................................... 76 IMAGEN 63. INTERFAZ VIRTUAL - PARTE 2 ................................................................................. 78 IMAGEN 64. ESQUEMA PRINCIPAL DEL SISTEMA DOMÓTICO ........................................... 128 IMAGEN 65. CIRCUITO ARDUINO DUE - SENSORES Y ACTUADORES................................. 129 IMAGEN 66. CIRCUITO ARDUINO UNO-1 - SENSORES Y ACTUADORES ............................. 130 IMAGEN 67. CIRCUITO ARDUINO UNO-2 - SENSORES Y ACTUADORES ............................. 131 IMAGEN 68. PULSADOR .......................................................................................................... 133 IMAGEN 69. RESISTENCIAS PULL-UP Y PULL-DOWN .......................................................... 133 IMAGEN 70. CONEXIÓN DEL VENTILADOR .......................................................................... 134
ÍNDEX DE TABLAS TABLA 1. PARÁMETROS FÍSICOS DE BUS CAN ....................................................................... 33 TABLA 2. PARÁMETROS BIT RECESIVO .................................................................................. 34 TABLA 3. PARÁMETROS BIT DOMINANTE ............................................................................. 34 TABLA 4. VELOCIDAD, TIEMPO Y LONGITUD MÁXIMA DE BUS CAN ................................... 35 TABLA 5. EJEMPLO DE FILTRO BUS CAN ................................................................................ 39 TABLA 6. LIBRERÍAS UTILIZADAS EN EL PROYECTO ............................................................ 43 TABLA 7. VALORES DE CAÍDA DE TENSIÓN PARA LEDS ....................................................... 54 TABLA 8. VALORES DE RESISTENCIA POR COLOR ................................................................ 58 TABLA 9. CONEXIÓN A BUS CAN DE ARDUINO DUE .............................................................. 62 TABLA 10. CONEXIÓN A BUS CAN DE ARDUINO UNO ........................................................... 63 TABLA 11. PRIMER FILTRO DE CAN DEL SISTEMA ............................................................... 65 TABLA 12. SEGUNDO FILTRO DE CAN DEL SISTEMA ............................................................ 65 TABLA 13. TABLA DE BYTES ESPECÍFICA DEL SISTEMA ...................................................... 68 TABLA 14. BYTE 3 - Nº DE PLACA ............................................................................................ 68 TABLA 15. BYTE 2 - TIPO DE OBJETO...................................................................................... 69 TABLA 16. UBICACIÓN DE LEDS .............................................................................................. 77 TABLA 17. PRESUPUESTO CONTROL DEL SISTEMA E INTERFAZ VIRTUAL ....................... 80 TABLA 18. PRESUPUESTO DE INCLUSIÓN MÓDULO CAN ARDUINO UNO .......................... 80 TABLA 19. PRESUPUESTO DE INCLUSIÓN MODULO CAN ARDUINO DUE ........................... 80 TABLA 20. PRESUPUESTO GENERAL DE LA MAQUETA DISEÑADA ..................................... 81 TABLA 21.CONSUMO DE ARDUINO ......................................................................................... 82 TABLA 22. PROGRAMA DE CADA PLACA ARDUINO ............................................................... 92 TABLA 23. VALORES DE CAIDA DE TENSIÓN DE LED ......................................................... 132 ÍNDEX DE GRÁFICOS GRÁFICO 1. PORCENTAJE DE CONSUMO ELÉCTRICO MEDIO EN EL HOGAR EN ESPAÑA . 23 GRÁFICO 2. COSTE MEDIO ANUAL DEL GASTO ENERGÉTICO EN EL HOGAR EN ESPAÑA 24 GRÁFICO 3.PORCENTAJE DE AHORRO ENERGÉTICO POR DOMÓTICA ................................ 83
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 7 1. Introducción El presente documento es el Proyecto Final de Grado realizado por Javier Barrio Ruiz, alumno de la <<Escola Superior d’Enginyeries Industrial, Aerospacial i Audiovisual de Terrassa>>, en el Grado en Ingeniería Electrónica Industrial y Automática, el cuatrimestre de primavera de 2017. 1.1. Antecedentes En la actualidad existen entornos totalmente automatizados, generalmente se trata de grandes industrias, aunque también existe la posibilidad de automatizar los procesos más cotidianos. Y es que la integración domótica en el hogar, ya sea cableada o inalámbrica, ofrece numerosas posibilidades tanto al usuario como al diseñador de estos sistemas. Hace una década, lo habitual era encontrar una única unidad central inteligente capaz de activar y desactivar cargas eléctricas. Esta central podía, además, ofrecer la posibilidad de ser accionada a distancia mediante un módem telefónico. Con el tiempo, la tendencia ha sido distribuir la inteligencia del sistema domótico entre los distintos elementos que lo conforman. Esta circunstancia ha dado lugar a distintos tipos de arquitecturas o topologías. Ser capaces de controlar, por ejemplo, el encendido o el apagado de las distintas luminarias, la apertura o el cierre de las persianas, además de la sensorización en el domicilio, tal como medir la cantidad de luz que se encuentra en una habitación, o la detección de movimiento en un espacio concreto, permite optimizar energéticamente nuestra vivienda de manera totalmente automatizada. Por ejemplo, la vivienda podría ser programada para apagar las luces a una hora establecida o pasado cierto tiempo después de determinada acción. El sistema de control podría ser capaz de detectar que el usuario al salir de la vivienda ha dejado luces encendidas y actuar en consecuencia. Además de un adelanto en el área energética, también supone un extra en la comodidad del usuario. Asimismo, los avances en telefonía móvil facilitan nuevos conceptos en el mundo de la domótica, pudiendo controlar a través de un smartphone los distintos actuadores que se encuentren distribuidos en el hogar, desde cualquier lugar del planeta.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 8 1.2. Objetivos Los objetivos de éste proyecto se pueden descifrar según el título del proyecto, <<Sistema domótico abierto, de bajo coste, para la mejora de la eficiencia energética>>. El principal objetivo es la implementación de un sistema domótico de varios nodos que puedan funcionar como una red, donde, uno de los nodos sea el controlador central. A través del controlador central, se pretende establecer una comunicación a un dispositivo móvil, que funcionará como interfaz virtual para emitir ordenes, además de la interfaz física del sistema. El segundo objetivo es crear un sistema totalmente abierto, eso supone utilizar hardware y software libre. Es decir, que tanto el software y el hardware del sistema puedan ser estudiado, modificado o utilizado libremente con cualquier fin y redistribuido con o sin cambios o mejoras. Otro de los objetivos es realizar un sistema de bajo coste de implementación. La domótica hasta hace poco era un producto de alto coste, pero a medida que la tecnología avanza, el precio va reduciéndose poco a poco. Por último, y como objetivo común en cualquier sistema domótico, se pretende producir un ahorro energético debido a la implementación del sistema en cualquier hogar. Además de todas estas condiciones, aunque no esté especificado en el título, se propone crear una red local cableada, evitando conexiones inalámbricas entre los controladores del hogar. Concretamente, estudiar las posibilidades que ofrece el bus CAN (Controller Area Network) para ser aplicado en redes domóticas. Ya que es frecuentemente utilizado en la industria del automóvil, y aplicable a la domótica. 1.3. Motivación Tras unos años de gran derroche a nivel energético y el exceso en la utilización de los recursos a nivel mundial, la tendencia es optimizar los procesos y los recursos utilizados. La automatización es uno de los procesos industriales que más ha aportado en la optimización de procesos y recursos en general. Los avances en la tecnología a nivel cotidiano dados en los últimos años, permiten que se puedan controlar y también optimizar los procesos en el hogar, y generar un ahorro económico y energético. Además de la parte técnica, la motivación del proyecto tiene un componente éticosocial. Donde se pretende facilitar algunos procesos cotidianos a personas con discapacidad o movilidad reducida.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 15 2.3.1. Protocolos de comunicación frecuentes en la domótica Existen diferentes tipos de buses de transmisión según los protocolos utilizados y el medio físico utilizado para la comunicación del sistema. Los protocolos más utilizados en la domótica son los siguientes. 2.3.1.1. KNX El estándar de protocolo de comunicaciones de red KNX, basado en OSI, es uno de los más utilizados para sistemas de domótica e inmótica en Europa. KNX, también conocido como Konnex, es el sucesor y la convergencia de tres estándares previos: el European Home Systems Protocol (EHS), el European Installation Bus (EIB o Instabus) y el BatiBUS pertenecientes, respectivamente, a la EHSA (European Home Systems Association), la EIBA (European Installation Bus Association) y el BCI (BatiBUS Club International). IMAGEN 8. LOGO DE KNX El objetivo general de KNX es crear un único estándar europeo para la automatización de las viviendas y oficinas, y de manera concreta los aspectos clave de la convergencia son: • Crear un único estándar para la domótica e inmótica que cubra todas las necesidades y requisitos de las instalaciones profesionales y residenciales de ámbito europeo. • Aumentar la presencia de estos buses domóticos en áreas como la climatización o HVAC. • Mejorar las prestaciones de los diversos medios físicos de comunicación. Sobre todo, en la tecnología de radiofrecuencia. • Introducir nuevos modos de funcionamiento que permitan aplicar una filosofía Plug and Play (PnP) a muchos de los dispositivos típicos de una vivienda. El PnP es una arquitectura de software abierta y distribuida que permite a las aplicaciones de los dispositivos conectados a una red intercambiar información y datos de forma sencilla y transparente para el usuario final, sin necesidad de que este tenga que ser un experto en la configuración de redes, dispositivos o sistemas operativos.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 16 • Contactar con empresas proveedoras de servicios, como las de telecomunicaciones y las eléctricas con el objeto de potenciar las instalaciones de telegestión técnica de las viviendas o domótica. Respecto al nivel físico el estándar puede funcionar sobre: par trenzado (TP1), par trenzado (TP0), ondas portadoras (PL100), ondas portadoras (PL132), Ethernet y radiofrecuencia, aprovechando las normas equivalentes de los protocolos que convergen. En cuanto a las topologías de conexión admitidas por los sistemas EIB son todas las existentes: centralizadas, descentralizadas y distribuidas. 2.3.1.2. SCP El Simple Control Protocol (SCP) es un protocolo para redes de control, utilizado en la automatización de edificios y viviendas, generalmente en los Estados Unidos. El SCP surge en el estado norteamericano como una iniciativa similar a KNX en Europa. Éste protocolo recoge las principales características de otros protocolos como LonWorks, X-10, CEBus, entre otros. IMAGEN 9. LOGO DE VSCP El principal objetivo, en el que trabajan conjuntamente con empresas como Microsoft, es el desarrollo del Universal Plug&Play. A nivel físico el SCP ha escogido una solución basada en la transmisión de datos por las líneas de baja tensión (ondas portadoras) que ya estaba desarrollada en el protocolo CEBus. El SCP está optimizado para el uso en dispositivos de eléctricos y electrónicos que tienen una memoria y una capacidad de proceso muy limitadas. Igual que otros buses o protocolos de control distribuido, el SCP está diseñado para funcionar sobre redes de control con un ancho de banda muy pequeño (< 10 Kbps) y optimizado para las condiciones de ruido características de las líneas de baja tensión.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 17 2.3.1.3. PROFIBUS El protocolo de comunicaciones PROFIBUS, es característico en aplicaciones industriales, aunque en ocasiones también se utiliza para sistemas domóticos. Éste protocolo se caracteriza por su funcionalidad y amplio campo de adaptación dentro de la industria. Este campo abarca desde el nivel de sensores y actuadores hasta el nivel de celdas. Es un protocolo bastante robusto, pero también más complejo que otros de los protocolos mencionados hasta ahora. IMAGEN 10. LOGO DE PROFIBUS Utiliza la misma técnica de transmisión y el mismo protocolo de acceso al bus con funciones de aplicación diferenciadas. Esto permite una reducción significativa de esfuerzo en la instalación, mantenimiento y entrenamiento. Basado en la comunicación controlada entre maestro-esclavo. Definimos de manera particular estos dispositivos como: Dispositivos maestros (Master Devices) - Entre estas estaciones activas rota un permiso de acceso y control que les permite enviar mensajes sin necesidad de petición. Dispositivos secundarios (Slaves Devices) - Son los periféricos asignados a los maestros, una serie de dispositivos lo suficientemente inteligentes como para seguir las normas del protocolo. Su papel es pasivo, pudiendo sólo transmitir cuando se les ha realizado una petición previa. Los medios físicos de transmisión de datos más frecuentes para PROFIBUS son el RS-485, IEC 1158-2 y la fibra óptica. 2.3.1.4. Modbus El protocolo Modbus se utiliza principalmente en aplicaciones de control industrial. Modbus utiliza la disposición maestro-esclavo donde cada dispositivo inicia toda la actividad de comunicación. Actualmente existen dos sistemas ModBus principales: ModBus RS-485 y ModBus TCP/IP. Ambos se basan en define un bus de transmisión serie multipunto, donde, en un instante, puede haber un equipo transmitiendo y varios recibiendo. La comunicación es semiduplex, de forma un equipo puede enviar y recibir, pero no realizar ambas acciones a la vez.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 18 El medio físico básico consiste en un par de hilos de cobre trenzados sobre el que se transmite una señal diferencial para enviar los bits de datos, que es bastante inmune a las interferencias y admite largas distancias. Además del par trenzado para datos, pueden usarse líneas de 0V y 5V para alimentar dispositivos del bus. Los bits se transmiten mediante una trama asíncrona. IMAGEN 11. LOGO DE MODBUS Algunas de las ventajas del ModBus son: bajo coste de implementación y estandarización, la ampliación de nodos esclavos es sencilla, el fallo de un nodo no afecta al funcionamiento del resto, trabaja con gran variedad de formatos de datos. 2.3.1.5. BACnet El BACnet (Building Automation and Control Networks) es un protocolo de comunicación de datos norteamericano, diseñado para comunicar entre sí los diferentes aparatos electrónicos presentes en los edificios actuales. En sus inicios, se definió como un protocolo que implementaba la arquitectura de niveles OSI y que utilizaba la tecnología RS-485 como nivel físico. IMAGEN 12. LOGO DE BACNET El aporte más característico de BACnet es la definición de un conjunto de reglas, de hardware y de software, que permiten comunicar dos dispositivos independientemente de si éstos utilizan protocolos diferentes tales como los antiguos EIB, EHS, BatiBus, LonWorks, TCP/IP, etc. Como particularidad, utiliza la denominación “objeto” para las entradas y salidas, analógicas y digitales, lazos de control y los dispositivos del sistema.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 19 2.3.2. Niveles físicos frecuentes en la domótica Existen diferentes niveles físicos utilizados para conexionar los elementos que conforman el sistema automatizado de una vivienda, independiente del lenguaje o protocolo que estén utilizando. A continuación, se mencionan los medios físicos más comunes en un sistema domótico. 2.3.2.1. Par trenzado El par trenzado se basa en un bus de comunicación cuya instalación puede hacerse en diversas topologías: bus, estrella, anillo, árbol o cualquier combinación de estas. Siempre respetando la asignación de direcciones por cada dispositivo de la instalación. IMAGEN 13. PAR TRENZADO Consiste en dos alambres de cobre, o a veces de aluminio, aislados. Los alambres se trenzan con el propósito de reducir la interferencia eléctrica de pares similares cercanos. Los pares trenzados se agrupan bajo una cubierta común de PVC. Posee un bus de control independiente y está pensado para nuevas instalaciones y grandes renovaciones. Además, también posee un nivel máximo de fiabilidad en la transmisión y una gran velocidad de transmisión. En su contra, se necesita una instalación adicional a la red eléctrica del hogar. 2.3.2.2. Corrientes portadoras Este medio de transmisión de corrientes portadoras, es también conocido como Power Line Carrier (PLC). El sistema hace posible la transmisión de telegramas a través de la red eléctrica del hogar. La distancia máxima que se puede lograr sin repetidor es de 600 metros. IMAGEN 14. CORRIENTES PORTADORAS
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 20 De este modo, no es necesaria una línea de bus independiente. La transmisión de telegramas tiene lugar a través de los conductores de fase y neutro, los cuales deben estar conectados a cada uno de los aparatos. Debido a la indefinición de las condiciones de la red, que pueden variar constantemente, la transmisión de telegramas puede verse interrumpida, producir errores en el sistema o interferir con otros sistemas. Si bien no es el medio más adecuado para la transmisión de datos, sí es una alternativa a tener en cuenta para las comunicaciones domésticas, dado el bajo coste que implica su uso al tratarse de una instalación ya existente. 2.3.2.3. Cable Coaxial El cable coaxial fue el primer cable empleado, aparte de cable eléctrico convencional en la transmisión de información entre dispositivos y existen diferentes tipos según su uso y utilización. El cable coaxial tenía una gran utilidad en sus inicios por su propiedad idónea de transmisión de voz, audio y video. Los factores a tener en cuenta a la hora de elegir un cable coaxial son su ancho de banda, su resistencia o impedancia característica, su capacidad y su velocidad de propagación. IMAGEN 15. CABLE COAXIAL El ancho de banda del cable coaxial está entre los 500 MHz, esto hace que el cable coaxial sea ideal para transmisión de televisión por cable por múltiples canales. La resistencia o la impedancia característica depende del grosor del conductor central o malla; si varía éste, también varía la impedancia característica. Es mucho más rígido que el par trenzado, por lo que al realizar las conexiones entre redes la labor será más difícil.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 21 2.3.2.4. Fibra óptica En la última década la fibra óptica ha pasado a ser una de las tecnologías más avanzadas que se utilizan como medio de transmisión. Los logros con este material fueron más que satisfactorios, desde lograr una mayor velocidad y disminuir casi en su totalidad ruidos e interferencias, hasta multiplicar las formas de envío en comunicaciones y recepción por vía telefónica. La fibra óptica está compuesta por filamentos de vidrio de alta pureza muy compactos. El grosor de una fibra es como la de un cabello humano aproximadamente. Fabricadas a alta temperatura con base en silicio, su proceso de elaboración es controlado por medio de computadoras, para permitir que el índice de refracción de su núcleo, que es la guía de la onda luminosa, sea uniforme y evite las desviaciones. IMAGEN 16. FIBRA ÓPTICA Como características de la fibra podemos destacar que son compactas, ligeras, con bajas pérdidas de señal, amplia capacidad de transmisión y un alto grado de fiabilidad ya que son inmunes a las interferencias electromagnéticas de radiofrecuencia. Las fibras ópticas no conducen señales eléctricas, conducen rayos luminosos, por lo tanto, son ideales para incorporarse en cables sin ningún componente conductivo y pueden usarse en condiciones peligrosas de alta tensión. En comparación con el sistema convencional de cables de cobre, donde la atenuación de sus señales es de tal magnitud que requieren de repetidores cada dos kilómetros para regenerar la transmisión, en el sistema de fibra óptica se pueden instalar tramos de hasta 70 km sin que haya necesidad de recurrir a repetidores. 2.3.2.5. Radiofrecuencia Además de conexionado por diferentes tipos de cables, también existen transmisiones de datos de forma inalámbrica. En la transmisión por radiofrecuencia se emplean señales de radio para transmitir telegramas. Permite implementaciones unidireccionales y bidireccionales, además, se caracteriza por su bajo nivel de consumo energético.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 22 La introducción de las radiofrecuencias como soporte de transmisión en la vivienda, ha venido precedida por la proliferación de los teléfonos inalámbricos y sencillos telemandos. Este medio de transmisión puede parecer, en principio, idóneo para el control a distancia de los sistemas domóticos, dada la gran flexibilidad que supone su uso. Sin embargo, resulta particularmente sensible a grandes distancias y a perturbaciones electromagnéticas producidas, tanto por los medios de transmisión, como por los equipos domésticos. No obstante, no cabe ninguna duda que las tecnologías inalámbricas en radiofrecuencia son las que más se van a desarrollar en los próximos años. Actualmente los medios de transmisión de radiofrecuencia más utilizados en los sistemas domóticos son Bluetooth, WiFi (IEEE 802.11b, g), y ZigBee (IEEE 802.15.4). IMAGEN 17. LOGOS DE BLUETOOTH, WI-FI, ZIGBEE Bluetooth es un enlace radio de corto alcance que aparece asociado a las Redes de Área Personal Inalámbricas, o sus siglas en inglés WPAN (Wireless Personal Area Network). Este concepto hace referencia a una red sin cables que se extiende a un espacio de funcionamiento personal con un radio de 10 a 100 metros según la clase de Bluetooth utilizado. En cuanto al medio de transmisión WiFi (Wireless Fidelity), estipulado en la norma del IEEE (Institute of Electrical and Electronic Engineers) 802.11, representa el primer estándar de una organización independiente reconocida a nivel internacional, que además ha definido las principales normas en redes LAN cableadas. Las ventajas que se pueden notar para este nivel físico en el caso de un edificio, es la ausencia de cableado para crear una red de datos, dentro de las limitaciones del sistema. Como inconvenientes aportaremos dos fundamentales, una es la seguridad y otro es el coste de los dispositivos que incorporaran WiFi. Finalmente, en la norma IEEE 802.15.4 se estipula el medio de transmisión ZigBee. Es una tecnología inalámbrica de baja velocidad y bajo consumo, con velocidades comprendidas entre 20kB/s y 250kB/s y rangos de 10 a 75 metros. ZigBee puede utilizar las bandas libres ISM de 2,4 GHz, 868 MHz (Europa) y 915 MHz (EEUU). Una red ZigBee puede estar formada por hasta 255 nodos.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 23 2.4. Eficiencia energética Desde un punto de vista social, el ahorro y la eficiencia energética no sólo aseguran el abastecimiento energético y mejoran el medio ambiente, sino que también ayudan a incrementar la competitividad del sector industrial, beneficiando el aumento del Producto Interior Bruto del país. Según los datos que aparecen en la Guía práctica de la energía. Consumo eficiente y responsable, publicada en el 2007 por el IDAE (Instituto para la Diversificación y el Ahorro de la Energía), los españoles cada vez consumimos más energía. A nivel mundial, al ritmo actual, sólo se tardarán 35 años en duplicar el consumo de energía y menos de 55 años en triplicarlo. El consumo de energía de las familias españolas supone ya un 30% del consumo total de energía del país, el 18% corresponde al consumo doméstico. Cada hogar es responsable de producir hasta 5 toneladas de CO2 anuales. Las familias españolas, con sus pautas de comportamiento, son decisivas para conseguir que los recursos energéticos se utilicen eficientemente. En cuanto al consumo eléctrico, un hogar medio consume unos 4.000 kWh al año. GRÁFICO 1. PORCENTAJE DE CONSUMO ELÉCTRICO MEDIO EN EL HOGAR EN ESPAÑA Además de la necesidad de reducir el consumo de energía para contribuir a la disminución de la contaminación, se debe tener en cuenta el factor económico. El coste del consumo energético de los hogares españoles para una familia supone al año unos 900 €, distribuidos según se explica a continuación.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 24 GRÁFICO 2. COSTE MEDIO ANUAL DEL GASTO ENERGÉTICO EN EL HOGAR EN ESPAÑA España importa el 75% de la energía primaria que consume, frente al 50% de media de la UE. Un menor consumo implicaría reducir la dependencia energética de España respecto al exterior. Los precios de la electricidad, el agua, y los combustibles como el gas natural evolucionan con una tendencia alcista como consecuencia del carácter perecedero de las energías no renovables y el imparable incremento de la intensidad energética (indicador que relaciona el consumo de energía y el Producto Interior Bruto). En los últimos 5 años el precio del gas y la electricidad han aumentado en torno a un 15%. El creciente consumo de energía y la limitación de los recursos energéticos generan efectos negativos en el medio ambiente que se reflejan en dos aspectos: • Económico: los precios de la energía tienden a subir, por lo que un control del consumo energético incrementa significativamente el ahorro para el usuario. • Ecológico: el usuario puede disminuir el impacto negativo sobre su entorno si disminuye su consumo de energía. La domótica gestiona elementos de control que contribuyen al ahorro de agua, electricidad y combustibles, notándose sus efectos tanto en el aspecto económico, menos coste, como en el ecológico, menos consumo de energía.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 31 Los mensajes de datos consisten en celdas que envían datos y añaden información definida por las especificaciones CAN: Inicio de trama (Start Of Frame): El inicio de trama es una celda de 1 bit siempre dominante que indica el inicio del mensaje, sirve para la sincronización con otros nodos. Celda de arbitraje (Arbitration Field): Es la celda que concede prioridad a unos mensajes o a otros: En formato estándar tendrá 11 bits seguidos del bit RTR (Remote Transmision Request) que en este caso será dominante. En formato extendido serán 11 bits de identificador base y 18 de extendido. Tras los 11 primeros bits del identificador, se encuentra el bit SRR (Substitute Remote Request) y el bit IDE y tras el último bit del identificador se encontraría el bit RTR, que en este caso será recesivo. Celda de control (Control Field): El campo de control está formado por, un bit indicador, uno o dos bits reservados para uso futuro y cuatro bits adicionales que indican el número de bytes de datos. El primero de estos bits, el bit de extensión de identificador (IDE), como su propio nombre indica, se utiliza para indicar si la trama es de CAN Estándar (IDE dominante) o Extendido (IDE recesivo). El segundo bit, es el bit reservado RB0, es siempre recesivo, en el formato extendido también se encuentra otro bit reservado RB1, siempre recesivo, en la posición anterior a RB0. Los cuatro bits de código de longitud (DLC) indican en binario el número de bytes de datos en el mensaje (0 a 8). Celda de datos (Data Field): Es el campo de datos, que puede tener una longitud de 0 a 8 bytes. Código de redundancia cíclica (CRC): Tras comprobar este código se podrá comprobar si se han producido errores en la transmisión. Celda de reconocimiento (Acknowledgement): es un campo de 2 bits que indica si el mensaje ha sido recibido correctamente. El nodo transmisor pone este bit como recesivo y cualquier nodo que reciba el mensaje lo pone como dominante para indicar que el mensaje ha sido recibido. Los bits ACK sirven como acuse de recibo. Fin de trama (End Of Frame): Consiste en 7 bits recesivos sucesivos e indica el final de la trama. Espaciado entre tramas (IFS): Consta de un mínimo de 3 bits recesivos.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 32 3.2.2. Nivel físico En el presente apartado, se analizará con más detalle la capa de nivel físico del bus de transmisión CAN. El nivel físico del medio de transmisión CAN está estandarizado por el ISO en la norma ISO 11898. La transmisión puede efectuarse de dos formas, la primera es a través de una sola línea, siempre que todos los nodos tengan una referencia de tierra común y los niveles de tensión estarían referidos a tierra. La segunda es a través de dos hilos en modo diferencial. Nos centraremos en esta última forma puesto que es la que regula el estándar ISO 11898. IMAGEN 22. EJEMPLO DE CONEXIÓN FÍSICA BUS CAN El bus está formado por dos líneas, CAN-H (High) y CAN-L (Low), dentro de un cable, que puede estar apantallado, por lo tanto, podemos utilizar cable de par trenzado y/o blindado según los requerimientos electromagnéticos. Es muy importante reseñar que el bus debe estar terminado en los extremos con resistencias de terminación de 120Ω. Además, no es conveniente incluir las resistencias de terminación en los nodos que están colocados en los extremos puesto que, si estos nodos son retirados, el bus se quedará sin terminación y se pueden dar reflexiones que imposibiliten una correcta comunicación. Además del cableado y de las resistencias de cierre de bus, también existen otros elementos en la transmisión con bus CAN. IMAGEN 23. CAPA FÍSICA DE BUS CAN
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 33 El controlador, que debe ser capaz de acondicionar y gestionar la información que entra y sale del nodo. Y el transceptor o receptor, que es el elemento que une el controlador, por los terminales Rx y Tx, con el bus, por medio de los terminales CAN-H y CAN-L, y que tiene la misión de recibir y de trasmitir los datos para que pueda ser utilizada por los controladores. La especificación ISO 11898 no define el tipo de conectores y cables a usar, pero sí define los parámetros eléctricos mínimos que deben cumplir los materiales. En el caso del cable se recomienda que tengan una impedancia característica en torno a los 120 Ω, una resistencia de menos de 70mΩ/m y un retraso de línea específico de menos de 5ns/m. IMAGEN 24. CONEXIÓN FÍSICA EN ANILLO ABIERTO En cuanto a la topología hay que procurar que las conexiones entre nodos se parezcan lo más posible a una línea recta para evitar reflexiones. Además, la conexión física entre nodos se realiza en forma de bus, que, en la realidad queda conectado como una especie de red en anillo abierto. Los parámetros que debe cumplir la topología, para especificaciones de 1Mbit/s son: Parámetro Notación Mínimo Máximo Longitud del bus (Metros) L 0 40 Longitud latiguillo (Metros I 0 0,3 Distancia entre nodos D 0,1 40 TABLA 1. PARÁMETROS FÍSICOS DE BUS CAN En la realización de la transmisión, el bus está en estado recesivo cuando todos los transmisores están desactivados. La tensión de las líneas del bus en este caso es generada por las resistencias de terminación y los circuitos de recepción de los nodos, que muestran una impedancia alta entre las líneas del bus. Un bit dominante es enviado al bus cuando al menos uno de los nodos tiene habilitado su transmisor y quiere escribir un bit dominante. Esto provoca un flujo de corriente a través de las resistencias de terminación y consecuentemente una tensión diferencial entre ambas líneas del bus. El bus puede estar en uno de los dos estados: recesivo o dominante.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 34 IMAGEN 25. LÍNEAS CAN-H Y CAN-L En el estado recesivo, las tensiones en CAN-H y CAN-L son fijadas al nivel de tensión de modo común, y se considerarán como un ‘1’ lógico siempre que la tensión diferencial no supere un cierto umbral máximo. El bus está en estado recesivo cuando se quiere transmitir un ‘1’ o cuando el bus está en reposo. RECESIVO Parámetro Notación Mínimo Típico Máximo Tensión del bus en modo común (V) VCANH 2,5 7,0 VCANL -2,0 2,5 Tensión diferencial (mV) VDIFF -120,0 0 12,0 TABLA 2. PARÁMETROS BIT RECESIVO En el estado dominante la tensión diferencial es mayor que un umbral mínimo. Un bit dominante sobreescribe a un bit dominante y ocurre cuando uno o más nodos quieren transmitir un ‘0’ lógico. DOMINANTE Parámetro Notación Mínimo Típico Máximo Tensión del bus en modo común (V) VCANH 3,5 7,00 VCANL -2,0 1,5 Tensión diferencial (mV) VDIFF 1,2 2,0 3,0 TABLA 3. PARÁMETROS BIT DOMINANTE Las limitaciones del bus dependen de varios factores como por ejemplo la velocidad de transmisión y la longitud del bus, que son inversamente proporcionales.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 35 En la siguiente tabla se muestra una comparativa entre la longitud máxima del bus y la velocidad: Velocidad (Kbps) Tiempo de Bit (μS) Longitud Máxima (Metros) 10 100 5000 20 50 2500 50 20 1000 125 8 500 250 4 250 500 2 100 800 1,25 50 1000 1 40 TABLA 4. VELOCIDAD, TIEMPO Y LONGITUD MÁXIMA DE BUS CAN Éstas velocidades y longitudes, son más que suficientes para cualquier sistema domótico, pues el tiempo de respuesta no es necesariamente alto, ni urge tanta urgencia como, por ejemplo, en el sistema ABS de un automóvil. Otra de las limitaciones que hay que tener en cuenta es el número de nodos que se pueden insertar en la red. Aunque la norma no especifica ningún límite, lo cierto es que el bus está limitado por carga y dependiendo del tipo de transceiver que usemos podremos poner más o menos nodos. Como valor de referencia se puede establecer un máximo de 64 nodos. La capa física se encarga también de otros aspectos tales como la codificación de bits, los tiempos de bit y la sincronización.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 36 3.3. Detección de errores Si por alguna razón destaca el bus CAN como medio de transmisión, es sobretodo unos métodos implacables de detección de errores en el envío y recepción de tramas. Existen cinco tipos de errores que se pueden dar en un bus CAN: Error de bit. Al tiempo que un nodo transmite un bit al bus, también monitoriza el nivel real en el bus, y cuando el valor detectado es diferente del valor enviado se genera un error de bit. Excepto cuando se está transmitiendo un bit que pertenece al campo de arbitraje o a la ranura de asentimiento. Tampoco se interpreta como un error de bit cuando un nodo envía una señal de error pasivo mientras otros nodos ponen en el bus un nivel dominante debido a sus señales de error activo. Error en bits de relleno. Cuando se detectan 6 bits consecutivos con el mismo valor en alguno de los campos codificados con el método de bits de relleno, se genera este tipo de error. Error en CRC. Los receptores recalculan el CRC de los mensajes que le están llegando y si detectan discrepancia entre el CRC que han obtenido y el que reciben en la trama, lo señalan como error en el CRC. Error de formato. Este tipo de error ocurre cuando se detectan bits ilegales en campos con un formato fijo. Si se detecta un bit dominante durante el último bit del campo Final de trama, no se considera como error de formato. Error de asentimiento. Si un nodo transmisor no detecta un nivel dominante durante la ranura de asentimiento de la trama que está transmitiendo, genera este error. En cuanto se detecta alguno de estos errores se transmite inmediatamente a partir del siguiente bit una trama de error utilizando una señal de error activo o pasivo según el estado del nodo, a excepción de los errores en CRC. Ante errores en el CRC, la trama de error se transmite justo después del delimitador de asentimiento siempre que no se haya producido alguna de las otras condiciones de error antes. Para evitar algunos de estos errores, existen diferentes métodos para perfeccionar la transmisión en el bus: • Monitorización de la información escrita al bus. • Código de redundancia cíclico. • Comprobación de la estructura de la trama. • Bits de relleno.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 37 Los tres primeros dependen de la propia estructura del mensaje, pero el método por bits de relleno requiere una mención especial y una breve explicación. Los bits de relleno, o también conocido como bit stuffing, no es más que la inserción de un bit de polaridad opuesta después de cinco bits consecutivos de la misma polaridad. Este procedimiento se utiliza para asegurar que hay suficientes transiciones recesivo-dominante y garantizar así la sincronización. Esta práctica es necesaria debido a la codificación sin vuelta a cero del protocolo CAN. Los bits insertados son eliminados por el receptor. Todos los campos de la trama son rellenados a excepción del delimitador CRC, el acuse de recibo ACK, y el fin de trama. Cuando un nodo detecta seis bits consecutivos iguales en un campo susceptible de ser rellenado lo considera un error y emite un error activo. Un error activo consiste en seis bits consecutivos dominantes y viola la regla de relleno de bits. IMAGEN 26. BITS DE RELLENO BUS CAN La regla de los bits de relleno implica que una trama puede ser más larga de lo esperado si se suman los bits teóricos de cada campo de la trama. El flujo de bits en un mensaje es codificado de acuerdo con el método de no retorno a cero (NRZ). Esto significa que, durante todo el tiempo de bit, el nivel generado se mantiene.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 38 Finalmente, existen otros procedimientos para asegurar la correcta funcionalidad del bus CAN: Fault confinement. También conocido como confinamiento de nodos defectuosos. Los nodos CAN distinguen entre errores temporales y permanentes, siendo capaces de desactivar los nodos defectuosos para que no perturben el funcionamiento de la red. En el cual, se diferencia tres estados de un nodo: Un nodo en error activo puede tomar parte en las comunicaciones del bus con normalidad y enviar señales de error activo cuando detecte un error. Un nodo en error pasivo también puede tomar parte en las comunicaciones, pero a la hora de señalar un error debe hacerlo con la señal de error pasivo. Además, después de una transmisión, los nodos en error pasivo deben esperar un tiempo antes de iniciar una nueva transmisión. Un nodo en bus off, está desactivado y no puede ejercer influencia alguna sobre el bus. Para hacer efectivo el mecanismo de confinamiento de nodos defectuosos, se implementan dos contadores en cada nodo, el contador de errores de transmisión y el contador de errores de recepción. Asentimientos. Todos los receptores comprueban la consistencia de un mensaje que está siendo recibido y lo asentirán si el mensaje es consistente. En caso contrario lo señalarán con la pertinente trama de error. Sleep mode. Para reducir el consumo los nodos CAN pueden entrar en este modo si no van a ser utilizados. El nodo saldrá de este modo bien porque detecte actividad en el bus o bien porque el sistema requiera que el nodo CAN vuelva a estar operativo.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 39 3.4. Máscaras y filtros Aunque la especificación CAN no regula del todo la forma de intercambiar información entre el sistema microprocesador y el controlador CAN, lo cierto es que la mayoría de dispositivos establecen para ello una serie de buzones (mailboxes). En el caso de los buzones de transmisión, cada uno de ellos lleva un campo con el identificador que incluirán en sus mensajes y en el caso de los buzones de recepción, cada uno puede llevar uno o más filtros. Los filtros se componen de un identificador y una máscara. De esta manera en un buzón de recepción pueden entrar un grupo de mensajes siempre que el identificador del mensaje entrante coincida con el identificador del filtro en los bits especificados en la máscara. A continuación, se muestra un ejemplo de funcionamiento BITS HEXA ID 1 1 0 0 0 1 0 1 1 0 1 0 0x45A ID 2 0 1 0 1 1 0 0 0 1 1 0 0x2C6 ID 3 1 0 1 1 0 1 1 0 0 1 1 0x5B3 ID FILTRO 1 0 0 0 0 0 0 0 0 0 0 0x400 MÁSCARA 1 1 1 0 0 0 0 0 0 0 0 0x700 TABLA 5. EJEMPLO DE FILTRO BUS CAN La máscara fija con un ‘1’ los valores que deben ser iguales en la ID entrante respecto a la ID del filtro. Por descontado, el formato de la trama de datos es muy importante, antes de realizar cualquier filtro debemos saber si es formato estándar o formato extendido En el formato estándar las ID de los mensajes no podrán superar el valor 0x7FF debido a su longitud de 11 bits, mientras que, en el formato extendido, las ID de los mensajes comprenderán valores formados por una composición de 29 bits. En el caso del ejemplo, el filtro con ID = 0x400 y la máscara con ID = 0x700, sólo permitirá pasar mensajes de datos, al mailbox especificado, con una identificación de valores hexadecimales comprendidos entre 400÷4FF. Según la tabla anterior, el primer ejemplo identificador (ID1) sí entraría al mailbox que especifiquemos por código con éste filtro, en cambio, el segundo y el tercer ejemplo identificador (ID2, ID3) no entrarían a dicho mailbox. En el caso de los buzones configurados para recibir tramas remotas, el controlador no guarda los datos de éstas puesto que no contienen datos, y en su lugar inicia automáticamente una transmisión de una trama de datos con la información que estuviera guardada en dicho buzón por el sistema microprocesador.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 40 4. Descripción de los elementos del sistema Una vez explicados los diferentes elementos de un sistema domótico, los modelos de arquitectura, y los distintos buses de transmisión, procedemos al planteamiento del proyecto en singular, y a determinar todos los componentes de éste proyecto. Éste capítulo se dividirá en dos secciones, el software y el hardware utilizado. Como se comentó en la introducción, el objetivo de éste proyecto, tal y como su propio nombre indica, es el diseño de un sistema domótico, de bajo coste y abierto. Cumpliendo esas condiciones, y habiendo tomado la decisión de utilizar bus CAN como elemento de transmisión del sistema, sólo queda determinar que supone un sistema abierto. El concepto de sistema abierto proviene del término anglosajón Open Source. El término abierto o libre, se refiere al hardware (dispositivos), cuyas especificaciones y diagramas esquemáticos son de acceso público, ya sea bajo algún tipo de pago, o de forma gratuita; y al software (programa informático) que puede ser copiado, estudiado, modificado, utilizado libremente con cualquier fin y redistribuido con o sin cambios o mejoras. Teniendo en cuenta las características hasta ahora mencionadas, a continuación, se muestra un esquema sencillo del proyecto final para poder entender a qué se referencia cada uno de los elementos que serán explicados en éste capítulo. IMAGEN 27. ESQUEMA GENERAL DEL SISTEMA DOMÓTICO DISEÑADO
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 47 La ranura de la tarjeta microSD está conectada los pines analógicos A0 y A1 de Arduino con resistencias pull-up, evitando el uso de estas entradas analógicas para otros fines sin modificar la conexión a Ethernet. 4.2.2. Módulos CAN El bus de transmisión que se utilizará para interconectar los controladores del sistema, es bus CAN. Tal y como se ha comentado en anteriores apartados del proyecto, Arduino Due contiene el controlador CAN en su electrónica, pero el otro tipo de controlador del sistema, Arduino UNO necesita de una electrónica extra. Además de un controlador CAN, ambos necesitan un CAN Transceiver para efectuar la comunicación mediante el bus de transmisión. Actualmente, no existe una gran variedad de dispositivos en el mercado, capaces de realizar una transmisión mediante el protocolo CAN. Según el estudio realizado, los conectores más comunes para dispositivos Arduino son RS-232 y par trenzado. A continuación, se detallan algunas de las características de los módulos que se han utilizado para realizar la transmisión por bus CAN en el sistema domótico diseñado. Si se precisan más detalles, se han añadido los datasheets de los módulos en los anexos. 4.2.2.1. SN65HVD230 CAN Transceiver En redes de computadoras y telecomunicación, un transceiver o transceptor es un dispositivo que se encarga de realizar funciones de recepción de una comunicación, contando con un circuito eléctrico que permite un procesamiento para también realizar la transmisión de esta información, sin importar su diseño o formato. Lo que significa que pueden enviarse señales entre dos terminales en ambos sentidos, pero no simultáneamente. Como se ha comentado anteriormente, Arduino Due ya dispone de un controlador CAN, por lo que tan solo necesitaría un transceptor para lograr enviar y recibir información con el protocolo estipulado. El transceiver SN65HVD230 es compatible con las especificaciones de la capa física estándar de la norma ISO 11898-2 de alta velocidad CAN. Estos dispositivos están diseñados para velocidades de datos de hasta 1 Mbps (Megabit por segundo), e incluyen algunas características de protección que proporcionan robustez de la red del dispositivo y bus CAN. La característica principal de este transceptor es que opera a una tensión de 3.3V, adecuada para la tensión de funcionamiento de Arduino Due.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 48 IMAGEN 31. SN65HVD230 CAN TRANSCEIVER La ventaja o el hándicap, según se mire, es que incluye una resistencia terminal de 120Ω conectada al bus, como tramo inicial o final el bus CAN. Además, incluye los pines de alimentación (VCC y GND), los pines de conexión con Arduino (CAN Rx y CAN Tx) y los terminales CAN-H y CAN-L. 4.2.2.2. SPI - CAN Bus Module El otro módulo utilizado para la realización de la transmisión mediante bus CAN es un módulo que tiene integrado un chip MCP2515 con las funciones de controlador CAN, y el chip TJA1050, que realiza las funciones de transceiver. El MCP2515 es un circuito integrado fabricado por Microchip el cual realiza las funciones de controlador. Implementa CAN V2.0B y CAN V2.0A con una velocidad de hasta 1Mbps. El circuito integrado TJA1050, el cual podría ser sustituido por un chip MCP2551, funciona como transceptor, es decir, hace de interfaz entre el controlador de CAN bus y el bus físico. Además, éste módulo contiene SPI para la comunicación entre el microcontrolador de la placa Arduino y el módulo CAN. En concreto Arduino UNO, utiliza los pines 13, 12, 11 y 10, que corresponden con los terminales SCK, MISO, MOSI y CS respectivamente, incluyendo el pin INT, para generar una interrupción, que generalmente suele ser el pin 2. IMAGEN 32. SPI - CAN BUS MODULE
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 49 También es muy importante, el cristal de cuarzo de 8MHz del módulo, que permite el correcto funcionamiento de la tarjeta y establece la unidad mínima de tiempo para la sincronización de los bits durante la comunicación. Finalmente, el módulo también dispone de una resistencia terminal de 120Ω, característica de bus CAN, la cual se puede conectar al bus mediante un jumper, para indicar inicio o final de línea. 4.2.3. Sensores Los sensores son dispositivos formados por células sensibles que detectan variaciones en una magnitud física y las convierten en señales útiles para un sistema de medida o control. Son los elementos físicos que transmiten una señal al sistema cuando hay una variación de algún parámetro. En una casa domótica se necesitan sensores para poder medir las magnitudes físicas del entorno, tales como la temperatura, la humedad, la luminosidad, entre otras, y poder actuar en función del valor medido. IMAGEN 33. SENSORIZACIÓN DEL HOGAR Existen muchos tipos de sensores, pero en éste proyecto se han utilizado un sensor de temperatura, un sensor de luz y un sensor de infrarrojos. Se podrían haber utilizado otro tipo de sensores como un sensor de lluvia, sensor de humos o llamas o caudalímetros para medir el caudal y el consumo de agua. Éstos otros sensores también serían típicos en un sistema totalmente domotizado. Se desestimó esta opción por el simple hecho de que la simulación de un entorno con esas características, sería difícil de representar en el mismo entorno de la presentación del proyecto. Aunque, una vez determinado el sistema de transmisión y siguiendo el modelo de los otros sensores, no sería laboriosa la implementación de cualquiera de los sensores no utilizados. El sistema domótico diseñado es tan extensible como desee el cliente.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 50 IMAGEN 34. DHT11 SHIELD 4.2.3.1. Sensor de temperatura Un sensor de temperatura, como su nombre indica, mide la temperatura de una zona concreta. Es necesario para realizar la automatización del sistema de climatización de una casa. En éste proyecto se ha utilizado un sensor de temperatura DHT11, que también proporciona la humedad en el ambiente. Éste tipo de sensores de temperatura, dispone de un procesador interno que realiza el proceso de medición, proporcionando la medición mediante una señal digital, por lo que resulta muy sencillo obtener la medición desde un microprocesador como Arduino. Las características del DHT11 son realmente escasas, especialmente en rango de medición y precisión, aunque más que suficientes para éste proyecto: • Medición de temperatura entre 0 a 50ºC • Precisión de temperatura de 2ºC. • Medición de humedad entre 20 a 80%. • Precisión de humedad del 5%. • Una muestra por segundo. • Voltaje de funcionamiento: 3,3 a 5 V. Se ha utilizado una shield para Arduino que facilitaba el conexionado del sensor al sistema. 4.2.3.2. Sensor de luz En éste proyecto se ha utilizado un fotoresistor como sensor de luz. Un fotoresistor, o LDR (light-dependent resistor) es un dispositivo cuya resistencia varía en función de la luz recibida. Podemos usar esta variación para medir, a través de las entradas analógicas, una estimación del nivel de la luz. Un fotoresistor está formado por un semiconductor, típicamente sulfuro de cadmio. Al incidir la luz sobre él algunos de los fotones son absorbidos, provocando que electrones pasen a la banda de conducción y, por tanto, disminuyendo la resistencia del componente. Por tanto, un fotoresistor disminuye su resistencia a medida que aumenta la luz sobre él. Los valores típicos son de 1 MΩ en total oscuridad, a 50-100 Ω bajo luz brillante. Como en el sensor de temperatura, comentado anteriormente, también se ha optado por utilizar una shield para Arduino, que facilite su instalación en el sistema. Algunas de sus características son:
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 51 • Potenciómetro para ajustar el umbral de brillo para la detección de luz • Basado en el chip comparador LM393 • Dimensiones placa: 3.2cm x 1.4cm • Pines: - VCC - 3.3V a 5V - GND - 0V - DO - Salida de señal digital - AO - Salida de señal analógica 4.2.3.3. Sensor de presencia También se ha utilizado un sensor de presencia, para como su propio nombre indica detectar el paso por cierta zona de la vivienda. Juntamente con el sensor de luz, serán utilizados para automatizar el alumbrado del hogar. La primera opción fue utilizar un sensor PIR o de movimiento, pero se descartó debido a que el modelo utilizado no era muy preciso. Como segunda opción, se tomó la iniciativa de utilizar un sensor de infrarrojos, y el resultado fue satisfactorio. Un sensor de infrarrojos es un dispositivo que detecta la presencia de un objeto mediante la reflexión que produce en la luz. El uso de luz infrarroja (IR) es simplemente para que esta no sea visible para los humanos. IMAGEN 36. FUNCIONAMIENTO SENSOR INFRARROJOS Constitutivamente son sensores sencillos. Se dispone de un LED emisor de luz infrarroja y de un fotodiodo que recibe la luz reflejada por un posible obstáculo. Este tipo de sensores actúan a distancias cortas, típicamente de 5 a 20mm. Además, la cantidad de luz infrarroja recibida depende del color, material, forma y posición del obstáculo, por lo que no disponen de una precisión suficiente para proporcionar una estimación de la distancia al obstáculo. IMAGEN 35. LDR SHIELD
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 52 IMAGEN 37. SENSOR DE INFRARROJOS Pese a esta limitación son ampliamente utilizados para la detección de obstáculos, y es adecuado para su uso en éste proyecto. Tal y como sucede con los dos sensores anteriormente mencionados, se ha utilizado una shield de Arduino por su fácil implantación en el sistema. 4.2.3.4. Reloj RTC Finalmente, también se ha utilizado un reloj de tipo RTC, que también se incluye en la categoría de sensores. Un reloj de tiempo real (RTC) es un dispositivo electrónico que permite obtener mediciones de tiempo en las unidades temporales que empleamos de forma cotidiana. Es decir, es capaz de obtener la hora y la fecha, una vez programado. El término RTC se creó para diferenciar este tipo de relojes de los relojes electrónicos habituales, que simplemente miden el tiempo contabilizando pulsos de una señal, sin existir relación directa con unidades temporales. Por el contrario, los RTC son más parecidos a los relojes y calendarios que usamos habitualmente, y que funcionan con segundos, minutos, horas, días, semanas, meses y años. Los RTC normalmente están formados por un resonador de cristal integrado con la electrónica necesaria para contabilizar de forma correcta el paso del tiempo. La electrónica de los RTC tiene en cuenta las peculiaridades de nuestra forma de medir el tiempo, como por ejemplo el sistema sexagesimal, los meses con diferentes días, o los años bisiestos. Los RTC aportan la ventaja de reducir el consumo de energía, aportar mayor precisión y liberar a Arduino de tener que realizar la contabilización del tiempo. Además, frecuentemente los RTC incorporan algún tipo de batería que permite mantener el valor del tiempo en caso de pérdida de alimentación.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 53 IMAGEN 38. RELOJ RTC DS3231 En éste proyecto, se ha utilizado un modelo DS3231, que incorpora medición y compensación de la temperatura garantizando una precisión de al menos 2ppm, lo que equivale a un desfase máximo 172ms/día o un segundo cada 6 días. En el mundo real normalmente consiguen precisiones superiores, equivalente a desfases de 1-2 segundos al mes. 4.2.4. Actuadores Los actuadores son los dispositivos utilizados por el sistema de control para modificar el estado de ciertos equipos o instalaciones (el aumento o la disminución de la calefacción o el aire acondicionado, el corte del suministro de gas o agua, el envío de una alarma a una centralita de seguridad, etc.). Estos dispositivos suelen estar distribuidos por toda la vivienda y, según el modelo, pueden admitir baterías. En algunos casos, el sensor y el actuador son integrados en el mismo dispositivo. Entre los más comúnmente utilizados están: los contactores (o relés de actuación) de carril DIN, los contactores para base de enchufe, las electroválvulas de corte de suministro (gas y agua), las válvulas para la zonificación de la calefacción por agua caliente, y sirenas o elementos zumbadores para el aviso de alarmas en curso. Tal y como pasa con los sensores, en éste proyecto se simula una casa domótica, por lo que los actuadores son elementos de un tamaño minimizado. En lugar de luces se han utilizado diodos LEDs de tipo DIP, las persianas han sido reemplazadas por motores paso a paso o el sistema de climatización por un ventilador de pequeñas dimensiones. También se podría extender el número y los tipos de actuadores controlados por el sistema, pero el entorno y el dimensionado de la maqueta limita las posibilidades.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 54 4.2.4.1. LEDS Un LED es un diodo emisor de luz, es decir, un tipo particular de diodo que emite luz al ser atravesado por una corriente eléctrica. Un diodo es una unión de dos materiales semiconductores con dopados distintos. Sin entrar en detalles, esta diferencia de dopado hace que genere una barrera de potencial, que como primera consecuencia hace que el paso de corriente en uno de los sentidos no sea posible. IMAGEN 39. LED Los diodos tienen polaridad, es decir, solo dejan pasar la corriente en un sentido. Por tanto, se tiene que conectar correctamente la tensión al dispositivo. La patilla larga debe ser conectada al voltaje positivo (ánodo), y la corta al voltaje negativo (cátodo). En éste proyecto se han utilizado los diodos LEDs como alumbrado de la vivienda. La caída de tensión que provoca un LED depende de su color en gran medida, además, según la tensión a la que se alimente, se deberá conectar una resistencia para un correcto funcionamiento. TABLA 7. VALORES DE CAÍDA DE TENSIÓN PARA LEDS
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 55 4.2.4.2. Motores paso a paso El motor paso a paso es un dispositivo electromecánico que convierte una serie de impulsos eléctricos en desplazamientos angulares discretos, lo que significa que es capaz de girar una cantidad de grados (paso o medio paso) dependiendo de sus entradas de control. En éste proyecto han sido utilizados para la simulación de las persianas del hogar. Se ha utilizado el modelo 28BYJ-48 y el driver controlador basado en el integrado ULN2003. IMAGEN 40. MOTOR PASO A PASO 28BYJ-48 CON CONTROLADORA ULN2003 El 28BYJ-48 es un pequeño motor paso a paso bipolar de bajo precio. Las características eléctricas del 28BYJ-48 son modestas, pero incorpora un reductor integrado que lo convierte en un componente mucho más útil e interesante. El 28BYJ-48 tiene un paso de 5.625 grados (64 pasos por vuelta). El reductor interno tiene una relación de 1/64. Combinados, la precisión total es de 4096 pasos por vuelta, equivalente a un paso de 0.088º, que es una precisión muy elevada. En realidad, la relación del reductor no es exactamente 1/64 por lo que el número de pasos es 4076 por vuelta (equivalente a un reductor de 1/63.6875) La alimentación del motor es de 5V o 12V según modelo. El 28BYJ-48 tiene un par máximo tras el reductor de 3N·cm. La frecuencia máxima es de 100Hz, lo que supone unos 40 segundos por vuelta, o equivalentemente una velocidad de giro máxima en torno a 1.5 rpm.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 56 4.2.4.3. Ventilador Un ventilador es una máquina hidráulica que incrementa la energía cinética de un gas, normalmente aire. Dispone de un rotor con alabes (o aspas) accionado, habitualmente, por un motor eléctrico. Al rotar, los alabes impulsan las moléculas de aire aumentando su energía cinética sin apenas variación de volumen. Industrialmente los ventiladores se emplean en todo tipo de aplicaciones, como control de temperatura, instalaciones de climatización, homogenización de gases, evacuación de humos, refrescamiento de maquinaria, o disipación de calor en sistemas de refrigeración. IMAGEN 41. VENTILADOR DE 5V En éste proyecto, el ventilador simula un sistema de climatización HVAC (Heating, ventilation and air conditioning), que sería manejado por el controlador, y dependiente la temperatura del entorno. Pueden tener alimentaciones muy diferentes según el modelo. En éste caso, el ventilador tiene una alimentación de 5V. 4.2.4.4. Módulo de relés Para actuar los LEDs y hacer más real el proceso de iluminación del proyecto, se ha utilizado un módulo de relés de 4 entradas. Un relé es un dispositivo electromecánico que permite a un procesador como Arduino controlar cargas a un nivel tensión o intensidad muy superior a las que su electrónica puede soportar. Por ejemplo, con una salida por relé podemos encender o apagar cargas de corriente alterna a 220V e intensidades de 10A, lo cual cubre la mayoría de dispositivos domésticos que conectamos en casa a la red eléctrica. Las salidas por relé son muy frecuentes en el campo de la automatización de procesos, y casi todos los autómatas incluyen salidas por relé para accionar cargas como motores, bombas, climatizadores, iluminación, o cualquier otro tipo de instalación o maquinaria.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 63 Por otro lado, los otros dos controladores, Arduino UNO, no contienen ningún elemento de la capa física de CAN por defecto, así que utiliza el módulo CAN-SPI descrito en el capítulo anterior. Éste módulo utiliza una librería distinta, CAN_BUS_Shield, aunque con una estructura similar a la utilizada para el controlador Arduino Due. SEÑAL PIN VCC 5V GND GND CS 10 SO 12 SI 11 SCK 13 INT 2 TABLA 10. CONEXIÓN A BUS CAN DE ARDUINO UNO La diferencia entre ambos módulos es que el transceiver que utiliza el Arduino Due, envía la información directamente a los pines CAN-Rx y CAN-Tx del controlador, mientras que el módulo CAN que utilizan los Arduino UNO, realizan una conversión mediante el protocolo de comunicación SPI, y utiliza la librería SPI adicionalmente. A continuación, se detalla en un esquema simple el resultado de el sistema de transmisión de información mediante bus CAN: IMAGEN 48. TRANSMISIÓN DE DATOS BUS CAN DEL SISTEMA
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 64 Las principales funciones empleadas de ambas librerías son básicamente funciones utilizadas en la transmisión de información. Cabe decir, que Arduino Due tiene dos canales disponibles para la comunicación por bus CAN, y solo se ha utilizado el canal 0. En el caso de la librería due_can, se han utilizado las siguientes funciones: Can0.begin(); - Inicializa el canal 0 de CAN bus señalado con la velocidad, en baudrates, determinada entre paréntesis. Ejemplo: Can0.begin(CAN_BPS_125K); Can0.watchFor(); - Es una manera fácil de permitir todo el tráfico de datos por el canal señalado. Ejemplo: Can0.watchFor(); Can0.setRXFilter(mailbox, id, mask, extended); Configura un filtro para las tramas entrantes. Ejemplo: Can0.setRXFilter (0, 0x7E0, 0x7E0, false); Can0.sendFrame(Can0_FRAME&); - Envía una trama de datos mediante el canal 0 del bus CAN. Las tramas de datos tienen cinco parámetros modificables (.id, .data, .extended, .lenght, .priority). A partir de ésta función, se han creado varias funciones con el prefijo envía que contienen el rellenado de los parámetros según la necesidad, y el envío de la trama. Ejemplo: Can0.sendFrame(enviaLuz); Y las funciones creadas a partir de la estructura de la librería, para adaptarlo al proyecto: printFrame(CAN_FRAME &frame); - Imprime el mensaje enviado por pantalla. El tipo de mensaje recibido es una trama de tipo CAN_FRAME. Existe la variante printFrameIN, que se utiliza para imprimir los mensajes recibidos por pantalla. Mediante otra parte de código, conseguimos mostrar por la interfaz virtual el dato del mensaje, distinguiendo entre mensajes recibidos y mensajes enviados. IMAGEN 49. FUNCIÓN PRINTFRAME
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 65 Finalmente, en cuanto a la transmisión de datos mediante el bus CAN, se han utilizado interrupciones para evitar el colapso de información del controlador central a la hora de leer datos. Para las cuales, se ha utilizado la siguiente función: Can0.attachCANInterrupt(mailbox, función); - Crea una interrupción en el controlador de bus CAN del controlador central, para leer los datos recibidos en ése mismo instante. Deposita el mensaje en el mailbox señalado, y llama a la función señalada entre paréntesis. Ejemplo: Can0.attachCANInterrupt(1, leePersiana); Una vez explicada la función de interrupción de CAN para el controlador central, se debe definir el filtrado de mensajes realizados en el proyecto. En total se han realizado dos filtrados de mensajes, ya que solamente se envían mensajes al controlador central desde otros controladores para dos tipos de objetos. Los dos tipos de objetos que necesitan el filtrado de mensajes son el reloj RTC (con IDs de 0x100 ÷ 0x1FF) y las persianas (con IDs entre 0x700 ÷ 0x7FF). Tal y como se explica en el capítulo 3, en el cuarto apartado Máscaras y filtros, a continuación, se muestra el procedimiento seguido para obtener el valor de las máscaras y los filtros. BITS HEXA ID 1 0 0 1 0 1 0 0 0 1 0 1 0x145 ID 2 0 1 0 0 0 1 1 0 1 1 1 0x237 FILTRO 0 0 1 0 0 0 0 0 0 0 0 0x100 MÁSCARA 1 1 1 0 0 0 0 0 0 0 0 0x700 TABLA 11. PRIMER FILTRO DE CAN DEL SISTEMA Con la función Can0.setRXFilter(0, 0x100, 0x700, false); se enviarían los datos con IDs, en formato estándar, de valores comprendidos entre 0x100 ÷ 0x1FF, al mailbox 0. Debido al filtro 0x100 y la máscara 0x700 aplicadas a los mensajes específicos del clock RTC. BITS HEXA ID 1 1 1 1 1 0 1 0 1 0 1 0 0x7AA ID 2 1 0 0 0 1 0 1 1 0 1 1 0x45B FILTRO 1 1 1 0 0 0 0 0 0 0 0 0x700 MÁSCARA 1 1 1 0 0 0 0 0 0 0 0 0x700 TABLA 12. SEGUNDO FILTRO DE CAN DEL SISTEMA Con la función Can0.setRXFilter(1, 0x700, 0x700, false); se enviarían los datos con IDs, en formato estándar, de valores comprendidos entre 0x700 ÷ 0x7FF, al mailbox 0. Debido al filtro 0x100 y la máscara 0x700 aplicadas a los mensajes específicos de persianas. En el caso de los otros controladores, Arduino UNO, las funciones de las librerías utilizadas (CAN_BUS_Shield y SPI), son similares a las anteriores descritas, aunque con algunas variantes y cambios en las nomenclaturas.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 66 CAN_OK y CAN.begin(); - Inicializa el canal de transmisión de bus CAN a la velocidad seleccionada, y comprueba que el módulo CAN ha iniciado correctamente. IMAGEN 50. FUNCIÓN CAN.BEGIN NOTA: Hay que tener muy en cuenta que al llamar la función que regula la velocidad de transmisión de los controladores Arduino UNO, la velocidad debe duplicar velocidad que se le asigna al módulo CAN del controlador Arduino Due. Eso es debido a que el módulo CAN que utilizamos Arduino UNO, utiliza un cristal de cuarzo de 8MHz cuando la librería ha sido diseñada para un cristal de cuarzo de 16MHz. Por lo que la velocidad de transmisión será la misma en ambos módulos, pero no su codificación. MCP_CAN CAN(SPI_CS_PIN); - Selección del pin CS al que estará conectado el módulo. Según el modelo del módulo, el pin puede variar entre los pines digitales 9 y 10. Ejemplo: MCP_CAN CAN(10); leeDato(); - La función ha sido creada para éste proyecto, contiene otras funciones exclusivas de la librería CAN_BUS_Shield, que se utilizan para poder leer los datos recibidos en el buffer del módulo CAN. CAN_MSGAVAIL y CAN.checkReceive(); - Permite saber si se ha recibido un mensaje en el canal del bus. CAN.readMsgBuf(); - Lee el último dato que ha recibido el buffer del módulo receptor. Ejemplo: CAN.readMsgBuf (&len, buf); CAN.getCanId(); - Obtiene la identificación de un mensaje.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 67 IMAGEN 51. FUNCIÓN LEEDATO CAN.sendMsgBuf(); - Envía mensajes a través de bus CAN. Tal como pasa en su función equivalente para la librería anterior. El mensaje tiene una estructura y unos parámetros que podemos modificar (id, extended, longitud, dato). Ejemplo: CAN.sendMsgBuf (id, 0, sizeof(datoTEMP), datoTEMP); Para entender la transmisión de mensajes entre los diferentes controladores, y las funciones que se explicarán a continuación, previamente se debe explicar en profundidad el sistema de transmisión a nivel de byte. Según el valor del byte y la posición en la que se encuentra, además de su identificador tendrá un significado en la gestión de los mensajes entre los diferentes controladores del sistema. La siguiente tabla, ayuda a descifrar el significado de cada mensaje según su composición a nivel de byte.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 68 TABLA 13. TABLA DE BYTES ESPECÍFICA DEL SISTEMA Algunos de los parámetros que se pueden obtener del propio dato, además del identificador, son: el número de placa a la que pertenece el mensaje (byte 3), el tipo de objeto del que proviene el mensaje (byte 2), el número de objeto (byte 1) y el estado o acción que se desea transmitir (byte 0). Un breve resumen de alguno de los datos proporcionados por la tabla ayudará al entendimiento del funcionamiento del sistema. TABLA 14. BYTE 3 - Nº DE PLACA Según el byte 3 del mensaje, que corresponde al número de placa que envía el mensaje, obtenemos que el valor 0x00 corresponde al controlador central, Arduino Due, y el valor 0x01 y 0x02 corresponden a los dos Arduino UNO respectivamente.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 69 También se extrae una segunda clasificación de mensajes, según el tipo de objeto al que se le envía, o recibe la orden. TABLA 15. BYTE 2 - TIPO DE OBJETO Además, también se utilizan los bytes 4 y 5 para la transmisión de algunos datos informativos del sistema, como son la temperatura, la humedad, la posición y el estado de las persianas. Exceptuando el sensor de luz y el sensor infrarrojo, que trabajan en modo local en el controlador central Arduino Due, activando una de las luces conectadas al mismo controlador, todos los tipos de objetos tienen un mensaje específico que informa a todo el sistema de su estado o directamente, envía información de utilidad para el sistema. Es por eso, que a lo largo del código no se encuentra ningún mensaje con una ID comprendida entre 0x400 ÷ 0x4FF y 0x600 ÷ 0x6FF. Aunque a ambos se les reserva un espacio en la tabla de identificadores, por si se utilizaran para dar información a todo el sistema. Todos los mensajes enviados por bus CAN son recibidos por todo el sistema, y en el mismo mensaje encontramos algunos parámetros importantes del mensaje que nos permitirán una identificación del mensaje más sencilla. Los bytes no utilizados se rellenan mediante una trama de 0xAA, que bit a bit corresponde a una trama de 1010 1010, con la que se pretende minimizar los posibles errores en la transmisión. Cada tipo de objeto tiene una franja de 0xFF identificadores, que puede ser utilizada para ampliar el número de objetos, y por tanto ampliar el número de mensajes diferentes que se enviarían. Lo que corresponde a 256 mensajes diferentes según el tipo de objeto, que es equivalente a 85 o 128 (según la cantidad de mensajes que utilice) números de objeto por tipo de objeto. Situación que es casi improbable en un hogar. Si se quisiera ampliar el tipo de objetos, sólo habría que redistribuir las IDs, reduciendo el número de objeto por tipo de objeto. O también, se podría utilizar la versión extended de bus CAN que nos permitiría utilizar IDs con un valor superior a 0x7FF y así poder ampliar los diferentes tipos de mensajes que se podrían enviar.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 70 Una vez detallada toda la información de cómo interpretar los mensajes según su formato, se procede a explicar las funciones creadas específicamente para éste proyecto. enviaLuz(); - Función que envía la orden del controlador central a la placa correspondiente, de encender o apagar la luz seleccionada mediante la interfaz. enviaTemp(); - Función que envía los datos de temperatura y humedad desde el controlador central al resto del sistema. enviaPersiana(); - Función que envía la orden del controlador central a la placa correspondiente, de subir, bajar o parar la persiana seleccionada mediante la interfaz. leePersiana(); - Función que ejerce el controlador central para leer el dato recibido del controlador al que pertenece la persiana a la cual se le había enviado la orden, para obtener los datos de estado y posición de la persiana en cuestión. persaDue(); - Función que envía los datos de estado y posición de la persiana correspondiente al controlador central desde el controlador al que pertenece la persiana la cual se le había enviado la orden previamente. muevePersiana(); - Función que envía el controlador a la persiana en cuestión, transmitiendo la orden de subir, bajar o parar, en función de los datos obtenidos del controlador central. sentidoReloj(); - Función perteneciente a muevePersiana(), que permite mover el eje del motor en sentido horario. sentidoAntiReloj(); - Función incluida en muevePersiana(), que permite mover el eje del motor en sentido horario. setOutput(); - Función perteneciente a muevePersiana(), que transmite la posición al eje del motor y permite el movimiento de la persiana. enviaVent(); - Función que envía la orden del controlador central a la placa correspondiente, de encender o apagar el ventilador seleccionado mediante la interfaz. clockaDue(); - Función que envía información desde el controlador al que pertenece el reloj RTC, al controlador central, sobre si el estados de las diferentes alarmas programadas.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 71 leeClock(); - Función que utiliza el controlador central para leer los datos pertenecientes al tipo de objetos clock RTC. Y que, informa sobre el estado de las alarmas programas. Alarma1ON(); y Alarma2ON(); - Funciones que detectan si se debe activar el número de alarma, respectivamente, según una condición horaria. Tras haber explicado el funcionamiento de las funciones internas del sistema, para interpretar las ordenes del controlador, mediante los distintos actuadores, en función de la información recibida por los sensores, se pretende explicar el funcionamiento de las distintas interfaces utilizadas, mediante las cuales se ejerce el control del sistema. Existen dos interfaces en éste proyecto, una interfaz física, muy sencilla, en la que únicamente se controla el alumbrado del hogar mediante dos pulsadores. Cada pulsador controla el alumbrado general de dos zonas diferenciadas en la maqueta, que se nombrarán Planta 0 y Planta 1. Lo único que se pretende demostrar con ésta interfaz simple es que sería posible un control físico de cualquier elemento del sistema, además de un control remoto vía smartphone, como se propone en la segunda interfaz diseñada. La interfaz virtual diseñada, se ha realizado a partir de la aplicación para smartphone NetIO App. Ésta aplicación permite la creación de botoneras sofisticadas, que ejercen como control remoto para cualquier aplicación. Para ello, se debe conectar el sistema a una red Ethernet que permita conectar el smartphone a la red del sistema, que ejercerá de control remoto. Esto se consigue mediante la inclusión de un router al sistema, que permita conectar el controlador central Arduino Due, con una shield de Ethernet mediante un cable de red Ethernet, y por otra banda, permita conectar el smartphone vía WiFi. IMAGEN 52. TRANSMISIÓN DE DATOS ETHERNET DEL SISTEMA
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 72 También se debe incluir el fragmento de código, que se muestra a continuación, en el software del controlador central, para realizar la conexión a la red de internet, incluyendo las librerías Ethernet y SPI al encabezado del programa. IMAGEN 53. INCLUSIÓN DE LIBRERÍAS ETHERNET Y SPI Declarando las variables que se utilizarán para la conexión a Ethernet por parte del controlador central. Forzando el valor de la MAC y los valores correspondientes a la IP que se le asigna al dispositivo. Y determinando el tamaño del buffer y la variable donde se realizará la lectura de los datos. IMAGEN 54. VARIABLES ETHERNET Inicializando el servidor declarado, en el setup del programa. IMAGEN 55. INICIALIZACIÓN DEL SERVIDOR Finalmente, iniciando la conexión con el servidor y obteniendo el dato mediante la lectura de éste, y la posterior comparación con la orden a seleccionar, mediante la función strstr que compara dos Strings, carácter a carácter. IMAGEN 56. INICIO DE CONEXIÓN AL SERVIDOR
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 79 5.3.2. Análisis económico En cuanto al aspecto económico, hay que diferenciar entre tres posibles costes del proyecto. Del proyecto realizado, se podría extraer el sistema de control domótico, el bus de transmisión y la interfaz virtual, y serviría para cualquier proyecto a gran escala real. Sin embargo, los sensores y actuadores utilizados, simulan un entorno, y deberían ser substituidos por sensores y actuadores a tamaño real. En otro de los apartados, también se incluye el presupuesto de la suma de un modulo controlador adicional al sistema, que incluiría el controlador y el respectivo módulo transmisor CAN. Finalmente, se determina el coste total de la maqueta, que simula el funcionamiento de un sistema domótico real. Aunque hay algunos aspectos a tener en cuenta en los tres presupuestos. Se incluye el precio de la aplicación NetIO App, que una vez descargada ya no tiene ningún coste adicional. Se puede usar para otros proyectos simultáneamente. Se excluye el precio de un smartphone, ya que, en la actualidad, en la mayoría de hogares hay al menos una persona poseedora de un smartphone. Las longitudes de los cables son estimadas para el sistema diseñado, según las longitudes utilizadas puede haber variaciones en el precio. En la mayoría de casos, los componentes han sido proporcionados por proveedores españoles por cuestiones de tiempo, en otros países se pueden encontrar los mismos componentes con un precio menor, y podría provocar pequeñas variaciones en el presupuesto final. También se podría disminuir el precio del sistema, si en los sensores utilizados no se hubieran utilizado los modelos tipo shield, que facilitan la inclusión a la maqueta.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 80 5.3.2.1. Presupuesto del sistema domótico En éste apartado, se entiende por sistema domótico el conjunto de controladores, la interfaz virtual diseñada, el bus de transmisión CAN y todos los elementos que permiten la comunicación del sistema, tales como los transceiver CAN o el router para la conexión a Internet. Excluyendo así, los actuadores y sensores del presupuesto global del sistema diseñado. PRODUCTO CANTIDAD PRECIO UNIDAD PRECIO TOTAL Arduino Due (Compatible) 1 8,76 € 8,76 € SN65HVD230 CAN Transceiver 1 4,47 € 4,47 € Arduino UNO (Compatible) 2 5,80 € 11,60 € SPI - CAN Bus Module 2 3,38 € 6,76 € Arduino Ethernet Shield 1 7,54 € 7,54 € Router Sagem F@st 2064 1 10,00 € 10,00 € Cable Dupont Par Trenzado 40 cm 2 0,75 € 1,50 € Cable Ethernet 1m 3ft CAT5E 1 1,10 € 1,10 € NetIO App 1 7,54 € 7,54 € TOTAL 59,27 € TABLA 17. PRESUPUESTO CONTROL DEL SISTEMA E INTERFAZ VIRTUAL Incluir un módulo controlador al sistema, que sea capaz de ser integrado a bus CAN, y extienda la red creada, no supone un gran desembolso. PRODUCTO CANTIDAD PRECIO UNIDAD PRECIO TOTAL Arduino UNO (Compatible) 1 5,80 € 5,80 € SPI - CAN Bus Module 1 3,38 € 3,38 € TOTAL 9,18 € TABLA 18. PRESUPUESTO DE INCLUSIÓN MÓDULO CAN ARDUINO UNO También existe la posibilidad de incluir un controlador Arduino Due, como un controlador adicional, con su respectivo medio de transmisión de CAN. O simplemente, la posibilidad de tener un controlador central de repuesto con la mismo programa ya configurado. PRODUCTO CANTIDAD PRECIO UNIDAD PRECIO TOTAL Arduino Due (Compatible) 1 8,76 € 8,76 € SN65HVD230 CAN Transceiver 1 4,47 € 4,47 € TOTAL 13,23 € TABLA 19. PRESUPUESTO DE INCLUSIÓN MODULO CAN ARDUINO DUE
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 81 NOTA: Siempre teniendo en cuenta, que, al añadir un nuevo módulo, la resistencia terminal característica de bus CAN de 120Ω debe situarse tanto en el tramo inicial, como el tramo final del bus. Algo que caracteriza los módulos CAN utilizados es que tienen dos terminales por cada señal (CAN-H y CAN-L), y permite la posibilidad de conectar cada módulo a otros dos módulos en forma de anillo abierto, como se explicaba en el tercer capítulo de éste documento. 5.3.2.2. Presupuesto de la maqueta diseñada Finalmente, se incluye el presupuesto del coste total de la maqueta y del sistema domótico en general, incluyendo los sensores y actuadores utilizados en ésta simulación de una vivienda. TABLA 20. PRESUPUESTO GENERAL DE LA MAQUETA DISEÑADA
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 82 5.3.3. Impacto energético Una de los puntos más importantes del sistema domótico diseñado es su impacto en la gestión de la energía de la vivienda, ya que se propuso como objetivo al principio del proyecto. Como objetivo de evaluar su impacto en el hogar, para comenzar, se debe estimar el gasto del propio sistema, en éste caso, el sistema de control y transmisión CAN. Dado que se supone que el uso del sistema debe ser constante, sin apenas desconexiones a lo largo de un año, se calculará el gasto energético estimado en un año. MODELO ALIMENTACIÓN (V) CONSUMO (mA·h) DURACIÓN BATERÍA 1200 mA·h ARDUINO UNO 5 46 26 horas ARDUINO DUE 3,3 75 16 horas ARDUINO MEGA 5 93 13 horas ARDUINO NANO 5 15 80 horas TABLA 21.CONSUMO DE ARDUINO Según la tabla anterior, un Arduino UNO, está alimentado a 5V y consume 46mA·h, y un Arduino Due está alimentado a 3,3V y consume 75mA·h. Los módulos CAN están alimentados a partir de los propios Arduinos, así que, para realizar la estimación de gasto energético anual, se engloban en el consumo del propio controlador. GASTO ANUAL DEL SISTEMA = [(3,3V · 75mAh) + 2 · (5V · 46mAh)] · 24h · 365d Teniendo en cuenta que sistema actualmente dispone de un Arduino Due y dos Arduino UNO, el gasto anual del sistema domótico diseñado sería equivalente a 6,2kWh al año. Un hogar medio en España consume unos 4.000 kWh al año. Por lo que el gasto energético del sistema domótico se corresponde a un 0,1% del consumo energético anual de un hogar. Pero teniendo en cuenta las ventajas de un sistema domótico, tal y como se ha detallado en el segundo capítulo de éste documento, la instalación de un sistema domótico en el hogar es más que aprovechable. Mientras que el consumo energético anual del sistema domótico es del 0,1% del total del consumo energético del hogar, el mismo sistema provoca ahorros energéticos en torno a un 80% en el consumo energético de iluminación, del 15% al 25% de ahorro en sistemas de climatización, y entre un 5% y un 10% en otros sectores como el agua caliente.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 83 GRÁFICO 3.PORCENTAJE DE AHORRO ENERGÉTICO POR DOMÓTICA En éste proyecto, se ha centrado especial atención al control de la iluminación, control de persianas y sistema de climatización, además de la automatización y el control de los procesos del hogar. Lo que supone un ahorro energético en los sectores donde puede haber un ahorro energético y económico mayor.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 84 6. Conclusiones Finalmente, se ha logrado crear un sistema domótico sin ningún conocimiento previo sobre domótica ni los tipos de controladores utilizados. El sistema cumple las expectativas propuestas. Las conclusiones obtenidas, fruto del estudio previo al diseño, del desarrollo del sistema y una póstuma evaluación del proyecto en general son las siguientes: El sistema es abierto, distribuir el trabajo realizado bajo una licencia libre, sin duda es la mejor forma de apoyar que el proyecto tenga una continuidad y un posible desarrollo y/o utilización por parte de otros usuarios. En definitiva, generar conocimiento y material reutilizable. Cumple el objetivo de bajo coste, la domótica se caracteriza por ser una tecnología cara. Se han obtenido resultados muy llamativos, ya que, el sistema diseñado tiene un precio en torno a 60€, y cada módulo adicional tiene un coste entre 10€ y 15€. Éste precio es mucho menor que el de cualquier sistema que se pueda encontrar en el mercado, y accesible para la mayoría de familias, independientemente de su situación económica. Es un sistema rentable, ya que produce un ahorro energético y un ahorro económico. Además de ser un sistema respetuoso con el factor medioambiental, la inversión en el sistema es rápidamente recuperada, con la eficiencia energética que produce en el hogar. La interfaz virtual diseñada, gobernada por un smartphone, facilita algunas situaciones cotidianas a las personas con discapacidades o movimiento reducido. La utilización de bus CAN como medio transmisor es un acierto. Crea una complejidad en el sistema, pero sus mecanismos de detección de errores, reduce en gran cantidad el número de fallos en el sistema. Otra de las ventajas, es la creación del bus de transmisión CAN con un presupuesto reducido debido al hardware empleado, y su compatibilidad con el protocolo. Además, garantiza una fiabilidad y robustez al sistema, debido a que, la comunicación entre los controladores del sistema descarta cualquier conexión inalámbrica. Por lo tanto, se incrementa también la seguridad. Otra de las conclusiones extraídas a raíz de realizar la parte práctica del proyecto es la importancia de las fuentes de alimentación de cualquier sistema.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 85 Durante el transcurso del proyecto, han surgido diferentes problemas en cuanto a las conexiones de los elementos del sistema, que no se habían tenido en cuenta anteriormente. Por ejemplo, la transmisión de datos del bus CAN era errónea debido a la tensión de alimentación de los módulos CAN. Finalmente, se han podido solucionar algunos de los distintos problemas surgidos. Una de las soluciones ha sido la utilización de un módulo de alimentación externo, además de la alimentación proporcionada por los propios controladores. O la utilización de una masa común, resistencias de pull-up y pull-down, y filtros RC, para los distintos dispositivos conectados. La solución que se propone, es distinta para cada hogar, dependiendo de su configuración y arquitectura. Si bien, es cierto que el sistema se puede implementar en viviendas de obra nueva o ya construidas. Esto hace que el sistema sea flexible a cambios y totalmente modular. Ya que, por ejemplo, existen viviendas donde las persianas no están motorizadas, y sería imposible su control. La flexibilidad y extensibilidad de la que dispone el sistema domótico diseñado, permite satisfacer las necesidades del usuario y del hogar, en cada caso. Como conclusión final, se han resuelto satisfactoriamente los distintos objetivos propuestos al inicio del proyecto. Aunque, el sistema tiene aspectos a mejorar todavía, algunas de las ideas para la mejora del sistema son comentadas en el siguiente apartado. 6.1. Futuras mejoras del sistema Una vez dado por concluido el desarrollo del proyecto y su posterior evaluación, se exponen algunos de los aspectos a mejorar del sistema domótico diseñado. El uso de un sistema de monitorización de consumos energéticos, para tomar consciencia del consumo energético del hogar. Esta funcionalidad de la domótica aportará la información necesaria para modificar los hábitos e incrementar el ahorro y la eficiencia. Además de crear un sistema inteligente capaz de actuar en función de cada situación, en función del entorno. Esto conlleva al estudio de la zona en el mapa donde se ubicará el sistema, y de sus características, tales como la climatología del lugar.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 86 Ampliar la instalación domótica . Crear más nodos e incorporarlos a la red para probar nuevas situaciones, con más tráfico de datos y posibilidades de fallo. También se podría ampliar utilizando los mismos nodos existentes, añadiendo nuevos sensores y actuadores a cada nodo, hasta que la capacidad física lo permita. Aunque esto supondría una sobrecarga de los controladores innecesaria. Esta mejora dispondría de una base ya creada: el protocolo está especificado y las funciones genéricas de los nodos ya están creadas, aunque podría hacer falta la creación de más funciones. Además, el propio código del programa está adaptado para añadir nuevos objetos de los tipos de objetos ya creados. Simplemente habría que configurar el nuevo nodo, respecto a los sensores y actuadores que tendría conectados. Incorporar más servicios a los nodos, es decir, controlar más tipos de objetos. Añadir sensores y actuadores que permitan el control del consumo de agua, o prevenga fugas de gases, que permitan incrementar el ahorro energético Otro de los aspectos a introducir al sistema es la creación de un sistema de vigilancia que aporte seguridad al sistema domótico diseñado. Comprobar otro tipo de controladores que ejerzan de elemento principal de cada nodo. Las placas Arduino Mega y Arduino Nano, serían algunas de las soluciones propuestas, aunque se debería realizar un estudio en profundidad previamente, en el que se incluiría su compatibilidad con bus CAN y los módulos disponibles en el mercado. El Arduino Mega podría realizar la función actual de Arduino Due, de controlador central. Tiene un procesador más potente y un mayor número de pines disponibles. Además se alimenta con 5V, y solucionaría el problema de utilizar dos alimentaciones distintas (3,3V y 5V) para los controladores. Hay que decir que Arduino Mega tiene un mayor consumo que un Arduino Due, pero eso se podría compensar de alguna manera utilizando Arduino Nano en el lugar de las placas Arduino Uno utilizadas. El Arduino Nano dispone del mismo número de pines digitales y entradas analógicas que un Arduino UNO, además su consumo es tres veces menor.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 87 Finalmente, también se ha valorado la utilización de Raspberry Pi 3 como intermediario del sistema con la interfaz virtual. La Raspberry Pi 3 permite un mayor número de soluciones en torno a la programación y creación de entornos virtuales. Habría que retomar los estudios iniciales, ya que su compatibilidad con bus CAN es posible, pero no se llegó a conseguir debido a la dificultad de programación, y por eso se descartó como controlador central y se optó por utilizar Arduino Due en su lugar. Mejorar la interfaz gráfica. Crear una nueva aplicación adaptable al sistema creado, siguiendo el modelo de la aplicación utilizada. Que permita también monitorizar los consumos energéticos. Una posible continuación respecto a este proyecto podría ser la creación de una interfaz gráfica con prestaciones distintivas entre diseñador y usuario, en el propio dispositivo móvil. Gestión de la memoria de los controladores. Realizar una gestión óptima de la memoria de programa es vital, ya que se tiene que procurar proporcionar al usuario avanzado, espacio suficiente en la memoria para que pueda elaborar su programa personalizado. Salvado de información del sistema. Dado que en muchas ocasiones el flujo de información a supervisar puede llegar a ser elevado para realizarlo en tiempo real, se debería añadir la funcionalidad de poder guardar en un fichero el resultado de todas las peticiones e incidencias ocurridas. Determinar un modo optimizado de adaptar la instalación eléctrica del hogar al sistema diseñado. Teniendo en cuenta las alimentaciones de los controladores. Además de promover el uso de energías renovables en la instalación eléctrica, para asegurar un hogar totalmente limpio en aspecto energético. Implementar un diseño inalámbrico alternativo, para otros clientes que deseen utilizar ésta tecnología para controlar los dispositivos de su vivienda. Medir y controlar diferentes dispositivos del hogar, tales como pequeños electrodomésticos, para rentabilizar su uso y consumo.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 88 7. Bibliografía y webgrafía Durante la realización del proyecto se han utilizado algunas referencias para la obtención de la información, posteriormente procesada y adaptada a la necesidad del proyecto. A continuación, se encuentran la bibliografía y las webs consultadas: Bibliografía: Domótica. Edificios Inteligentes. Huidobro, J.M; Millán, R.J. Creaciones Copyright. ISBN 84-933336-9-7. Domótica e Inmótica. Viviendas y edificios inteligentes. Romero,C ; Vázquez, F; De Castro, C. Editorial Ra-Ma. ISBN 84-7897-653-1. Domótica y Hogar Digital. Junestrand, S; Passaret, X; Vázquez, D. Thomson Paraninfo ISBN 84-283-2891-9. Instalaciones automatizadas en Viviendas y edificios . Molina, L; Ruiz, J. McGrawHill. ISBN 84-481-9946-4. El Hogar Digital. Fernández, V; Ruz E. Creaciones Copyright. ISBN 849630007-2. Implementación de aspectos de eficiencia energética en el hogar digital: un caso práctico”. Gil Pascual, Miriam. Valencia, 2008. Sistemas De Control Para Viviendas Y Edificios Domóticos, José María Quinteiro González, Javier Lamas Graziani, Juan D. Sandoval González. Guía técnica de aplicación de instalaciones de sistemas de automatización gestión técnica de energía y seguridad para viviendas y edificios, Ministerio de Industria, Turismo y Comercio. Guía BT-5. Edición Feb. 07. Revisión 1. Build Your Own: Smart Home, Robert C. Elsenpeter, Toby J. Velte, ed. McGraw-Hill. Webs consultadas: [1] http://www.casadomo.com [2] http://www.domoticaviva.com [3] http://www.lonmark.es [4] http://www.bioingenieria.es [5] http://www.konnex.org [6] http://www.knx.org/es
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 95 void loop() { //CONEXIÓN A SERVIDOR DE ETHERNET int index = 0; EthernetClient clienteApp = servidorArduino.available(); if (clienteApp) { //Establim connexió i llegim buffer if (clienteApp.connected()) { while (clienteApp.available()) { char caracter = clienteApp.read(); if (caracter != '\n') { comando[index] = caracter; index++; if (index >= BUFFER) index = BUFFER -1; continue; } comando[index] = '\0'; } //INTERFAZ FÍSICA CUANDO ESTÁ CONECTADO EL SMARTPHONE vPULS1 = digitalRead(pinPULS1); //PULSADOR 1 vPULS2 = digitalRead(pinPULS2); //PULSADOR 2 //SENSORES INFRARROJOS Y LUZ valorIF = digitalRead(pinIR); //lectura sensor IR valorLDR = digitalRead(pinLDR); //lectura sensor LDR //PULSADOR PLANTA 0 if (vPULS1 == HIGH) { Serial.println("Pulsador Planta 0"); if(bLuz[1]== false){ Luz = true; enviaLuz(1);} else if(bLuz[1]== true){ Luz = false; enviaLuz(1);} delay(500); if(bLuz[2]== false){ Luz = true; enviaLuz(2);} else if(bLuz[2]== true){ Luz = false; enviaLuz(2);} delay(500); if(bLuz[5]== false){ Luz = true; enviaLuz(5);} else if(bLuz[5]== true){ Luz = false; enviaLuz(5);} delay(500); } //PULSADOR PLANTA 1 if (vPULS2 == HIGH) { //PULSADOR PLANTA 1 Serial.println("Pulsador Planta 1"); if(bLuz[3]== false){ Luz = true; enviaLuz(3);} else if(bLuz[3]== true){ Luz = false; enviaLuz(3);} delay(500); if(bLuz[4]== false){ Luz = true; enviaLuz(4);} else if(bLuz[4]== true){ Luz = false; enviaLuz(4);} delay(500); if(bLuz[6]== false){ Luz = true; enviaLuz(6);} else if(bLuz[6]== true){ Luz = false; enviaLuz(6);} delay(500); } //DETECTOR INFRARROJO - LUZ 5 if (valorIF == LOW && bLuz[6] == false) { Serial.println("Detectado obstaculo"); Luz = true; enviaLuz(5); delay(1000); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 96 //VENTILADOR AUTOMÁTICO h = dht.readHumidity(); // LECTURA DE HUMEDAD t = dht.readTemperature(); //LECTURA DE TEMPERATURA if (autoVent == true){ if (t>=25 && Ventilador == false){ // switch Ventilador turned ON Ventilador = true; Serial.println("AUTO - Ventilador encendido debido a temperatura >= 25ºC"); enviaVentilador(1); } else if (t<23 && Ventilador == true){ // switch Ventilador turned OFF Ventilador = false; Serial.println("AUTO - Ventilador apagado debido a temperatura < 25ºC"); enviaVentilador(1); } } //NetIO APP - INTERFAZ VIRTUAL //SENSOR TEMPERATURA if (strstr(comando, "Temperatura")) { //LABEL Temp = String (t); //valorT clienteApp.println(Temp); } if (strstr(comando, "Humedad")) { Hum = String (h); //valorH clienteApp.println(Hum); } if (strstr(comando, "Posicion Persiana 1")) { String Pos1 = String (posPersiana1); clienteApp.println(Pos1); } if (strstr(comando, "Posicion Persiana 2")) { String Pos2 = String (posPersiana2); clienteApp.println(Pos2); } //MENSAJES ENVIADOS - printFrame if (strstr(comando, "B0")) { String bit0 = String (b[0]); clienteApp.println(bit0); } if (strstr(comando, "B1")) { String bit1 = String (b[1]); clienteApp.println(bit1); } if (strstr(comando, "B2")) { String B2 = String (b[2]); clienteApp.println(B2); } if (strstr(comando, "B3")) { String B3 = String (b[3]); clienteApp.println(B3); } if (strstr(comando, "B4")) { String B4 = String (b[4]); clienteApp.println(B4); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 97 if (strstr(comando, "B5")) { String B5 = String (b[5]); clienteApp.println(B5); } if (strstr(comando, "B6")) { String B6 = String (b[6]); clienteApp.println(B6); } if (strstr(comando, "B7")) { String B7 = String (b[7]); clienteApp.println(B7); } //MENSAJES RECIBIDOS - printFrameIN if (strstr(comando, "I0")) { String I0 = String (bIN[0]); clienteApp.println(I0); } if (strstr(comando, "I1")) { String I1 = String (bIN[1]); clienteApp.println(I1); } if (strstr(comando, "I2")) { String I2 = String (bIN[2]); clienteApp.println(I2); } if (strstr(comando, "I3")) { String I3 = String (bIN[3]); clienteApp.println(I3); } if (strstr(comando, "I4")) { String I4 = String (bIN[4]); clienteApp.println(I4); } if (strstr(comando, "I5")) { String I5 = String (bIN[5]); clienteApp.println(I5); } if (strstr(comando, "I6")) { String I6 = String (bIN[6]); clienteApp.println(I6); } if (strstr(comando, "I7")) { String I7 = String (bIN[7]); clienteApp.println(I7); } if ( !strstr(comando, "Temperatura") && !strstr(comando, "Humedad") && !strstr(comando, "Dia") && !strstr(comando, "Mes") && !strstr(comando, "Año") && !strstr(comando, "Hora") && !strstr(comando, "Minuto") && !strstr(comando, "Segundo") && !strstr(comando, "Posicion Persiana 1") && !strstr(comando, "Posicion Persiana 2") && !strstr(comando, "B0") && !strstr(comando, "B1") && !strstr(comando, "B2") && !strstr(comando, "B3") && !strstr(comando, "B4") && !strstr(comando, "B5") && !strstr(comando, "B6") && !strstr(comando, "B7") && !strstr(comando, "I0") && !strstr(comando, "I1") && !strstr(comando, "I2") && !strstr(comando, "I3") && !strstr(comando, "I4") && !strstr(comando, "I5") && !strstr(comando, "I6") && !strstr(comando, "I7") ){ //---------------- do below -------------------------
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 98 //ORDENES //LUCES if (strstr(comando,"LUZ 1 ON")) { //LED1 ON Luz = true; enviaLuz(1); } if (strstr(comando,"LUZ 1 OFF")) { //LED1 OFF Luz = false; enviaLuz(1); } if (strstr(comando,"LUZ 2 ON")) { //LED2 ON Luz = true; enviaLuz(2); } if (strstr(comando,"LUZ 2 OFF")) { //LED2 OFF Luz = false; enviaLuz(2); } if (strstr(comando,"LUZ 3 ON")) { //LED3 ON Luz = true; enviaLuz(3); } if (strstr(comando,"LUZ 3 OFF")) { //LED3 OFF Luz = false; enviaLuz(3); } if (strstr(comando,"LUZ 4 ON")) { //LED4 ON Luz = true; enviaLuz(4); } if (strstr(comando,"LUZ 4 OFF")) { //LED4 OFF Luz = false; enviaLuz(4); } if (strstr(comando,"LUZ 5 ON")) { //LED5 ON Luz = true; enviaLuz(5); } if (strstr(comando,"LUZ 5 OFF")) { //LED5 OFF Luz = false; enviaLuz(5); } if (strstr(comando,"LUZ 6 ON")) { //LED6 ON Luz = true; enviaLuz(6); } if (strstr(comando,"LUZ 6 OFF")) { //LED6 OFF Luz = false; enviaLuz(6); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 99 if (strstr(comando,"PLANTA 0 ON")) { //PLANTA 0 ON Luz = true; enviaLuz(1); delay (500); enviaLuz(2); delay (500); enviaLuz(5); delay (500); } if (strstr(comando,"PLANTA 0 OFF")) { //PLANTA 0 OFF Luz = false; enviaLuz(1); delay (500); enviaLuz(2); delay (500); enviaLuz(5); delay (500); } if (strstr(comando,"PLANTA 1 ON")) { //PLANTA 1 ON Luz = true; enviaLuz(3); delay (500); enviaLuz(4); delay (500); enviaLuz(6); delay (500); } if (strstr(comando,"PLANTA 1 OFF")) { //PLANTA 1 OFF Luz = false; enviaLuz(3); delay (500); enviaLuz(4); delay (500); enviaLuz(6); delay (500); } if (strstr(comando,"STOP LUCES")) { //LED8 OFF for (int i=0; i<8; i++){ Luz = false; enviaLuz(i); delay (100); } } //PERSIANAS //PERSIANA 1 //PERSIANA 1 ARRIBA if (strstr(comando,"Persiana 1 Arriba")) { persianaMov = true; sentidoPersiana = true; enviaPersiana(1); Can0.attachCANInterrupt(1, leePersiana); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 100 //PERSIANA 1 ABAJO if (strstr(comando,"Persiana 1 Abajo")) { persianaMov = true; sentidoPersiana = false; enviaPersiana(1); Can0.attachCANInterrupt(1, leePersiana); } //PERSIANA 1 STOP if (strstr(comando,"Persiana 1 Stop")) { persianaMov = false; enviaPersiana(1); Can0.attachCANInterrupt(1, leePersiana); } //PERSIANA 2 //PERSIANA 2 ARRIBA if (strstr(comando,"Persiana 2 Arriba")) { persianaMov = true; sentidoPersiana = true; enviaPersiana(2); Can0.attachCANInterrupt(1, leePersiana); } //PERSIANA 2 ABAJO if (strstr(comando,"Persiana 2 Abajo")) { persianaMov = true; sentidoPersiana = false; enviaPersiana(2); Can0.attachCANInterrupt(1, leePersiana); } //PERSIANA 2 STOP if (strstr(comando,"Persiana 2 Stop")) { persianaMov = false; enviaPersiana(2); Can0.attachCANInterrupt(1, leePersiana); } //SENSOR TEMPERATURA if (strstr(comando, "Actualiza")) { //BOTÓN ACTUALIZA Temperatura=!Temperatura; enviaTemp(); Temp = String (t); Hum = String (h); } //VENTILADOR // switch Ventilador turned ON if ( strstr(comando, "Ventilador ON")){ if(autoVent == false){ //Si está en modo manual Ventilador = true; enviaVentilador(1); } else if (autoVent == true){ Serial.println("Desactive el modo automatico primero");} }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 101 // switch Ventilador turned OFF if ( strstr(comando, "Ventilador OFF")){ if(autoVent == false){ Ventilador = false; enviaVentilador(1); } else if (autoVent == true){ Serial.println("Desactive el modo automatico primero");} } //Modo Automático ON if ( strstr(comando, "AUTO ON")){ autoVent = true; Serial.println("Modo Ventilador Automatico"); } //Modo Manual ON if ( strstr(comando, "AUTO OFF")){ autoVent = false; Ventilador = false; enviaVentilador(1); Serial.println("Modo Ventilador Manual"); } clienteApp.println("OK"); //Muy importante! "OK" al final de cada Button, en los Labels no se necesita } } } //INTERFAZ FÍSICA CUANDO NO ESTÁ CONECTADO EL SMARTPHONE else if (!clienteApp){ //ALARMA 1 ó 2 ON? Can0.attachCANInterrupt(0, leeClock); //PULSADOR PLANTA 0 vPULS1 = digitalRead(pinPULS1); if (vPULS1 == HIGH) { Serial.println("Pulsador Planta 0"); if(bLuz[1]== false){ Luz = true; enviaLuz(1);} else if(bLuz[1]== true){ Luz = false; enviaLuz(1);} delay(500); if(bLuz[2]== false){ Luz = true; enviaLuz(2);} else if(bLuz[2]== true){ Luz = false; enviaLuz(2);} delay(500); if(bLuz[5]== false){ Luz = true; enviaLuz(5);} else if(bLuz[5]== true){ Luz = false; enviaLuz(5);} delay(500); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 102 //PULSADOR PLANTA 1 vPULS2 = digitalRead(pinPULS2); if (vPULS2 == HIGH) { //PULSADOR PLANTA 1 Serial.println("Pulsador Planta 1"); if(bLuz[3]== false){ Luz = true; enviaLuz(3);} else if(bLuz[3]== true){ Luz = false; enviaLuz(3);} delay(500); if(bLuz[4]== false){ Luz = true; enviaLuz(4);} else if(bLuz[4]== true){ Luz = false; enviaLuz(4);} delay(500); if(bLuz[6]== false){ Luz = true; enviaLuz(6);} else if(bLuz[6]== true){ Luz = false; enviaLuz(6);} delay(500); } //VENTILADOR AUTOMÁTICO h = dht.readHumidity(); // LECTURA DE HUMEDAD t = dht.readTemperature(); //LECTURA DE TEMPERATURA if (autoVent == true){ if (t>=25 && Ventilador == false){ // switch Ventilador turned ON cuando Temp>=25 Ventilador = true; Serial.println("AUTO - Ventilador encendido debido a temperatura >= 25ºC"); enviaVentilador(1); } else if (t<=23 && Ventilador == true){ // switch Ventilador turned OFF cuando Temp<25 Ventilador = false; Serial.println("AUTO - Ventilador apagado debido a temperatura < 25ºC"); enviaVentilador(1); } } } } /************************ACABA LOOP************************/ //MENSAJES ENVIADOS void printFrame (CAN_FRAME &frame){ Serial.print("ID: 0x" ); Serial.print(frame.id, HEX); Serial.print("\t"); Serial.print ("DATO:"); Serial.print("\t"); for(int i = 0; i<frame.length; i++){ // imprime los datos Serial.print(frame.data.byte[i], HEX); Serial.print(" "); b[i] = frame.data.byte[i]; } Serial.println(); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 103 //Si el mensaje es recibido, el código de lectura sería el siguiente, pero se puede solucionar llamando a la función con un *. Ex: printFrameIN(*tempCAN); /*Serial.print("ID: 0x" ); Serial.print(tempCAN->id, HEX); Serial.print("\t"); Serial.print("DATO:"); Serial.print("\t"); for(int i = 0; i<sizeof(tempCAN->data); i++){ //Imprime los datos recibidos, byte a byte Serial.print(tempCAN->data.byte[i], HEX); Serial.print(" "); } Serial.println();*/ //MENSAJES RECIBIDOS void printFrameIN (CAN_FRAME &frame){ Serial.print("ID: 0x" ); Serial.print(frame.id, HEX); Serial.print("\t"); Serial.print ("DATO:"); Serial.print("\t"); for(int i = 0; i<frame.length; i++){ // imprime los datos Serial.print(frame.data.byte[i], HEX); Serial.print(" "); bIN[i] = frame.data.byte[i]; } Serial.println(); } //FUNCIONES LUZ void enviaLuz(int numLuz){ CAN_FRAME enviaLuz; enviaLuz.extended = false; enviaLuz.priority = 4; //0-15 lower is higher priority enviaLuz.length = 8; //Rellenamos la parte alta del dato, que de momento no usaremos byte[7-4] enviaLuz.data.high = 0xAAAAAAAA; //TRAMA DE RELLENO de "1010..10" succesivamente //BYTE [3] Nº PLACA enviaLuz.data.byte[2] = 0x00; //BYTE [2] TIPO OBJETO (LUZ - 0x00) //BYTE [1] Nº OBJETO //BYTE [0] ACCIÓN if (Luz == true){ enviaLuz.data.byte[0] = 0x01; //ENCENDER LUZ if (numLuz==1) { enviaLuz.data.byte[1] = 0x01; enviaLuz.data.byte[3] = 0x01; enviaLuz.id = 0x300;} if (numLuz==2) { enviaLuz.data.byte[1] = 0x02; enviaLuz.data.byte[3] = 0x01; enviaLuz.id = 0x302;} if (numLuz==3) { enviaLuz.data.byte[1] = 0x03; enviaLuz.data.byte[3] = 0x02; enviaLuz.id = 0x304;} if (numLuz==4) { enviaLuz.data.byte[1] = 0x04; enviaLuz.data.byte[3] = 0x02; enviaLuz.id = 0x306;} if (numLuz==5 && bLuz[5]== false) { enviaLuz.data.byte[1] = 0x05; enviaLuz.data.byte[3] = 0x00; enviaLuz.id = 0x308; digitalWrite(pinLED5, HIGH); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 104 if (numLuz==6 && bLuz[6]== false) { enviaLuz.data.byte[1] = 0x06; enviaLuz.data.byte[3] = 0x00; enviaLuz.id = 0x30A; digitalWrite(pinLED6,HIGH); } bLuz[numLuz] = true; } else if (Luz == false){ enviaLuz.data.byte[0] = 0x00; //APAGAR LUZ if (numLuz==1) { enviaLuz.data.byte[1] = 0x01; enviaLuz.data.byte[3] = 0x01; enviaLuz.id = 0x301;} if (numLuz==2) { enviaLuz.data.byte[1] = 0x02; enviaLuz.data.byte[3] = 0x01; enviaLuz.id = 0x303;} if (numLuz==3) { enviaLuz.data.byte[1] = 0x03; enviaLuz.data.byte[3] = 0x02; enviaLuz.id = 0x305;} if (numLuz==4) { enviaLuz.data.byte[1] = 0x04; enviaLuz.data.byte[3] = 0x02; enviaLuz.id = 0x307;} if (numLuz==5 && bLuz[5]== true) { enviaLuz.data.byte[1] = 0x05; enviaLuz.data.byte[3] = 0x00; enviaLuz.id = 0x309; digitalWrite(pinLED5,LOW); } if (numLuz==6 && bLuz[6]== true) { enviaLuz.data.byte[1] = 0x06; enviaLuz.data.byte[3] = 0x00; enviaLuz.id = 0x30B; digitalWrite(pinLED6,LOW); } bLuz[numLuz] = false; } Can0.sendFrame(enviaLuz); printFrame(enviaLuz); Serial.print("LED "); Serial.print(numLuz); if (Luz == true){ Serial.println(" ENCENCIDO");} else if (Luz == false){ Serial.println(" APAGADO");} } //FUNCIONES TEMPERATURA void enviaTemp(){ CAN_FRAME enviaTemp; //creamos una variable tipo CAN_FRAME enviaTemp.id = 0x500; enviaTemp.extended = false; enviaTemp.priority = 4; //0-15 lower is higher priority enviaTemp.length = 8; h = dht.readHumidity(); // Reading temperature or humidity takes about 250 milliseconds! t = dht.readTemperature();
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 111 //PINES //LEDS const int pinLED1 = 4; //LED1 const int pinLED2 = 5; //LED2 //PERSIANA 1 const int pinIN1 = 6; // 28BYJ48 In1 const int pinIN2 = 7; // 28BYJ48 In2 const int pinIN3 = 8; // 28BYJ48 In3 const int pinIN4 = 9; // 28BYJ48 In4 const int pinPersiana1[4] = { pinIN1, pinIN2, pinIN3, pinIN4 }; //INICIAMOS COMPONENTES MCP_CAN CAN(SPI_CS_PIN); // Set CS pin void setup(){ Serial.begin(115200); while (CAN_OK != CAN.begin(CAN_250KBPS)){ // DOBLE VELOCIDAD AL ARDUINO DUE!!!! init can bus : baudrate = 500k Serial.println("CAN BUS Shield init fail"); Serial.println(" Init CAN BUS Shield again"); delay(100); } Serial.println("CAN BUS Shield init ok!"); //ACTIVAMOS RELOJ Wire.begin(); rtc.begin(); clock_OK(); //Reloj RTC //ACTIVAMOS CONTROL LUCES pinMode(pinLED1, OUTPUT); //LED1 pinMode(pinLED2, OUTPUT); //LED2 //ACTIVAMOS PERSIANA 1 pinMode(pinIN1, OUTPUT); //28BYJ48 In1 - Persiana 1 pinMode(pinIN2, OUTPUT); //28BYJ48 In2 - Persiana 1 pinMode(pinIN3, OUTPUT); //28BYJ48 In3 - Persiana 1 pinMode(pinIN4, OUTPUT); //28BYJ48 In4 - Persiana 1 } void loop(){ //ALARMA 1: 7:15 DE LUNES A VIERNES if (estadoAlarma1 == false && Alarma1ON()){ // Apagado y debería estar encendido //ENVIA MENSAJE clockaDue(1); fechaActual(); estadoAlarma1 = true; //Serial.println("Alarma 1 activada"); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 112 else if (estadoAlarma1 == true && !Alarma1ON()){ // Encendido y deberia estar apagado clockaDue(0); estadoAlarma1 = false; //Serial.println("Alarma 1 desactivada"); } //ALARMA 2: 23:15 DE LUNES A VIERNES if (estadoAlarma2 == false && Alarma2ON()){ // Apagado y debería estar encendido //ENVIA MENSAJE clockaDue(2); fechaActual(); estadoAlarma2 = true; //Serial.println("Alarma 2 activada"); } else if (estadoAlarma2 == true && !Alarma2ON()){ // Encendido y deberia estar apagado clockaDue(0); estadoAlarma2 = false; //Serial.println("Alarma 2 desactivada"); } //LECTURA DE BUFFER CAN leeDato(); //LUCES if (buf[2] == 0x00){ //LUZ 1 if (buf[1] == 0x01){ if (buf[0] == 0x01 && Luz[1] == false){ //LED1 ON Luz[1] = true; digitalWrite(pinLED1,HIGH); Serial.println("LED1 encendido"); } if (buf[0] == 0x00 && Luz[1] == true){ //LED1 OFF Luz[1] = false; digitalWrite(pinLED1,LOW); Serial.println("LED1 apagado"); } } //LUZ 2 if (buf[1] == 0x02){ if (buf[0] == 0x01 && Luz[2] == false){ //LED2 ON Luz[2] = true; digitalWrite(pinLED2,HIGH); Serial.println("LED2 encendido"); } if (buf[0] == 0x00 && Luz[2] == true){ //LED2 OFF Luz[2] = false; digitalWrite(pinLED2,LOW); Serial.println("LED2 apagado"); } }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 113 //LUZ 3 if (buf[1] == 0x03){ if (buf[0] == 0x01 && Luz[3] == false){ //LED3 ON Luz[3] = true; Serial.println("LED3 encendido"); } if (buf[0] == 0x00 && Luz[3] == true){ //LED3 OFF Luz[3] = false; Serial.println("LED3 apagado"); } } //LUZ 4 if (buf[1] == 0x04){ if (buf[0] == 0x01 && Luz[4] == false){ //LED4 ON Luz[4] = true; Serial.println("LED4 encendido"); } if (buf[0] == 0x00 && Luz[4] == true){ //LED4 OFF Luz[4] = false; Serial.println("LED4 apagado"); } } //LUZ 5 if (buf[1] == 0x05){ if (buf[0] == 0x01 && Luz[5] == false){ //LED5 ON Luz[5] = true; Serial.println("LED5 encendido"); } if (buf[0] == 0x00 && Luz[5] == true){ //LED5 OFF Luz[5] = false; Serial.println("LED5 apagado"); } } //LUZ 6 if (buf[1] == 0x06){ if (buf[0] == 0x01 && Luz[6] == false){ //LED6 ON Luz[6] = true; Serial.println("LED6 encendido"); } if (buf[0] == 0x00 && Luz[6] == true){ //LED6 OFF Luz[6] = false; Serial.println("LED6 apagado"); } } }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 114 //SENSOR TEMPERATURA else if (buf[2] == 0x01){ if (buf[1] == 0x00 && buf[0] == 0x01 && Temperatura == false){ valorT = buf[5]; valorH = buf[4]; Serial.print("Temperatura: "); Serial.print(valorT, DEC); Serial.print(" *C "); Serial.print("Humedad: "); Serial.print(valorH, DEC); Serial.print(" %\t"); Serial.println(); Temperatura = true; } else if (buf[1] == 0x00 && buf[0] == 0x00 && Temperatura == true){ valorT = buf[5]; valorH = buf[4]; Serial.print("Temperatura: "); Serial.print(valorT, DEC); Serial.print(" *C "); Serial.print("Humedad: "); Serial.print(valorH, DEC); Serial.print(" %\t"); Serial.println(); Temperatura = false; } } //PERSIANAS else if (buf[2] == 0x04){ if (buf[1] == 0x01){ muevePersiana(1);} //PERSIANA 1 //else if (buf[1] == 0x02){ Serial.println("Orden para persiana 2");} //PERSIANA 2 } //VENTILADOR else if (buf[2] == 0x05){ //LUZ 1 if (buf[1] == 0x00){ if (buf[0] == 0x01 && Ventilador[1] == false){ //Ventilador ON Ventilador[1] = true; Serial.println("Ventilador encendido"); } if (buf[0] == 0x00 && Ventilador[1] == true){ //Ventilador OFF Ventilador[1] = false; Serial.println("Ventilador apagado"); } } } } /**************ACABA LOOP**************/
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 115 void leeDato(){ if(CAN_MSGAVAIL == CAN.checkReceive()){ // check if data coming CAN.readMsgBuf(&len, buf); // lee datos, len: longitude datos, buf: data buf canId = CAN.getCanId(); Serial.print("ID: 0x" ); Serial.print(canId, HEX); Serial.print("\t"); Serial.print ("DATO:"); Serial.print("\t"); for(int i = 0; i<len; i++){ // imprime los datos Serial.print(buf[i], HEX); Serial.print(" "); } Serial.print("\t"); fechaActual(); } } //FUNCIONES PERSIANAS void persaDue(int numPers){ byte datoPERS[8]; int id = 0x700; int pos; pos = posicion; datoPERS[0] = 0x00; //BYTE [0] ACCIÓN datoPERS[1] = numPers; //BYTE [1] Nº OBJETO datoPERS[2] = 0x04; //BYTE [2] TIPO DE OBJETO (0x04 - PERSIANA) datoPERS[3] = 0x01; //BYTE [3] NºPLACA datoPERS[4] = estadoPers; //ESTADO DE LA PERSIANA datoPERS[5] = pos; //POSICIÓN DE LA PERSIANA datoPERS[6] = 0xAA; datoPERS[7] = 0xAA; CAN.sendMsgBuf(id, 0, sizeof(datoPERS), datoPERS); // send data: id = 0x00, standard frame (0 estandard, 1 extended), data len = 8, stmp: data buf Serial.print("PERSIANA " ); Serial.print(numPers); if (estadoPers == 0){Serial.print(" PARADA");} if (estadoPers == 1){Serial.print(" SUBIENDO");} if (estadoPers == 2){Serial.print(" BAJANDO");} Serial.print(" en POSICION "); Serial.println(pos); Serial.print("Mensaje enviado: "); Serial.print("ID: 0x" ); Serial.print(id, HEX); Serial.print("\t"); Serial.print ("DATO:"); Serial.print("\t");
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 116 for(int i = 0; i<(sizeof(datoPERS)); i++){ // imprime los datos Serial.print(datoPERS[i], HEX); Serial.print(" "); } Serial.println(); } void muevePersiana (int numPers){ while (posMax >= posicion >= posMin && buf[3] == 0x01 && buf[2] == 0x04 ){ leeDato(); if (buf[3] == 0x01 && buf[2] == 0x04 && buf[1] == 0x01){ if(buf[0] == 0x00 && persianaParada==false){ //OK MANUAL Serial.println("Persiana Parada"); estadoPers=0; break; } else if (buf[0] == 0x01 && posicion != posMax){ //PERSIANA SUBE sentidoReloj(numPers); Serial.println("Persiana Subiendo"); estadoPers=1; persaDue(numPers); persianaParada=false; } else if (buf[0] == 0x02 && posicion != posMin){ //PERSIANA BAJA sentidoAntiReloj(numPers); Serial.println("Persiana Bajando"); estadoPers=2; persaDue(numPers); persianaParada=false; } else if (buf[0] == 0x01 && posicion == posMax && persianaParada==false){ //PERSIANA NO PUEDE SUBIR MÁS Serial.println("Persiana Arriba"); estadoPers=0; break; } else if (buf[0] == 0x02 && posicion == posMin && persianaParada==false){ //PERSIANA NO PUEDE BAJAR MÁS Serial.println("Persiana Abajo"); estadoPers=0; break; } } else if (buf[3] != 0x01 && buf[2] != 0x04 && buf[1] != 0x01){ //Serial.println("Cambio de Orden"); estadoPers=0; break; //OK AUTOMÁTICO } }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 117 if (estadoPers == 0 && persianaParada==false){ persaDue(numPers);} //Envia mensaje estado persiana parada persianaParada=true; } void sentidoReloj(int numPers){ //Da una vuelta arriba for (int i = 0; i < stepsPerRev ; i++){ stepCounter++; if (stepCounter >= numSteps) stepCounter = 0; if (numPers == 1) { setOutput(pinPersiana1, stepCounter);} //else if (numPers == 2) { setOutput(pinPersiana2, stepCounter);} delayMicroseconds(motorSpeed); } posicion++; } void sentidoAntiReloj(int numPers){ //Da una vuelta abajo for (int i = 0; i < stepsPerRev ; i++){ stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; if (numPers == 1) { setOutput(pinPersiana1, stepCounter);} //else if (numPers == 2) { setOutput(pinPersiana2, stepCounter);} delayMicroseconds(motorSpeed); } posicion--; } void setOutput(const int pinPersiana[4], int step){ digitalWrite(pinPersiana[0], bitRead(stepsLookup[step], 0)); digitalWrite(pinPersiana[1], bitRead(stepsLookup[step], 1)); digitalWrite(pinPersiana[2], bitRead(stepsLookup[step], 2)); digitalWrite(pinPersiana[3], bitRead(stepsLookup[step], 3)); } //FUNCIONES RELOJ void clock_OK (){ if (!rtc.begin()){ Serial.println(F("Couldn't find RTC")); } if(rtc.begin()){ rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //rtc.adjust(DateTime(2016, 1, 21, 3, 0, 0)); Serial.println("Reloj Ajustado"); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 118 if (rtc.lostPower()) { // Si se ha perdido la corriente, fijar fecha y hora rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Fijar a fecha y hora de compilacion. Si queremos fijar a fecha y hora específica. Ej: 21 de Enero de 2016 a las 03:00:00 // rtc.adjust(DateTime(2016, 1, 21, 3, 0, 0)); } } void imprimeFecha (DateTime date){ //Imprimir Fecha Serial.print(daysOfTheWeek[date.dayOfTheWeek()]); Serial.print(" "); Serial.print(date.day(), DEC); Serial.print('/'); Serial.print(date.month(), DEC); Serial.print('/'); Serial.print(date.year(), DEC); Serial.print(" "); //Imprimir Hora Serial.print(date.hour(), DEC); Serial.print(':'); Serial.print(date.minute(), DEC); Serial.print(':'); Serial.print(date.second(), DEC); Serial.println(); } void fechaActual(){ DateTime fActual = rtc.now(); imprimeFecha(fActual); } void clockaDue(int numAlarm){ byte datoCLOCK[8]; int id = 0x100; DateTime fActual = rtc.now(); //Enviamos (Hora:Minuto) (Dia/Mes) de cuando se ha producido la alarma int Hora = fActual.hour(); int Minuto = fActual.minute(); int Dia = fActual.day(); int Mes = fActual.month(); datoCLOCK[0] = numAlarm; //BYTE[0] ACCIÓN datoCLOCK[1] = 0x00; //BYTE [1] Nº DE OBJETO datoCLOCK[2] = 0x06; //BYTE [2] TIPO DE OBJETO (0x06 - RTC CLOCK) datoCLOCK[3] = 0x01; //BYTE [3] Nº DE PLACA datoCLOCK[4] = Mes; datoCLOCK[5] = Dia; datoCLOCK[6] = Minuto; datoCLOCK[7] = Hora; Serial.print("ALARMA " ); if (numAlarm == 0){ Serial.println(" DESACTIVADA"); for(int i = 4; i<8; i++){ // Rellena los bytes 4-7 con 0xAA datoCLOCK[i] = 0xAA; } } if (numAlarm == 1){Serial.println(" 1 ACTIVADA");} if (numAlarm == 2){Serial.println(" 2 ACTIVADA");} CAN.sendMsgBuf(id, 0, sizeof(datoCLOCK), datoCLOCK); // send data: id = 0x00, standard frame (0 estandard, 1 extended), data len = 8, stmp: data buf
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 119 Serial.print("Mensaje enviado: "); Serial.print("ID: 0x" ); Serial.print(id, HEX); Serial.print("\t"); Serial.print ("DATO:"); Serial.print("\t"); for(int i = 0; i<(sizeof(datoCLOCK)); i++){ // imprime los datos Serial.print(datoCLOCK[i], HEX); Serial.print(" "); } Serial.println(); } //ALARMA 1 bool Alarma1ON(){ DateTime date; bool hourCondition; int hourAlarm = 7; int minutesAlarm = 15; int secondsAlarm = 0; date = rtc.now(); if (hourAlarm == date.hour()) { if (minutesAlarm == date.minute()) { if (secondsAlarm == date.second()) { hourCondition = true; } else{ hourCondition = false; } } } if (hourCondition){ return true;} return false; } //ALARMA 2 bool Alarma2ON(){ DateTime date; bool hourCondition; int hourAlarm = 23; int minutesAlarm = 15; int secondsAlarm = 0; date = rtc.now(); if (hourAlarm == date.hour()) { if (minutesAlarm == date.minute()) { if (secondsAlarm == date.second()) { hourCondition = true; } else{ hourCondition = false; } } } if (hourCondition){ return true;} return false; }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 120 8.1.3. Arduino UNO - 2 //ARDUINO UNO - 2 #include <mcp_can.h> #include <SPI.h> const int SPI_CS_PIN = 10; //the cs pin of the version after v1.1 is default to D9, v0.9b and v1.0 is default to D10 unsigned char buf[8]; //declaramos el buffer para poder leer datos unsigned char len; //longitud del buffer unsigned int canId; //ID del buffer boolean Luz[8]; //Control del estado de las luces //num total luces =>[i] boolean Ventilador[4]; boolean Temperatura; //Variable para poder actualizar la Temperatura boolean persianaParada; boolean Alarma1; boolean Alarma2; //TEMPERATURA Y HUMEDAD int valorT = 0; int valorH = 0; //PERSIANAS const int pos[8] = {0,0,0,0,0,0,0,0}; //Control de la posición de las persianas //num total persianas => [i] int posicion = 0; int posMax = 10; //Las persianas tienen (0-10) posiciones int posMin = 0; int estadoPers; //Parada, Subiendo, Bajando (0,1,2) //definicion variables int motorSpeed = 1200; // variable para fijar la velocidad int stepCounter = 0; // contador para los pasos int stepsPerRev = 4076; // pasos para una vuelta completa const int numSteps = 8; //secuencia media fase const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; //secuencia media fase //PINES //VENTILADOR const int pinVENT = 3; //Ventilador //LEDS const int pinLED3 = 4; //LED1 const int pinLED4 = 5; //LED2 //PERSIANA 2 const int pinIN1 = 6; // 28BYJ48 In1 const int pinIN2 = 7; // 28BYJ48 In2 const int pinIN3 = 8; // 28BYJ48 In3 const int pinIN4 = 9; // 28BYJ48 In4 const int pinPersiana2[4] = { pinIN1, pinIN2, pinIN3, pinIN4 };
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 127 void sentidoAntiReloj(int numPers){ //Da una vuelta abajo for (int i = 0; i < stepsPerRev ; i++){ stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; //if (numPers == 1) { setOutput(pinPersiana1, stepCounter);} if (numPers == 2) { setOutput(pinPersiana2, stepCounter);} delayMicroseconds(motorSpeed); } posicion--; } void setOutput(const int pinPersiana[4], int step){ digitalWrite(pinPersiana[0], bitRead(stepsLookup[step], 0)); digitalWrite(pinPersiana[1], bitRead(stepsLookup[step], 1)); digitalWrite(pinPersiana[2], bitRead(stepsLookup[step], 2)); digitalWrite(pinPersiana[3], bitRead(stepsLookup[step], 3)); }
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 128 8.2. Conexionado de del sistema Éste apartado pretende especificar las distintas conexiones del sistema de modo gráfico, se han utilizado los programas Adobe Photoshop y Fritzing, un editor de circuitos para Arduino. Se incluyen las conexiones realizadas a los distintos actuadores y sensores en función del controlador. IMAGEN 64. ESQUEMA PRINCIPAL DEL SISTEMA DOMÓTICO
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 129 8.2.1. Arduino Due IMAGEN 65. CIRCUITO ARDUINO DUE - SENSORES Y ACTUADORES
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 130 8.2.2. Arduino UNO - 1 IMAGEN 66. CIRCUITO ARDUINO UNO-1 - SENSORES Y ACTUADORES
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 131 8.2.3. Arduino UNO - 2 IMAGEN 67. CIRCUITO ARDUINO UNO-2 - SENSORES Y ACTUADORES
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 132 8.3. Cálculos del sistema A lo largo del proyecto se han utilizado diferentes componentes electrónicos con valores no justificados. Sobretodo, se trata del uso de resistencias para disminuir la potencia utilizada para actuar las luces LEDs, los pulsadores y el ventilador. Para empezar, se ha tomado una referencia aproximada de la caída de tensión de los diodos LEDs según su color. Cabe recordar que existen dos valores en la alimentación del sistema, 3,3V (Arduino Due) y 5V (Arduino UNO). Es aconsejable que la corriente de cada pin no supere los 20mA, así que se ha tomado ese valor como referencia. TABLA 23. VALORES DE CAIDA DE TENSIÓN DE LED Los LEDs utilizados son de color amarillo y blanco. Por una simple razón, los LEDs que dependen de la tensión de salida de Arduino Due no pueden ser de color blanco, ya que su caída de tensión es superior a la tensión que puede proporcionar el controlador. De todos modos, en un hogar puede haber variedad de colores de luces, y los colores escogidos no desvarían mucho. A continuación se procede a realizar el cálculo de las resistencias utilizadas para los LEDs según su color, teniendo en cuenta la ley de Ohm: LEY DE OHM: ΔV = I · R P = I · V LED BLANCO: 5 𝑉 − 3,4 𝑉=20𝑚𝐴 ·𝑅 R = 80Ω ≃ 100 Ω P= 1,6V · 20mA P = 0,032W LED AMARILLO: 3,3 𝑉 − 2 𝑉=20𝑚𝐴 ·𝑅 R = 65Ω ≃ 100 Ω P= 1,3V · 20mA P = 0,026W Existen diferentes tipos de resistencias según el valor de potencia, en éste caso los valores utilizados no superan el cuarto de Wattio.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 133 Además, se han utilizado pulsadores para la interfaz física. Éstos pulsadores emiten pulsos difícil de detectar por el controlador mediante las entradas digitales. IMAGEN 68. PULSADOR Ésto provoca que a veces no llegue la señal del pulso al controlador y pueda provocar algún fallo en el sistema. Para tratar de evitar ésta problemática se ha incluido una resistencia de pull-down. IMAGEN 69. RESISTENCIAS PULL-UP Y PULL-DOWN Como se ve en el esquema la resistencia pull-down se conecta a tierra ( GND ), de esta manera cuando el interruptor este abierto la corriente se dirigida hacia la resistencia dejando un valor 0 en Vout y si el interruptor esta cerrado la corriente se moverá hacia Vout dejando un valor lógico HIGH. 𝑅=5𝑉 20𝑚𝐴 =250Ω El valor las resistencias utilizadas es de 10KΩ, que sería lo equivalente a que pasaran 0,5 mA, como medida de protección, para que circule la menor corriente posible, ya que solamente se quiere leer un estado alto o bajo de tensión.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 134 Además, para asegurar que la señal del pulsador llega a la entrada digital, se podría añadir un condensador en paralelo a la resistencia, formando un filtro RC. Para un valor de resistencia de 10KΩ se recomienda utilizar un condensador de 1μF. Finalmente, el valor de la resistencia utilizada en el control del ventilador, además del transistor es el siguiente: IMAGEN 70. CONEXIÓN DEL VENTILADOR Siguiendo la misma ley para calcular las resistencias anteriores: 𝑅=5𝑉 20𝑚𝐴 =250Ω El valor de la resistencia utilizada es de 330 Ω, ya que supondría que pasara una corriente de 15mA en un Arduino UNO (5V) y una corriente de 10mA en un Arduino UNO (3,3V), asegurando la protección del sistema.
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 135 8.4. Planos de la maqueta PLANO PLANTA 0
SISTEMA DOMÓTICO ABIERTO DE BAJO COSTE PARA LA MEJORA DE LA EFICIENCIA ENERGÉTICA 136 PLANO PLANTA 1
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 4 1 INTRODUCTION The Controller Area Network (CAN) is a serial communications protocol which efficiently supports distributed realtime control with a very high level of security. Its domain of application ranges from high speed networks to low cost multiplex wiring. In automotive electronics, engine control units, sensors, anti-skid-systems, etc. are connected using CAN with bitrates up to 1 Mbit/s. At the same time it is cost effective to build into vehicle body electronics, e.g. lamp clusters, electric windows etc. to replace the wiring harness otherwise required. The intention of this specification is to achieve compatibility between any two CAN implementations. Compatibility, however, has different aspects regarding e.g. electrical features and the interpretation of data to be transferred. To achieve design transparency and implementation flexibility CAN has been subdivided into different layers. • the (CAN-) object layer • the (CAN-) transfer layer • the physical layer The object layer and the transfer layer comprise all services and functions of the data link layer defined by the ISO/OSI model. The scope of the object layer includes • finding which messages are to be transmitted • deciding which messages received by the transfer layer are actually to be used, • providing an interface to the application layer related hardware. There is much freedom in defining object handling. The scope of the transfer layer mainly is the transfer protocol, i.e. controlling the framing, performing arbitration, error checking, error signalling and fault confinement. Within the transfer layer it is decided whether the bus is free for starting a new transmission or whether a reception is just starting. Also some general features of the bit timing are regarded as part of the transfer layer. It is in the nature of the transfer layer that there is no freedom for modifications. The scope of the physical layer is the actual transfer of the bits between the different nodes with respect to all electrical properties. Within one network the physical layer, of course, has to be the same for all nodes. There may be, however, much freedom in selecting a physical layer. The scope of this specification is to define the transfer layer and the consequences of the CAN protocol on the surrounding layers. Introduction
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 5 2 BASIC CONCEPTS CAN has the following properties • prioritization of messages • guarantee of latency times • configuration flexibility • multicast reception with time synchronization • system wide data consistency • multimaster • error detection and signalling • automatic retransmission of corrupted messages as soon as the bus is idle again • distinction between temporary errors and permanent failures of nodes and autonomous switching off of defect nodes Layered Structure of a CAN Node Object Layer - Message Filtering - Message and Status Handling Transfer Layer - Fault Confinement - Error Detection and Signalling - Message Validation - Acknowledgment - Arbitration - Message Framing - Transfer Rate and Timing Physical Layer - Signal Level and Bit Representation - Transmission Medium Application Layer Basic Concepts
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 6 • The Physical Layer defines how signals are actually transmitted. Within this specification the physical layer is not defined so as to allow transmission medium and signal level implementations to be optimized for their application. • The Transfer Layer represents the kernel of the CAN protocol. It presents messages received to the object layer and accepts messages to be transmitted from the object layer. The transfer layer is responsible for bit timing and synchronization, message framing, arbitration, acknowledgment, error detection and signalling, and fault confinement. • The Object Layer is concerned with message filtering as well as status and message handling. The scope of this specification is to define the transfer layer and the consequences of the CAN protocol on the surrounding layers. Messages Information on the bus is sent in fixed format messages of different but limited length (see section 3: Message Transfer). When the bus is free any connected unit may start to transmit a new message. Information Routing In CAN systems a CAN node does not make use of any information about the system configuration (e.g. station addresses). This has several important consequences. System Flexibility: Nodes can be added to the CAN network without requiring any change in the software or hardware of any node and application layer. Message Routing: The content of a message is named by an IDENTIFIER. The IDENTIFIER does not indicate the destination of the message, but describes the meaning of the data, so that all nodes in the network are able to decide by MESSAGE FILTERING whether the data is to be acted upon by them or not. Multicast: As a consequence of the concept of MESSAGE FILTERING any number of nodes can receive and simultaneously act upon the same message. Data Consistency: Within a CAN network it is guaranteed that a message is simultaneously accepted either by all nodes or by no node. Thus data consistency of a system is achieved by the concepts of multicast and by error handling. Basic Concepts
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 7 Bit rate The speed of CAN may be different in different systems. However, in a given system the bitrate is uniform and fixed. Priorities The IDENTIFIER defines a static message priority during bus access. Remote Data Request By sending a REMOTE FRAME a node requiring data may request another node to send the corresponding DATA FRAME. The DATA FRAME and the corresponding REMOTE FRAME are named by the same IDENTIFIER. Multimaster When the bus is free any unit may start to transmit a message. The unit with the message of higher priority to be transmitted gains bus access. Arbitration Whenever the bus is free, any unit may start to transmit a message. If 2 or more units start transmitting messages at the same time, the bus access conflict is resolved by bitwise arbitration using the IDENTIFIER. The mechanism of arbitration guarantees that neither information nor time is lost. If a DATA FRAME and a REMOTE FRAME with the same IDENTIFIER are initiated at the same time, the DATA FRAME prevails over the REMOTE FRAME. During arbitration every transmitter compares the level of the bit transmitted with the level that is monitored on the bus. If these levels are equal the unit may continue to send. When a ’recessive’ level is sent and a ’dominant’ level is monitored (see Bus Values), the unit has lost arbitration and must withdraw without sending one more bit. Safety In order to achieve the utmost safety of data transfer, powerful measures for error detection, signalling and self-checking are implemented in every CAN node. Error Detection For detecting errors the following measures have been taken: - Monitoring (transmitters compare the bit levels to be transmitted with the bit levels detected on the bus) - Cyclic Redundancy Check - Bit Stuffing - Message Frame Check Basic Concepts
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 8 Performance of Error Detection The error detection mechanisms have the following properties: - all global errors are detected. - all local errors at transmitters are detected. - up to 5 randomly distributed errors in a message are detected. - burst errors of length less than 15 in a message are detected. - errors of any odd number in a message are detected. Total residual error probability for undetected corrupted messages: less than message error rate * 4.7 * 10 -11 . Error Signalling and Recovery Time Corrupted messages are flagged by any node detecting an error. Such messages are aborted and will be retransmitted automatically. The recovery time from detecting an error until the start of the next message is at most 29 bit times, if there is no further error. Fault Confinement CAN nodes are able to distinguish short disturbances from permanent failures. Defective nodes are switched off. Connections The CAN serial communication link is a bus to which a number of units may be connected. This number has no theoretical limit. Practically the total number of units will be limited by delay times and/or electrical loads on the bus line. Single Channel The bus consists of a single channel that carries bits. From this data resynchronization information can be derived. The way in which this channel is implemented is not fixed in this specification. E.g. single wire (plus ground), two differential wires, optical fibres, etc. Bus values The bus can have one of two complementary logical values: ’dominant’ or ’recessive’. During simultaneous transmission of ’dominant’ and ’recessive’ bits, the resulting bus value will be ’dominant’. For example, in case of a wired-AND implementation of the bus, the ’dominant’ level would be represented by a logical ’0’ and the ’recessive’ level by a logical ’1’. Physical states (e.g. electrical voltage, light) that represent the logical levels are not given in this specification. Basic Concepts
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 9 Acknowledgment All receivers check the consistency of the message being received and will acknowledge a consistent message and flag an inconsistent message. Sleep Mode / Wake-up To reduce the system’s power consumption, a CAN-device may be set into sleep mode without any internal activity and with disconnected bus drivers. The sleep mode is finished with a wake-up by any bus activity or by internal conditions of the system. On wake-up, the internal activity is restarted, although the transfer layer will be waiting for the system’s oscillator to stabilize and it will then wait until it has synchronized itself to the bus activity (by checking for eleven consecutive ’recessive’ bits), before the bus drivers are set to "on-bus" again. In order to wake up other nodes of the system, which are in sleep-mode, a special wake-up message with the dedicated, lowest possible IDENTIFIER (rrr rrrd rrrr; r = ’recessive’ d = ’dominant’) may be used. Basic Concepts
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 10 3 MESSAGE TRANSFER 3.1 Frame Types Message transfer is manifested and controlled by four different frame types: A DATA FRAME carries data from a transmitter to the receivers. A REMOTE FRAME is transmitted by a bus unit to request the transmission of the DATA FRAME with the same IDENTIFIER. An ERROR FRAME is transmitted by any unit on detecting a bus error. An OVERLOAD FRAME is used to provide for an extra delay between the preceding and the succeeding DATA or REMOTE FRAMEs. DATA FRAMEs and REMOTE FRAMEs are separated from preceding frames by an INTERFRAME SPACE. 3.1.1 DATA FRAME A DATA FRAME is composed of seven different bit fields: START OF FRAME, ARBITRATION FIELD, CONTROL FIELD, DATA FIELD, CRC FIELD, ACK FIELD, END OF FRAME. The DATA FIELD can be of length zero. Interframe Space Interframe Space Start of Frame Arbitration Field Control Field Data Field CRC Field ACK Field End of Frame or Overload Frame DATA FRAME Message Transfer
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 11 START OF FRAME marks the beginning of DATA FRAMES and REMOTE FRAMEs. It consists of a single ’dominant’ bit. A station is only allowed to start transmission when the bus is idle (see BUS IDLE). All stations have to synchronize to the leading edge caused by START OF FRAME (see ’HARD SYNCHRONIZATION’) of the station starting transmission first. ARBITRATION FIELD The ARBITRATION FIELD consists of the IDENTIFIER and the RTR-BIT. IDENTIFIER The IDENTIFIER’s length is 11 bits. These bits are transmitted in the order from ID-10 to ID-0. The least significant bit is ID-0. The 7 most significant bits (ID-10 - ID-4) must not be all ’recessive’. RTR BIT Remote Transmission Request BIT In DATA FRAMEs the RTR BIT has to be ’dominant’. Within a REMOTE FRAME the RTR BIT has to be ’recessive’. CONTROL FIELD The CONTROL FIELD consists of six bits. It includes the DATA LENGTH CODE and two bits reserved for future expansion. The reserved bits have to be sent ’dominant’. Receivers accept ’dominant’ and ’recessive’ bits in all combinations. DATA LENGTH CODE The number of bytes in the DATA FIELD is indicated by the DATA LENGTH CODE. This DATA LENGTH CODE is 4 bits wide and is transmitted within the CONTROL FIELD. Interframe Space Start of Frame Identifier RTR Bit Control Field ARBITRATION FIELD Data Frame
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 12 Coding of the number of data bytes by the DATA LENGTH CODE abbreviations: d ’dominant’ r ’recessive’ DATA FRAME: admissible numbers of data bytes: {0,1,....,7,8}. Other values may not be used. r1 r0 DLC3 DLC2 DLC1 DLC0 or CRC Field Arbitration Field Data Field CONTROL FIELD Data Length Codereserved bits 0 1 2 3 4 5 6 7 8 d d d d d d d d r d d d d r r r r d d d r r d d r r d d r d r d r d r d DLC3 DLC2 DLC1 DLC0 Number of Data Bytes Data Length Code Data Frame
BOSCH ROBERT BOSCH GmbH, Postfach 50, D-7000 Stuttgart 1 Sep. 1991 Part A - page 13 DATA FIELD The DATA FIELD consists of the data to be transferred within a DATA FRAME. It can contain from 0 to 8 bytes, which each contain 8 bits which are transferred MSB first. CRC FIELD contains the CRC SEQUENCE followed by a CRC DELIMITER. CRC SEQUENCE The frame check sequence is derived from a cyclic redundancy code best suited for frames with bit counts less than 127 bits (BCH Code). In order to carry out the CRC calculation the polynomial to be divided is defined as the polynomial, the coefficients of which are given by the destuffed bit stream consisting of START OF FRAME, ARBITRATION FIELD, CONTROL FIELD, DATA FIELD (if present) and, for the 15 lowest coefficients, by 0. This polynomial is divided (the coefficients are calculated modulo-2) by the generator-polynomial: X 15 + X 14 + X 10 + X 8 + X 7 + X 4 + X 3 + 1. The remainder of this polynomial division is the CRC SEQUENCE transmitted over the bus. In order to implement this function, a 15 bit shift register CRC_RG(14:0) can be used. If NXTBIT denotes the next bit of the bit stream, given by the destuffed bit sequence from START OF FRAME until the end of the DATA FIELD, the CRC SEQUENCE is calculated as follows: CRC_RG = 0; // initialize shift register REPEAT CRCNXT = NXTBIT EXOR CRC_RG(14); CRC_RG(14:1) = CRC_RG(13:0); // shift left by CRC_RG(0) = 0; // 1 position Data or Control Field CRC Sequence CRC Delimiter Ack Field CRC FIELD Data Frame