ESTE PROGRAMA VA A CONTROLAR LAS VARIABLES DE HUMEDAD Y TEMPERATURA SET POINT POR EL USUARIO A TRAVES DE UNA INTERFAZ

Dependencies:   mbed TextLCD Keypad DS1307 DHT11

DATALLOGER DE HUMEDAD Y TEMPERATURA CON

DESCRIPCION:

El desarrollo del proyecto es un datalogger de humedad y temperatura.Se empleo comunicación I2C a través del módulo RTC DS1307 que permite tener hora y fecha en tiempo real para detallar el tiempo de registro y mantiene su data actualizada aún cuando el sistema se encuentre sin alimentación eléctrica ya que le modulo posee una batería externa de 3VDC , comunicación serial rs232 para mostrar los datos en el ordenador, la adquisición de las variables físicas de humedad y temperatura se las empleo a través del módulo DTH11.Se realizó el manejo de interrupciones para el registro cada 20 segundos de humedad y temperatura. Se utilizó lenguaje de programación estructurado en funciones.

COMPONENTES:

Placa Discovery STM32M4

https://os.mbed.com/media/uploads/geogarcia/stm32f4_discovery_-1-.jpg

Esta placa esta basada en un núcleo arm del fabricante ST con cortex M4, en la cual se desarrollo y compilo la programación del proyecto.

https://os.mbed.com/media/uploads/geogarcia/stm32f4-discovery-pinout.png

Se muestra el Pinout de la placa STM32 Discovery, el cual me permite determinar los GPIO de la placa, lo cual es lo recomendable emplear por el MCU es de multiples pines.

Placa base de desarrollo de Mikroe

https://os.mbed.com/media/uploads/geogarcia/placa_base_discovery_shield.jpg

Esta placa es una extension de los pines de la placa discovery para conexión de módulos y comunicación can y usb uart con esta ultima se realizó la comunicación serial hacia el ordenador.

Módulo DTH11

https://os.mbed.com/media/uploads/geogarcia/dht11-temperature-sensor-pinout.jpg

Se muestra el pinout del modulo de humedad y temperatura el cual me envía la trama data de la medición en números enteros, para ser tratada en la programación del proyecto.

Módulo RTC DS1307

https://os.mbed.com/media/uploads/geogarcia/ds1307-rtc-module-pinout.png

Este es un. modulo de reloj en tiempo real el cual posee baterías externa que una vez configurado el tiempo y fecha actuales lo va a mantener, se lo empleo para el registro de fecha y hora.

Desarrollo de programación:

En esta sección de detallara las principales lineas de programación del proyecto como son la inclusion de librerías, configuración de puertos, lectura del sensor DTH11, configuración del módulo RTC DS1307, lectura del módulo RTC DS1307, registro de humedad, temperatura, fecha y hora cada 20 segundos empleando interrupciones.

Declaración de librerías

////// LIBRERIAS DEL PROYECTO///////////

  1. include "mbed.h" libreria principal mbed
  1. include "TextLCD.h" libreria lcd
  1. include "Keypad.h" libreria Keypad
  1. include "DHT11.h" libreria sensor de humedad y temperatura
  1. include "math.h" libreria matematicas
  1. include "ds1307.h" libreria rtc ds1307

///////////////////////////

Configuración de GPIO

/////// CONFIGURACION DE GPIO ////////////

Serial pc(PA_2,PA_3); configuracion de pines de Tx,Rx de comunicacion serial

DigitalOut myled(PD_13); configura salida digital y asigna a myled al pin d13

TextLCD lcd(PB_7,PB_8,PB_15,PB_14,PB_13,PB_12,TextLCD:: LCD16x2); configuracion de conexion de lcd

Keypad teclado(PC_8,PC_11,PC_7,PC_6,PB_0,PD_6,PD_7,PB_3);configuraciones de pines de teclado

DHT11 dato(PC_5); configuracion de pin de data sensor

DS1307 my1307(PB_7,PB_8); configuracion de pines de comunicacion I2C(sda,scl)

Ticker flipper1; configuracion de funcion ticker(interrupcion)

Ticker flipper2; configuracion de funcion ticker(interrupcion) ///////////////////////////

Lectura del sensor DHT11

////////////////////////// //////// SUB-RUTina SENSORE DHT11/////////

void sensor(){

s=dato.readData();

if (s != DHT11::OK){

lcd.printf("ERROR SENSOR\r\n");

}

else{

lcd.cls();

return;

}

pc.printf("Temperatura:%d C \r ",dato.readTemperature());

lcd.locate(0,1);

lcd.printf( "Hr:%d hr SP: 75 ",dato.readHumidity());

pc.printf("Humedad:%d Hr \r ",dato.readHumidity());

}

///////////////////////////

Configuración tiempo y fecha en el RTC DS1307

////////////////////// ///// SUB-RUTina DS1307 calibracion de tiempo/////////

