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.
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)
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.
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