Versión 0.1: Nodos parte 4

Deja un comentario

Buenas, tras la configuración debemos de añadir las lineas de código del dispositivo para que establezca la comunicación con el otro dispositivo.
Primero incluimos la libreria:

#include // para usar librerias xbee

Añadimos la configuración en setup:

//Configuramos el puerto xbee
xbee.begin(BAUDIOS);

Ahora preparamos los datos:

uint8_t datos[] = {direccionNodo, direccionRed, valorTem, valorHum, valorLum...};

Ahora realizamos la conexión:

// Preparamos el envio
Tx16Request tx16 = Tx16Request(0x1234, datos, sizeof(datos)); //modificar para cada nodo
TxStatusResponse txStatus = TxStatusResponse();

// enviamos
xbee.send(tx16);

Serial.println("");

// esperamos si hay respuesta
if (xbee.readPacket(5000)) {

// Si ha llegado el paquete
if (xbee.getResponse().getApiId() == TX_STATUS_RESPONSE) {
xbee.getResponse().getZBTxStatusResponse(txStatus);

// comprobamos si todo es correcto
if (txStatus.getStatus() == SUCCESS) {
Serial.println("Enviado Correctamente...");
} else {
Serial.println("Error al enviar...Lo intentaremos otra vez");
}

}

} else {
Serial.println("Error no hay respuesta...Lo intentaremos otra vez");
}
Serial.println("");

La próxima será el controlador.

Anuncios

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.

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.