ArduinoとPachubeで部屋の温度をWEB上にグラフ表示してみる(その3)

年越ししてしまったけれど、その1その2に続いて最終回のその3。Arduinoのスケッチ(プログラム)の作成。やることは単純で、「温度センサーで温度測定」と「Pachubeへデータ送信」だけ。2つにわけて説明してみる。

温度センサーで温度測定

今回使用している温度センサーはLM35DZという、温度に比例して電圧が出力されるセンサーを用いている(例えば、20℃なら200mVが出力される)。温度測定に関しては、Arduinoで温度計(LM35DZ)にて、LM35を使った温度の計算方法シンプルにまとめられているので、それをそのまま活用させてもらった。

Pachubeへデータ送信

Pachubeへのデータ送信はpachubelibraryというライブラリーとサンプルコードを活用させてもらった。ここで、その2で作成したフィードとAPIキーが必要になる。
pachubelibraryからライブラリーをダウンロードしたら、解凍してArduinoのlibrariesフォルダに保存する。合わせて、解凍したフォルダのexamplesから「PachubeOut.ino」をコピーし、これをベースにしてスケッチを作成する。以下、実際に作成したスケッチを貼り付けておく。


/*
Pachube Data Out

Demonstrates use of the ERxPachube library. 
Push local sensor data to Pachube server.
If you don't have a Pachube account, register one first (http://www.pachube.com/).

To run this sketch, you need:
 1. Create a same feed as http://www.pachube.com/feeds/23408
    (A manual feed with three data streams with ids 0, 1, 2.)
 2. Use your API key to replace the space holer PACHUBE_API_KEY below. 
 3. Use your feed id to replace the space holer feed id 23408 below. 

Circuit:
Ethernet shield attached to pins 10, 11, 12, 13

* Created 22 April 2011
* By Jeffrey Sun
http://code.google.com/p/pachubelibrary/

*/
#include <Arduino.h>
#include <HardwareSerial.h>
#include <ERxPachube.h>
#include <Ethernet.h>
#include <SPI.h>

byte mac = { 0xCC, 0xAC, 0xBE, 0xEF, 0xFE, 0x91 }; // make sure this is unique on your network
byte ip
= { 192, 168, 1, 177 }; // no DHCP so we set our own IP address

#define PACHUBE_API_KEY "(※ここにメモしたAPIキーを記入)" // fill in your API key PACHUBE_API_KEY
#define PACHUBE_FEED_ID (※ここにメモしたフィードを記入) // fill in your feed id

float val_temp = 0;
float temp = 0;

ERxPachubeDataOut dataout(PACHUBE_API_KEY, PACHUBE_FEED_ID);

void PrintDataStream(const ERxPachube& pachube);

void setup() {

Serial.begin(9600);
Ethernet.begin(mac, ip);

dataout.addData(0);
// dataout.addData(1);
// dataout.addData(2);
}

void loop() {

Serial.println("+++++++++++++++++++++++++++++++++++++++++++++++++");
float fSensorData = 15.23;

// 温度測定
temp = analogRead(0);
temp =  int status = dataout.updatePachube();

Serial.print("sync status code <OK == 200> => ");
Serial.println(status);

PrintDataStream(dataout);

// 測定間隔は30秒毎
delay(30000);
}

void PrintDataStream(const ERxPachube& pachube)
{
unsigned int count = pachube.countDatastreams();
Serial.print("data count=> ");
Serial.println(count);

Serial.println("<id>,<value>");
for(unsigned int i = 0; i < count; i++)
{
Serial.print(pachube.getIdByIndex(i">*1
;
Serial.print(",");
Serial.print(pachube.getValueByIndex(i));
Serial.println();
}
}


後はこのスケッチをArduinoに流し込めば完成。うまくいけば下記のようにグラフを表示することができるはず。
f:id:fujitakastyle:20120109012715p:image

終わりに

3回にわけるほどでもなかったが、ArduinoとPachubeを使った事例を紹介した。これまでは「」で捉えていた温度というありふれた情報も、グラフ化して「」で視覚化されるとある種の新鮮さを感じる。実際、この温度センサーは半年近く設置して測定しており、四季の変化を読み取ることができた。もっといろいろな情報と組み合わせることで、新たな発見があるかもしれない。
また、今回使ったArduinoはハードウェアを簡単に試作することができ、非常におもしろい。今後はハードウェアとソフトウェアの融合による、新たな価値がどんどん生まれてくるのではないかと考える。それを加速させる手段として、Arduinoはかなり有効なので、今後もどんどん試してみたい。


 fujitaka

*1:temp*5)/1024)*100; dataout.updateData(0, temp); dataout.updateData(1, fSensorData); dataout.updateData(2, "Arduino Data"); int status = dataout.updatePachube(); Serial.print("sync status code <OK == 200> => "); Serial.println(status); PrintDataStream(dataout); // 測定間隔は30秒毎 delay(30000); } void PrintDataStream(const ERxPachube& pachube) { unsigned int count = pachube.countDatastreams(); Serial.print("data count=> "); Serial.println(count); Serial.println("<id>,<value>"); for(unsigned int i = 0; i < count; i++) { Serial.print(pachube.getIdByIndex(i