lunes, 12 de enero de 2015

Domótica en el hogar.

::PROYECTO FINAL. DOMÓTICA EN EL HOGAR::


1. PRESENTACIÓN DEL PROYECTO


- El proyecto se ha diseñado para crear una una casa inteligente.


- Hay control y monitorización de eventos de una casa, que recibe datos por internet o red, mediante los sensores de Humedad, temperatura, luminosidad y movimientos.

- Estos valores influiran sobre unos actuadores, como relés de CA, un motor, un Dimmer y una alarma sonora.

- Podrán actuar en tiempo real por acción del usuario o posteriormente realizandolo mediante una programación específica.  Por ejemplo: Nos interesa que cuando tengamos menos de un valor de temperatura, actue un relé sobre un calefactor de CA, o cuando el sensor de luz detecte menos de una intensidad de luz vaya regulando o disminuyendo progresivamente la intensidad de una lámpara de CA.

- Estos datos se recogen y envían a una base de datos, donde quedan registrados por fecha y hora, pudiendo consultarse posteriormente y a al vez quedan recogidos por una gráfica que compara estos valores.







- Aquí quiero mostrar varias diapositivas que diseñé para al exposición de mi proyecto.
Es un resumen en 11 diapositivas utilizadas para hacer una demostración del mismo.
















-------------------------------------------------------------------------------------------------------------




2. DIAGRAMA DE GANTT.

- Planificación del proyecto. Realizado con Software libre de planificación de proyectos:
 Gantt Project.







- Finalmente el proyecto fue empezado el dia 9-1-2015 y finalizado el 13-3-2015.
 
Enlace a la web oficial del software:
-------------------------------------------------------------------------------------------------------------

3. COMPONENTES.


    3.1 ARDUINO ETHERNET SHIELD:





- Es un shield (Escudo) compatible con Arduino UNO y MEGA.
Con el vamos vamos a conectar nuestro Arduino a una red LAN utilizando la librería Ethernet. 

- Con ésta placa y la ayuda de la libería proporcionada, podremos realizar tanto un pequeño servidor web, como un cliente. La configuración de red se realiza mediante software, por lo que podremos adaptar con facilidad la placa a nuestra red local.

- En mi proyecto he diseñado una web para interactuar con Arduino, el shield ethernet y los sensores.
Tanto arduino como la web actúan de servidor y de cliente.

Dispone de un zócalo para tarjetas de memoria micro-SD para poder almacenar ficheros o servirlos como servidor web embedido. También incluye un controlador de reset automático para que el chip interno W5100 esté bien reiniciado y listo para utilizar al arranque.

La placa Arduino se comunica con el módulo W5100 y la micro-SD utilizando el bus SPI (mediante el conector ICSP). Esto se encuentra en los pines digitales 11, 12 y 13 en el modelo Duemilanove y en los pines 50, 51 y 52 del modelo MEGA. En ambas placas, el pin 10 es utilizado para seleccionar el W5100 y el pin 4 para la micro-SD. Estos pines no pueden ser utilizados para otros fines mientras la Ethernet Shield esté conectada. El en MEGA, el pin SS (53) no es utilizado pero debe dejarse como salida para que el bus SPI funcione correctamente.

El W5100 y la micro-SD comparten el bus SPI, por lo que sólo uno de ellos puede ser utilizado a la vez.

Especificaciones Requiere y la placa Arduino (no incluido)
- Tensión de 5V (suministrada por la placa Arduino)
- Controlador Ethernet: W5100 con tampón interno de 16K
- La velocidad de conexión: 10/100Mb
- Conexión con Arduino en puerto SPI
- Compatible con IEEE802.3af
- Rizado de salida y ruido bajos (100mVpp)
- Entrada de tensión de 36V a 57V
- Protección contra sobrecarga y cortocircuito
- Salida de 9V
- Alta eficiencia convertidor DC / DC: tipo del 75% a la carga el 50%
- Aislamiento de 1500 V (entrada a salida)

     3.2 SENSORES:

    - HC-SR501. Sensor de movimiento por infrarrojos.


- Es un módulo con sensor LHI778 detector piroeléctrico de movimiento por infrarrojos.

