Versión 0.1: Configuración Xbee

2 comentarios

Buenas, primero feliz año a todos, ahora vamos a configurar los módulos xbee de los dispositivos, primero debemos de quitar el micro ATMEGA a la placa Arduino, haciendo palanca, suavemente y con paciencia. Luego, debemos de conectarlo con el ordenador y usando el software X-CTU, lo configuraremos, si usamos linux debemos de tener wine instalado, además debemos de ejecutar la siguiente linea de código: sudo ln -s /dev/ttyUSBX /home/directoriousuario/dosdevices/comY
Siendo X, número puerto USB que se ha conectado con el dispositivo, e Y un número aleatorio que debemos elegir.
Ahora usamos el dispositivo X-CTU, que lo podemos descargar con el enlace del nombre y según si es un nodo o un nexo ejecutaremos unas sentencias, que tras ejecutarlas debemos recibir un OK. Todo esto sera explicado detalladamente en un manual que confeccionaré y publicaré en los siguientes días.

Anuncios

Versión 0.1: Nodos parte 3

1 comentario

Buenas, ayer se me olvidó poner una imagen del circuito ya montado, así que lo pondré ahora.

Circuito Montado v0.1

Bueno ahora vamos a ver el código, primero debemos saber la estructura a seguir:

– Incluimos librerías, creamos constantes y variables necesarias.
– Configuramos el dispositivo.
– Recogemos los datos de los sensores.
– Actualizamos los actuadores según los datos recogidos.
– Otras etapas que aún no explicaremos.

Bien tras saber las etapas, debemos tener en cuenta la linealización de los sensores que según sea el dato recogido por los sensores, arduino lo mostrará de 0 a 1023. Entonces,

– Sensor de Humedad:
50% de Humedad corresponde a 2,41 V.
Y arduino da el valor de 1023 para 5 V.

– Sensor de Luminosidad:
Y arduino da el valor de 1023 para 5 V, según nuestro conexionado sería que no hay luz.

– Sensor de Temperatura:
1ºF corresponde a 10 mV.
1ºC corresponde según esta fórmula (ºF-32)/1,8
Y arduino da el valor de 1023 para 150 ºC.

– Sensor de Movimiento:
Y arduino da el valor de 0 para 0V, es decir no se ha producido movimiento.

Bien sabiendo todo esto, proseguimos a rellenar el código en las etapas correspondientes,

Primero definir las constantes y variables necesarias, así como las librerías necesarias:

#include // para uso general

// Constantes
#define SECOND 1000 // Tiempo de espera (1 seg)
#define BAUDIOS 9600

// Direccion Nodo
int direccionNodo= 55; //modificar para cada nodo

// puertos de los sensores
int sensorTem = 5; //temperatura
//proseguir para cada sensor

// puertos de los leds, que serán nuestros actuadores
int ledPinGreenTem = 13;
//...
int ledPinRedHum = 2;
// proseguimos con los demás pines de salida...

//puertos para hacer funcionar el sensor de movimiento
int entsensorMov=4;

// valores de los sensores por defecto
int valorLum = -1; //luminosidad
// damos valores que nunca podrían darse...

// valores predefinidos
float temMin = 20; //temperatura minima
float temMax = 25; //temperatura maxima
float humMin = 30; //humedad minima

Bien, ahora proseguimos con la configuración del dispositivo,

void setup(){

Serial.begin(BAUDIOS);

//Configuracion de los sensores que son de entrada
pinMode(sensorLum,INPUT);
//para cada sensor rellenar...

//Configuracion de los leds, nuestros actuadores
pinMode(ledPinGenLum, OUTPUT);
pinMode(ledPinMesLum, OUTPUT);
//Y otras entradas
pinMode(entsensorMov, OUTPUT);

delay(SECOND);

}

Ahora recogemos los datos de los sensores,

