sábado, 7 de marzo de 2015

DomoWeb


PLACA DOMOWEB


OBJETIVOS:

La placa domoweb esta concebida   para  el control  "personalizado" de  una serie de sensores domésticos;  posteriormente unos actuadores pueden ejecutar  acciones según unas condiciones  que se den en esos sensores.
Se ha diseñado una web, (domoweb.php) que contempla las señales recibida s instantáneamente por los sensores; además  se ha programado la posibilidad de representación de gráficas; con las que podremos realizar un análisis de los datos recibidos en la base de datos.
También hemos creado una segunda web (alarmas.php) donde  se representarán el estatus de 3 alarmas (fuego , gas o presencia); podrán estar activas cuando alguno de los sensores programados a tal efecto reciban un valor de señal preestablecido. En un segundo bloque observamos el estado de los actuadores  (split y extractor), que aparecerán en MARCHA o PARO según condiciones que veremos más adelante. En esta página también podemos observar  un bloque para realizar un control del sistema en  Manual o automático.
Todo el sistema está protegido; habrá que logarse para poder acceder desde la página de inicio.



PLANIFICACION DOMOWEB

En 9 semanas.



  
LA PLACA DOMOWEB

1)  Zona de carga de datos

Cuatro terminales en la parte superior de la placa para conectar con el PC vía conversor  USB-TTL y realizar las cargas o actualizaciones  del microcontrolador. Marcados con las letras  TX RX 5V GND.

2) Entradas:

2.1) En la parte superior izquierda tenemos las Entradas Digitales:

Sensor de temperatura.
Sensor de presencia.
Sensor de humedad.
Sensor de fuego.

Cada uno de los pares de terminales corresponden; el primero de ellos a la señal proveniente del sensor  y a continuación un terminal para conectar la alimentación del sensor individualmente.
Todas las tierras de los sensores estarán conectadas  en el pacth panel de la maqueta  y se conectarán al conector  GND  del área de carga de datos.

2.2) En la zona intermedia derecha tenemos las Entradas Analógicas:

1)     Sensor de luz.
2)     Sensor de gas.
3)     Sensor de Intensidad de corriente.

Se conectarán del mismo modo  que las entradas digitales. Se han habilitado hasta  3 entradas analógicas extra en la parte superior derecha  en modo reserva para  posibles ampliaciones de las utilidades de la placa.


2.3)          Salidas  a  Actuadores:


Se preparan las conexiones para las cargas de  un Extractor y para  la activación  de un Split de aire acondicionado en la parte inferior derecha de la placa. También se habilitan los terminales para la carga de un Buzzer sonoro  en la parte superior de derecha de la placa.
Estos actuadores se excitarán con unos  relés según las siguientes  condiciones.


ACTUADOR
CONDICIÓN
Extractor
Marcha si humedad >40%
Split
Marcha si temperatura >25º
Buzzer
Marcha si fuego || presencia || gas están activados


Estas condiciones   sólo pueden ser modificadas por el programador, nunca por el usuario, quien tendrá que hacer una petición de actualización del software si asi lo   requiriese.

3) Alimentación:

La alimentación será de 230 V en los terminales habilitados a tal efecto "margen intermedio izquierdo"  IN AC, y se conectarán a un interruptor.(Ver esquema)



PCB






4) DOMOWEB

La placa DomoWeb está diseñada y construida con las pistas a  doble cara.

DIAGRAMA ESQUEMATICO:




5) Servidor APACHE.

