« Intelの超小型コンピュータ”Edison”の詳細が判明 | トップページ | MS Office互換で無料・高速なWebアプリ”TeamLab” »

2014年1月12日 (日)

Raspberry Piで部屋の気温をモニタリンクさせてみた

Raspberry Piの電子工作入門キット買ってみた: EeePCの軌跡の記事でも書いたとおり、Raspberry Piの初心者向け電子工作キットを買ったんですが。

その中に温度センサーが入っているんですよね。

これで室温モニターを作ってみたくて、LEDからいきなり温度センサーまでステップアップしてみました。

例によって、以下の記事を参照しました。

Raspberry Piで温度センサー。部屋の気温を取得しよう - Raspberry Pi 電子工作

が、ちょっとはしょり気味で分かりにくい部分があったので、ちょっと補足しつつ書きます。

長文のため、”回路編”と”プログラム編”に分けました。

■ 回路編

まずは上のリンクを参考に回路を作ります。

Rasp_temp00

ちょっと分かりにくいですね。ICと温度センサーは極性があるので注意が必要です。

Img_5140

ICは天辺に書かれている文字で上下を判別。こんな感じにささってればOKです。

Img_5141

温度センサー(トランジスタっぽいやつ)とコンデンサーも挿します。

Img_5142

あとは回路図どおり線を差し込んでいったんですが・・・

Raspberry Pi → 基板用の線は足りるんですが、基板→基板の線が一本足りないことが発覚。

Img_5143

というわけで、リード線の端っこをむいてよじっただけのを突っ込んでみましたが。

Img_5144

ささりました。

結論から言うと、これでうまく動きました。

半田付けが絡むとこうは行きませんね。見た目はちょっといまいちですが、本当に簡単に組めます。

Img_5145

あとはRaspberry PiをmicroUSBにつないで起動。

これを制御するプログラムを組みます。

■ プログラム編

この温度センサーの情報を取得するためのコードはRubyを使うので、これをインストールします。

sudo apt-get install ruby1.9.1-dev

Rubyのバージョンが1.8以前だと動かないので、1.9以上を使います(私はここでスタックしました)。

もしうまくインストールできない場合はあらかじめ

sudo apt-get update

をしてから上のコマンドを実行するとうまくいくようです。

さらに、Rubyで”pi_piper”というのを使います。これをRubyのライブラリを取得する”gem”というやつでインストールします。

sudo gem install pi_piper

しばらくすると帰ってくるので、これで準備完了。

元リンクにも温度を取得するためのコードがかかれてますが、ちょっと改造しました。

時刻と、小数点以下一桁までの温度を表示させるため、こんな風に変えてみました。

エディターで”temp.rb”というファイルを作ります。中身は以下。

require 'pi_piper'
loop do
  value = 0
  PiPiper::Spi.begin do |spi|
    raw = spi.write [0b01101000,0]
    value = ((raw[0]<<8) + raw[1]) & 0x03FF
  end
  volt = (value * 3300.0)/1024.0
  degree = (volt - 500.0)/10.0+2.0
  t =  Time.now.to_i
  puts sprintf( "%10i,%10.1f",t,degree)
  sleep(1)
end

t”という変数は現在時刻、”degree”は気温を表してます。

degree = ~ ”の最後に”+2.0”を足しておりますが、単純に室温計の温度と、この温度センサーが返してくる値がちょうど2.0度ずれていたため、足しただけです。

