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.
PLANIFICACION DOMOWEB
En 9 semanas.
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 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.
Vista definitiva del circuito impreso con sus componentes
No hay comentarios:
Publicar un comentario