「マイコンで気象観測」其の5 湿度値を得る(準備)

 簡単に得られる温度値と違い、湿度値は意外と苦戦します。以下に手持ちの湿度計を並べてみました。

 赤の基盤の細長いのはHIH-4030というこの中で一番高いセンサーで、その代わり湿度値が電圧出力で出てくるのでその分楽です。ただ、過去の検証で余り湿度値が気象観測機のWMR100の値と合わないのです。大気の湿度を計るよりは、呼気等の検知がメインなのかも知れません。電源電圧が5VなのでGR-KURUMIには不採用です。袋から出てもいないセンサーは、使う前に調べたら結構面倒なので、未だ袋に入れたままです。当然、不採用です。ArduinoではDHT22というセンサーが値段もそこそこなのでよく使われている感があります。1線式で、普通に使う分にはかなり知識を必要としそうですが、Arduinoにはライブラリがあり、簡単に使えます。GR-KURUMIでこのライブラリが使えるか試していないので分かりません。今回は不採用です。

 で、本命のHS15Pです。過去にも何度かこの日記内で取り上げていますが、基本的な使い方は此方の方の方法を参考にしています。校正式とプログラムを作るまでが大変ですが、それさえ出来てしまえば、センサー自体も安価で、かつ気象観測機のWMR100の湿度値と最も近い値になります。以前比較した時の日記
 校正式もプログラムも出来ているし、GR-KURUMIへの移植も楽だと思っていたら大誤算。タイマー処理で苦労しました。
 周期処理の此処の参考例でattachCyclicHandlerを使っているので、それで作ったんだけど、何故かtimeの値が1秒毎に1づつしか増えない。思惑道理なら1000づつ増える筈なんだけど。情報の無いattachIntervalTimerHandlerを使用して何とか出来ました。この関数は1msec間隔で固定だが、今回は1msec間隔で使うので丁度良いです。
#include
void test_cyclic_handler(unsigned long u32ms);
void HS15P(unsigned long u32ms);
unsigned long time;
unsigned long time2;
void setup()
{
Serial.begin(9600);
attachCyclicHandler(0, test_cyclic_handler, 1);
attachIntervalTimerHandler(HS15P);
}

void loop()
{
Serial.println(time);
Serial.println(time2);
delay(1000);
}

void test_cyclic_handler(unsigned long u32ms)
{
time++;
}

void HS15P(unsigned long u32ms)
{
time2++;
}


23とか24がtimeの値で、2万以上の値になっているのがtime2の値です。void test_cyclic_handlerは1msec間隔と指定していても、time値がvoid HS15Pのtime2値と同じになっていません。