El módulo HC-SR501 tiene 3 pines de conexión +5v, OUT (3,3v) y GND, y dos resistencias variables de calibración (Ch1 y RL2).


  • Ch1: Con esta resistencia podemos establecer el tiempo que se va a mantener activa la salida del sensor. Una de las principales limitaciones de este módulo es que el tiempo mínimo que se puede establecer es de más o menos 3s. Si cambiamos la resistencia por otra de 100K, podemos bajar el tiempo mínimo a más o menos 0,5 s.
  • RL2: Esta resistencia variable nos permite establecer la distancia de detección  que puede variar entre 3-7m.
Características:
  • Modulo sensor de movimiento HC-SR501 compatible con Arduino. 
  • Con sensor piroeléctrico de infrarrojos LHI778. 
  • Sensor infrarrojo con circuito de control. 
  • Sensibilidad y tiempo ajustables. 
  • Voltaje de funcionamiento: 4.5V- 20V. 
  • Consumo en estado inactivo: <60uA. 
  • Voltaje de salida: 3.3V TTL output. 
  • Distancia de detección: de 3 a 7 metros (ajustable). 
  • Intervalo de tiempo: 5-200s (ajustable, por defecto 5s ±3%). 
  • Tiempo de bloque: 2.5s (por defecto) 
  • Activación: L: evento irrepetible H: evento repetible 
  • Temperatura de trabajo:-20ºC a 80°C. 
  • Dimensiones: 3,2cm x 2,4cm x 1,8cm.



    - DHT-11. Sensor Temperatura y Humedad.






Sensor de humedad y temperatura de bajo costo. Al ser la salida que proporciona digital, no necesita utilizar entradas analógicas. 
El sensor de humedad es de tipo capacitivo, mientras que la medición de temperatura se efectúa mediante un termistor.

Características:
  • Tensión de operación: 3 a 5 VDC 2.5mA max.
  • Rango de medición de humedad: 20-80% ±5% de exactitud.
  • Rango de medición de temperatura: 0-50ºC ±2% de exactitud.
  • Máxima velocidad de muestreo: 1Hz.
  • Tamaño: 15.5x12x5.5 mm.
  • 4 pines con paso 0.1".



- LM35. Sensor de temperatura.






El LM35 es un sensor de temperatura con una precisión calibrada de 1ºC. Su rango de medición abarca desde -55°C hasta 150°C. La salida es lineal y cada grado centígrado equivale a 10mV, por lo tanto:
150ºC = 1500mV
-55ºC = -550mV1

Características:

Sus características más relevantes son:
  • Está calibrado directamente en grados Celsius.
  • La tensión de salida es proporcional a la temperatura.
  • Tiene una precisión garantizada de 0.5°C a 25°C.
  • Opera entre 4 y 30 voltios de alimentación.
  • Baja impedancia de salida.
  • Baja corriente de alimentación (60uA).
  • Bajo coste.
- El LM35 no requiere de circuitos adicionales para calibrarlo externamente. La baja impedancia de salida, su salida lineal y su precisa calibración hace posible que este integrado sea instalado fácilmente en un circuito de control. Debido a su baja corriente de alimentación se produce un efecto de auto calentamiento muy reducido. Se encuentra en diferentes tipos de encapsulado, el más común es el TO-92, utilizada por transistores de baja potencia.






- LDR. Fotorresistor. Sensor de luz.






Un fotorresistor o LDR (por sus siglas en inglés "light-dependent resistor") es un componente electrónico cuya resistencia varia en función de la luz.

El valor de resistencia eléctrica de un LDR es bajo cuando hay luz incidiendo en él (puede descender hasta 50 ohms) y muy alto cuando está a oscuras (varios megaohmios).

Su funcionamiento se basa en el efecto fotoeléctrico. Un fotorresistor está hecho de un semiconductor de alta resistencia como el sulfuro de cadmio, CdS. Si la luz que incide en el dispositivo es de alta frecuencia, los fotones son absorbidos por las elasticidades del semiconductor dando a los electrones la suficiente energía para saltar la banda de conducción. El electrón libre que resulta, y su hueco asociado, conducen la electricidad, de tal modo que disminuye la resistencia. Los valores típicos varían entre 1 MΩ, o más, en la oscuridad y 100 Ω con luz brillante.
Las células de sulfuro del cadmio se basan en la capacidad del cadmio de variar su resistencia según la cantidad de luz que incide en la célula. Cuanta más luz incide, más baja es la resistencia. Las células son también capaces de reaccionar a una amplia gama de frecuencias, incluyendo infrarrojo (IR), luz visible, y ultravioleta (UV).

