elechobby:picdic:pic12f683:19

ミニ湿度スイッチ

以前にも、湿度の値を表示する、簡易湿度計を製作しました。
今回は、単三電池2本で動作する、湿度スイッチを製作しました。

湿度スイッチとは、

  • 現時点の湿度を閾値として設定することにより、
  • 動作モード(高)の場合、
    設定された閾値よりも湿度が高くなった場合にスイッチ(LED、リレーなど)をONしたり、
  • 動作モード(低)の場合、
    設定された閾値よりも湿度が低くなった場合にスイッチ(LED、リレーなど)をONしたり、

するものです。

これを応用すると、現湿度(閾値設定時の湿度)からの相対値によって、モーターやヒーター等をON/OFFする事が可能となります。

今回の仕組みは、大きく、湿度データの取り込みと湿度スイッチとしての制御で構成されます。
<湿度データの取り込み>

  1. PICのPWMモジュールで、約1kHzの信号を発生させる。
  2. その信号をボリュームで、約1Vp-pにし、オペアンプの反転回路に加える。
  3. オペアンプの反転回路のフィードバック部分に、温度センサー(HS-15P)を接続する。
  4. HS-15Pは、湿度が高くなると抵抗が低くなり、湿度が低くなると抵抗が高くなるため、
  5. 湿度の状況によって、反転回路の増幅率が変化することになります。
  6. 増幅された信号を、抵抗とコンデンサで平滑します。
  7. 滑された信号を、PICのA/D変換で値を取り込みます。

<湿度スイッチとしての制御>

  1. SW1を押下することにより、現在の湿度値を閾値として設定します。
  2. SW2がOFFの状態では、測定した湿度値が、閾値よりも低くなる(湿度が高い)とスイッチをONします。
  3. SW2がONの状態では、測定した湿度値が、閾値よりも高くなる(湿度が低い)とスイッチをONします。
    ※スイッチのONとは、LEDやリレーを駆動させることを意味します。
    ※閾値と比較する場合には、ヒステリシスを持たせ、制御が、バタツクのを防いでいます。

<電源電圧>
PICのクロックを4MHzとし、単三電池2本(2V~3V)で駆動可能としました。

<閾値の保存>
閾値を毎回設定するのは、煩わしいので、PIC内臓のEEPROMへ保存し、起動時に自動で読み込みます。

hygroSwitchV2.c
//********************************************************************** 
/*
  <湿度スイッチ> 
*/
//********************************************************************** 
 
#define		LED				GPIO.F5
#define		SET_SW			GPIO.F4
#define		MODE_SW			GPIO.F3
 
#define		ON				1
#define		OFF				0
 
#define		UPPER			1
#define		LOWER			0
 
//********************************************************************** 
 
void	Pwm_Change_DutyEx(unsigned int duty_ratio)
{
    CCPR1L = duty_ratio >> 2;
    CCP1CON.F6 = duty_ratio & 0b00000001;
    CCP1CON.F7 = (duty_ratio & 0b00000010) >> 1; 
}
 
//********************************************************************** 
 
void main()
{
	static	unsigned	short	cnt;
	static	unsigned	int		ad, threshold;
	//
	OSCCON = 0b01100000;	// クロックは4Mhz 
	CMCON0 = 0b00000111;	// コンパレータは使用しない。 
	ANSEL  = 0b00000001;	// A/D変換を使用する。 
	TRISIO = 0b00011011;
	//
	Pwm_Init(1000);
	Pwm_Change_DutyEx((PR2 * 4) / 2);
	Pwm_Start();
	// 保存されている閾値の取り込み 
	threshold = Eeprom_Read(1);
	threshold = threshold << 8;
	threshold = threshold | Eeprom_Read(0);
	//
	while (1) {
		ad = 0;
		for (cnt = 0; cnt < 50; cnt++) {
			ad += Adc_read(0);
		}
		ad = ad / 50;
		//
		if (SET_SW == 0) {
			threshold = ad;
			// 閾値の保存 
			Eeprom_Write(0, (threshold & 0xFF));
			Delay_ms(20);
			Eeprom_Write(1, ((threshold >> 8) & 0xFF));
			Delay_ms(20);
		}
		//
		if (MODE_SW == UPPER) {
			if ((threshold + 5) > ad) {	//閾値よりも湿度が高い時にLED→ON
				LED = ON;
			} else {
				LED = OFF;
			}
		} else {
			if ((threshold - 5) < ad) {	//閾値よりも湿度が低い時にLED→ON 
				LED = ON;
			} else {
				LED = OFF;
			}
		}
	}
}
 
//**********************************************************************

左側:オペアンプ(LM358)
右側:PIC12F683

左側:湿度センサー(HS-15P)
右側:単三電池2本

湿度スイッチがOFFの状態

湿度が閾値よりも高くなったため、湿度スイッチがONになった状態

湿度が閾値よりも低くなったため、湿度スイッチがONになった状態

(編者注:おそらくOFFになった写真を載せたかったらしいのですが、ONの写真が2個並んでいました)

如何ですか?
これを応用すると、例えば、屋外の湿度が低いとき(乾燥状態)に、家の床下に設置した床下ファンを回して、空気を循環させることにより、床下乾燥(シロアリ駆除等)に役立てることが出来ます。

<床下ファンの例>

著作権表示 copyright notice

このページは稲崎様の閉鎖したHPのコピーで、著作権は稲崎様にあります。詳細
This page is a copy of Mr. Inasaki's closed website, and the copyright is held by him.Details
  • elechobby/picdic/pic12f683/19.txt
  • 最終更新: 2025/10/17 14:29
  • by 127.0.0.1