2 Diseño de Un Sistema de Monitoreo, Registro y Control de Temperatura y Humedad para Un Cultivo de Invernadero
2 Diseño de Un Sistema de Monitoreo, Registro y Control de Temperatura y Humedad para Un Cultivo de Invernadero
Estudiante:
Modalidad:
Trabajo de Investigacin Formativa
Ttulo:
DISEO DE UN SISTEMA DE MONITOREO, REGISTRO Y CONTROL DE
TEMPERATURA Y HUMEDAD PARA UN CULTIVO DE INVERNADERO.
Primeramente, a Dios, a mis padres y hermanos por el apoyo incondicional durante ste arduo y
dificultoso trayecto. Gracias por el soporte, la paciencia y el amor.
Deseo hacer una mencin especial para el Ingeniero Andrs Felipe Calvo Salcedo por la acogida y
confianza para la realizacin de ste proyecto quien junto al Ingeniero Arley Bejarano Martnez
fueron de vital importancia para la culminacin exitosa.
A mis compaeros, amistades y en general a el grupo de personas que de un modo u otro aportaron
para lograr sta meta.
RESUMEN
El presente proyecto de grado consiste en el desarrollo de una aplicacin la cual permite monitoreo,
registro y control de un cultivo en invernadero a travs de la implementacin de diversos
dispositivos (microcontrolador, sensores y actuadores), para brindar al usuario un historial de las
mediciones de las variables fsicas ms relevantes (Temperatura, humedad relativa, luminosidad y
humedad del suelo) en todo el proceso de desarrollo del cultivo.
Para lograr dichas medidas se utilizarn diferentes tipos de sensores los cuales arrojaran medidas
calibradas de las variables de inters sensadas de forma iterada en el transcurso del tiempo, estos
sensores estarn conectados a un dispositivo microcontrolador de la familia Arduino, el cual
recibir los datos y los enviara a travs de Ethernet a un servidor, para posteriormente realizar una
comunicacin con la aplicacin desarrollada en PHP para almacenar las medidas en una base de
datos SQL, luego de esto se realizara una representacin grfica detallada en intervalos de tiempo
y rangos de medida, para poder observar el comportamiento de las variables a travs del tiempo,
adems le permite al usuario poder descargar grficos en tiempo real y archivos en Excel de la base
de datos para realizar anlisis estadsticos .
Es importante denotar que el control implementado es uno tipo on-off, con una histresis de 1[C]
para la temperatura, permitiendo mantener en un rango predefinido las variables de inters para el
ptimo desarrollo del cultivo.
Tabla de contenido
1.INTRODUCCIN .......................................................................................................................................... 9
1.1. PLANTEAMIENTO DEL PROBLEMA ....................................................................................................... 10
2. OBJETIVOS ............................................................................................................................................... 11
2.1. Objetivo General ......................................................................................................................... 11
2.2. Objetivos Especficos ....................................................................................................................... 11
3. METODOLOGA ........................................................................................................................................ 12
3.1. Etapas metodolgicas ...................................................................................................................... 12
3.2. Criterios de validez ........................................................................................................................... 13
5. DESARROLLO ........................................................................................................................................... 17
5.1. Sistema microcontrolador ................................................................................................................ 17
5.2. Arduino ............................................................................................................................................. 18
5.3. Sensores ........................................................................................................................................... 20
5.4. Desarrollo metodolgico .................................................................................................................. 24
5.5. Circuito implementado..................................................................................................................... 26
5.5.1. Medicin de las variables fsicas (Temperatura, humedad relativa, luminosidad y humedad del
suelo) con Arduino .............................................................................................................................. 28
5.5.2. Conexin Arduino a base de datos MySQL ............................................................................... 28
5.5.3. Interfaz grfica........................................................................................................................... 29
5.6. Diagramas sistema de control y registro .............................................................................................. 30
5.6.1. Diagrama sistema de control ........................................................................................................ 31
5.6.2. Diagrama sistema de captura y registro ....................................................................................... 32
5.7. Sistema desarrollado ........................................................................................................................ 33
6. RESULTADOS............................................................................................................................................ 35
8. BIBLIOGRAFA ......................................................................................................................................... 44
Anexos ......................................................................................................................................................... 46
ndice de figuras
Un invernadero es una es estructura cerrada, cubierta por materiales transparentes, dentro de la cual
es posible obtener unas condiciones artificiales de microclima controlado, y con ello realizar
cosechas en condiciones controladas obteniendo producciones de mayor calidad y mejores precios
en cualquier instante del ao [4]; El desarrollo tecnolgico de los cultivos permite llevar un control
en sus diferentes fases de crecimiento. La calidad de vida de una cosecha se logra con un
microclima estable y acorde a las condiciones del producto a cultivar, por tal motivo es
indispensable censar y manipular las variables climticas prioritarias.
Despus de controlar el microclima del invernadero, se almacenan en una base de datos las
variables y detalles ms importantes para garantizar un historial de las variables de estado que el
agricultor desea analizar. Con esta base de datos, se tiene una herramienta para optimizar las
cosechas y garantizar control predictivo [5].
1.1. PLANTEAMIENTO DEL PROBLEMA
Una alternativa para solucionar esta situacin ha sido la instrumentacin, registro y control de los
invernaderos con el fin de mejorar cada proceso implementando tecnologa liviana y de bajo costo
que permita el adecuado cuidado y desarrollo que se requiere en cada produccin, apoyndose de
sistemas controlados de forma remota. Esta instrumentacin permite mejorar los estndares de
calidad al reducir la probabilidad de error, al mismo tiempo que se aumenta la capacidad y
velocidad de produccin del producto.
En vista del rpido crecimiento de la tecnologa y los elementos de comunicacin desarrollados, se
piensa en la posibilidad de adaptar parte de la tecnologa existente para mejorar el control y
monitoreo de un cultivo bajo invernadero.
Conjunto a lo anterior Tecnoparque SENA requiere de la automatizacin de un cultivo de
invernadero en el corregimiento Arabia del municipio de Pereira (Risaralda) con el fin de
implementar tecnolgicamente dichas instalaciones. Este requerimiento se logra por medio del
convenio interinstitucional SENA-UTP entre el Grupo de Investigacin de Ingeniera Electrnica
y Tecnoparque SENA.
2. OBJETIVOS
Desarrollar un sistema automtico que permita el monitoreo de las variables fsicas, temperatura,
humedad relativa, humedad del suelo y luminosidad, as como el control de la temperatura y la
humedad relativa de un sistema de invernadero con registro de variables en una base de datos online
con lenguaje SQL
Realizar pruebas de control con el fin de verificar el correcto funcionamiento del registro
de las variables medidas utilizando el sistema de gestin de datos.
Etapa I: Establecer el estado del arte en el tema de estudio, recopilando informacin de los
diferentes trabajaos realizados en este campo.
Etapa III: Disear un sistema de gestin de datos que permita el almacenamiento y consulta
online del historial de las medidas.
Etapa IV: Disear el sistema de automatizacin que permita el control de las variables:
temperatura, humedad relativa y humedad del suelo
Seleccionar el entorno de programacin que facilite la realizacin del cdigo de
automatizacin.
Por medio del sistema microcontrolado capturar las medidas y registrar la informacin en
la base de datos.
Extraer registros de la base de datos, graficarlos y permitir su descarga.
Verificar que ante perturbaciones climticas el sistema opera en los rangos preestablecidos.
Para la elaboracin de este proyecto se toman en cuenta los criterios soportados en los
documentos de la referencia bibliogrfica numer [1] hasta la numer [16].
Diferentes mtodos y modelos de control son aplicados para controlar el comportamiento de las
variables climticas que afectan el entorno del invernadero. Se usan desde sistemas de control
usando lgica clsica hasta sistemas de control inteligente, que usan lgica difusa, redes
neuronales, entre otros. Adems, se han desarrollado diferentes dispositivos y mecanismos que
permiten medir y variar las variables de inters dentro del invernadero [13].
Los consumidores demandan productos agrcolas de alta calidad y diversidad durante todo el ao,
esto no es posible debido a los cambios climticos que se producen, es por ello que el uso de
invernaderos juega un papel muy importante para enfrentar este problema.
Los invernaderos permiten obtener condiciones climticas adecuadas para el desarrollo y
crecimiento de las plantas dentro de un espacio cerrado. Por lo tanto, se crea una barrera fsica entre
los cultivos dentro del invernadero y el clima exterior, esto ayuda a proteger a las plantas de los
fenmenos atmosfricos como la cada de granizas y heladas que daan los cultivos, as como
tambin de los fuertes vientos, las lluvias y elevadas temperaturas. Por otro lado, facilita el control
de plagas y enfermedades las cuales pueden ocasionar grandes prdidas en la produccin.
En consecuencia, la implementacin de invernaderos permite al agricultor obtener cosechas
durante todo el ao, incluso en pocas de invierno, ayuda a reducir el tiempo y obtener productos
agrcolas de alta calidad.
4.2. Problemtica que afrontan los invernaderos no automatizados
La mayora de agricultores que optan por construir invernaderos para proteger sus cultivos del
clima externo y crear un microclima dentro de este espacio cerrado, no toman en cuenta la
implementacin de un sistema automatizado que los ayude a lograr establecer las mejores
condiciones climticas de acuerdo a la necesidad de cada tipo de cultivo.
Las variables climticas como la temperatura, humedad, CO2 y la radiacin solar influyen en el
crecimiento y desarrollo de las plantas. Un mal manejo de estos parmetros puede afectar
considerablemente a la planta. Por ejemplo, un exceso de humedad en el interior del invernadero
puede generar enfermedades en los cultivos.
Por otro lado, existe un mal manejo de recursos naturales como el agua, cuando el invernadero no
cuenta con un sistema que permita monitorear continuamente las variables climticas como
temperatura y humedad, no se establece un tiempo de riego adecuado y se dificulta mantener la
temperatura en las condiciones ideales para el cultivo, ya que no se sabe cunta agua se necesita o
con qu frecuencia se debe efectuar el riego. Los invernaderos operados manualmente por el
agricultor, ayudan a proteger los cultivos de los fenmenos climticos y crear un microclima; sin
embargo, no brinda las ventajas o eficiencias que se logran obtener con un invernadero
automatizado.
Una vez establecido el estado del arte en el tema de estudio y recopilando informacin de los
diferentes trabajaos realizados en este campo se procedi a implementar el sistema de sensado y
automatizacin.
Por todas las caractersticas que nos brinda sumado al bajo precio de mercado y a su versatilidad
para realizar montajes electrnicos de control, registro y censado de variables fsicas se opt por
microcontrolador Arduino Mega 2560.
Las placas Arduino son relativamente baratas comparadas con otras plataformas
microcontroladoras. La versin menos cara del mdulo Arduino puede ser ensamblada a mano, e
incluso los mdulos de Arduino preensamblados cuestan menos de 50$.
El software Arduino est publicado como herramientas de cdigo abierto, disponible para
extensin por programadores experimentados. El lenguaje puede ser expandido mediante libreras
C++, y la gente que quiera entender los detalles tcnicos pueden hacer el salto desde Arduino a la
programacin en lenguaje AVR C en el cual est basado. De forma similar, puedes aadir cdigo
AVR-C directamente en tus programas Arduino si quieres.
Arduino Mega 2560 es una versin ampliada de la tarjeta original de Arduino y est basada en el
Microcontrolador Atmega2560. Dispone de 54 entradas/salidas digitales, 14 de las cuales se
pueden utilizar como salidas PWM (modulacin de anchura de pulso). Adems, dispone de 16
entradas analgicas, 4 UARTs (puertas series), un oscilador de 16MHz, una conexin USB, un
conector de alimentacin, un conector ICSP y un pulsador para el reset. Para empezar a utilizar la
placa slo es necesario conectarla al ordenador a travs de un cable USB, o alimentarla con un
adaptador de corriente AC/DC. Tambin, para empezar, puede alimentarse mediante una batera.
Una de las diferencias principales de la tarjeta Arduino MEGA 2560 es que no utiliza el convertidor
USB-serie de la firma FTDI. Por lo contrario, emplea un Microcontrolador Atmega8U2
programado como actuar convertidor USB a serie.
Esta placa debido a su gran poder es utilizada para grandes proyectos, entre los ms importantes se
encuentras los de DOMOTICA e IMPRESORAS 3D.
El Arduino MEGA2560 es compatible con la mayora de los shield o tarjetas de
aplicacin/ampliacin disponible para las tarjetas Arduino UNO original.
Microprocesador ATmega2560
Tensin de alimentacin (recomendado) 7-12V
Integra regulacin y estabilizacin de +5Vcc
54 lneas de Entradas/Salidas Digitales (14 de ellas se pueden utilizar como salidas PWM)
16 Entradas Analgicas
Mxima corriente continua para las entradas: 40 mA
Salida de alimentacin a 3.3V con 50 mA
Memoria de programa de 256Kb (el bootloader ocupa 8Kb)
Memoria SRAM de 8Kb para datos y variables del programa
Memoria EEPROM para datos y variables no voltiles
Velocidad del reloj de trabajo de 16MHz
Reducidas dimensiones de 100 x 50 mm
5.3. Sensores
Para la realizacin de ste proyecto se van a implementar diferentes tipos de sensores los cuales se
denotarn a continuacin:
DHT22
Caractersticas
Alimentacin: 3.3Vdc Vcc 6Vdc
Rango de medicin de temperatura: -40C a 80 C
Precisin de medicin de temperatura: <0.5 C
Resolucin Temperatura: 0.1C
Rango de medicin de humedad: De 0 a 100% RH
Precisin de medicin de humedad: 2% RH
Resolucin Humedad: 0.1%RH
Tiempo de sensado: 2s
Este sensor puede leer la cantidad de humedad presente en el suelo que lo rodea. Es un sensor de
baja tecnologa, pero es ideal para el seguimiento de un jardn urbano o un cultivo. Se trata de una
herramienta indispensable para saber el estado de humedad del suelo. Cuenta con dos sondas para
pasar corriente elctrica a travs del suelo circundante, y luego lee la resistencia para obtener el
nivel de humedad. Ms agua hace que el suelo conduzca la electricidad con mayor facilidad (menos
resistencia), mientras que el suelo seco es un mal conductor de la electricidad (ms resistencia).
Ser til para recordarle que debe regar las plantas o para monitorear la humedad del suelo en su
jardn o cultivo.
Especificaciones
Fuente de alimentacin: 3,3 V o 5 V
seal de tensin de salida: 0 ~ 4.2v
Corriente: 35 mA
Definicin de los pines:
Salida analgica (cable azul)
GND (alambre Negro)
Alimentacin (cable rojo)
Tamao: 60x20x5mm (2.36x0.79x0.2 ")
Acabado superficial: Oro de la inmersin
Sensor Luminosidad
La salida digital posee solo 2 estados: activo/apagado, el cambio de un estado a otro depende del
umbral que se fije con el potencimetro del mdulo. La salida digital puede utilizarse para controlar
un relay y as realizar una accin dependiente de la intensidad de luz.
Caractersticas:
Para la implementacin exitosa de este proyecto fue necesario llevar a cabo un conjunto de
actividades las cuales se describen a continuacin:
Etapa I.
Implementar el sistema de medidas
Se seleccionaron los sensores
Se escogi el dispositivo microcontrolado
Se realiz una prueba registrando las variables medidas de manera local
Etapa II.
Implementar el sistema de control
Se seleccion el entorno de programacin
Se definieron las variables a controlar
Se escogi el tipo de control
Se realizaron pruebas para constatar que las variables controladas permanecen en el rango
deseado
Etapa III.
Implementar la base de datos en internet
Definir el gestor de bases de datos
Crear las diferentes tablas
Se realiz una prueba con el fin de verificar que la base de datos permite registrar de forma
correcta
Etapa IV.
Conectar el sistema de medidas con la base de datos
Se realizaron pruebas para corroborar que los valores sensados se registraban de forma
correcta en la base de datos
Etapa V.
Diseo de una interfaz de consulta, grficas y descargas.
Definir una IDE o entorno de programacin
Se realizaron consultas a la base de datos seleccionando rangos de tiempo deseados y se
hicieron descargas de los mismos como archivos de Microsoft office Excel
Se graficaron los registros extrados de la base de datos y se hicieron descargas en diferentes
formatos de imagen (PNG, JPEG, PDF y vector de imagen SVG)
5.5. Circuito implementado
El circuito desarrollado est compuesto por un grupo de sensores que se encargan de medir las
variables fsicas al interior del invernadero, las cuales son ledas por un sistema de adquisicin de
datos microcontrolado, en ste caso el Arduino mega2560, el que a su vez se encarga del control
de las variables temperatura y humedad ,para que permanezcan en un rango deseado, el
microcontrolador tambin se encarga de enviar la seal de control para que la etapa de potencia
suministre la corriente necesaria a los actuadores mediante modulacin por ancho de pulsos o
PWM. Las medidas adquiridas por el microcontrolador son enviados a un servidor web mediante
el mdulo de comunicacin Ethernet Shield de Arduino para ser registrados en una base de datos,
a la cual se puede acceder de forma fcil.
Como se puede observar en la Figura 5, el circuito implementado consta de seis etapas subtituladas
las cuales se explican a continuacin:
SENSORES
En esta etapa se observa la referencia de cada uno de los sensores utilizados con el fin de medir las
variables fsicas de inters para el proyecto. Dichos sensores son:
DHT22: Sensor de temperatura y humedad relativa
LDR: Sensor de luminosidad
SEN0114: sensor de humedad del suelo
MICROCONTROLADOR
Es la etapa encargada de leer los datos que entregan los sensores para ser enviados al servidor web
(base de datos) y a su vez realizar un control del tipo on-off a la temperatura y la humedad relativa
para mantenerlas dichas variables en rangos ptimos segn la necesidad de cada cultivo.
ETAPA DE POTENCIA
Es la encargada de suministrar la potencia requerida para el funcionamiento de los actuadores,
como se puede observar en la figura 5, se emple un puente h para energizar el humidificador y el
extractor de calor dicha accin es controlada mediante PWM desde el microcontrolador, tambin
se utiliz un rel con el fin de activar el dispositivo de calefaccin que en este proyecto es una
luminaria de 7w a 110v.
ACTUADORES
Los actuadores son los dispositivos encargados de extraer calor y aadir humedad al invernadero
segn las necesidades del sistema.
Para medir las variables fsicas de inters, inicialmente se escogieron los sensores apropiados y el
sistema microcontrolado, los cuales son descritos con anterioridad. El sistema embebido (Arduino)
consta de dos partes fundamentales, la primera es el entorno de programacin o IDE Arduino el
cual se puede descargar de la pgina oficial de Arduino (www.arduino.cc/download) y sirve para
compilar los cdigos realizados y la segunda es el hardware en el cual se conectan los sensores y
se enva la orden de activacin para los actuadores entre otras.
Para realizar la Instalacin del entorno de programacin Arduino se recomienda seguir los pasos
descritos en: [15] donde se explica de forma detallada.
Una vez sensadas las variables fsicas de inters es importante establecer una conexin con el
servidor para poder almacenar en este los dato capturados. Para conectar Arduino con la base de
datos MySQL se realizaron los siguientes pasos:
1. Instalar el servidor independiente de plataforma XAMPP, el cual es un software libre, que
consiste principalmente en la base de datos MySQL, el servidor web apache y los
interpretes para lenguajes de script: PHP y Perl. Para la instalacin de la plataforma
XAMPP se recomienda seguir los pasos descritos en: [16], con el fin de llevar a cabo una
buena configuracin del programa.
2. Instalar el entorno de desarrollo NetBeans en donde se realizaron los cdigos en PHP y
HTML que permiten interactuar con la base de datos, la descarga e instalacin se puede
observar en: [16].
3. Utilizando NetBeans se implementaron los cdigos que permiten la conexin Arduino
servidor, registrar los datos, graficarlos y descargarlos. Los cdigos se pueden observar en
los anexos que van del [3] hasta el [14].
4. Por medio de Arduino y la Shield de Ethernet se realizar el registro de la informacin en la
base de datos. Esto se logra primero asignando una IP fija al Arduino y al computador, con
el fin de obtener una conexin nica y estable entre ambos. Para lograr el registro de las
variables sensadas se realiz un cdigo en PHP que utiliza un mtodo GET, para obtener el
ID del sensor y su respectivo valor partir de la direccin web que es enviada desde el
Arduino. El cdigo realizado se observa en el anexo [15].
Una vez implementados los cdigos que permiten comunicacin, leer, graficar y descargar los
valores registrados en la base de datos se procedi a realizar una interfaz grfica de usuario donde
se permite escoger el tipo de sensor, la fecha inicial y final de registro, la opcin de descarga como
archivo de Microsoft Excel y finalmente la opcin de graficar en lnea los datos extrados del
servidor.
En la figura 8, se puede observar el diagrama de captura u registros el cual se realiza en cinco partes
descritas a continuacin:
Inicio: es la etapa donde definimos archivos de cabecera y variables a utilizar
Inicio de variables: es la etapa donde definimos las variables a utilizar durante el control.
Leer Sensores: en esta etapa el microcontrolador captura las medidas realizadas por el conjunto
de sensores utilizados
Conectar con el servidor: en esta fase es donde la Ethernet Shield permite enviar las medidas
capturadas por el sistema microcontrolado y se encarga de enviarlas al servidor web.
Registrar: en esta etapa los datos enviados va ethernet son almacenados en una base de datos
previamente elaborada en MySQL.
5.7. Sistema desarrollado
En la figura 10 se puede observar los datos sensados de las diferentes variables mediante el puerto
serial del microcontrolador Arduino
Base de datos creada en MySQL
En la figura 12. Se puede observar la interfaz grfica del proyecto, en la cual el usuario puede
escoger el tipo de sensor, la fecha inicial y final de la medida almacenada en la base de datos,
graficar los valores y la opcin de descargar los reportes.
Lo anterior se repite para las figuras 14, 15 y 16 las cuales se muestran a continuacin.
En la figura 14. Se puede observar que la humedad del ambiente es controlada y permanece por
encima del valor preestablecido, en nuestro caso del 60%.
Figura 15. Visualizacin grafica Luminosidad.
En la figura 15. Se puede observar que la luminosidad permanece en valores normales durante el
transcurso del da
Control de temperatura
En la figura 17, se puede notar que la temperatura permanece en el margen preestablecido el cual
fue de 30 (C) con una histresis de (0.1C) aproximadamente
Control de humedad relativa del ambiente
En la figura 18, se puede notar que la humedad permanece en el rango preestablecido que en este
trabajo fue de un valor por encima de 60% con un error de (+/-2%)
De los datos obtenido en el Anexo 1, se puede notar que el sensor empleado para medir temperatura
se encuentra en los rangos estipulados en la figura 17 Anexo 2. De lo cual se concluye que no hay
necesidad de calibracin ya que el error de las medidas permanece en un rango aceptable.
7. CONCLUSIONES, APORTES Y RECOMENDACIONES
7.1. Conclusiones
[2] HERNN OCTAVIO DAZ SARMIENTO y Oscar Fabin Solano Rojas. Diseo y simulacin
del control climtico para un invernadero y base de datos de registro. Tesis. Facultad de Ingeniera.
Universidad de la Salle. Bogot D.C. Colombia. 2006.
[3] JESS NEZ, Julio Csar Carvajal y Luis Armando Bautista. El TLC con Estados Unidos y
su impacto en el sector agropecuario Colombiano: Entre esperanzas e incertidumbres. En: LEX
UDES, 2004.
[4] PAULA RAMOS GIRALDO, Mauricio Garca Navarro, Juan Hoyos Surez Carlos
OliverosTascn y URIBE, Juan Sanz. Aplicacin de una Metodologa Estructurada para el Diseo
de un Sistema de Cosecha Selectiva de Caf. En: Scientia et Technica, tomo 20, no 1, 2015, pgs.
1019. ISSN 0122-1701.
[7] ZHOU, Rong, et al. Early Detection and Continuous Quantization of Plant Disease Using
Template Matching and Support Vector Machine Algorithms. En: Computing and Networking
(CANDAR), 2013 First International Symposium on, 2013, pgs. 300304.
[8] VIJAY, N. Application of sensor networks in agriculture. En: Sustainable Energy and
Intelligent Systems (SEISCON 2012), IET Chennai 3rd International on, 2012, pgs. 16.
[9] BHARGAVA, K.; KASHYAP, A. y GONSALVES, T.A. Wireless sensor network based
advisory system for Apple Scab prevention. En: Communications (NCC), 2014 Twentieth
National Conference on, 2014, pgs. 16.
[10] SONE, Hironao. AI based agriculture support system with precisely deployed versatile sensors
and sensor network. En: Advanced Intelligence and Awarenss Internet (AIAI 2010), 2010
International Conference on, 2010, pgs. 44.
[12] KLETTE, Reinhard. Concise Computer Vision: An Introduction into Theory and Algorithms.
Springer Publishing Company, Incorporated, 2014. ISBN 1447163192, 9781447163190.
[14] Pinto Ros. Wilson Daniel. Monitoreo de Cultivos con Redes de Sensores XBEE, Arduino,
Y Dispositivos de Medicin de Suelos. Tesis, Universidad Tecnolgica de Pereira, Pereira,
Risaralda, Colombia, 2015.
Anexo 1.
Anexo 3.
Conexin con la base de datos
<?php
/*
* To change this license header, choose License Headers in Project
Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
class Conexion{
public function conectar() {
$usuario='root';
$password='';
$host='127.0.0.1';
$db='adquisicion_datos';
return $conexion= new PDO("mysql:host=$host;
dbname=$db",$usuario,$password);
}
}
Anexo 4.
Leer de la base de datos
<?php
/*
Crear, Leer, Actualizar, Eliminar // crud
*/
class Crud{
public $insertINTO;
public $insertColumns;
public $insertValues;
public $mensaje;
public $select;
public $from;
public $condition;
public $rows;
public $update;
public $set;
public $deleteFrom;
while($filas= $consulta->fetch())
{
$this->rows[]=$filas;
}
Anexo 5.
Graficar temperatura
<?php
session_start();
require "crud/Conexion.php";
require "crud/Crud.php";
require "RandomClass.php";
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['horaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
?>
<HTML>
<BODY>
<meta charset="utf-8">
<div id="container"></div>
<script src="https://code.jquery.com/jquery.js"></script>
<!-- Importo el archivo Javascript de Highcharts directamente desde
su servidor -->
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script>
},
rangeSelector : {
enabled: false
},
title: {
text: 'Grfica Sensor de Temperatura'
},
xAxis: {
type: 'datetime'
//tickPixelInterval: 150,
//maxZoom: 20 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: 'TEMPERATURA (C)',
margin: 10
}
},
series: [{
name: 'valor',
data: (function() {
var data = [];
<?php
for($i = 0 ;$i<count($filas);$i++){
?>
data.push([<?php echo $timeArray[$i];?>,<?php echo
$valoresy[$i];?>]);
<?php } ?>
return data;
})()
}],
credits: {
enabled: false
}
});
</script>
<form method="get"
action="http://localhost/Conexion_arduino/graficas.php"><button
type="submit">Regresar a Consulta de Sensores</button></form>
</BODY>
</html>
Anexo 6.
Grafica de la humedad relativa
<?php
session_start();
require "crud/Conexion.php";
require "crud/Crud.php";
require "RandomClass.php";
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['horaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
?>
<HTML>
<BODY>
<meta charset="utf-8">
<div id="container"></div>
<script src="https://code.jquery.com/jquery.js"></script>
<!-- Importo el archivo Javascript de Highcharts directamente desde
su servidor -->
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script>
},
rangeSelector : {
enabled: false
},
title: {
text: 'Grfica Sensor de Humedad del Ambiente'
},
xAxis: {
type: 'datetime'
//tickPixelInterval: 150,
//maxZoom: 20 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: '(%):Valor sensado',
margin: 10
}
},
series: [{
name: 'valor',
data: (function() {
var data = [];
<?php
for($i = 0 ;$i<count($filas);$i++){
?>
data.push([<?php echo $timeArray[$i];?>,<?php echo
$valoresy[$i];?>]);
<?php } ?>
return data;
})()
}],
credits: {
enabled: false
}
});
</script>
<form method="get"
action="http://localhost/Conexion_arduino/graficas.php"><button
type="submit">Regresar a Consulta de Sensores</button></form>
</BODY>
</html>
Anexo 7.
Grafica de la luminosidad
<?php
session_start();
require "crud/Conexion.php";
require "crud/Crud.php";
require "RandomClass.php";
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['horaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
?>
<HTML>
<BODY>
<meta charset="utf-8">
<div id="container"></div>
<script src="https://code.jquery.com/jquery.js"></script>
<!-- Importo el archivo Javascript de Highcharts directamente desde
su servidor -->
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script>
},
rangeSelector : {
enabled: false
},
title: {
text: 'Grfica Sensor de Luminosidad'
},
xAxis: {
type: 'datetime'
//tickPixelInterval: 150,
//maxZoom: 20 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: 'LUXES (LX)',
margin: 10
}
},
series: [{
name: 'valor',
data: (function() {
var data = [];
<?php
for($i = 0 ;$i<count($filas);$i++){
?>
data.push([<?php echo $timeArray[$i];?>,<?php echo
$valoresy[$i];?>]);
<?php } ?>
return data;
})()
}],
credits: {
enabled: false
}
});
</script>
<form method="get"
action="http://localhost/Conexion_arduino/graficas.php"><button
type="submit">Regresar a Consulta de Sensores</button></form>
</BODY>
</html>
Anexo 8.
Grafica de la humedad del suelo
<?php
session_start();
require "crud/Conexion.php";
require "crud/Crud.php";
require "RandomClass.php";
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['horaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
$model = new Crud();
$model->select = '*';
$model->from = 'medidas';
$model->condition = "ID_Sensor=2 AND fecha>='$datei' AND
fecha<='$datef'";
$model->Read();
$filas = $model->rows;
$total = count($filas);
echo $total;
//nos creamos dos arrays para almacenar el tiempo y el valor numrico
$valoresy;
$valoresx;
//en un bucle for obtenemos en cada iteracin el valor nmerico y
//el TIMESTAMP del tiempo y lo almacenamos en los arrays
for($i = 0 ;$i<count($filas);$i++){
$valoresy[$i]= $filas[$i][1];
//OBTENEMOS EL TIMESTAMP
$valoresx= $filas[$i][0];
$date = new DateTime($valoresx);
//ALMACENAMOS EL TIMESTAMP EN EL ARRAY
$timeArray[$i] = $date->getTimestamp()*1000;
//echo $timeArray[$i];
}
?>
<HTML>
<BODY>
<meta charset="utf-8">
<div id="container"></div>
<script src="https://code.jquery.com/jquery.js"></script>
<!-- Importo el archivo Javascript de Highcharts directamente desde
su servidor -->
<script src="http://code.highcharts.com/stock/highstock.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script>
},
rangeSelector : {
enabled: false
},
title: {
text: 'Grfica Sensor de Humedad del Suelo'
},
xAxis: {
type: 'datetime'
//tickPixelInterval: 150,
//maxZoom: 20 * 1000
},
yAxis: {
minPadding: 0.2,
maxPadding: 0.2,
title: {
text: 'HUMEDAD (%)',
margin: 10
}
},
series: [{
name: 'valor',
data: (function() {
var data = [];
<?php
for($i = 0 ;$i<count($filas);$i++){
?>
data.push([<?php echo $timeArray[$i];?>,<?php echo
$valoresy[$i];?>]);
<?php } ?>
return data;
})()
}],
credits: {
enabled: false
}
});
</script>
<form method="get"
action="http://localhost/Conexion_arduino/graficas.php"><button
type="submit">Regresar a Consulta de Sensores</button></form>
</BODY>
</html>
Anexo 9.
Descargar temperatura
<?php
require 'crud/Conexion.php';
require 'crud/Crud.php';
session_start();
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['fechaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
// Exporta a Excel
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=Reporte_Temperatura_Ambiente.xls");
?>
<!DOCTYPE html>
<html>
<head>
<!-- Latest compiled and minified CSS -->
<!-- <link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.
css"> -->
<link rel="stylesheet" href="bootstrap-
3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="estilo.css">
<!-- jQuery library -->
<!-- <script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
></script> -->
<script src="bootstrap-3.3.7/jquery.min.js">
<!-- Latest compiled JavaScript -->
<!-- <script
src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js
"></script> -->
<script src="bootstrap-
3.3.7/js/bootstrap.min.js"></script>
<?php
foreach($filas as $fila)
{
echo "<tr>";
echo "<td>".$fila['fecha']."</td>";
echo "<td>".$fila['valor']."</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
Anexo 10.
Descargar humedad relativa
<?php
require 'crud/Conexion.php';
require 'crud/Crud.php';
session_start();
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['fechaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
// Exporta a Excel
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=Reporte_Humedad_Relativa.xls");
?>
<!DOCTYPE html>
<html>
<head>
<!-- Latest compiled and minified CSS -->
<!-- <link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.
css"> -->
<link rel="stylesheet" href="bootstrap-
3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="estilo.css">
<!-- jQuery library -->
<!-- <script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
></script> -->
<script src="bootstrap-3.3.7/jquery.min.js">
<!-- Latest compiled JavaScript -->
<!-- <script
src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js
"></script> -->
<script src="bootstrap-
3.3.7/js/bootstrap.min.js"></script>
<?php
foreach($filas as $fila)
{
echo "<tr>";
echo "<td>".$fila['fecha']."</td>";
echo "<td>".$fila['valor']."</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
Anexo 11.
Descargar luminosidad
<?php
require 'crud/Conexion.php';
require 'crud/Crud.php';
session_start();
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['fechaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
// Exporta a Excel
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=Reporte_Cantidad_Luz.xls");
?>
<!DOCTYPE html>
<html>
<head>
<!-- Latest compiled and minified CSS -->
<!-- <link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.
css"> -->
<link rel="stylesheet" href="bootstrap-
3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="estilo.css">
<!-- jQuery library -->
<!-- <script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
></script> -->
<script src="bootstrap-3.3.7/jquery.min.js">
<!-- Latest compiled JavaScript -->
<!-- <script
src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js
"></script> -->
<script src="bootstrap-
3.3.7/js/bootstrap.min.js"></script>
<meta name="viewport" content="width=device-width,
initial-scale=1">
<meta http-equiv="Conect-Type" content="text/html; charset=UTF-
8">
</head>
<body>
<h1>Datos consultados </h1> <!-- Titulo-->
<strong>El total de medidas son:<?php echo $total; ?> </strong>
<table>
<tr>
<th>Fecha:</th>
<th>Medida [lx]:</th>
</tr>
<?php
foreach($filas as $fila)
{
echo "<tr>";
echo "<td>".$fila['fecha']."</td>";
echo "<td>".$fila['valor']."</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
Anexo 12.
Descargar humedad del suelo
<?php
require 'crud/Conexion.php';
require 'crud/Crud.php';
session_start();
$fechai=$_SESSION['fechai'];
$horai=$_SESSION['horai'];
$fechaf=$_SESSION['fechaf'];
$horaf=$_SESSION['fechaf'];
$datei=$fechai." ".$horai;
$datef=$fechaf." ".$horaf;
// Exporta a Excel
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=Reporte_Humedad_Suelo.xls");
?>
<!DOCTYPE html>
<html>
<head>
<!-- Latest compiled and minified CSS -->
<!-- <link rel="stylesheet"
href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.
css"> -->
<link rel="stylesheet" href="bootstrap-
3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="estilo.css">
<!-- jQuery library -->
<!-- <script
src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"
></script> -->
<script src="bootstrap-3.3.7/jquery.min.js">
<!-- Latest compiled JavaScript -->
<!-- <script
src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js
"></script> -->
<script src="bootstrap-
3.3.7/js/bootstrap.min.js"></script>
foreach($filas as $fila)
{
echo "<tr>";
echo "<td>".$fila['fecha']."</td>";
echo "<td>".$fila['valor']."</td>";
echo "</tr>";
}
?>
</table>
</body>
</html>
Anexo 13.
Leer informacin de la base de datos
<?php
class RandomTable{
public $IDr = 0 ;
//Funcin que crea y devuelve un objeto de conexin a la base de
datos y chequea el estado de la misma.
function conectarBD(){
$server = "localhost";
$usuario = "root";
$pass = "";
$BD = "adquisicion_datos";
//variable que guarda la conexin de la base de datos
$conexion = mysqli_connect($server, $usuario, $pass, $BD);
//Comprobamos si la conexin ha tenido exito
if(!$conexion){
echo 'Ha sucedido un error inexperado en la conexion de
la base de datos<br>';
}
//devolvemos el objeto de conexin para usarlo en las
consultas
return $conexion;
}
/*Desconectar la conexion a la base de datos*/
function desconectarBD($conexion){
//Cierra la conexin y guarda el estado de la operacin
en una variable
$close = mysqli_close($conexion);
//Comprobamos si se ha cerrado la conexin correctamente
if(!$close){
echo 'Ha sucedido un error inexperado en la desconexion
de la base de datos<br>';
}
//devuelve el estado del cierre de conexin
return $close;
}
$rawdata = array();
//guardamos en un array multidimensional todos los datos de la
consulta
$i=0;
while($row = mysqli_fetch_array($result))
{
//guardamos en rawdata todos los vectores/filas que nos
devuelve la consulta
$rawdata[$i] = $row;
$i++;
}
//Cerramos la base de datos
$this->desconectarBD($conexion);
//devolvemos rawdata
return $rawdata;
}
//inserta en la base de datos un nuevo registro en la tabla
usuarios
/*function insertRandom(){
//Generamos un nmero entero aleatorio entre 0 y 100
$ran = rand(0, 100);
//creamos la conexin
$conexion = $this->conectarBD();
//Escribimos la sentencia sql necesaria respetando los tipos de
datos
$sql = "insert into random (valor)
values (".$ran.")";
//hacemos la consulta y la comprobamos
$consulta = mysqli_query($conexion,$sql);
if(!$consulta){
echo "No se ha podido insertar en la base de
datos<br><br>".mysqli_error($conexion);
}
//Desconectamos la base de datos
$this->desconectarBD($conexion);
//devolvemos el resultado de la consulta (true o false)
return $consulta;
}*/
function getAllInfo(){
//Creamos la consulta
$sql = "SELECT * FROM random;";
//obtenemos el array con toda la informacin
return $this->getArraySQL($sql);
}
}
?>
Anexo 14.
Interfaz grfica
<?php
require "crud/Conexion.php";
require "crud/Crud.php";
$mensaje = null;
$model=new Crud();
$model->select= '*'; //que campos buscar
$model->from='sensores'; // nombre tabla
$model->Read();
$filas=$model->rows;
if (isset($_POST["create"]))
{
$sensor=$_POST['sensor'];
$fechai=$_POST['fecha'];
$fechaf=$_POST['fechaF'];
$horai=$_POST['hora'];
$horaf=$_POST['horaF'];
$op=$_POST['opcion'];
session_start();
$_SESSION['fechai']=$fechai;
$_SESSION['fechaf']=$fechaf;
$_SESSION['horai']=$horai;
$_SESSION['horaf']=$horaf;
if ($sensor == '')
{
$mensaje = "Error, llene el campo de Sensor";
}
else if($fechai == '')
{
$mensaje = 'Error, llene el campo de Fecha Inicial';
}
else if($fechaf == '')
{
$mensaje = 'Error, llene el campo de Fecha Final';
}
else if($horai == '')
{
$mensaje = 'Error, llene el campo de Hora Inicial';
}
else if($horaf == '')
{
$mensaje = 'Error, llene el campo de Hora Final';
}
else
{
}
}
?>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<h1>Consulta de Sensores : Estadsticas</h1>
<strong><?php echo $mensaje; ?>
Anexo 15.
Cdigo en Arduino
#include <DHT.h>
/*
Web client
This sketch connects to a website (http://www.google.com)
using an Arduino Wiznet Ethernet shield.
Circuit:
Ethernet shield attached to pins 10, 11, 12, 13
*/
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#define DHTPIN 2 // Pin donde est conectado el sensor DHT22(Temperatura/ Humedad)
#define DHTTYPE DHT22 // Sensor DHT22
#define M1 52//ESTRACTOR DE HUMEDAD
#define M2 53//HUMIDIFICADOR
DHT dht(DHTPIN, DHTTYPE);
EthernetClient client;
int lightPin = 0; // Pin para la fotoresistencia
int humsueloPin = 1; //Pin para el sensor de humedad de suelo
int luz;
int humsuelo;
float hpor;
int relay = 28;//pin para activar el rel
int conta=0;
void setup() {
pinMode(30, OUTPUT);
pinMode(31, OUTPUT);
pinMode(52, OUTPUT);
pinMode(53, OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay,HIGH);
digitalWrite(52, LOW);
digitalWrite(53, LOW);
Serial.println("Iniciando...DHT22 test!");
dht.begin();
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
void loop() {
conta++;
luz=analogRead(lightPin);//leemos luminosidad
delay(10);
float h = dht.readHumidity(); //Leemos la Humedad
float t = dht.readTemperature(); //Leemos la temperatura en grados Celsius
Serial.print("Temperatura=");
Serial.print(t);
Serial.println("*C");
Serial.print("Humedad de Ambiente=");
Serial.print(h);
Serial.println("%");
Serial.print("Luminosidad=");
Serial.print(luz);
Serial.println("lx");
//CONTROL TEMPERATURA
if (t>31){
digitalWrite(52, LOW);
digitalWrite(53, HIGH);
digitalWrite(relay,HIGH);
}
else
{
digitalWrite(52, LOW);
digitalWrite(53, LOW);
if (t<30){
digitalWrite(relay,LOW);
//CONTROL HUMEDAD
if (h<69){
digitalWrite(30, LOW);
digitalWrite(31, HIGH);
}
else
{
digitalWrite(30, LOW);
digitalWrite(31, LOW);