void loop(){
//Inicializacion
digitalWrite(entsensorMov, HIGH);

//Recogida de datos
Serial.println("Recogiendo Datos...");
valorLum = analogRead(sensorLum); // valor de la luminosidad lo pasamos en %
valorTem = analogRead(sensorTem)*4.8875/10; // valor de la temperatura, segun linealizacion y conversion, lo tenemos en ºF
valorTem = (valorTem-32)/1.8; // pasamos el valor de la temperatura a ºC
valorHum = analogRead(sensorHum)*0.0977; // valor de la humedad lo pasamos en %
valorMov = analogRead(sensorMov);//maximo del sensor movimiento 1023 y minimo 0

//Muestra de datos...
Serial.print("Luminosidad: ");
Serial.print(valorLum);
//hacemos lo mismo para cada dato

Y por último accionamos los actuadores, en nuestro caso encender los leds correspondientes.

//Comprobación de los datos de cada sensor hacemos igual...
//Comprobación de la temperatura
if (valorTem > temMax){
Serial.println("Estado Temperatura Alta");
digitalWrite(ledPinRedTem, HIGH);
digitalWrite(ledPinBlueTem, LOW);
digitalWrite(ledPinGreenTem, LOW);
}else if (valorTem < temMin){
Serial.println("Estado Temperatura Baja");
digitalWrite(ledPinRedTem, LOW);
digitalWrite(ledPinBlueTem, HIGH);
digitalWrite(ledPinGreenTem, LOW);
}else{
Serial.println("Estado Temperatura OK");
digitalWrite(ledPinRedTem, LOW);
digitalWrite(ledPinBlueTem, LOW);
digitalWrite(ledPinGreenTem, HIGH);
}

delay(SECOND);
Serial.println("");
}

Bueno hasta aquí por hoy, el código ha sido resumido, el completo lo podéis ver en Mi forja.

Versión 0.1: Nodos parte 2

Deja un comentario

Hoy vamos a ver los modelos de los sensores utilizados y como se conectarían.

En primer lugar, tenemos el sensor de temperatura que utilizaremos el modelo MCP9700, que posee tres patillas, la patilla 1, de la izquierda se corresponde con la entrada del voltaje , la patilla 3, de la derecha se corresponde con la salida a GND y la patilla 2, de en medio sería los datos de la temperatura. Sobre como recibimos los datos, será según su linealización que hablaremos luego.

Conexionado Sensor Temperatura MCP9700

En segundo lugar, tenemos el sensor de humedad que utilizaremos el modelo 808H5V, que posee tres patillas, la patilla de la izquierda, con el simbolo – se corresponde con la salida a GND, la patilla de la derecha, con el simbolo + se corresponde con V+ que es la entrada del voltaje y la patilla de en medio con el simbolo V se corresponde con la salida de los datos de la humedad. Sobre como recibimos los datos, será según su linealización que hablaremos luego.

Imagen del Sensor de Humedad 808H5V

En tercer lugar, tenemos el sensor de movimiento que utilizaremos un modelo PIR de Parallax, que posee 3 pines, el pin -, que corresponde a la salida GND, lo conectamos directamente a GND, el pin +, que corresponde a la entrada del voltaje, lo conectamos al pin de salida del arduino 4 y el pin OUT, que corresponde a la salida de los datos, lo conectamos al pin de entrada del arduino 2.
Su explicación es la siguiente, si el sensor no recibe ningún movimiento, todo el voltaje pasaría del pin + al pin -, si percibe que se produce movimiento, pasaría del pin + al pin OUT, recibiendo los datos la placa arduino. La conexión del pin + a una salida de la placa arduino es para tener la opción de inhabilitar el sensor de movimiento por el usuario.

Descripción conexionado PIR

Por último, tenemos el sensor de luminosidad que utilizaremos un modelo LDR genérico, para su conexionado usaremos una resistencia de 1KΩ que tendrá como entrada los 5 V proporcionado por la placa arduino y dos salidas, una para dicho sensor como entrada y la otra para el pin 4 de las entradas de la placa arduino. El LDR, tendrá como salida a GND de la placa arduino.
Su explicación es sencilla, si existe luminosidad casi todo el voltaje pasa por el sensor, pero si comienza a haber ausencia de luz, el sensor no permite el paso del voltaje por su lado y pasaría todo el voltaje hacia el pin 4 de entrada de la placa arduino. Las patillas del LDR son iguales por lo que no importa como colocar una y la otra.

