CAPITULO III. VALIDACION Y/O EVALUACION DE RESULTADOS 56
3.2 Análisis de los resultados finales de la investigación 69
3.2.1 Sistema Arduino 69
3.2.1.2 Funcionamiento y Fase de Pruebas 79
Una vez desarrollado cada una de las aplicaciones Android para el funcionamiento de cada uno de los sensores, actuadores y haber establecido conexión entre del circuito Arduino y el Hosting a través del Shield GSM/GPRS, se procede a integrar cada uno de ellos en una sola aplicación, con el fin de establecer el diseño definitivo con su respectiva programación Arduino, enlazar cada uno de los dispositivos periféricos e interconectar sus respectivos circuitos con el propósito de transferir la información generada a una base de datos alojada en el hosting. Para ello se analiza el siguiente programa:
#include <SoftwareSerial.h>
Se declara la librería con el fin de dar soporte para permitir la comunicación serie del hardware del chip ATega y los pines de comunicación, en especial los pines 0 y 1 y demás pines digitales.
#include <DHT11.h> int pin=4;
DHT11 dht11(pin); int err;
float temp, hum;
Se declara la librería para establecer la comunicación entre el hardware del sensor de temperatura y humedad DHT11y obtener la información generada. Se define el puerto 4 como entrada del sensor de humedad y temperatura en la variable pin. Mediante la función DHT11 se captura la información generada por el sensor a través del puerto asignado a pin. Se declara la variable err para asignar el valor por defecto en caso no
80
establecer conexión del sensor. Se define las variables flotantes temp y hum para almacenar los datos generados por el sensor de temperatura y humedad respectivamente.
SoftwareSerial SIM900(2, 3);
Asigna los puertos 2 y 3 para establecer la conectividad del Shield GSM/GPRS.
#define sensor A0 float hums;
Definimos el Pin analógico A0 para receptar la información del sensor de humedad de suelo y declaramos la variable flotante hums para almacenar el valor generado.
const int myRelee = 5;
Asignamos el puerto 5 para el funcionamiento del relé en la constante myRelee.
const int analogInPin = A1; float agua;
Asignamos el pin A1 analógico como entrada del sensor de nivel de agua, para luego esta información ser almacenada en la variable flotante agua.
int sal1=0, sal2=0;
Se declara e inicializa variables que permitirán enviar información de actividad o estado de los actuadores al hosting.
void setup() { pinMode(9, OUTPUT); pinMode(myRelee, OUTPUT); pinMode(sensor, INPUT); SIM900.begin(19200); Serial.begin(19200); Serial.print("power up" ); delay(30000); }
Void setup(), es una función que encierra un bloque de instrucciones o declaraciones orientada a la configuración, al pin 9 declara como salida para el pin del Buzzer, se declara como salida al pin5 para uso del relé, se inicializa el pin de la entrada sensor para la captura de datos del sensor de humedad del suelo, SIM900.begin inicializa la
81
conexión GSM/GPRS, Serial.begin inicializa la conectividad de los puertos serie. Una vez establecida la conectividad se imprime en el monitor serial el procedimiento de encendido de la conexión GSM/GPRS esperando 30 segundos para establecer el enlace.
void loop() {
Contiene el programa mismo que se ejecutará cíclicamente.
if((err = dht11.read(hum, temp)) == 0) { Serial.print("Temperatura: "); Serial.print(temp); Serial.print(" Humedad: "); Serial.print(hum); Serial.println(); } else { Serial.println(); Serial.print("Error Num :"); Serial.print(err); Serial.println(); } delay(1000);
Captura el registro de loos datos generados por el sensor de temperatura y humedad DHT11. Valida su conectividad, y en caso de no haber conexión emite el mensaje de error. Posteriormente efectua una pausa de un segundo.
hums = map(analogRead(sensor), 0, 1023, 100, 0); Serial.print("Humedad: ");
Serial.print(hums); Serial.println("%"); delay(1000);
Efectúa la lectura del sensor de humedad del suelo, cuyos valores hace referencia al valor mínimo, valor máximo, valor mínimo a convertir y valor máximo a convertir todo de acuerdo a los niveles de humedad, ya sea, suelo mojado, húmedo o seco. Estos datos posteriormente son almacenados en la variable hums, se imprime en pantalla y espera un segundo.
82 Serial.print("Sensor agua = " ); Serial.print(agua); Serial.println("%"); delay(1000);
Permite leer el valor analógico del sensor de agua a través del puerto A1 asignado a analoglnPin. Este Valor es calculado a través de la fracción 1024 de valor máximo que se utiliza para determinar la cantidad posible de agua. La variable agua almacena los datos recolectados para posteriormente ser impresos y esperar un segundo.
if((temp > 31.0) or (temp < 15.0)) { sal1=1;
analogWrite(9, 20); //Activa buzzer } if((hum > 95.0) or (temp < 40.0)) { sal1=2;
analogWrite(9, 20); //Activa buzzer } if((hums > 50.0) or (hums < 80.0)) { sal1=3;
analogWrite(9, 20); //Activa buzzer } if((agua > 31.0) or (agua < 15.0)) { sal1=4;
sal2=1;
analogWrite(9, 20); //Activa buzzer
digitalWrite(myRelee, HIGH); //Activa rele } delay(1000);
Activa el Buzzer dependiendo de las condiciones que se den en cada uno de los sensores: temperatura y humedad ambiental, humedad de suelo, nivel de agua; en las cuales se ha establecido parámetros técnicos para determinar los diferentes niveles críticos de funcionamiento de cada sensor en base a los efectos atmosféricos y ambientales se saturación mínima y máxima.
Serial.println("SubmitHttpRequest - started" ); SubmitHttpRequest();
Serial.println("SubmitHttpRequest - finished" );
Llama a la función que permite establecer el inicio y fin de la conexión entre el Arduino y el hosting utilizando el Shield GSM/GRPS.
83
analogWrite(9, 0);
digitalWrite(myRelee, LOW); delay(10000); }
Una vez que finalizado la conexión GSM/GPRS con el hosting analogWrite y digitalWrite permite apagar el Buzzer y el relé en caso de haber sido activados respectivamente de acuerdo a las condicionales anteriormente descritas.
void SubmitHttpRequest() {
Función de conectividad Arduino – Hosting
SIM900.println("AT+CSQ"); delay(100);
ShowSerialData();
Permite verificar la calidad de la señal y muestra datos.
SIM900.println("AT+CGATT?"); delay(100);
ShowSerialData();
Junta o desvincula el soporte GPRS y muestra los datos.
SIM900.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""); delay(1000);
ShowSerialData();
Establece el tipo de conexión que está usando GPRS.
SIM900.println("AT+SAPBR=3,1,\"APN\",\"CMNET\""); delay(4000);
ShowSerialData();
Configura la cadena del nombre del punto de acceso para establecer la conexión.
SIM900.println("AT+SAPBR=1,1");//setting the SAPBR delay(2000);
ShowSerialData();
Configuración del SAPBR para la conectividad con el hosting.
84
delay(2000); ShowSerialData();
Inicializa la conexión Arduino – http.
SIM900.print("AT+HTTPPARA=\"URL\",\"up61.org/write_data.php?data1="); SIM900.print(temp); SIM900.print("&"); SIM900.print("data2="); SIM900.print(hum); SIM900.print("&"); SIM900.print("data3="); SIM900.print(hums); SIM900.print("&"); SIM900.print("data4="); SIM900.print(agua); SIM900.print("&"); SIM900.print("data5="); SIM900.print(sal1); SIM900.print("&"); SIM900.print("data6="); SIM900.print(sal2); SIM900.println("\""); delay(1000); ShowSerialData();
Configuración http para el envío de parámetros al hosting mediante php y utilizando método get.
SIM900.println("AT+HTTPACTION=0"); delay(10000); ShowSerialData();
Envía la solicitud de conexión y envío de parámetros al hosting.
SIM900.println("AT+HTTPREAD"); delay(300); ShowSerialData(); SIM900.println(""); delay(100); }
Lee los datos del sitio web al que se accede.
void ShowSerialData() { while(SIM900.available()!=0)
Serial.write(char (SIM900.read())); }
85
Figura 41. Diseño Arduino.