puts sprintf( ~ ”のところで、時刻と気温を並べて表示させます。

sleep(1)”のところでは表示時間を変えられます。1秒おきに出す場合は上の通りでOK。

最終的に1分おき(60秒おき)に出したかったので、私はここをあとで”sleep(60)”に変えてます。

このコードをRubyで実行します。

sudo ruby temp.rb

するとこんな表示が出ます。

Rasp_temp011

1秒おきに”時刻 , 気温”が表示されます。

”時刻”があんまり時間に見えませんが、これはLinux内のdate値をシリアル値で表示しているため。

具体的に言うと、1970年1月1日午前0時0分からの時間(秒)です。もう13億秒経ってるんですね。

ついでにいうと、Raspberry Piはそのままだと世界標準時(日本時間 - 9時間)なので、注意が必要。日本時間に変える方法はあるようですが、面倒なので後で直します。

元リンクではRaspberry PiにWebサーバーを立ち上げて、ブラウザ上に温度グラフを表示させてますが、私の目的は時刻、温度のcsvファイルが作れればいいので、このコードを使ってcsvファイルを作ります。

Rubyを実行するときに、こういう風に打ち込みます。

sudo ruby temp.rb > test.csv &

するとバックグラウンドで温度モニターが始まります。

あとはしばらくほおっておくと、”test.csv”ファイルに時刻、温度の値が入ってきます。

さて、これをPCに持ってきてExcelで処理させたいんですが・・・どうやって持ってくるの?

私はRaspberry PiにFTPサーバーをいれて、FTP経由でゲットすることにしました。

参考サイトは以下。

Raspberry Pi / Vsftpd(FTPサーバー): IT備忘録

なお、上のサイトのように”sudo ufw allow 12”を実行すると「そんなコマンドはねぇ!」ってラズちゃんに怒られますが、そのときは”sudo apt-get install ufw”を実行してから上のコマンドを実行します。

PC用のFTPクライアントを使ってもよかったんですが、寒くて布団の中から操作したかったので、iOS用FTPクライアントを使いました。

iTunes の App Store で配信中の iPhone、iPod touch、iPad 用 FTPManager Free

これを使ってDropboxにcsvファイルを置いて、PC上に送りました。

Img_0545

なお、接続設定でFTPのプロトコルのところを”SFTP”にしておかないと接続できません。

Img_0547

で、なんとかcsvファイルをゲットできました。

Excelに読み込ませて、時刻のシリアル値を日時形式に変換します。

ちょっと厄介なんですが、UNIX系の時刻のシリアル値は1970/1/1 0:00からの秒数。

Excelでの時刻のシリアル値は1900/1/1 0:00からの日数なんですよね。

そこで

=(A1+9*3600)/3600/24+25569

という関数を作成し、UNIX → Excel用に変換します。

(A1のところは、UNIX系シリアル値の時刻の入ったセル)

なお、標準時刻を日本時間に補正(+9*3600)、1970年1月1日のExcel上のシリアル値(+25569)をくわえてます。

シリアル値そのままでは人間には一体何のことだか分からないので、Excelのセルの書式を以下のように変えます。

Rasp_temp03

これで日時の表示に変わってるはずです。一応時刻が正しそうかチェックしてください。

Rasp_temp04

このデータを使ってグラフを書かせてみました。

Raspberry PiでこのRubyコードを実行したのは夜11時過ぎ。翌日の午後7時ごろまで計測。

計測開始直後にエアコンを切ったため、翌朝まではどんどん気温が下がってますね。

その後室温は上昇。エアコンをつけたり、曇りだったのが昼にかけて一時晴れたりしたため気温が変動しています。

値は±0.5度程度ぶれてます。おかげでグラフはぎざぎざしてます。まあ許容範囲レベルの誤差かと。

室温の変化を見たかったのと、二階の気温がどうなってるのかを知りたい時に使えますね。

いずれは、ある気温(10度以下 or 35度以上)になったら警告メールを出せるようにしたいところ。

やっぱり電子工作面白いですね。なんだかわくわくします。これをきっかけにはまりそう。

せっかくなんで、いろいろ応用してみたいと思います。

Raspberry Pi Type B 512MB ケースセット (clear)

« Intelの超小型コンピュータ”Edison”の詳細が判明 | トップページ | MS Office互換で無料・高速なWebアプリ”TeamLab” »

Raspberry Pi・Arduino・電子工作」カテゴリの記事

コメント

さっそく電子工作の発表ですね♪
小生Rubyにはまだ手を出していませんが
割と簡単そうなので
やってみねば!と感じたしだいです。

温度センサーが上手く出来れば、それだけでも十分活用できることがあると思います。
照度センサーも入っていると書かれていたようで
それもあれば、またいろいろと。楽しい夢が広がるはずです。

こんにちは、enuteaさん。

私もRubyのコードをいじるのは初めてで、しかもほとんど分からないまま見よう見まねでコードをいじっているという状況です。もうちょっと勉強しないといけませんね。

この温度センサー用回路をちょっといじるだけで照度センサー用も作れるみたいです。要は温度・照度各センサーが出すアナログ信号を真ん中のアナログ-デジタル変換ICを介してRaspberry Piに受け渡すという回路なため、ほとんど同じ事をやってるようです。

そのデータを受けて何をするかはRaspberry Piの役割で、アイデア次第ではいろいろ面白いものが作れそうです。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Raspberry Piで部屋の気温をモニタリンクさせてみた:

« Intelの超小型コンピュータ”Edison”の詳細が判明 | トップページ | MS Office互換で無料・高速なWebアプリ”TeamLab” »

無料ブログはココログ

スポンサード リンク

ブログ村