Reloj Calendario con Temperatura y Humedad

37
http://relojcalendariotemyhum.blogspot.com/ ()tructura basica de programacion. 5-2-2015 Por: Byron Ganazhapa http://relojcalendariotemyhum.blogspot.com/ Página 1 CODEVISION AVR RELOJ, CALENDARIO , TEMPERATUR A Y H

description

Este proyecto deliberará la visualización del tiempo en el formato hh:mm:ss de 24 horas, fecha en un formato de DD:MM:AA, temperatura en grados celcius [°C] y humedad relativa [%H].

Transcript of Reloj Calendario con Temperatura y Humedad

Reloj, Calendario, Temperatura y Humedad

Por: Byron Ganazhapa

ContenidoIntroduccin1Qu necesitamos?1Desarrollo4Desplazamiento o Barrido4BCD a 7 segmentos5Hora y Fecha5Sensor de Temperatura5Sensor de Humedad6Esquemticos1Diseo de PCB1Diseo de la tarjeta de control para su elaboracin en PCB de placa doble1Diseo de la tarjeta de display y visualizacin en PCB.2Diseo en 3D de las placas PCB3Codigo4Imgenes del proyecto concluido11

http://relojcalendariotemyhum.blogspot.com/Pgina 1

http://relojcalendariotemyhum.blogspot.com/Pgina 19

Introduccin

Un visualizador de reloj de tiempo real y variables de clima, se utiliza para visualizar el tiempo y fecha en curso con temperatura y humedad en el ambiente seleccionado. Este proyecto deliberar la visualizacin del tiempo en el formato hh:mm:ss de 24 horas, fecha en un formato de DD:MM:AA, temperatura en grados celcius [C] y humedad relativa [%H]. El microcontrolador utilizado es el Atmega32A que enva los datos a visualizar a 16 display de 7 segmentos nodo comn. Los 16 displays son encendidos individualmente uno seguido de otro y cada conjunto de 8 displays son conectados a un chip decodificador BCD a 7 segmentos (7447) con el propsito de ahorrar puertos conectados al Atmega, mientras que cada comn de los displays son conectados con un transistor 2N3904 a un puerto del Atmega. Para la hora y fecha se usa una RTC (DS1307), para la temperatura un termistor (TTC103) y humedad un sensor HH10D cuya salida es un valor de frecuencia. El programa del microcontrolador dispone una velocidad de desplazamiento o de barrido entre displays por cada 1ms, as como los datos a visualizar que vamos de mostrar.Para la visualizacin dispone un una funcin para configurar la fecha y hora a travs de 3 pulsadores.

Qu necesitamos?

Para este proyecto es muy indispensable disponer de un conjunto de herramientas bsicas de un laboratorio de electrnica: un soldador, alambre de estao, unos alicates de punta de aguja y cables.Para el desarrollo de nuestro proyecto dispondremos de los siguientes materiales: 1 Atmega32A 1 termistor TTC103 1 sensor de Humedad HH10D 16 displays de 7 segmentos nodo comn (a su color preferido) 6 displays en par pequeos, 2 individuales pequeos y 2 individuales medianos. 2 Decodificadores BCD a 7 segmentos 74LS47. 15 resistencias de 330 Ohms. 16 resistencias de 1 KOhms 5 resistencias de 10 KOhms 2 resistencias de 4.7 KOhms 2 resistencias de 560 Ohms 1 resistencia de 120 Ohms 1 resistencia de 220 Ohms 1 potencimetro lineal de 10 KOhms 16 transistores 2N3904 1 Real Time Clock DS1307 1 cristal 32.768KHZ 1 batera de botn 3V con su porta-pila 2 condensadores electrolticos de 47uF 1 condensador electroltico de 100uF 2 condensadores cermicos de 0.1uF 4 condensadores cermicos de 10nF 1 Led rojo de 3mm 3 pulsadores 4 jumpers. 1 regleta de espadines hembra y macho 1 regulador de voltaje LM317 Jack DC para PCB. Placa doble PCB

Atemga32ATermistor TTC10HH10D

