Circuitos Electronicos

Coleccion de circuitos electronicos, diagramas y esquematicos publicados en Ayuda Electronica.


¿Como medir humedad relativa?

En este artículo voy a detallar el concepto para que puedas construir tu propio medidor de humedad relativa (higrómetro), no quedara tan bonito como el de la foto pero el echo de hacerlo nosotros mismo le da un gusto especial sumado a que el diseño final va a depender de nuestra imaginación. Antes de ir de lleno tenemos que conocer que vamos a medir:

Humedad Relativa (RH): Es una manera de expresar y cuantificar la cantidad de vapor de agua contenida en un determinado volumen de aire; por definición, se expresa en porcentaje (%) como la relación que hay entre la masa de agua contenida en el aire y la masa de agua que se requiere para producir la saturación del mismo aire. Cuando el aire está saturado, su contenido de agua es el máximo y se dice que su humedad relativa es también la máxima o  del 100 %.

Sensor de Humedad Relativa

Para este ejemplo voy a basarme en el sensor de Phillips 2322 691 90001. Como todos los sensores de humedad relativa analógicos, consiste en una membrana no conductora que se encuentra cubierta en ambos lados con una capa de oro. La constante dieléctrica de la membrana varía en función de la humedad relativa del ambiente y con ello el valor de capacidad del sensor.

Las características no se ven afectadas por condensación accidental de agua en la membrana.

Entonces podemos resumir en que se trata de un sensor capacitivo, el cual varia su capacidad según la humedad del ambiente, siguiendo la siguiente curva:

lo siguiente es conectar el sensor a un convertidor.

Convertidor de Capacidad a Frecuencia

El convertidor se encarga de recibir y transformar las variaciones de capacidad del sensor en un tren de pulsos variable, para ello se utilizado un circuito oscilador astable y simétrico, el cual lo podemos construir con el querido temporizador universal NE555, configurado como tal y con el sensor en la posición del condensador Cx que forma la red RC de carga/descarga.

De esta forma, y teniendo en cuenta que el sensor varía directamente en función con el porcentaje de RH entre 112 y 144 pF, se obtendrá una salida de frecuencia entre 33,403 y 42,946 KHz (dada la configuración del 555 empleada) que es inversamente proporcional a la humedad entre el 10 y el 90%.

La salida del convertidor la ingresamos a un TIMER del microcontrolador elegido en el cual llevamos a cabo la cuenta de los mismo en una base de tiempo fijo y según el valor que obtenemos, por medio de una tabla interna definida por nosotros, comparando podemos obtener el valor sensado y luego almacenarlo, mostrarlo en un display de 7 segmentos, en un LCD, enviar a una PC, a un datalogger, etc  lo que nosotros queramos.

A continuación un ejemplo realizado en CCS (compilado en PCWHD) para ilustrarlos un poco sobre como llevar a cabo lo mencionado anteriormente. Recordar que la idea detras de Ayuda Electrónica es dar a conocer los conceptos y no las soluciones a los problemas, sino no tiene gracia, la electrónica se aprende metiendo mano, rompiendo y volviendo a empezar.

El esquemático del circuito es:

Programa:

#include <18f452.h>                                   // definicion dispositivo

#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT

#fuses NOOSCSEN,CCP2C1,NOSTVREN,NODEBUG

#use delay(clock=4000000)                //  El pic trabaja con un cristal 4 MHz

#byte pb =0xF81             // definimos al puerto B como la variable ‘pb’
#bit RH_POWER =pb.4            // definimos el pin 4 del puerto b (prender/apagar 555)

//
void rhum_read(void);      // variables utilizadas para sensar la humedad
void rhum_convert(void);
int16 rh_count,rh_count2;
char rh_corr;
char rh_procent;
char rh_hi,rh_lo,rh_temp;
void store_rh(void);
void show_rh_graph(void);
//

/**************** Comienzo del programa ***************************/

void main(){

RH_POWER=1;                  // apagamos el convertidor cap/frec (RB4)

rhum_read();                   // llamamos a la funcion que se encarga de medir

//  la humedad relativa
// al regresar la funcion al main ya tenemos el valor de humedad guardado en la
// variable rh_count y podemos trabajarla o mostrarla

} fin del main

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

/* Función que realiza la adquisición del valor de frecuencia del convertidor */

void rhum_read()
{
int16 ts;
rh_count=0;

RH_POWER=0;                                       // encender el convertidor
delay_ms(5);                                           // se ahorra energia manteniendolo apagado
set_timer1(0);                                       // reseteamos el TIMER 1
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
for (ts=500;ts!=0;ts–){;}                 // base de tiempo fija que depende del Xtal usado
rh_count2=get_timer1();               // leemos el valor del TIMER 1
RH_POWER=1;                                   // apagar el convertidor

rhum_convert();                               // llamado a función que compara la tabla interna
// con el valor adquirido y almacenado en TIMER 1
}

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

void rhum_convert()
{

rh_count=rh_count2;
rh_count+=rh_corr;             // rh_corr es una variable a la cual podemos asignarle
// un valor y nos sirve para corregir el valor final
rh_count-=20;

if (rh_count>148){rh_procent=9;}
else if (rh_count==148){rh_procent=13;}
else if (rh_count==147){rh_procent=18;}
else if (rh_count==146){rh_procent=22;}
else if (rh_count==145){rh_procent=27;}
else if (rh_count==144){rh_procent=31;}
else if (rh_count==143){rh_procent=35;}
else if (rh_count==142){rh_procent=39;}
else if (rh_count==141){rh_procent=42;}
else if (rh_count==140){rh_procent=45;}
else if (rh_count==139){rh_procent=48;}
else if (rh_count==138){rh_procent=51;}
else if (rh_count==137){rh_procent=54;}
else if (rh_count==136){rh_procent=57;}
else if (rh_count==135){rh_procent=60;}
else if (rh_count==134){rh_procent=63;}
else if (rh_count==133){rh_procent=65;}
else if (rh_count==132){rh_procent=67;}
else if (rh_count==131){rh_procent=69;}
else if (rh_count==130){rh_procent=71;}
else if (rh_count==129){rh_procent=73;}
else if (rh_count==128){rh_procent=75;}
else if (rh_count==127){rh_procent=77;}
else if (rh_count==126){rh_procent=79;}
else if (rh_count==125){rh_procent=81;}
else if (rh_count==124){rh_procent=83;}
else if (rh_count==123){rh_procent=85;}
else if (rh_count==122){rh_procent=87;}
else if (rh_count==121){rh_procent=90;}
else if (rh_count<121){rh_procent=91;}

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