2015年11月28日土曜日

温度計を作った

最近めっきり寒くなってきて雪も降ってきたこの時期、天気大好きな人なので気温を測ってみたり、積雪の深さを測ってみたりしたくなるわけです。
で、毎日外に出て温度計を見てやるのもいいのですが、それはもう小中の頃にやって満足したので、勝手に測ってもらおうと思ったのが今回の企画です。

実際、すでに全国に散りばめられているアメダスのデータであれば10分ごとの気温をリアルタイムで見られるのですが、やっぱりそれじゃ面白く無いです。自分でやらないとね。


てことで、今回はマイコンとセンサーを使って自動収集してみました。
使ったのは、mbed LPC1768と、手元にあった大気圧センサLPS25Hです。LPS25Hは大気圧の補正のために温度センサを内蔵しているのでそれを利用します。
秋月電子で購入するとLPC1768が7000円LPS25Hが600円です。

LPC1768とLPS25Hは配線の簡単なI2Cで通信させます。画像のように配線しました。


LPC1768にプログラムを突っ込みます。LPS25Hのライブラリはこれを使わせてもらいました。
コードは下のとおりです。

#include "mbed.h"
#include "LPS25H.h"

Serial debug(USBTX,USBRX);
LPS25H baro(p28, p27, LPS25H_G_CHIP_ADDR);

int main() {
    while(1) {
        baro.get();

        debug.printf("%5.2f,%3.2f\r\n", baro.pressure(), baro.temperature());

        wait(10);
    }
}


これを実行して、LPC1768とパソコンをUSBケーブルで接続して、Windows上でTera Termなどを使って見ると、下みたいに10秒ごとに大気圧と気温がカンマ区切りで出力されます。




おかげさまで自動で気温を測ることができました。
これで日本の天気大好き少年少女たちが毎日外へ温度計を見に行かなくても良くなりました。


これでも十分なのですが、せっかくパソコンに出力したのでもっと遊ぼうということで、気温の推移をグラフにしてみました。
Visual Studio2015で作成し、シリアル通信の部分はこちらのサイトを、グラフ化の部分はこちらのサイトを参考にしました。言語はC#。

左上でシリアル通信しているCOMポートを選択、右上のボタンで接続,切断、左下に生の受信データを表示して、右下で最大1時間分(361個)の気温データをグラフ化しています。


X軸のラベルを時刻にしてみたかったのですが、ここだけどうしても分からなかったので、妥協案として別途labelを置きました。labelはアンチエイリアスをかけることが出来ないらしいので、これも妥協しました。

グラフを見てみると、1時間経ってもだいたい-3度で安定してることが分かりました。
アメダスでもそれくらいなので、とりあえず狂った値ではなさそうですが、設置環境の考慮はしてないので風を受ける分、本来の気温より数値が低く出てるかもしれないです。



ということで、温度計を作っただけでなくグラフ表示ソフトまで出来ましたというお話でした。