void DS1307RTC(){

int junk=0;

sec= 40;

mins= 40;

hours=10;

day=6;

date=15;

month=2;

year=20;

test_rw(my1307.settime(sec,mins,hours,day,date,month,year));

pc.printf("seconds set are %.2D\n\r",sec);

pc.printf("minutes set are %.2D\n\r",mins);

pc.printf("hours set are %.2D\n\r",hours);

pc.printf("day set are %.2D\n\r",day);

pc.printf("date set are %.2D\n\r",date);

pc.printf("month set are %.2D\n\r",month);

pc.printf("year set are %.2D\n\r",year);

wait(3);

while(1){

test_rw(my1307.gettime(&sec,&mins,&hours,&day,&date,&month,&year));

pc.printf("seconds set are %.2D \n\r",sec);

pc.printf("minutes set are %.2D\n\r",mins);

pc.printf("hours set are %.2D\n\r",hours);

pc.printf("day set are %.2D\n\r",day);

pc.printf("date set are %.2D\n\r",date);

pc.printf("month set are %.2D\n\r",month);

pc.printf("year set are %.2D\n\r",year);

junk= 0x39;

test_rw(my1307.write(0x20,junk));

pc.printf("Value written to register 0x20 %.2x \n\r",junk);

junk=0;

test_rw(my1307.read(0x20,&junk));

pc.printf("Value read from register 0x20 %.2x \n\r",junk);

wait(1);

rtc=1;

} }

}

////////////////////////

Lectura de fecha y hora en el RTC DS1307

////////////////////// //////// SUB-RUTina lectura DS1307///////

void lecturads1307(){

my1307.gettime(&sec,&mins,&hours,&day,&date,&month,&year);

pc.printf("DATE:\r");

pc.printf("%.2D",day);

pc.printf(":%.2D",month);

pc.printf(":%.2D\r",year);

pc.printf(" %.2D",hours);

pc.printf(":%.2D",mins);

pc.printf(":%.2D\n\r",sec);

} //////////////////////

Empleo del manejo de interrupciones para el resgitro de humedad, temperatura y fecha

Ticker flipper1; configuracion de funcion ticker(interrupcion)

//////// RUTINA PRINCIPAL //////////

int main() {

z=0;

conteo=0;

muestreo=0;

avrtemp=0;

avrhum=0;

released=1;

lcd.printf("helllooo people"); escribe caracteres en el lcd

flipper1.attach(&flip1,20.0);

flipper2.attach(&flip2,0.001);

while(1) {

if (rtc==0) DS1307RTC();

lcd.cls();borra caracters

lcd.locate(0,0); LOCALIZA INICIO DE TEXTO EN COLUMNAS Y FILAS

lcd.printf( " Proyecto " );

pc.printf("PROYECTO TUTORIA\n\r " );

lcd.locate(0,1);

lcd.printf( " Tutoria " );

pc.printf("Tutoria \n\r ");

wait(3);

lcd.cls();borra caracters

lcd.locate(0,0);

lcd.printf( " Sistemas " );

pc.printf("SISTEMAS MICROPROCESADOS \n\r ");

pc.printf("GEOVANNY GARCIA \n\r ");

lcd.locate(0,1);

lcd.printf( "Microprocesados " );

pc.printf("MICROPORCESADOS \n\r ");

wait(2);

lcd.cls();borra caracters

inicial();

}

}

///////////////////// //////// SUB-RUTina INTERRUPCION1/////

void flip1(){

pc.printf("**SE REALIZO REGISTRO DE DATOS** \n\r");

pc.printf("Temperatura:%d C \r ",dato.readTemperature());

pc.printf("Humedad:%d Hr \r ",dato.readHumidity());

pc.printf("DATE:\r");

pc.printf("%.2D",day);

pc.printf(":%.2D",month);

pc.printf(":%.2D\r",year);

pc.printf(" %.2D",hours);

pc.printf(":%.2D",mins);

pc.printf(":%.2D\n\r",sec);

pc.printf("**FIN DE REGISTRO DE DATOS**\n\r");

}

//////////////////////

Montaje y pruebas de funcionamiento

Conexión del proyecto

https://os.mbed.com/media/uploads/geogarcia/captura_de_pantalla_2020-02-17_a_la-s-_10.14.38.png

Módulo RTC DS1307

https://os.mbed.com/media/uploads/geogarcia/captura_de_pantalla_2020-02-17_a_la-s-_10.16.55.png

Módulo DTH11

https://os.mbed.com/media/uploads/geogarcia/captura_de_pantalla_2020-02-17_a_la-s-_10.16.30.png

Monitor serie y muestra datos

https://os.mbed.com/media/uploads/geogarcia/captura_de_pantalla_2020-02-17_a_la-s-_10.19.59.png

Se empleo el monitor serial de Arduino para la visualización de la data.

Video demostrativo del proyecto

https://youtu.be/b88Sev175G0


All wikipages