Imagen LDR

Además usaremos leds, que se conectarán facilmente, la patilla más larga, positiva, a la salida de la resistencia de 220 Ω que le perteneza y la patilla más corta, negativa, a GND.

Imagen LED

Sobre las resistencias no entraremos en detalle porque su conexión es indiferente por cada patilla, pero si será necesario saber a que corresponde cada color, que podemos ver en la siguiente imagen:

Valores de las Resistencias

Versión 0.1: Nodos

Deja un comentario

Buenas,

Para la realización de la primera versión, empezamos con el nodo sensor. Utilizaremos un arduino duemilanove, en dicho nodo vamos a integrar los sensores de temperatura “modelo MCP9700”, humedad “modelo 808H5V”, movimiento por infrarrojos “PIR” y luminosidad “LDR” y una serie de leds para comprobar su adecuado funcionamiento.

Debemos de saber que antes de cada led, conectaremos una resistencia de 1/4 Ω, para los sensores no sera necesario ninguna resistencia, además será necesario una resistencia de 1 k Ω para usarlo con el sensor de luminosidad que mas adelante explicaremos.

Circuito Nodo Habitación

Como podemos ver en la imagen, cada led posee una entrada que es uno de los pines de salida del arduino, siendo controlado por este el encendido y apagado, además uno de los pines de salida es quién hace funcionar el sensor de movimiento. En cuanto a los pines de entrada, cada uno es para los sensores, para saber su estado en todo momento.

Debemos tener en cuenta que hay que añadir a los nodos el modulo xbee, para la comunicación inalámbrica, que simplemente es colocarlo encima de la placa arduino.

Diseño

Deja un comentario

Tras ausentarme por motivos de trabajo y estudios, vuelvo tras el puente con ganas y para empezar describiremos el diseño brevemente, ya que para más detalles podeis acceder a las páginas del blog que he añadido que detallan dichos documentos:

Introducción
Diseño

Dicha arquitectura, contará inicialmente con una serie de dispostivos, llamados nodos que recogerán la información y la transmitirán al controlador o nexo. El nexo enviará la información de los nodos al servidor, quien se encargará de comprobarla y almacenarla en la base de datos. Finalmente el cliente podrá interactuar con el servidor por medio de algún dispositivo con conexión a internet.

Ahora describiremos las partes mencionadas de la arquitectura, empezando por la aplicación web, que se basará en el Modelo Vista Controlador, separando los diferentes componentes de una aplicación web, Datos de la aplicación, Interfaz de usuario y lógica de control. Para esto utilizaremos Kumbia PHP, que es un framework para aplicaciones web libres basado en PHP5.

Pasamos a la Red de Sensores, que se compondrá de Nodos repartidos por las habitaciones y que se encargarán de recoger la información por medio de sensores, y según dicha información accionará los dispositivos actuadores que posea para ello, además de enviar la información de dichos sensores y del estado de los actuadores por via inalámbrica. Por último, contarán de una autoconfiguración para que el cliente pueda configurar dichos nodos. Y para terminar los componentes de la Red de Sensores, tenemos tambíen el Controlador, que recibirá la información de los nodos y la comunicará al servidor, además de comunicar a los nodos de las nuevas configuraciones que solicite el usuario. Para los nodos y el controlador usaremos la plataforma Arduino, que nos dá la ventaja de ser open-hardware, añadiendo el bajo coste económico y de consumo. Y para la comunicación nos basaremos en Zigbee, usando los módulos arduino, Xbee, que nos mantiene el bajo consumo energético y nos da un buen alcance y fiabilidad. Para el controlador además usaremos un módulo Ethernet, para la comunicación con el servidor, y para los nodos, usaremos diferentes sensores y actuadores según la demanda o necesidad, como puede ser un Sensor de Movimiento que accionará una bombilla, etc.