La variación del valor de la resistencia tiene cierto retardo, diferente si se pasa de oscuro a iluminado o de iluminado a oscuro. Esto limita a no usar los LDR en aplicaciones en las que la señal luminosa varía con rapidez. El tiempo de respuesta típico de un LDR está en el orden de una décima de segundo. Esta lentitud da ventaja en algunas aplicaciones, ya que se filtran variaciones rápidas de iluminación que podrían hacer inestable un sensor (ej. tubo fluorescente alimentado por corriente alterna). En otras aplicaciones (saber si es de día o es de noche) la lentitud de la detección no es importante.
Se fabrican en diversos tipos y pueden encontrarse en muchos artículos de consumo, como por ejemplo en cámaras, medidores de luz, relojes con radio, alarmas de seguridad o sistemas de encendido y apagado del alumbrado de calles.






- FINALES DE CARRERA



-------------------------------------------------------------------------------------------------------------

 3.3 COMPONENTES ELECTRÓNICOS. CIRCUITO PCB.



FUENTE DE ALIMENTACIÓN

Transformador de CA. 230V-15V CA
Fuente alimentación
Regulador de tensión 7805. 5V. TO-220
Fuente alimentación
Regulador de tensión 7812. 12V. TO-220
Fuente alimentación
Fusible. 3,5 Amperios
Fuente alimentación
Led ROJO 1,7 V. 20 mA
Fuente alimentación. 7805
Led ROJO 1,7 V. 20 mA
Fuente alimentación. 7812
W08M. Rectificador de doble onda de CA. Puente de diodos encapsulado
Fuente alimentación

MICROCONTROLADOR

Atmega 328p. 28 pines. DIL 28.
Microcontrolador
Oscilador 16 MHz. Cristal de cuarzo
Microcontrolador Atmega 328p
Pulsador
RESET. Microcontrolador

CONTROL DE PUERTA DE GARAJE

L293d. Microcontrolador. Puente en H. DIL 16
Control de motor 24V CC
D1. Diodo 1N4007
Disipador de calor. Protección.  L293d
D2. Diodo 1N4007
Disipador de calor. Protección.  L293d
D3. Diodo 1N4007
Disipador de calor. Protección.  L293d
D4. Diodo 1N4007
Disipador de calor. Protección.  L293d
Motor 24V. CC
Control de L293d. Puente en H

RELÉS

RELÉ. FINDER 36.11.9.012.4011. 12VCC. 10A/250V
Actuador Temperatura. CA
RELÉ. FINDER 36.11.9.012.4011. 12VCC. 10A/250V
Actuador Humedad. CA
4N25. Optoacoplador. Transistor. DIL 6
Actuador Relé Temperatura
4N25. Optoacoplador. Transistor. DIL 6
Actuador Relé Humedad
D4. Diodo 1N4007
Protección Relé Temperatura
D5. Diodo 1N4007
Protección Relé Humedad
Transistor  Q1. BC 549C. TO-92
Actuador Temperatura
Transistor  Q2. BC 549C. TO-92
Actuador Humedad








CONDENSADORES

NOMBRE
VALOR
APLICACIÓN
C1
22 pF. Disco cerámico
Microcontrolador  Atmega 328p
C2
22 pF. Disco cerámico
Microcontrolador  Atmega 328p
C3
100 nF. Poliester
Microcontrolador  Atmega 328p
C4
100 nF . Poliester
Microcontrolador  Atmega 328p
C5
2200 uF. Electrolítico
Fuente de alimentación. Filtro de Rizado
C6
330 nF. Poliester
Fuente de alimentación. 7805
C7
100 nF. Disco cerámico
Fuente de alimentación. 7805
C8
330 nF. Poliester
Fuente de alimentación. 7812
C9
100 nF. Disco cerámico
Fuente de alimentación. 7812

RESISTENCIAS

