You are on page 1of 10

Informe de proyecto final de electrnica digital 3

Control para maquia de helados Taylor

Por:
Efrn Leonardo Sosa Bonilla

Presentado a :
Ing. Miguel Angel Montilla Garcia

Universidad de ibague
Programa de ingeniera electrnica
2014B

Objetivos

Disear una control de temperatura y de nivel por medio de un algoritmo en lenguaje C


Realizar una estrategia de solucin que cumpla con la problemtica
Realizar un diagrama de bloques que explique brevemente el funcionamiento del proyecto
Realizar una simulacin del problema que muestre el funcionamiento del mismo

Estrategia de solucin
Para dar una solucin del problema primero se debe saber el hardware con el que se cuenta en
este caso el sensor de temperatura ser un LM35 el cual se encargara de enviar los datos de la
seal actual, se contara con un teclado matricial 4*4 el cual servir para ingresar el rango de
temperatura al que se trabajara por ltimo se dispondr de una pantalla de cristal lquido el cual
mostrara los datos que se estarn procesando y las alertas segn segn en el estado en que este.

El algoritmo tendr como datos de entrada los datos que el LM35 que ingresaran por el conversor
anlogo digital estos datos sern procesados y dependiendo de los valores que se hallan ingresado
por el teclado matricial se determinara si la temperatura es inferior o superior a este rango, si la
temperatura inferior es mayor que la superior tambin se mostrara un mensaje de error, para la
parte del nivel se dispondrn 3 rangos bajo medio y alto estos sern entradas por puesto c los
cuales sern pulsadores que simularan la entrada de estos niveles el nivel medio no se mostrara
en pantalla los otros dos si se mostraran dando prioridad en las alertas; todo estos mensajes y
resultados se mostraran en la pantalla de cristal liquido

Diagramas de bloques

Sensor de
temperatura

Nivel

Procesamiento
de la seal

Visualizacin de
Mediciones y alertas

Simulacin

Conclusiones

Con cualquier leguaje de programacin se dan soluciones a problemas de la vida cotidiana


Haciendo uso de libreras elaboradas por otras personas puedo llegar a obtener un
algoritmo ms eficiente y ms elaborado puesto que tendra un punto de partida para dar
solucin al problema planteado

Algoritmo
#include <16F877A.h>
#device ADC = 10

// resolucion del conversor A/D

#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <DriverTec4x4.c>
#include <lcd.c>

// fusibles

// librerias para el teclado


// librerias para el LCD

#use fast_io (A)


// PARA PERMITIRNOS CONFIGURAR MANUALMENTE
#use fast_io (D)
// LOS PUERTOS COMO ENTRADA O SALIDA
#DEFINE nivel1
pin_C0
#DEFINE nivel2
pin_C1
#DEFINE nivel3
pin_C2
int1
n;
// variables utilisadas para el uso del while
int8
NTec;
int16 UNIDAD,DECENA,CENTENA,UNIDADMIL;
int16 aux_vtmax,aux_vtmin; // variables para la visualizacion del voltaje ademas de uso de auxiliares para Vmin y
Vmax
int16 Tmin[4],Tmax[4],V;
// vectores para capturar Vmin Y Vamx a travaz del teclado
int16 aux,Valor,aux1,dato;
void IniPuertos(){
// funcion para definir que puertos se usan como entrada y salida
port_B_pullups(true);
set_tris_B(0x0f);
set_tris_C(0x0f);}
void IniConversorAD(){ // se inicializa el puerto A como conversor A/D
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(AN0);
set_tris_A(0xFF);}
void Leersenal(){
// Funcion para leer un valor analogico por el RCO de 0 a 1023
set_adc_channel(0);
delay_us(10);
Valor = read_adc();}

//void nivel(){

//

