AVRを使った温度計・湿度計の改修

最終更新時間:2008年04月18日 10時48分13秒

[公開:any]

[電子工作/AVR]
[AVR,ATmega88,HS-15P,CHS-UGR,湿度計]

origin 2008-04-18



前回、「AVRを使った温度計・湿度計の製作」で作ったものは、その前の湿度センサーHS-15Pとそのドライブ回路の実験で湿度80%を超えたあたりから、湿度が高めに計測されることがわかっていました。

実際に、リビングで使ってみるとこの状況です。
計測される湿度が99.9%を超えるので表示が"---"となっています。このときの湿度を乾湿計で確認すると80%以上になっています。

温度計・湿度計乾湿計

この日の天気は終日雨で夜になってから室内の湿度が80%を超えたようです。また、リビングはキッチンと繋がっているため、夕飯の支度をしているときにも、この"---"の表示が出ることがあるようです。(家族談)

ということで、急遽、対策することにしました。といってもハードウェアでは対策することが難しいので、AVRのソフトウェアで対策します。

今回、改めて湿度センサーにTDK CHS-UGRを使用して作成した「PICを使った温度計・湿度計の製作」と比較したところ、湿度が75%を超えたあたりから湿度が高めに計測されるようです。
そこで、湿度が実測で75%を超えた場合は、実測値から75%を減算した値の1/2を実測値から減算する処理を追加します。

つまり、
76%が測定された場合は、76 - (76 - 75) / 2 = 75.5%
85%が測定された場合は、85 - (85 - 75) / 2 = 80%
95%が測定された場合は、95 - (95 - 75) / 2 = 85%
110%が測定された場合は、115 - (115 - 75) / 2 =95%
という結果が湿度となるように処理を追加しました。

また、これまでのソフトウェアでは、湿度として得られる値のオフセット電圧を、組み立て前に実測したオフセット電圧(2.484V)で固定して減算処理していました。
今回、オフセット電圧を確認したところ、2.502Vと前回と異なった値となっていました。
このため、湿度の計測と同時に、オフセット電圧も空いているAD変換ポート(ADC0)で毎回計測して湿度計算が正確になるように改修します。(一部、ハードウェアも変更しました。)

これまでのソフトウェアの該当部分の抜粋です。

1
2
3
4
5
6
7
8
9
10
11
12
13
    while(1) {

        temp = 0;
        humd = 0;

        for(j = 0; j < 10; j++) {
            temp += get_adc(2);
            delay_ms(10);
            humd += get_adc(3);
            delay_ms(10);
        }
        temp = temp / j * 0.48828;
        humd = humd / j * 4.8828 - 2484;    // 湿度計算+オフセット減算

改修したソフトウェアの該当部分の抜粋です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    while(1) {

        temp = 0;
        humd = 0;
        aref = 0;

        for(j = 0; j < 10; j++) {     // オフセット電圧の計測
            aref += get_adc(0);
            delay_ms(20);
        }
        for(j = 0; j < 10; j++) {
            temp += get_adc(3);
            delay_ms(20);
        }
        for(j = 0; j < 10; j++) {
            humd += get_adc(2);
            delay_ms(20);
        }

        temp = temp / j * 0.48828;
        humd = (humd - aref) * 0.48828;      // オフセットの減算+湿度計算

// Subtract from Humidity   計測湿度75%以上の減算処理
        diff = humd - 750;
        if(diff > 0) {
            humd = humd - (diff / 2);
        }
//-------------------------------------

改修後のテストとして高い湿度までリニアに反応する湿度センサーTDK CHS−UGRを使った「PICを使った温度計・湿度計の製作」で作成したものをリファレンスとして比較しました。
以下、湿度75%以上時の減算処理を確認するため、オリジナルな計測値を左、減算処理したものを右に表示するようにソフトウェアを一時的に変更しています。

湿度75%以下の場合は、同じ値となります。

比較1(75%以下)

100%近くまで加湿します。
オリジナル計測値は、99.9%を超えてしまい"---"と表示されますが、減算処理されたものは、TDK CHS-UGRを使用したものと近い値を表示しています。

比較2

以下、加湿をやめて徐々に乾燥させます。
TDK CHS-UGRが84.0%時に、オリジナル計測値が96.5%、減算処理されたものが85.8%。

比較3

TDK CHS-UGRが77.2%時に、オリジナル計測値が80.2%、減算処理されたものが77.6%。

比較4

問題ないようです。正確さには欠けますが、もともとの湿度センサーHS-15Pの特性上、こんなもんだと思います。

気温表示を元に戻して改修完了です。

作業完了

このテンプレートをデザインした者がへたれなので IE6 には非対応です。IE7FirefoxSafariOperaChrome など、モダンなブラウザを利用して下さい。


▲ページ Top へ...