NOMBRE
VALOR (Ohm)
APLICACIÓN
R1
330. SMD
Led. Fuente alimentación 5v
R2
1k. SMD
Led. Fuente alimentación 12v
R3
10k. 1/2w
Reset.  Microcontrolador Atmega 328p
R4
1k. SMD
4n25. Optoacoplador
R5
1k. SMD
4n25. Optoacoplador
R6
4,7k. 1/2w
Transistor Relé
R7
4,7k. 1/2w
Transistor Relé
R8
33k. 1/2w
Sensor de luz. LDR
R9
4,7k. 1/2w
Sensor DHT11
R10
4,7k. 1/2w
Final de carrera. Motor 24V
R11
4,7k. 1/2w
Final de carrera. Motor 24V








4. ESQUEMA DEL CIRCUITO FINAL Y PCB.



- Esquema Circuito Final-





- Esquema Circuito PCB -



5. DISEÑO EN 3D.


 




-------------------------------------------------------------------------------------------------------------
6. DISEÑO, PROTOTIPOS Y CONTRUCCIÓN DE LA PCB
6.1 Prototipos:
- Protoboard:

 - Prototipo 1. Diseño de "Arduino casero" con soporte para escudos / Shield con comunicación ICSP:

 

 - Prototipo 2. Implementación de componentes y fuente de alimentación: 



 - Proceso de construcción de PCB final:







  - PCB Final en funcionamiento:



-------------------------------------------------------------------------------------------------------------
7. PROGRAMACIÓN Y ALGORITMOS REALIZADOS PARA EL TRABAJO Y CONTROL DE LOS SENSORES Y ACTUADORES.

- Atmega 328p y Ethernet Shield.

* Incluyo solamente una muestra del algoritmo, ya que la programación incluye unas 340 líneas de comandos:

---------------------------------------------------------------------------------------------------------------------

//PROYECTO DE DOMÓTICA. PROGRAMACIÓN ATMEGA 328P. FRANCISCO JAVIER GUIJARRO CONESA.

#include <SPI.h>
#include <Ethernet.h>
// Libreria para Sensores DHT
#include "DHT.h"

//#define DHTPIN 2     // Pin del Arduino al cual esta conectado el pin 2 del sensor
#define DHTPIN A1     // Pin del Arduino al cual esta conectado el pin 2 del sensor
// Descomentar segun el tipo de sensor DHT usado
#define DHTTYPE DHT11   // DHT 11
//#define DHTTYPE DHT22   // DHT 22  (AM2302)
//#define DHTTYPE DHT21   // DHT 21 (AM2301)

// Inicializa el sensor DHTxx
DHT dht(DHTPIN, DHTTYPE);

//DIMMER
int AC_LOAD = 9;    // Output to Opto Triac pin
int dimming = 128;  // Dimming level (0-128)  0 = ON, 128 = OFF
/////////////

// Configuracion de fotocelda
int fotocelda = 0;
int luminosidad;
int valor_luz; //Guarda el valor del mapeo. Calibración.
//Patilla para velocidad del motor de la persiana del puente en H
int PWMmotor = 3;

//Finales de carrera
int FinCarrera_Abierta = A2;// Entrada analogica para final de carrera de puerta abierta
int puerta_abierta;
int pabierta;
int FinCarrera_Cerrada = A3;// Entrada analogica para final de carrera de puerta abierta
int puerta_cerrada;
int pcerrada;

//Sensor PIR de movimiento

int sensor_pir = A4;// Entrada analogica para sensor pir de movimiento
int movimiento;
int vmovimiento;


// Configuracion Ethernet Shield
// Mac unica de cada EthernetShield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 };

// Direccion IP Fija en caso de que no pueda obtenerla por DHCP
IPAddress ip(192,168,2,222);

// Direccion del DSN en caso de que no pueda obtenerla por DHCP
//IPAddress myDns(172,17,17,1);


.........
...............................


      //TEMPERATURA     
      if (led_1)   //Si recibo la etiqueta LED1 de la pagina PHP enciendo
        digitalWrite(7, HIGH);
      else
        digitalWrite(7, LOW);//Si no recibo la etiqueta LED1 de la pagina PHP apago
      
      //HUMEDAD
        if (led_2)   //Si recibo la etiqueta LED1 de la pagina PHP enciendo
        digitalWrite(4, HIGH);
      else
        digitalWrite(4, LOW);//Si no recibo la etiqueta LED1 de la pagina PHP apago
       
     
