ミニ湿度スイッチ

概要

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

湿度スイッチとは、

現時点の湿度を閾値として設定することにより、

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

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

するものです。

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

動作原理

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

PICのPWMモジュールで、約1kHzの信号を発生させる。

その信号をボリュームで、約1Vp-pにし、オペアンプの反転回路に加える。

オペアンプの反転回路のフィードバック部分に、温度センサー(HS-15P)を接続する。

HS-15Pは、湿度が高くなると抵抗が低くなり、湿度が低くなると抵抗が高くなるため、

湿度の状況によって、反転回路の増幅率が変化することになります。

増幅された信号を、抵抗とコンデンサで平滑します。

滑された信号を、PICのA/D変換で値を取り込みます。

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

SW1を押下することにより、現在の湿度値を閾値として設定します。

SW2がOFFの状態では、測定した湿度値が、閾値よりも低くなる(湿度が高い)とスイッチをONします。

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

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

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

回路図

ソースコード

//********************************************************************** /* ＜湿度スイッチ＞ */ //********************************************************************** #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; // Ａ／Ｄ変換を使用する。 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個並んでいました） 如何ですか? これを応用すると、例えば、屋外の湿度が低いとき(乾燥状態)に、家の床下に設置した床下ファンを回して、 空気を循環させることにより、床下乾燥(シロアリ駆除等)に役立てることが出来ます。 <床下ファンの例>