ArduinoとWeatherシールドを使って、温度・湿度・気圧を測定してThingSpeakに計測データをアップしてグラフ化しました。
ネットワーク関連のWiFiモジュールやEthernetモジュール1/シールド2などは利用せずに、PCでNode.jsを動作させて計測制御とデータ送信を行っています。
小学生の夏休みというと、毎日1ページの「宿題帳」
夏休みの宿題帳には、地域性があるそうで「夏休みの友」と呼ぶ宿題帳みたいなものだったり、個別の宿題だったりいろいろあるそうです。
私が子供の頃は、「夏休みの友」というのを渡されていました。
その夏休みの友には、お天気記録欄(四角い枠)があって小学校の低学年の頃は「晴れ・曇・雨」などのアイコンを書いてました。
こんな感じだったかな・・・
このお天気アイコン(お天気マーク?)を書くときに困るのは、
「晴れと曇りってどうやってきめる?」、「雨は少しでも降ったら雨でいい?」 などと定義のなさに一人悩んでましたね。
きっと、夏休みになると「お天気の実験」をしてしまうのは、これが原因(潜在意識の中に刷り込まれている?!)では無いかと思ったりします・・・
ということで、
ArduinoとSparkFunのウェザーシールドを使った気象観測装置
を作ります。
今回の製作のポイントは次の4点
- Aruduino(もしくは互換機)を使って
- センサーはウェザーシールドのみを使い
- 計測データはクラウドサービスに送ってグラフ作成
- でも、WiFi/Ethernetシールドやモジュールは使わない
何故かというと:
- Arduino(もしくは互換機)を使って
- 単純に、先ににArduino UNOかUNO互換機を買っていて持っているから.
- 観測目的で作成する場合にはWiFiデバイスが搭載されているボードを使ったほうが良いでしょう。
- センサーはウェザーシールドのみを使い
- 先にウェザーシールドを購入していたから。
- 使わないともったいないので使っています。
- 計測データはクラウドサービスに送ってグラフ作成
- 計測したデータを溜めてグラフにすることも出来ます。
- IoTやクラウドサービスがどんどん広がってきていているので便利なものは何でも使います。
- でも、WiFi/Ethernetシールドやモジュールは使わない
- WiFiシールドやEhternetシールドって以外と高い。
- 追加でシールドは使わないことにしました。
つまずいた
Arudinoとシリアル通信を使った方法は、多くの情報があって直ぐに見つかると思っていました。
ところが、グーグル先生に聞いてみましたがすぐには見つからず・・・
「Javascriptを使ってAdruinoを制御する方法」を紹介しているブログページでFirmataを使えるのではと思い。
関連記事を探して、Johnny-fiveライブラリやj5-sparkfun-weather-shieldライブラリにたどり着きました。
個人的には、Node.jsでなくPythonで制御できると良いのです。
しかし、手頃なライブラリやセンサー制御方法の紹介記事がNode.jsの方が多いように思いました。
夏休みの限られた期間で、計測機を完成させて計測するには、取り扱っている「記事の量」が多いNode.js/Javascriptが良いだろうと考えて、Javascriptでプログラムを作成しました。
Weatherシールド価格調査(7月30日)
- スイッチサイエンス:4992円
- ストロベリー・リナックス:4300円
- マルツオンライン:4480円(税抜)、納期4週間!
方式概要:ArduinoとウェザーシールドをノートPCで制御
今回のハードウェア(Arduino UNO/UNO R3など)は、シリアル・インターフェース以外の通信手段を持っていません。
そこで、シリアル・インターフェースを使ってデータのやり取り(送受信)を行います。
制御するノートPCで、Node.jsを動作させてArduinoへ司令を送り温度・湿度・気圧を計測、測定データを受信・加工、そしてクラウドへのデータ送信を行うプログラムを作ります:
- javascript(node.js)でArduinoを制御します
- ノートPC(Windows10)にNode.jsと環境設定
- ThingSpeakにデータ送信とグラフの表示
それでは、実際の手順を紹介します:
〜 ウェザーステーションの製作 〜
まずは、Arduino UNOです。
Arduino UNO R3って8bitマイコンなのに、32bitマイコン搭載のRaspberry Pi並の価格で売られていてとてもじゃないけど買えません!
そこで、600円程度で売られていた互換機を使っています!
余談:一見安く見えるけど、実は価格があまり変わらないパーツ買い
〜 3.3V@12Mhzで動作させる用に作った”あちゃんでいいの” 〜例えば、価格180円の「あちゃんでいいの」キットと、260円のATmega328Pでも動来ます。
ですが、中国製互換機が500円くらいならパーツで作るより互換機買ったほうが安い。
販売価格は、為替レートにも依存しますので、市場調査は直前に行いましょう!
ところで、シールドってなんだろうと思いませんでした?
Weather Shield(ウェザー・シールド)
- 全てのオプションを装着した状態 -
SparkFun社が販売している気象観測用のウェザー・シールドです。
基本ボードには、気温・気圧・湿度・光度センサーを搭載しています。
オプションとして、モジュラージャックを通して風速・風向・雨量などのセンサーを取り付けることが可能で、GPSを取り付けるポートもついています。
Arduino UNOとウェザーシールドを使って気象観測機を作成する手順を紹介しましょう。
ステップ1. Arduinoの設定
まずは、ArduinoにFirmataを書き込みます。
StandardFirmataを選んでArduinoに書き込みます。
Arduinoの準備はこれだけです。
ステップ2. ノートPC(Windows10)の設定
Node.js / npmをインストールします。
安定版のLTSをダウンロードしてインストールします。
私はWIndows Installer(.msi) 64bitを用いました。
インストーラー起動
・・・・
インストーラー終了
コマンドプロンプトでnpmコマンドのバージョンをチェックしてみます。
$ npm -v
2.15.8
2-1. Arduinoを使うライブラリ(johnny-five)をインストール
javascriptを使ってArduinoを動作させるためのライブラリをインストールします。
$ npm install johnny-five
2-2. Weather Shield用のライブラリ
ウェザーシールド搭載のセンサーにアクセスするためのライブラリをインストールします。
$ npm install j5-sparkfun-weather-shield
2-3. ThingSpeakクライアントライブラリ
ThingSpeakへデータを送るためのライブラリをインストールします。
$ npm install thingspeakclient
ステップ3. ThingSpeakの設定
ThingSpeakにサインアップしてアカウントを作成します。
アカウントができたら、チャネルを作成します。
チャネルが作成できたら、APIKeysタブでWrite API KeyとChannelIDをチェックします。
ステップ4. プログラムの作成とテスト
var ThingSpeakClient = require('thingspeakclient');
var client = new ThingSpeakClient();
// ThingSpeakで、チャネルIDとAPIキーをチェックします。
var channelId = <チャネルID>;
var writekey = '<Write APIキー>';
var readkey = '<Read APIキー>';
var five = require("johnny-five");
var Weather = require("j5-sparkfun-weather-shield")(five);
var board = new five.Board({
port: "COM3" //必要ならCOMポートを指定します。
});
board.on("ready", function() {
// variantはARDUINOです。
// evevationは、観測値の高度(m)
// freqは、計測インターバルタイムを設定します
var weather = new Weather({
variant: "ARDUINO",
elevation: 2,
freq : 600000 //10分=600秒=600000ミリ秒
});
// ThingSpeakへのデータ送信
//
//
client.attachChannel(
channelId,
{writeKey : writekey, readKey : readkey}
);
// 計測と桁数調整
// 小数点以下2桁で切り捨て、
// 計測データを100倍して切り捨て処理後に1/100に戻しています。
// 気圧は計測値が101.00となりますので、hPa表示にするため、1/10としています。
weather.on("data", function() {
var temp = (Math.floor(this.celsius*100)/100);
var humi = (Math.floor(this.relativeHumidity*100)/100);
var pres = (Math.floor(this.pressure*100)/10);
console.log(temp + "C", humi + "%", pres + "hPa");
// ThingSpeakへ送信するデータ
// field1, field2, field3設定しています。
var fields = {field1: temp, field2: humi, field3: pres};
// データの送信と送信結果のチェック
client.updateChannel(channelId, fields, function(err, resp) {
if (!err && resp > 0) {
console.log('update successfully. Entry number was: ' + resp);
} else {
console.log(err,resp);
}
});
});
//setTimeout(()=>{console.log('Timeout');},1000);
});
日本語でコメントを追加していますので、このままコピペしてもエラーになるかもしれません。
起動方法
$ node test.js
ステップ5. ThingSpeakでグラフを確認
プログラムを起動して、インターバルタイムで設定した間隔でデータがThingSpeakへ送信されるます。
ThingSpeakのChannelSettingsでグラフ表示(ポイント数やタイトル、XY軸の項目名など)を設定・調整すると出来上がりです。
ThingSpeakは、計測データとグラフ表示データを調整することが出来ます。
ステップ6. 運用開始
人工衛星のニュースなどを見ていると、気がつきせんでしたか?!
実際の運用に入る前に、「機能のテスト」を行っていますよね。
個々の機能テストを行って問題が無いことが確認できてから本番の運用へ進みます。
運用時のポイントは観測インターバルタイムを何分?何時間?に設定刷るかでしょう。
粗すぎると変化が見えなくなってしまいますし、細かすぎると変化の無いデータでいっぱいになっちゃいます。
ひとまず、計測インターバル間隔は、10分〜30分程度の間隔としておき、グラフの様子を見ながらインターバルタイムの調整を行うと良いでしょう。
ライブデータ
ThingSpeakチャネル:夏休みの自由研究】ArduinoとSparkFun Weather Shieldで気象観測(参号機)
デメリット:長期運用となりますと、計測期間はノートPCは使えません・・・共有しているPCを使うと怒られます!
ステップ7. まとめ
ThingSpeakは、データをExport出来ますので別のパソコンでグラフ化したりデータを分析することも出来ます。
今回の作成のポイントをおさらいすると、
Arduino UNOなどを使った場合、WiFi/Ethernetシールドやモジュールがなくても、パソコンで制御でき、Arduinoで計測したデータをクラウドサービスへ送り出すことが出来ました。
運用開始してからしばらくは、データの状態を見ながら設置場所を移動したりインターバルタイムの調整が必要かもしれません。
まとめ
気象観測装置を使い、データが収集できてくると・・・
もしかすると、気象現象とグラフ上の変化の気象現象の関連性が見つかるかもしれません。
そうしたら、それをレポートにまとめるだけで「夏休みの自由研究」レポートが完成ね!
この計測器、名前は・・・・・
「ウェザーステーション」
響きは悪く無い!
梅雨明け前後の観測データがあるとよかったか
梅雨も開けたし、ゲリラ雷雨でも
今年は台風の発生数が少なくて、8月に台風はくるでしょうか?
・・・
ん?おかしなものだ
これではまるで、災害を待ち望んでいるようではないか???
準備は整った!!
スマホを持って、ポケモンGOだ!!!
コメントを投稿
コメントを投稿