//LUMINOSIDAD
      //if (led_3==128)
       // dimming=128;
      //else if (led_3==50)
      //  dimming=50;      

.......
............................


  // Se conecta al servidor en el puerto 80 (web)
  if (client.connect(server, 80)) {
    // Envia el dato al puerto serial
    Serial.println("Iniciando conexion...");
    // Envia el requerimiento via GET
   
client.print("GET /domotica.php?id=paco&temperatura=");
    client.print(t);
    client.print("&humedad=");
    client.print(h);
   
client.print("&luminosidad=");
    //client.print(luminosidad);
    client.print(valor_luz);
    client.print("&puertaa=");
    client.print(pabierta);
    client.print("&puertac=");
    client.print(pcerrada);
     client.print("&movimiento=");
    client.print(vmovimiento);
    client.println(" HTTP/1.1");
   
client.print("Host: ");
    client.println(server);
    client.println("User-Agent: Arduino-Ethernet");
    client.println("Connection: close");
    client.println();

   
// Actualiza el tiempo en milisegundos de la ultima conexion
    ultimaConexion = millis();
  }
}
 


-------------------------------------------------------------------------------------------------------------
8. DISEÑO WEB. CONTROL PRINCIPAL DE MANDO.



                                   - Primer diseño prototipo para pruebas de funcionamiento-

 Lenguajes de programación para el diseño y configuración de la web de control y programación de mando y eventos y creación, guardado y consulta de bases de datos: 

- HTML. Lenguaje web estático del lado de cliente.
- JAVASCRIPT.
Es un lenguaje de programación que se utiliza principalmente para crear páginas web dinámicas.
Una página web dinámica es aquella que incorpora efectos como texto que aparece y desaparece, animaciones, acciones que se activan al pulsar botones y ventanas con mensajes de aviso al usuario.
Técnicamente, JavaScript es un lenguaje de programación interpretado, por lo que no es necesario compilar los programas para ejecutarlos. En otras palabras, los programas escritos con JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos intermedios.
- HOJAS DE ESTILO .CSS. Para realizar el diseño visual de la web y las tablas.
Se ocupan de los aspectos de formato de presentación de los contenidos: tipo, fuente y tamaño de letras, alineación y posicionamiento del texto, colores y fondos, etc.
- PHP. Lenguaje de programación web dinámico.
PHP es un lenguaje de programación de uso general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico.
- AJAX. Usado para mostrar en tiempo real los valores recogidos por los sensores en la web, sin necesidad de refresco de la web.

AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Estas aplicaciones se ejecutan en el cliente, es decir, en el navegador de los usuarios mientras se mantiene la comunicación asíncrona con el servidor en segundo plano. De esta forma es posible realizar cambios sobre las páginas sin necesidad de recargarlas, mejorando la interactividad, velocidad y usabilidad en las aplicaciones.
- MySQL. Bases de datos. Recoge y guarda todos los eventos y valores recogidos por los actuadores y sensores, almacenándolos para su posterior consulta.

-------------------------------------------------------------------------------------------------------------

9. GRÁFICA QUE RECOGE LOS VALORES DE LOS SENSORES DE UNA BASE DE DATOS

- Librería utilizada: JpGrahp. 
- Enlace de la librería:   http://jpgraph.net/


- Gráfica que recoge los valores guardados en la base de datos MySQL-


-------------------------------------------------------------------------------------------------------------

10. DIAGRAMA DE ESTADO DEL PROYECTO.



- Muestra el conjunto de estados por los cuales pasa un objeto durante su vida en una aplicación, junto con los cambios que permiten pasar de un estado a otro.
- Recoge el estado de los sensores y actuadores. 
- Identifica un periodo de tiempo del objeto (no instantáneo) en el cual el objeto esta esperando alguna operación, tiene cierto estado característico o puede recibir cierto tipo de estímulos.






-------------------------------------------------------------------------------------------------------------


11. VIDEO DE DEMOSTRACIÓN DEL PROYECTO FINALIZADO 

Enlace al video en Youtube:


-------------------------------------------------------------------------------------------------------------



No hay comentarios:

Publicar un comentario