Está en la página 1de 6

/*INSTRUMENTACION ELECTRONICA*/

/*SENSOR DE TEMPERATURA*/
//--------------------------------------------------------------
void main(){
/* --- Declaración de variables --- */

int unidades; //Dato entero, se emplea con el selector.


long dato; /*Dato de 16 bits, almacena el resultado
de la conversión de 10 bits.*/
float voltaje; /*Dato flotante, guarda el valor calculado
del voltaje de entrada.*/
float temperatura; /*Dato flotante, guarda el valor calculado
de la temperatura en decimal.*/
float presion; /*Dato flotante, guarda el valor calculado
de presión en decimal.*/
float humedad; /*Dato flotante, guarda el valor calculado
de humedad en porcentaje.*/

/* --- configuración de periféricos y módulos --- */

set_tris_A(0x03); /*Configura los pines RA0 y RA1 como


entradas.*/

//Configuración del convertidor A/D:

setup_adc_ports(sAN0); //Canal analógico AN0.


setup_adc_ports(sAN2); //Canal analógico AN2.
setup_adc_ports(sAN3); //Canal analógico AN3.

setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno de conversión.


lcd_init(); //Inicializa y prepara el LCD.
unidades = 0; //Inicializa la variable que indica las
unidades

/* --- Ciclo de conversiones A/D --- */

while(TRUE)
{
dato=0; /*Variable dato igual a cero*/
set_adc_channel(0); /*Inicia la conversión A/D por el
canal 0.*/
delay_us(20); /*Tiempo de espera para obtener la
conversión.*/
dato = read_adc(); /*Guarda el resultado de la
conversión en 'dato'.*/
voltaje=(dato*5.0)/1023.0; //Convierte el dato a voltaje.
temperatura=(voltaje/(5.0*0.010));/*Calcula la temperatura
en grados Celsius.*/
set_adc_channel(2); /*Inicia la conversión A/D por el
canal 2.*/
delay_us(20); /*Tiempo de espera para obtener la
conversión.*/
dato=read_adc(); /*Guarda el resultado de la
conversión en 'dato'.*/

voltaje=(dato*5.0)/1023.0; //Convierte el dato a voltaje.


presion=(voltaje*10000/(4.25)); ));/*Calcula la presion
en Pascales.*/

set_adc_channel(3); /*Inicia la conversión A/D por el


canal 3.*/

delay_us(20); /*Tiempo de espera para obtener la


conversión.*/
dato=read_adc(); /*Guarda el resultado de la
conversión en 'dato'.*/

voltaje=(dato*5.0)/1023.0; //Convierte el dato a voltaje.


humedad=(voltaje*90.0/(3.3)); ));/*Calcula la humedad
en porcentaje.*/

if(temperatura>=30.0) //Activa el ventilador si la temp.


output_high(pin_A5); //excede el valor establecido.
else //Si la temperatura es baja, el
output_low(pin_A5); //ventilador se mantiene apagado

