目次

簡易湿度計

概要

梅雨の時期に入り、じめじめした日が続きます。
今回は、湿度センサを使用して湿度を測定しLCDに表示させて見ました。
行く行くは、これを応用して、家の床下の湿度制御システムを構築してみたいと考えています。(白蟻防御)

動作原理

湿度センサには、HS-15Pを使用しました。
このセンサは、空調機器などの湿度制御システム用として開発されたセラミック湿度センサです。

<特徴>
◆使用湿度範囲:10%RH~90%RH
◆使用温度範囲:0~60℃
◆使用周波数:50Hz~1kHz
◆応答特性:(30⇔90%RH)≦2分
※センサは直流駆動できません。交流信号でセンサーをドライブします。出力は湿度に対して指数関数的に出ます。(湿度が上がるとインピーダンスが下がる)
※正確に計るには、温度補正が必要となりますが、今回は考慮していません。

<概観>※HS-15Pは、右側です。

<特性>

<構成>
◆信号発振部分
簡易な、トランジスタ1石による、ツインT形発振回路で約1kHzの正弦波を発振させます。
◆信号増幅部分
オペアンプによる反転増幅回路としました。

Vo=Vi×(R6÷HS-15Pの抵抗)

◆信号処理部分
PICで次のような処理を行います。

回路図

ソースコード

HygroMeter.c
//********************************************************************** 
/*
	<簡易湿度計>
*/
//********************************************************************** 
 
 
unsigned	int	measurement(unsigned short channel)
{
	unsigned	int		ad, max, min, cnt;
	//
	ad = 0;
	max = 0;
	min = 1024;
	for (cnt = 0; cnt < 1000; cnt++) {
		ad = Adc_Read(channel);
		max = ad > max ? ad : max;
		min = ad < min ? ad : min;
	}
	return (max - min);
}
 
//********************************************************************** 
 
void main()
{
	static	unsigned	char	buf[10], cnt;
	static	unsigned	int		vi, vo;
	static	unsigned	long	tmp;
	//
	OSCCON = 0b01110000;		// クロックは8Mhz 
	CMCON  = 0b00000111;		// コンパレータは使用しない。
	// A/D変換を使用する。 
	ANSEL  = 0b00010100;
	// ポートを初期化する。 
	TRISA  = 0b10111100;
	TRISB  = 0b00001110;
	// LCDを初期化する。 
	Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTA,6,0,1);
	Lcd_Custom_Cmd(LCD_CURSOR_OFF);
	Lcd_Custom_Out(1, 1, "HygroMeter V1");
	Delay_ms(500);
	Lcd_Custom_Cmd(LCD_CLEAR);
	//
	while (1) {
		vi = 0;
		for (cnt = 0; cnt < 5; cnt++) {
			vi += measurement(2);
		}
		//
		vo = 0;
		for (cnt = 0; cnt < 5; cnt++) {
			vo += measurement(4);
		}
		//
		WordToStr(vi, buf);
		Lcd_Custom_Out(1, 1, buf);
		Lcd_Custom_Out(1, 6, "mV");
		//
		WordToStr(vo, buf);
		Lcd_Custom_Out(2, 1, buf);
		Lcd_Custom_Out(2, 6, "mV");
		//
		tmp = vo;
		tmp *= 1000;
		tmp /= vi;
		//
		WordToStr(tmp, buf);
		buf[8] = 0x00;
		buf[7] = 0xF4;
		buf[6] = 'k';
		buf[5] = buf[4];
		buf[4] = '.';
		Lcd_Custom_Out(2, 9, buf);
		//
		if (tmp <= 17) {
			Lcd_Custom_Out(1, 11, "90%");
			continue;
		}
		if (tmp <= 35) {
			Lcd_Custom_Out(1, 11, "80%");
			continue;
		}
		if (tmp <= 90) {
			Lcd_Custom_Out(1, 11, "70%");
			continue;
		}
		if (tmp <= 230) {
			Lcd_Custom_Out(1, 11, "60%");
			continue;
		}
		if (tmp <= 600) {
			Lcd_Custom_Out(1, 11, "50%");
			continue;
		}
		if (tmp <= 2200) {
			Lcd_Custom_Out(1, 11, "40%");
			continue;
		}
		if (tmp <= 9000) {
			Lcd_Custom_Out(1, 11, "30%");
			continue;
		}
		if (tmp <= 80000) {
			Lcd_Custom_Out(1, 11, "20%");
			continue;
		}
		Lcd_Custom_Out(1, 11, "10%");
	}
}
/*
	17,		// 90%
	35,		// 80%
	90,		// 70%
	203,	// 60%
	600,	// 50%
	2200,	// 40%
	9000,	// 30%
	80000,	// 20%
*/
//**********************************************************************

動作確認

いつものブレッドボードで確認しました。
アナログ式の温度計付き湿度計と結果を比較しました。

センサー部分です。

信号の周波数は、約1.1kHzです。
回路上のR1,R2,R3,C1,C2,C3を調整して、1kHzに下げた方が良いですね。

実際に測定してみました。湿度60%

実際に測定してみました。湿度50%

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details