if(!input(nivel1)

void ProcesarTeclado(){
// Esta funcin ejecuta la accin requerida por cada pulsador del teclado.
if(NTec!=16){
// Si se oprimi algn pulsador se
delay_ms(150);}}
void teclado(){
while(n == 0){

// a traves del teclado

NTec = LeerTeclado();
if( NTec == 0){
V = 1;
n++;
delay_ms(150);}
else if(NTec == 1){
V = 2;
n++;
delay_ms(150);}
else if(NTec == 2){
V = 3;
n++;
delay_ms(150);}
else if(NTec == 4){
V = 4;
n++;
delay_ms(150);}
else if(NTec == 5){
V = 5;
n++;
delay_ms(150);}
else if(NTec == 6){
V = 6;
n++;
delay_ms(150);}
else if(NTec == 8){
V = 7;
n++;
delay_ms(150);}
else if(NTec == 9){
V = 8;
n++;
delay_ms(150);}
else if(NTec == 10){
V = 9;
n++;
delay_ms(150);}
else if(NTec == 13){
V = 0;
n++;
delay_ms(150);}
}

}
//////////////////////////////////////////////////////////////////////////////////////
//
PROGRAMA PRINCIPAL
//
//////////////////////////////////////////////////////////////////////////////////////

void CONV_SENAL(){
aux = Valor*5*0.9765625;}
void main(){
IniPuertos();
IniConversorAD();
lcd_init();
lcd_putc("\f* TAYLOR * ");
lcd_putc("\nPOR: LEONARDO XD ");
Delay_ms(2000);
while (true){
n = 0;
Tmin[0] = 0;
Tmin[1] = 0;
Tmin[2] = 0;
Tmin[3] = 0;
Tmax[0] = 0;
Tmax[1] = 0;
Tmax[2] = 0;
Tmax[3] = 0;
aux_vtmin = 0;
aux_vtmax = 0;

lcd_putc("\f DIGITE TEMP MIN");


lcd_putc("\nTEMP MIN = ---,-");

teclado();
// se acquieren los valores del teclado
n = 0;
Tmin[0] = V;
lcd_gotoxy(12,2);
lcd_putc( Tmin[0] + 0x30);
delay_ms(100);

teclado();
// se acquieren los valores del teclado
n = 0;
Tmin[1] = V;
lcd_putc( Tmin[1] + 0x30);
delay_ms(150);

teclado();
// se acquieren los valores del teclado
n = 0;
Tmin[2] = V;
lcd_putc( Tmin[2] + 0x30);
delay_ms(150);

teclado();
n=0;
Tmin[3] = V;
lcd_gotoxy(16,2);
lcd_putc( Tmin[3] + 0x30);
delay_ms(800);

lcd_putc("\fTEMP INTRODUCIDO ");


delay_ms(1000);

lcd_putc("\f DIGITE TEMP MAX");


lcd_putc("\nTEMP MAX = ---,-");
teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[0] = V;
lcd_gotoxy(12,2);
// se adquire los valores para Vmax a traves del teclado
lcd_putc( Tmax[0] + 0x30);
delay_ms(150);

teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[1] = V;
lcd_putc( Tmax[1] + 0x30);
delay_ms(150);
teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[2] = V;
lcd_putc( Tmax[2] + 0x30);
delay_ms(150);

teclado();
// se acquieren los valores del teclado
n = 0;
Tmax[3] = V;
lcd_gotoxy(16,2);
lcd_putc( Tmax[3] + 0x30);
delay_ms(800);
lcd_putc("\fTEMP INTRODUCIDO ");
delay_ms(1000);

aux_vtmin = ((Tmin[0]*1000) + (Tmin[1]*100) + Tmin[2]*10 + Tmin[3]); // se normaliza los valores de los vectores y
se guardan en una variable
aux_vtmax = ((Tmax[0]*1000) + (Tmax[1]*100) + Tmax[2]*10 + Tmax[3]);
if(aux_vtmin >= aux_vtmax){

// se verifica si el Vmin es mayor al Vmax


// si es cierto esto se desplieja un mensaje

lcd_putc("\f ERROR ");


lcd_putc("\n TMIN >= TMAX ");
delay_ms(2000);}
else{
n = 0;
lcd_putc("\f TEMPERATURA.");
lcd_putc("\n TEM =
N= ");
while (n == 0){
NTec = LeerTeclado();
if( NTec == 15){
// si se preciona la tecla D el pic coloca todas la variables en cero
n++;
// y se reinicia
ProcesarTeclado();
ProcesarTeclado();
}

leersenal();
CONV_SENAL();
UNIDAD = (aux/1000);
DECENA = (aux%1000)/100;
aux1=aux%100;
CENTENA = (aux1/10);
UNIDADMIL = (aux1%10);
while(input(nivel1)){
lcd_putc("\n NIVEL BAJO");
delay_ms(150);
}
while(input(nivel3)){
lcd_putc("\n NIVEL ALTO");
delay_ms(150);
}
while (aux > aux_vtmax){
lcd_putc("\nTemperatura alta");
delay_ms(150);
leersenal();
CONV_SENAL();
}

while (aux < aux_vtmin){


lcd_putc("\nTemperatura baja");
delay_ms(150);
leersenal();
CONV_SENAL();
}
lcd_putc("\n TEM =
");
lcd_gotoxy(8,2);
lcd_putc( UNIDAD + 0x30);
lcd_putc( DECENA + 0x30);
lcd_putc( CENTENA + 0x30);
lcd_putc(".");
lcd_putc( UNIDADMIL + 0x30);
delay_ms(150);}
}
}
}