printf(lcd_putc,"\fH=%1.2f",humedad); /*Muestra el valor de


humedad.*/
printf(lcd_putc," V=%1.2fk",presion);/*Muestra el valor de
presion*/
if(input(pin_A1) == 1) //Comprueba si se presionó el botón
{
unidades++;
while(input(pin_A1)==1) //Retardo para evitar rebotes
{
delay_ms(5);
}
}
switch(unidades) //Selección de unidades de temp.
{
case 0: //Caso para grados Celsius (ºC)
printf(lcd_putc, "\n Temp=%3.2f%cC",temperatura,223);
delay_ms(100);
break;
case 1: //Caso para grados Fahrenheit (ºF)
temperatura = (1.8*temperatura)+32.0;
printf(lcd_putc, "\n Temp=%3.2f%cF",temperatura,223);
delay_ms(100);
break;
case 2: //Reinicia en grados Celsius.
unidades = 0;
break;
} //Fin del ‘switch’.
} //Fin del ciclo ‘while’.
} //Fin de la función ‘main’.
/*INSTRUMENTACION ELECTRONICA*/
/*SENSOR DE TEMPERATURA*/
//--------------------------------------------------------------
void main(){
/* --- Declaración de variables --- */

int unidades; //Dato entero, se emplea con el selector.


long dato; /*Dato de 16 bits, almacena el resultado
de la conversión de 10 bits.*/
float voltaje; /*Dato flotante, guarda el valor calculado
del voltaje de entrada.*/
float temperatura; /*Dato flotante, guarda el valor calculado
de la temperatura en decimal.*/
float presion; /*Dato flotante, guarda el valor calculado
de presión en decimal.*/
float humedad; /*Dato flotante, guarda el valor calculado
de humedad en porcentaje.*/

/* --- configuración de periféricos y módulos --- */

set_tris_A(0x03); /*Configura los pines RA0 y RA1 como


entradas.*/

//Configuración del convertidor A/D:

setup_adc_ports(sAN0); //Canal analógico AN0.


setup_adc_ports(sAN2); //Canal analógico AN2.
setup_adc_ports(sAN3); //Canal analógico AN3.

setup_adc(ADC_CLOCK_INTERNAL); //Reloj interno de conversión.


lcd_init(); //Inicializa y prepara el LCD.
unidades = 0; //Inicializa la variable que indica las
unidades

/* --- Ciclo de conversiones A/D --- */

while(TRUE)
{
dato=0; /*Variable dato igual a cero*/
set_adc_channel(0); /*Inicia la conversión A/D por el
canal 0.*/
delay_us(20); /*Tiempo de espera para obtener la
conversión.*/
dato = read_adc(); /*Guarda el resultado de la
conversión en 'dato'.*/
voltaje=(dato*5.0)/1023.0; //Convierte el dato a voltaje.
temperatura=(voltaje/(5.0*0.010));/*Calcula la temperatura
en grados Celsius.*/
set_adc_channel(2); /*Inicia la conversión A/D por el
canal 2.*/
delay_us(20); /*Tiempo de espera para obtener la
conversión.*/
dato=read_adc(); /*Guarda el resultado de la
conversión en 'dato'.*/

voltaje=(dato*5.0)/1023.0; //Convierte el dato a voltaje.


presion=(voltaje*10000/(4.25)); ));/*Calcula la presion
en Pascales.*/

set_adc_channel(3); /*Inicia la conversión A/D por el


canal 3.*/

delay_us(20); /*Tiempo de espera para obtener la


conversión.*/
dato=read_adc(); /*Guarda el resultado de la
conversión en 'dato'.*/

voltaje=(dato*5.0)/1023.0; //Convierte el dato a voltaje.


humedad=(voltaje*90.0/(3.3)); ));/*Calcula la humedad
en porcentaje.*/

if(temperatura>=30.0) //Activa el ventilador si la temp.


output_high(pin_A5); //excede el valor establecido.
else //Si la temperatura es baja, el
output_low(pin_A5); //ventilador se mantiene apagado

if(presion >=8000) //Activa la electroválvula si la presion


output_high(pin_B4); //excede el valor establecido.
Else //Si la presión esta por debajo del valor
output_low(pin_B4); //establecido la electroválvula permanece
inactiva.*/

if(humedad>=75.5) //Activa el ventilador extractor si la


output_high(pin_B5); //humedad excede el valor establecido.
else //Si la humedad esta por debajo del valor
output_low(pin_B5); //establecido el ventilador extractor
//permancera apagado.

printf(lcd_putc,"\fH=%1.2f",humedad); /*Muestra el valor de


humedad.*/
printf(lcd_putc," V=%1.2fk",presion);/*Muestra el valor de
presion*/
if(input(pin_A1) == 1) //Comprueba si se presionó el botón
{
unidades++;
while(input(pin_A1)==1) //Retardo para evitar rebotes
{
delay_ms(5);
}
}
switch(unidades) //Selección de unidades de temp.
{
case 0: //Caso para grados Celsius (ºC)
printf(lcd_putc, "\n Temp=%3.2f%cC",temperatura,223);
delay_ms(100);
break;
case 1: //Caso para grados Fahrenheit (ºF)
temperatura = (1.8*temperatura)+32.0;
printf(lcd_putc, "\n Temp=%3.2f%cF",temperatura,223);
delay_ms(100);
break;
case 2: //Reinicia en grados Celsius.
unidades = 0;
break;
} //Fin del ‘switch’.
} //Fin del ciclo ‘while’.
} //Fin de la función ‘main’.

También podría gustarte