Displays en parDisplay Display mediano

Decodificadores BCD a 7 segmentos 74LS47Resistencias.Potencimetro lineal

Ttransistores 2N3904Real Time Clock DS1307Cristal 32.768KHZ

Batera de botn 3V con su porta-pilaCondensadores electrolticosCondensadores cermicos

Led rojo de 3mmPulsadoresJumpers

Espadines hembra y machoRegulador de voltaje LM317Jack DC para PCB

Desarrollo

Desplazamiento o BarridoEl barrido de los displays es bsicamente una manera de activar uno por uno en un instante a una frecuencia elevada.Un display de 7-segmentos es una manera de visualizar datos obtenidos por el uC enviados a travs de 8 puertos por lo que equivale a utilizar todo un puerto del uC para poder manejar un solo 7-segmentos. Pero en esta ocasin nos encontramos con la necesidad de utilizar ms de un display pero a la vez no disponemos de la cantidad suficiente de puertos para ser utilizados. Por la falta de puertos es imposible conectar y encender todo un conjunto de 16 dispalys, para ello se utiliza el mtodo de barrido que consiste en encender y apagar cada display seguido de otro cada 1ms, entonces no la vemos encenderse y apagarse, porque la frecuencia de es imperceptible al ojo humano.Consideramos encender y apagar en 4 puertos del uC para un conjunto de 8 (displays de tiempo y temperatura), y otros 4 puertos para un conjunto de 8 (displays de fecha y humedad). El propsito de esta divisin es mejorar el rendimiento durante el proceso de barrido; por ejemplo durante el encendido y apagado del primer y ltimo display hay que considerar el tiempo que demora e barrer hasta el ltimo display, en este caso es una frecuencia de aproximadamente de 8ms sin considerar tiempos muertos del uC.BCD a 7 segmentosUno de los problemas mencionados anteriormente es el nmero de puertos limitados del uC, por lo que se utiliza un chip para decodificar datos BCD de 4 bits a 7 segmentos correspondiente a cada display,Cada conjunto de 8 displays son conectados a un chip decodificador BCD a 7-segmentos, por lo que es necesario el uso de 2 chip 74LS47. El nmero total de puertos utilizados para la presentacin de datos son de 8 puertos, y para el barrido de los displays son de 16 puertos uno por display conectado al comn, por lo tanto los puertos utilizados por el uC son de 24 puertos para un total de 16 displays.Hora y FechaLa presentacin de hora y fecha se la realiza mediante un el dispositivo DS1307, Por la simple razn de trabajar con eventos ms precisos, puntuales y exactos a lo largo del tiempo. Este pequeo dispositivo es uno de los ms populares en relojes RTC (Real Time Clock) por su sencillez de uso y por su confiabilidad a largo plazo. Preparado para ofrecerte la hora hasta el ao 2100 y bisiestos.Para la lectura de hora y fecha se usa el bus I2C entre el uC y RTC que brinda hora con minutos y segundos y calendario que contempla los aos bisiestos hasta fin de siglo.Sensor de TemperaturaUno de los principales objetivos de este proyecto es el uso de un sensor de temperatura analgica para la visualizacin de temperatura en grados celcius en dos displays.El sensor utilizado es el TTC103 de salida de voltaje analgico, por la nica razn de disponer este dispositivo, la opcin de utilizar otro sensor es opcional, pero yo dispongo del termistor. Las caractersticas del termistor son las siguientes:CaractersticasValor

Valor de resistencia nominal del termistor (NTC) a 25C10000 [ohm]

Parmetro beta4050 [K]

Frmula utilizada por el fabricante

