sohatach's blog

http://github.com/soha

BeagleBone Blackで温度測定

ただ温度を測定するだけではおもしろくないので、
BeagleBone Blackで部屋の温度を測定し、時系列でログに残し、
外気温や電気代(冷暖房費)との関係を調べてみたいと思っています。

進めるにあたりこちらのページを参考にさせていただいています。
・BBBとBoneScriptとGroveモジュールで温度を表示しよう
http://marutsuparts.blog74.fc2.com/blog-entry-1057.html


BeagleBone自体の入門としては、こちらの記事をまず読むことをおすすめします。
・BeagleBone Black の購入とセットアップをしよう
http://marutsuparts.blog74.fc2.com/blog-entry-1050.html

・BeagleBone Black で お手軽に開発をしよう
http://marutsuparts.blog74.fc2.com/blog-entry-1051.html


BeagleBoneでは、JavaScriptにて端末を操作することができます。
またまだβ版とはいえ、「Cloud9 IDE」というWebアプリでの開発ツールが提供されているのが斬新でした。
f:id:sohatach:20150211182641p:plain


ブログサイトの問題か、上記ページのサンプルコードが非常に読みづらかったため、
必要な箇所のみ以下に転記させていただきます。
ledblink.jsのコード

var b = require('bonescript');

leds_out = function(status){
    b.digitalWrite('USR0', status);
    b.digitalWrite('USR1', status);
    b.digitalWrite('USR2', status);
    b.digitalWrite('USR3', status);
}

var state = b.HIGH;

blink = function(){
    if (state == b.HIGH){
        state = b.LOW;
    } else{
        state = b.HIGH;
    }
    leds_out(state);
}

// setup b.pinMode('USR0', b.OUTPUT); b.pinMode('USR1', b.OUTPUT); b.pinMode('USR2', b.OUTPUT); b.pinMode('USR3', b.OUTPUT);

setInterval(blink, 1000);

BeagleBone本体の4つのLEDが1秒ごとにチカチカするのが確認できました。


続いて本題のこちら
・BBBとBoneScriptとGroveモジュールで温度を表示しよう
http://marutsuparts.blog74.fc2.com/blog-entry-1057.html

こちらもサイトのソースコードが見づらいため
以下に転記させていただきます。
また私の環境ではなぜか、ファイル名を指定の「grove_temp_sensor_test.js 」にしたところ
うまく動かなかったため、「temp.js」としました。

var b = require('bonescript');

var getTemperature = function(){
    var AN0 = "P9_39";
    var B = 3975;
    var R0 = 10000;
    var Rs = 10000;
    var Vref = 1.8;
    var Ts = 25 + 273.15;
    
    var a_val = b.analogRead(AN0);
    var V = a_val * 1.8; // 0 to 1 : 0 to 1.8(V)
    var R = R0 * V / (Vref - V);
    var T = 1 / ( 1 / Ts - Math.log(R / Rs) / B ) - 273.15;
    
    console.log("V = " + V);
    console.log("R = " + R);
    console.log("Temperature: " + T);
}

var timer = setInterval(getTemperature, 1000);

実際の画面はこちら、
f:id:sohatach:20150211182740p:plain
画面下部にTemperatureとして温度が取得できているのがわかります。
このサンプルのケースでは、setIntervalにより1秒毎に更新されます。

今はコンソールに出力するだけですが、定期的にログファイルに残すことで、目的とすることが実現できそうです。