Hemos instalado y configurado el paquete  XAMPP, que integra el servidor web apache , permite consultas sql y alojará nuestras páginas php; herramienta muy útil y básica en este proyecto para  la conexión de la base de datos con nuestra web. Se ha instalado además el paquete jpgraph  en la carpeta de servior_web y  junto a unos archivos php  especificos ,nos ayuda en la generación de las gráficas para cada uno de los sensores.
La BBDD  almacenará en una tabla los valores recibidos desde los sensores y una simple aplicación web   en PHP  mostrará mediante consultas SQL los valores recibidos. Además de visualizar datos de sensores podemos ver el estado de los actuadores, el setting que tienen los  actuadores de Split , Extractor  y visualizar un registro en gráfica de los últimos valores recibidos en los sensores.
Para la comunicación entre el Atmega y el servidor nos fue indispensable crear el archivo sensortotal.php ; este archivo actuará de interfaz ente el arduino y la BBDD, insertanto los datos recibidos en el arduino en las correspondientes columnas de la tabla.
Todos los archivos  php de la aplicación web, imagenes  y librerias  gráficas deben estar alojados en la carpeta  servidor web en el directorio raiz. 


Arranque del servidor web




Archivo  sensortotal.php

<?php
// Parametros de base de datos
$mysql_servidor = "localhost";
$mysql_base = "sensores";
$mysql_usuario = "patricio";
$mysql_clave = "";

$temperatura= htmlspecialchars($_GET ["temperatura"],ENT_QUOTES);
$ID='';
$presencia=htmlspecialchars($_GET ["presencia"],ENT_QUOTES);
$fuego=htmlspecialchars($_GET ["fuego"],ENT_QUOTES);
$gas=htmlspecialchars($_GET ["gas"],ENT_QUOTES);
$humedad=htmlspecialchars($_GET ["humedad"],ENT_QUOTES);
$luz= htmlspecialchars($_GET ["luz"],ENT_QUOTES);
$alarma=htmlspecialchars($_GET ["alarma"],ENT_QUOTES);
$extractor=htmlspecialchars($_GET ["extractor"],ENT_QUOTES);
$split= htmlspecialchars($_GET ["split"],ENT_QUOTES);


// Valida que esten presente todos los parametros

if ($temperatura!="" || $luz!=""){
            mysql_connect($mysql_servidor,$mysql_usuario,$mysql_clave) or die("Imposible conectarse al servidor.");
            mysql_select_db($mysql_base) or die("Imposible abrir Base de datos");

$sql = "insert into sensores(ID,presencia,fuego,temperatura,gas,humedad,luz,alarma,extractor,split) values ('$ID','$presencia','$fuego','$temperatura','$gas','$humedad','$luz','$alarma','$extractor','$split')";
mysql_query($sql);           
}
?>

6) Conexión  Ethernet :

La comunicación hacia el servidor la hará con el cable ethernet a través del router. Para ello es importante observar que la shield-ethernet de arduino tiene los leds de Tx y RX encendidos en el momento de la transferencia de información hacia el servidor. En las configuraciones iniciales es importante conocer la "IP" del servidor; requisito imprescindible a configurar en el  sketch de  atmega.
Los sensores comenzarán a enviar registros de su estado; el microcontrolador recogerá  estos datos  y los envía vía ethernet  hasta el servidor que los almacena en la BBDD. Algunos sensores precisan para su reconocimiento en el compilador de arduino unas librerias propias del  mismos  sensores, es el caso del sensor de temperatura y del sensor de humedad y lo podemos ver reflejado en la programacion del SKecth al principio del código.

7) Registros de sensores en BBDD


Sketch de programación del Atmega   (NO COMPLETO):


// DOMOWEB BY PATRICIO SANCHEZ ESCUDERO

#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"


byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD7 };


// Inicializa la instancia client
EthernetClient client;
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Direccion del servidor
char server[] = "192.168.2.103";
//EthernetServer servidor(80);

// Variable de tiempo de la ultima conexion en milisegundos
unsigned long ultimaConexion = 0;         
// ESTADO de la ultima conexion
boolean ultimoEstado = false;
// Intervalo en milisegundos entre conexiones
const unsigned long intervaloConexion = 5000;  

// Datos del sensores
//Sensor temperatura
float tempC; // Temperatura en celsius (in digital 2)
//sensor luz
int LDRPin = A1; // Entrada Analogica 1
float valor2;
//sensor gas