Para la lectura de los datos del sensor se utiliza un puerto analgico del uC el cual es el puerto ADC7, y para obtener la temperatura real se utiliza la frmula propuesta el fabricante en grados Kelvin, y para obtener en grados celcius como se lo ha propuesto solo se usa una simple ecuacin C = K - 273.15.Sensor de HumedadOtro de los objetivos de este proyecto es el uso de un sensor de humedad para la visualizacin de humedad relativa en dos displays.El sensor utilizado es el HH10D cuya salida es un valor de frecuencia que vara entre los 5 y 10 kHz dependiendo de la humedad entre el 1 y 99 % respectivamente.El modulo del HH10D consiste en un sensor capacitivo tipo CMOS, convertidor de frecuencia y una memoria EEPROM usada para el almacenamiento de los factores de calibracin y para el clculo de la humedad. Debido a las caractersticas del sensor de humedad de tipo condensador, el sistema puede responder a los cambios de humedad muy rpido.Las caractersticas del sensor de humedad son las siguientes:

ParmetroMnimonominalMximo

Rango de humedad1 %99 %

exactitud-3 %+3 %

Rango de temperatura-10 C+60 C

Voltaje de operacin2.7 V3 V3.3 V

estabilidad vs tiempo1 % por ao

Corriente de consumo120 uA150 uA180 uA

Rango de frecuencia de salida5 kHz6.5 kHz10 kHz

Para la lectura de humedad correcta, dos factores de calibracin deben ser ledos desde la EEPROM en la direccin 10 y 12 por un bus i2C para la sensibilidad y compensacin respectivamente. Una vez calibrado el modulo, se mide la frecuencia de salida del sensor, entonces el valor de humedad correcto puede ser calculada mediante la siguiente expresin:

La direccin fsica de la EEPROM est fijada a 81.Direccin de la sensibilidad 10.Direccin de la compensacin 12.

Para la lectura de los factores de calibracin puedes usar otro programa en el mismo circuito del proyecto o como prefieras para saber qu factores corresponden a tu sensor. Para mi sensor son: sens = 377 y compensacin = 7792.PulsadoresCon el objeto de realizar un reloj con funciones bsicas, se incorpor 3 pulsadores con el propsito de igualar la hora o cambiar la fecha.El pulsador Men realiza la funcin de cambiar de modo normal a modo minutos, horas, aos, meses y das: Menu = 0; modo normal Menu = 1; modo de igualar minutos Menu = 2; modo de igualar horas Menu = 3; modo de igualar Aos Menu = 4; modo de igualar meses Menu = 5; modo de igualar das Menu = 6; modo de guardar en memoria tiempo y fecha actualizadaLos pulsadores de disminuir (-) y aumentar (+) realizar la simple funcin de cambiar los valores de los datos para obtener los deseados o igualados con respecto a un reloj o calendario actual.

EsquemticosEsquema del reloj calendario, temperatura y humedad.

Nota: no existe una librera en Proteus para el HH10D por lo que se usa un generador de onda cuadrada y se lo conecta con espadines.Se usa un Lm317 por la razn de utilizar componentes disponibles a mi alcance, si prefieres puedes usar un Lm1117 y modificar el esquema para obtener 3.3V.

Diseo de PCBDiseo de la tarjeta de control para su elaboracin en PCB de placa doble

Placa superior de la PCB.

Placa inferior de la PCB.

Diseo de la tarjeta de display y visualizacin en PCB.

Placa superior de la PCB.

Placa inferior de la PCB.

Diseo en 3D de las placas PCBSe fabricarn 2 placas para evitar realizar una sola grande y para empotrar una sobre otra. Si prefieres puedes usar componentes superficiales o SMD y modificando el diseo en PCB.

Codigo

El programa fue desarrollado en CodevisionAVR versin 2.05.0

/*****************************************************This program was produced by theCodeWizardAVR V2.05.0 ProfessionalAutomatic Program Generator Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.http://www.hpinfotech.com

Project : Reloj, Temperatura y HumedadVersion : 1.0Date : 30/09/2014Author : Byron GanazhapaCompany : UTPLComments:

Chip type : ATmega32AProgram type : ApplicationAVR Core Clock frequency: 8,000000 MHzMemory model : SmallExternal RAM size : 0Data Stack size : 512*****************************************************/

#include #include #include #include #include #include

