78k0s/KA1+ でRHT03 改

 2012-08-14
4月に味見して放置していたRHT03 ぼんやりコードを眺めていたらバグを見つけてしまったので改善確認してみる。
 

怪しいコード

怪しいと目を付けたのは以下
case STATE_FIN:                      /* check CRC error detection */
if( ( (dechumidity>>8 &0xff) + (dechumidity &0xff) +
(dectemperature>>8&0xff) + (dectemperature&0xff) )
== deccrc){
decstate=STATE_FIN;
break;
}else{
decstate=STATE_ERROR;
}
センサーから受け取った湿度16bit、気温16bitをそれぞれ上位下位8bitを足し合わせてエラーチェックをさせている部分。deccrcがセンサーからのチェック用8bitデータ。
しかしこのコードだと、受け取ったデータの8bit+8bit+8bit+8tbiの結果が9bit目に繰り上がりした場合にかならずエラーと判定されてしまう。一体こんなコードを書いたのは誰だ。私ですけどね。


と言うわけで下記のように8bit分のデータとして切り出すようにした。
case STATE_FIN:                      /* check CRC error detection */
calccrc = ( ((dechumidity >>8)&0xff) + ((dechumidity )&0xff) +
((dectemperature>>8)&0xff) + ((dectemperature)&0xff) )&0xff;
if( calccrc == deccrc ){
decstate=STATE_FIN;
break;
}else{
decstate=STATE_ERROR;
}
最適化はコンパイラに一任するとして、一時変数に喰わせるようにしました。ちょっとは可読性上がったかな!かな。。。



ランニングチェック


DSC_0752.jpg
さっそく確認です。8年目に突入した古いiBookG4を叩き起こしてデータロガーとします。写真手前が78k0s基板で奥にあるのが温度センサLM61が二粒。一つは湿球です。

この状態でしばらく様子を見たところ、データ抜けもなくちゃんと値を取れていそうだったのでもうちょっと温度を振ってみることにしました。

DSC_0753.jpg
LM61はとりあえず置いといて、RHT03を保冷剤で囲みました。 これで約8.5度近くまで気温を下げることに成功。それでもデータ抜けは起きませんでした!やったー!

LM61_cs_RHT03.png
赤のプロットがLM61系列、緑のプロットがRHT03です。それぞれ湿度(HUMIDITY)、気温(TEMP)、そしてそれらから算出される不快指数(DI)をプロットしています。LM61では乾湿計の測定方法で湿度を算出しており、LM61のみ、湿球温度もプロットしている。

緑の太線が10度以下に落ちている箇所が、保冷剤を使った部分。ログからもデータ抜けが無くちゃんと温湿度をログに残せていることが確認できる。

ひとまずRHT03の評価はこれにて完了、かな。。 途中で飽きて投げてた期間があるとは言え4ヶ月くらいかかりましたね。さすがヘタレ。



測定環境について

基本的な構成を簡単に書いちゃうとこんな感じ。
RHT03 --> 78k0s --> FT232 --> PC --> sh,perl --> gnuplot --> png

serialデバイスからテキストを読み出してawkで平均値を割り出す。およびperlを呼び出して湿度や不快指数を算出させ、ログファイルに保存。そして最後にgnuplotでグラフを画像として出力させる。



乾球湿球温度から湿度を算出するperl



気温湿度から不快指数を算出するperl



気温湿度不快指数のログからグラフを描写するgnuplot



78k0sのプログラム(mainのみ)



とりあえず動く状態にはなったので、良いタイミングで現行の気温ログ採取(LM61)をこのRHT03に切替えるとしよう。 いつかね。 そう。いつか。
 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/82-c79af771
≪ トップページへこのページの先頭へ  ≫