………………sigue………………………………………………………………………………


void setup() {


  // Inicializa puerto serial
  Serial.begin(9600);
   dht.begin();
   delay(1000);
   pinMode(LDRPin, INPUT);
   pinMode(GASin, INPUT);


………………sigue…………………………………………………………………………………



  sensors.begin();

    // Ethernet.begin(mac, ip, myDns);
  // Inicializa la tarjeta ethernet mediante DHCP
  Ethernet.begin(mac);
  // IMPRIME la direccion IP de la tarjeta
  Serial.print("Direccion IP: ");
  Serial.println(Ethernet.localIP());
}
// Loop principal

void loop() {

  delay(2000); 
 
  // Lee la temperatura desde el sensor
  sensors.requestTemperatures();
 //sensor temperatura
  tempC=sensors.getTempCByIndex(0); //Obtener valor de sensor temperatura
   //obtengo valor sensor luz
  valor2 = map(analogRead(LDRPin), 520, 1020, 0, 1400);
  valor2= -(valor2);
  //obtengo valor sensor gas
  Gassol = map(analogRead(GASin), 47,1024 , 0,100 );
  //lee la humedad
 // float h = dht.readHumidity();

 
  //valor del fuego
  fuevalor=analogRead(5);
  if(fuevalor > 400){
   fuego="SI";
  }else{
     fuego="NO";
  }
  //Valor Rele presencia
      
    if (digitalRead(PREpin) == LOW ) {    
   presencia="NO" ;    
  }
  else {
    presencia="SI" ; 
  }
    
//ACTUADOR Rele Extractor SETTINT 50% HUMEDAD
 if(dht.readHumidity() > 50){
    digitalWrite(releExtrac,HIGH);
    stateExtrac="ON";
  }
  else {
  digitalWrite(releExtrac,LOW);
    stateExtrac="OFF";
  }
   
  // Si hay datos que llegan por la conexion los envia a la puerta serial
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // Si no hay conexion de red y se conecto correctamente la ultima vez
  // detiene el cliente Ehternet
  if (!client.connected() && ultimoEstado) {
    Serial.println();
    Serial.println("Desconectando...");
    client.stop();
  }

  // Si no esta conectado y han pasado X segundos (intervaloConexion)
  // despues de la ultima conexion envia datos al servidor
  if(!client.connected() && (millis() - ultimaConexion > intervaloConexion)) {
    httpRequest();
  }
  // Actualiza la variable ultimoEstado
  ultimoEstado = client.connected();
}
// Fin del loop principal

// Realiza la conexion http al servidor
void httpRequest() {
  // Se conecta al servidor en el puerto 80 (web)
  if (client.connect(server, 80)) {
    // Envia el dato al puerto serial
    Serial.print("La Temperatura es ");
    Serial.print(tempC);    
    Serial.println(" grados Celsius");
    Serial.print("Los lux son: ");


……………sigue…………………………………………………………………………………

   
    // Envia el requerimiento al servidor via GET
    Serial.println("Iniciando conexion...");
    client.print("GET /sensortotal.php?temperatura=");
    client.print(tempC);   
    client.print("&luz=");
    client.print(valor2);
    client.print("&gas=");
    client.print(Gassol);   
    client.print("&presencia=");
    client.print(presencia);

…………sigue…………………………………………………………………………………………
   
  
    client.println("Connection: close");
    client.println();

    // Actualiza el tiempo en milisegundos de la ultima conexion
    ultimaConexion = millis();
  }
  else {
    // Si la conexion fallo se desconecta
    Serial.println("Error al conectarse al servidor");
    Serial.println("Desconectando...");
    client.stop();
  }
}
  

8) Web principal DomoWeb

Muestra la situación de la vivienda; diseccionando por separado cada una de las estancias e indicando el estado de los sensores que existen en cada una de las habitaciones. Con enlace a una gráfica asociada a algunos sensores.





