Arduinoで温度湿度を測るセンサーとしてSHT71が比較的入手しやすいので、試してみました。幸い、ライブラリ (SHT1X Humidity & Temperature Sensor Code)が公開されているので、利用させていただくことにしました。
ところが、このライブラリをArduino Duemilanoveで利用すると、チェックサムエラーが起こって値を読み取れなことが頻繁にあります。SHT71のデータシートをみると、独自仕様のインタフェースでDATAとSCKのタイミング
をとりながらデータをやり取りするのですが、完全なスタティックロジックでSCK周波数に下限はないと書かれています。一方ライブラリのソースをみると、1マイクロ秒の待ちでタイミングをとっています。直感的にこのタイミングが疑われましたので、遅延時間を2倍にしたところ、エラーが起こらなくなりました。
sht1x_hw.h の
#define us_spin(x) _delay_us(x)
を
#define us_spin(x) _delay_us(2*x)
と変更。
データシートによると常温では±1℃は十分期待できるように書かれています。ところが普通の液体(アルコール?)式温度計を含むいくつかの温度計をならべて測定したところ、SHT71以外の測定値はおおむね±1℃の範囲に入っているのに、SHT71の温度だけが3℃以上も高い表示です。なお、測定は10秒に1回の割合で、測定による発熱の影響は無視できると思われます。
あたりが悪かったのでしょうか。決してお安くありませんので、がっかりです。
電源電圧は5Vでも許容範囲なのでそのようにしていたのですが、データシートを見ると3.3Vで調整してあるようなので、下げてみました。さらに測定間隔を20秒に1回に減らしました。その結果、他の温度計と同じ範囲内になりました。電源電圧の影響で発熱が大きかったのかもしれません。