|
■HS15P 湿度センサーの簡易動作実験 Arduino版■ 2016年5月20日
●Arduino版というより浮動小数点演算版ですが。
以前に公開したオリジナルの回路は8pinのAVRマイコンに押し込むために、すべての演算を整数だけで行っていたので、
計算方法等がかなりトリッキーになっていました。
対数計算2回分をテーブル1回で纏めて処理したりとかね。
一方、現在電子工作などに広く使用されているArduino(mega328等)はROMの容量が非常に大きいため、
浮動小数点演算だってふんだんに使えます。
そりゃそうだよな、32kByteなんて言ったら昔のパソコンのBASICのROMよりデカイもんな。
もちろん、制約は少ない方がコードの流れは素直になりますし、本来の動作も理解しやすくなる訳ですから、
これはもうさっさと浮動小数点演算版を書き直そうと、そう前々から思ってはいたのですが、
なかなか時間が無くて、今さらながらの公開でございます。
※なお以前にも書きましたが、単に湿度を測定するのが目的(技術自体には興味は無い)であれば、
普通に完成品のセンサー(TDKのCHSシリーズ等)を買ってきた方が楽です。
結線図は下図の通りです。
他の端子を使用した場合に正常に動作するかどうかについては確認していません。
LM35にぶら下がっている3.3kΩの理由はこちらを参照してください。
また、0.022uFのコンデンサにはフィルムコンデンサ等を使用して下さい(セラミックコンデンサ等だと精度が出ません)。
なお、大雑把な処理の流れは以下の通り。8pinAVR版と基本的に同じです。
1.CR直列回路に一定時間だけ充電→充電後のCの電圧とCの容量からRの値(=HS15の抵抗値)を算出。
log関数が使えれば、なんて事は無い計算。
2.Rの対数は湿度の(ほぼ)一次関数になっているので、逆算することで湿度を得られる。
だいたいこんな関係です(データシートより抜粋)。
8pinAVR版は、ここまでの対数演算等をテーブルを利用して
整数演算でしのいでいました(…が、ややこしかった)。
3.算出された湿度の値を温度補正する。
グラフを見ての通り、温度によって値をズラす必要があります。
4.算出された湿度の値をリニアリティ補正する。
これもグラフを見ての通りで、単純な抵抗値の対数とはなっていないため、微妙な曲線を再現する必要があります。
この3と4は、ソースコードを見てもよくわからないと思います。
実際にはグラフの値を目測で拾ってExcelに入力し、ウマイ具合に曲線をトレース出来るような定数をExcelのソルバーで求めています。
結構どろくさいです。
そんなArduino版はこちらでございます→ダウンロード
なお、サポート等は行わないのでご了承ください。
なお、これは(8pinAVR版も含めて)
「センサーというモノの動作原理を考えてみよう」とか「湿度というモノに触れてみよう」いう趣旨のコンテンツです。
単にコードをArduinoにコピーして「ヤッター、なんか動いたー」で終わらないことを願います。