Raspberry PiでRHT03を動かす

Raspberry PiのGPIOをほぼ不自由なく使えるようになった、といってしまっていいのかどうか検証するため温湿度センサRHT03をつないでみた。インタフェースは1-wireの簡略型で、信号線が1本、これを10kΩの抵抗でプルアップするだけ。とりあえずブレッドボードに組み立てて動かす。

rht03_view

RHT03は、ボクの感覚では低速のデバイスで、適当にポートを振ってやればどうにかなると考えていたが、それはただの勘違い。計算上も実際も、ファイルシステム(/sys/class/gpio/~)を経由する方法だとぜんぜん追い付かない。別件でレジスタ操作用ライブラリを作ってあったのでその関数を使う。速度は実測で約4.2倍。いうほど速くない。

完成したプログラムをこちらに公開する。実行結果を下に示す。読み出しは10回に1回くらい失敗する。しかしAdafuruitが公開しているプログラムでも同じ。思い当たる原因はふたつ。ひとつはブレッドボードの接触不良。もうひとつは多数のプロセスが並行動作して時間の測定を妨げるLinuxの宿命。ArduinoやPICだと失敗しないのだから。だしても、そこをどうにかできないものか。

rht03_console

時間を正確に測定する方法は、今のところ見当たらない。読み出しをはじめたらclock_gettime関数とかを使う時間的余裕がないのでループ回数を使っている。ループの中にusleep関数を入れる礼儀作法は測定のバラつきをひどくするから無理。つまり、なりふりかまわぬやりかたでこの結果。こうなったらもうLinuxでは10回に1回くらい失敗すると覚悟のうえで、成功した分だけ使う処理の組み立てが必要だと思う。

広告
カテゴリー: センサ, RaspBerryPi パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中