// Variables de tiempo y fechaunsigned char hora;unsigned char minu;unsigned char seg;unsigned char dia;unsigned char mes;unsigned char anyo;unsigned char hora_BCD;unsigned char minu_BCD;unsigned char seg_BCD;unsigned char dia_BCD;unsigned char mes_BCD;unsigned char anyo_BCD;unsigned char dig_2_seg, dig_1_seg;unsigned char dig_2_min, dig_1_min;unsigned char dig_2_hora, dig_1_hora;unsigned char dig_2_dia, dig_1_dia;unsigned char dig_2_mes, dig_1_mes;unsigned char dig_2_anyo, dig_1_anyo;unsigned char get_hora, get_minu, get_seg;unsigned char get_dia, get_mes, get_anyo;

#define DISPLAY_1_SEG 0x01#define DISPLAY_2_SEG 0x01#define DISPLAY_1_MIN 0x01#define DISPLAY_2_MIN 0x01#define DISPLAY_1_HORA 0x01#define DISPLAY_2_HORA 0x01#define DISPLAY_1_DIA 0x01#define DISPLAY_2_DIA 0x01#define DISPLAY_1_MES 0x01#define DISPLAY_2_MES 0x01#define DISPLAY_1_ANYO 0x01#define DISPLAY_2_ANYO 0x01

#define DISPLAY_1_TEMPERATURA 0x01#define DISPLAY_2_TEMPERATURA 0x01#define DISPLAY_1_HUMEDAD 0x01#define DISPLAY_2_HUMEDAD 0x01

int Menu=0;

int dig_1_temp, dig_2_temp;int dig_1_hum, dig_2_hum;

// variables para sensor de humedadunsigned int count = 0;float temp;float frecuencia;float H = 0.0;int Humedad;

// variables para sensor de tempoeraturafloat Vin = 5.0; // [V] Voltage de entrada en el divisor de tensionfloat Raux = 10000; // [ohm] Valor de la resistencia secundaria del divisor de tensionfloat R0 = 10000; // [ohm] Valor de resistencia nominal del termistor (NTC) a 25Cfloat T0 = 298.15; // [K] (25C)float Vout = 0.0; // [V] Voltage given by the Voltage-Dividerfloat Rout = 0.0; // [ohm] Resistencia actual del Termistor (NTC)float beta = 4050.0; // [K] Parametro Betafloat TempK = 0.0; // [K] Temperatura de salida en grados Kelvinint TempC = 0; // [C] Temperatura de salida en grados Celsiusfloat Rinf; // [ohm] Parametros Rinflong iCont = 0; // Contador de ciclos, par el calculo de la temperatura mediafloat cTemp1; // Variable temporal para acumular las temperaturas leidas

// variables para ADCunsigned int adc_data;#define ADC_VREF_TYPE 0x40 //47

// I2C Bus functions#asm .equ __i2c_port=0x15 ;PORTC .equ __sda_bit=1 .equ __scl_bit=0#endasm#include

// DS1307 Real Time Clock functions#include

// External Interrupt 0 service routineinterrupt [EXT_INT0] void ext_int0_isr(void){ if(Menu == 1){ // igualar minutos minu = minu + 1; delay_ms(100); if(minu>59) minu = 0; }

if(Menu == 2){ // igualar horas hora = hora + 1; delay_ms(100); if(hora>24) hora = 0; }

if(Menu == 3){ // igualar ao anyo = anyo + 1; delay_ms(100); if(anyo>99) anyo = 0; }

if(Menu == 4){ // igualar mes mes = mes + 1; delay_ms(100); if(mes>12) mes = 0; }

if(Menu == 5){ // igualar dia dia = dia + 1; delay_ms(100); if(dia>31) dia = 0; }}

// External Interrupt 1 service routineinterrupt [EXT_INT1] void ext_int1_isr(void){if(Menu == 1){ // igualar minutos minu = minu - 1; delay_ms(100); if((signed char)minu4; dig_1_hora = hora_BCD&0x0F; TempC = bin2bcd(TempC); dig_2_temp = (TempC&0xF0)>>4; dig_1_temp = TempC&0x0F;

dia_BCD = bin2bcd(dia); dig_2_dia = dia_BCD&0xF0; dig_1_dia = (dia_BCD&0x0F)