|
Arduino と Ruby で温湿ネットロガー
|
||
|
気象情報収集の手始めとして、温度と湿度を記録するための仕組みを製作しました。センサーは、ストロベリー・リナックスで販売されている、SHT11 を使用し、Arduino でセンサーにアクセスします。データは Ethrenet Shield を使いサーバに送信します。データの受信は Ruby で作る TCPサーバが受け取ります。 SHT11 は温度センサーと湿度センサーが一体となったモジュールで、シリアル通信によりマイコンで値を読み出せるものです。その他、湿度センサーとして秋月で販売されている HS-15P も検討しました。しかし、これは湿度を読み出すまでのアナログ回路がなかなかめんどくさいのでやめました。 ◆Arduino 用のライブラリがあった さて、SHT11 の使い方はネットに多くの情報があります。エレキジャックの HP では、なんと7回に渡った記事が掲載されており大変参考になります。 シリアル通信をシコシコ作るのめんどくさいなぁと思いつつ更にネットを徘徊すると、SHT1X シリーズにアクセスするための Arduino のライブラリを発見しました。
Arduino を使おうと思っていたので渡りに船です。早速ライブラリをダウンロードします。sht1x.tgzを解凍し、フォルダーごと arduino-001x/hardware/libraries 以下にコピーします。SHT11 のクロックを DP2 に、データを DP3 につなぎそれぞれ 10k でプルアップします。以上で準備完了です。ページに紹介されているサンプルスケッチをコピペするとあっさり動きました。 ◆Arduino のコード ここまでくれば終わったも同然です。SHT11 のサンプルを改造して、Ethrenet Shield を使った TCP/IP のクライアントプログラムを作ります。ソースコードを公開します。以下のソースを利用する場合は、各定義をそれぞれの環境に合わせて編集してください。
◆サーバのコード サーバは Ruby を使って書きます。Arduino が送信する文字列を受信しセンサーが出力した数値を得るわけですが、SHT11 は人間が使っている温度や湿度で出力してくれないので、センサー値を摂氏やパーセントに変換する必要があります。以下のソースコードは、変換した値を標準出力に表示するサンプルになります。
実行結果はこんな感じ、一番左は、millis() の出力をそのまま出しています。
◆短いソースは気持ちいい! Arduino はライブラリも充実していてやりたいことが短く書けるところが素晴らしいです。今回サーバに使った Ruby も同じです。Ruby で作っておけば、プロセスをデーモン化したり、ファイルや DB に値を格納をすることも比較的簡単にできますからね。 |
||
Latest update at 2009/5/7 |