En cuanto al Servidor, será el encargado de interactuar con la base de datos, para almacenar, comprobar y recoger la información de la base de datos, además de alojar la aplicación web y según las comprobaciones de los datos anteriores lanzar las alarmas. Para ello, nos basaremos en LAMP, que es el acrónimo de Linux + Apache + My-SQL + PHP. Que son un subconjunto de sistemas libres para una solución global.

Según mencionamos antes, el servidor se realizar una serie de operaciones sobre la base de datos y de interactuar con el Controlador, estas operaciones las realizas una serie de procesos programados para ello, basados en Lenguaje C, lo que nos dá mayor robustabilidad y fiabilidad ya que es un lenguaje más relacionado con la administración de sistemas. El primero de ellos es, Get, que es un Socket encargado de recoger la información enviada del Controlador en formato CSV, y de validarlo, para pasar dicha información al proceso Check, que comprueba que los datos recibidos son coherentes y si lo son llama al proceso Save que se encarga de almacenar dichos datos, y si no son coherentes llamaría al proceso Error, que se encarga de almacenar el error producido y si es de emergencia llamaría al proceso Alarm que se encarga de lanzar la Alarma y de almacenar dicha alarma. Para comprobar que los nodos no dejan de enviar información, tendremos el proceso TimeOut, que si no envían información durante media hora llamaría al proceso Error y haría lo anteriormente mencionado. Y para terminar, el proceso Send, es el encargado de enviar al Controlador la nueva información que quiere el cliente que posean los nodos.

En cuanto a la base de datos, debemos mencionar que es un diseño en 3FN (Tercera Forma Normal) y con ausencia de ciclos, lo que nos dá mayor fiabilidad en cuanto a los datos almacenados.

Bueno pronto tendré la primera versión lista, espero que os agrada.

Un saludo

Fernando

Introducción

1 comentario

Buenas,

Para empezar, describiremos lo más breve posible de que trata el proyecto.

Todo el mundo conocerá la domótica, pero para quienes no la conozca, se trata de un control automático de los dispositivos de los edificios para lograr una serie de objetivos. Dichos objetivos, se trata del bienestar del usuario, el aumento de la seguridad en dicho edificio, aumento de las comunicaciones, accesibilidad para el hogar y por último, el derivado de todo el conjunto anterior, el confort del usuario en dicho edificio.

Ahora, explicaremos las diferentes partes de un sistema domótico. Empezando por los sensores, que son los encargados de recoger la información del medio, luego tenemos los actuadores, que son los dispositivos que interactuan con el medio según unas ordenes, y para terminar la red de dispositivos, el controlador, que es el encargado de recoger la información proveniente de los sensores y tratarla para mandar una serie de ordenes a los actuadores para que realizen unas acciones u otras. Y por último, la interfaz, que interactua entre el usuario y el sistema, para proveerle de información del edificio o para configurar dicho edificio según sus necesidades específicas. Además, cabe destacar que el controlador y la interfaz, están comunicados para proveer de forma real dicha información.

En definitiva, queremos ofrecer al usuario, un sistema capaz de satisfacer sus necesidades en un edificio para mejorar su calidad de vida. Para ello, utilizaremos una red de sensores basados en la plataforma Arduino, la cúal, es open-hardware, y basando la comunicación entre dispositivos en Zigbee. Resumiendo un sistema inalámbrico, sin cables, seguro, fiable, de bajo coste y de bajo consumo. Además, aportaremos una interfaz web para la interactividad entre el usuario y el sistema, y poder conocer así el estado de su edificio.

Un saludo

Fernando

Bienvenidos

Deja un comentario

Bienvenidos a mi blog sobre el proyecto AutoHogar, para un hogar automatizado y una mejor calidad de vida.

Desarrollado para el Concurso Universitario de Software Libre V.

Espero que les guste y les sea ameno.

Para cualquier consulta, no duden en postearla.

Newer Entries