9) Gráfica para el sensor de temperatura


10) Web alarmas DomoWeb

En esta página se muestra la situación de las alarmas, y el STATUS  de los actuadores, además hemos  añadido la posibilidad de realizar un control sobre los actuadores en modo manual o automático.




11) El INTEGRADO


El INTEGRADO  utilizado es el  ATMEGA 328P-PU de arduino; sobre el que se ejecutarán las actualizaciones  a través de los pines de carga de datos. 

-La alimentación será de 5v en los pines 7 y 20.
-La masa se conectara a los pines 8 y 22.
-El oscilador  será de 16 kHz y se conectara  entre los pines  9 y 10 con unos condensadores puestos a tierra de 22 pF.
-Un boton de reset que se  utilizará a la hora de hacer las cargas de actualización del micro en el pin 1.
-La TX y RX  de datos entre el PC y nuestra placa se realizara a través de los pines 2 y 3.
-Las IN/OUT digitales PWM se situan en los pines 4,5,6,11,12,13,14,15,16,17,18,19.
-Las IN/OUT analógicas   son los pines 23,24,25,26,27,28.
  
INs

Los terminales de in/out hembra  estan pareados, Desde los sensores llega hasta la placa  los pines de alimentación , masa y señal;  el pin de masa será común para todos los sensores, mientras que los pines de alimentacion y señal serán individuales para cada sensor.
La señal del sensor entrará directamente hasta el  Atmega , mientras que la VCC que alimenta al sensor se envia desde la  generación de 5V hasta el pin hembra pasando a travéz de una resistencia de  220 ohm y un diodo led que nos muestra que realmente el sensor esta alimentado. Será igual tanto para las señales analógicas como para las digitales.


IN
PIN atmega
S. Temperatura (digital)
4
S. Presencia (digital)
5
S. Humedad (digital)
6
S. Fuego (digital)
11
S .Luz  (analógica)
23
S. Gas (analógica)
24
S. Intensidad (analógica)
25
Reserva (analógica)
26
Reserva (analógica)
27
Reserva (analógica)
28

OUTs

Los pines 12,13,14 Están habilitados como salidas. Al igual que las entradas están asociados a una resistencia de 220 ohm y a un diodo led.

OUT
PIN atmega
BUZZER (digital)
12
SPLIT (digital)
13
EXTRAC (digital)
14

Para separar fisicamente diferentes  tensiones del atmega como de la alimentación de la carga; se han instalado optoacopladores (Fig 3) en las salidas del  atmega correspondientes al Split y al Extractor. La salida hacia el BUZZER  se hace directamente.                              


  optoacoplador
                                               
  
Los transistores npn  TIP31 (Fig 4) se encargarán de excitar  los reles conectados a        las             cargas,  y los diodos de proteger  a los reles. 


12) Fuente de alimentación

            La fuente de alimentación de la placa DomoWeb  precisará la salida de   tensiones de 5 y 12 V.  (Fig 5).  Con el interruptor  soldado en la placa controlamos el encendido y apagado del sistema. La placa monta un transformador de 220 a 12v de 1,5A; el puente de diodos que hay a continuación realizará  la rectificación de la  tensión de entrada,  el condensador electrolítico  de 1000 microfaradios (C9) junto al de 330  nanofaradios (C10) realizará el filtrado de la señal , Los  reguladores de tensión LM7805 y LM7812 (Fig 6)  ajustarán la señal a 5 y 12 V respectivamente  junto con los condensadores (C11 y C12). Por último unos fusibles de 1.5 Amperior evitarán  que posibles sobrecargas dañen la placa.

fig 5. fuente alimentacion domoweb



13) Diagrama de bloques 






DANGER: Evitar introducir 5V directamente en los optoacopladores , dañaria el diodo interno por eso se  instala con una resistencia a la entrada.


Vista definitiva del circuito impreso con sus componentes














No hay comentarios:

Publicar un comentario