NodeMCUを使った気象観測装置

 7月もあと少し、そろそろ夏休みの自由研究を考えないと時間がなくなってきます。

【夏休みの自由研究 2016】NodeMCU/ESP8266で作る気温・湿度観測機(製作編)

 今回は、夏休みも終わりそうな・・・ギリギリのタイミングで思いつきで始めたとして「1週間でホントに出来るかどうか」の検証も含め、気温・湿度・気圧を自動観測する観測機を作ってみました。(大器晩成というかスロースターターな子に向けて)

目的

 我が家では、”夏休みの自由研究”を、気象観測を行うというテーマと例年つづけています。

棒の温度計を使った気温と湿度の計測や、ガリレオ温度計を製作してみたり、手持ちの観測装置(ソラヨミマスター)を使った気圧・風速・温度・湿度の計測などをピンポイントで計測して自由研究レポートにしてきました。

1日に数回測定することで、1日の温度の変化の様子を調べたりすることは出来ます。

ヒトが行った場合、日中に1時間毎に測定などを1日だけ行うことは出来ますが、連続して計測を行おうとするとかなりタイヘンです。

「継続は力なり」で毎日手計測を行うことも大切ですが、ここではなく別の事に力を注ぎましょう!

そこで、小型のコンピューターを使って気象観測機(ウェザーステーション)を作成して「気温」・「湿度」・「気圧」などのの測定を行います。

はじめに

 グーグルで検索を行うと、ArduinoやRaspberry Piを使った気象観測機はインターネット上にとても多くの方法が紹介されています。

今回の重要なキーワードは「夏休みの自由研究」です。

小学生高学年〜中学生の自由研究予算(いまどきは、お盆にもらう小遣いというものがあるらしい)で装置を構成できそうな〜5000円程度を目処に2つ提案します。

必要な機材の市場調査

 気象観測機で必要となるマイコンボードとセンサーです:

  • マイコンボード:Arduino互換機
  • センサー:気圧計測可能なセンサー

1)Arduinoをはじめようキット

 Arduio純正品は価格3000円台と、機能の割にとても高価なため時間に余裕があれば1000円以下の互換機を探して使うと良いと思います。

まっさらな状態から始めようと考えている人は:「Arduinoをはじめようキット」が入手がカンタンだと思います。

Arduinoをはじめようキット
価格:4320円

見ての通り、ブレッドボードにジャンプワイヤー等がセットになっています。

LEDを点滅させる、通称「Lチカ」などは直ぐに実験できます。

ただし、夏休みの自由研究でこのセットに4320円は高い!!!

2)ブレッドボードで作るArduino

 製作にかかる部品の費用だけに着目すると、チップ単体が360円のATmega328Pを購入して、ブレッドボードで作成すると安いく出来そうなのですが・・・

ATmega328P-PU 8Mhz
スイッチサイエンス:ATmega328P-PU 8Mhz内蔵CR発信/ 360円

8Mhz内蔵発信モデルを使えば、外付け部品がほとんど必要ありません。

enter image description here

それでも、ブレッドボード、USBシリアル、ジャンプワイヤー、抵抗、コンデンサーなどをそれぞれ購入すると合わせて2000円を超えてしまいます。

PCと接続するための、「USBシリアル変換基板」が1500円もするのでどうしようもありません。

これでも2000円台になります。

3)中国製のArduino互換機

 「USBシリアル変換基板」の価格が思ったより高く、それぞれを部品で購入するよりも中国製の互換品を購入する方が安いです。

waves Arduino UNO R3 互換品
waves Arduino UNO R3 互換品:850円

アマゾンでは600円程度で販売されていますが、海外発送は2週間〜1ヶ月配送に時間がかかりますので「夏休み」期間中に間に合いません。

プライムマークがついた商品は少し高いですが、1週間程度で届きます。

PCを経由して計測データを送信することになります。

PCを専有してしまうため、他に利用したい場合や家族で共有しているPCを使う場合はこの方法は使えません。

気圧・温度センサーモジュール

 気象データを観測するための、センサーは測定したい現象に応じてセンサーを探す必要があります。 

気温・気圧センサーでサンプルや記事が多いBMP085の後継デバイスBMP180は、BME280等の比べると比較的安く入手出来ると思います。

BMP180 気圧・温度センサーモジュール

BMP180センサーモジュール

  • スイッチサイエンス:1243円
  • aitendo :気圧センサモジュール [M180-4P]:495円(税別)

ただピンが・・・
ハンダコテと配線があれば・・・これで機材は揃うのですけど。

プラグインで使える環境でなければ難しいでしょうか?!

機材調査のまとめ

 はんだこてが必要だったり、ジャンプワイヤー、ブレッドボードなどを購入しているとかかる費用は増えるばかり。

結局、USBインターフェースが付いていて直ぐにプログラムを書き始められるようなボードが一番カンタンだという事になりました。

さらに、計測したデータをクラウドサービスへ送りグラフ作成に利用するために、WiFiを利用できるボードが良いです。

提案1)ESPr Developer と 環境センサーシールド

WiFiモジュール搭載でArduinoIDEで開発可能なマイコン搭載ボード

ESPr Developerソケット付
ESPr Developerソケット付き:2580円

環境センサーシールド

気圧・気温・光センサー搭載のシールド

環境センサシールド
環境センサーシールド:2160円

このセットであれば、環境センサーシールドをソケットに差し込むだけで良く。

PCからのUSBケーブルを接続すれば、ArduinoIDEを使ってプログラムを作成を始めることができます。

ESPr DeveloperはWiFi搭載していますのでWiFi機器があればネットワークにつながります。

観測データをPCを使わずに送り続けることが可能です!

予算5000円(上記はスイッチサイエンスで取り扱いしています)

これなら、届いてスグに始められます!!!

提案2)NodeMCUとDHT22

提案2は、NodeMCUボードを使います。 ESP8266ボードとUSBインターフェースでも中国製になりますので少しだけ安くなります(中国からの発送便で買うと、600円程度とすごく安いのですけど、夏休み中に届くかどうか分かりません)。

ESP8266/NodeMCU
価格:1600円(アマゾン・プライム)

DHT22温度・湿度センサー

環境センサーでは定番のDHT11の後継モデルDHT22温度・湿度センサーです。

アマゾン・プライムで検索すると790円〜1000円程度です。(高い!)

検証実験: ESP8266/NodeMCUとDHT22を使った気象観測装置

提案2のNodeMCUとDHT22を使った気象観測機を実際に製作して、ThingSpeakでグラフを表示させます。

基本的な構成は「ESPr Developer」を使う場合と同じなんですが、ジャンパ線で繋いで作りました。 ハンダ付けはしていません。

ESP8266/NodeMCU

NodeMCUボードとDHT22センサーを使い、ThingSpeakへ計測データ送信を行いグラフ化実験を行っています。

実験部品費用

  • NodeMCU:1600円(アマゾン/プライム)
  • DHT22 :790円(アマゾン/プライム)
  • ジャンパ線3本(手持ち)
  • 10kΩ抵抗:1本(手持ち)

合計:2390円

期間は、1週間必要

今週の月曜から部品の手配して、MCUボードやセンサーをアマゾンのプライム(配送料無しで数日で配送されます)で販売しているパーツ注文。

時間的に余裕を持てば、もう少し安く部品集めができると思います。

配送までの間にファームウェア書き込みプログラム、Luaダウンロードプログラムなどのプログラム関連のアプリケーションを集めました。

パーツ配送後に、カスタムファームウェアのビルドとLuaプログラムの動作テストを行いThingSpeakへの送信テストを行っています。

【夏休みの自由研究】NodeMCUとDHT22を使った気象観測装置の実験

最終的には、測定データのグラフと観測装置の構成図などをレポートにまとめれば、「夏休みの自由研究(気象観測装置の製作と観測)」の出来上がり!

ThingSpeakでのグラフ表示

ThingSpeakのグラフ

ThingSpeakチャネル:夏休みの自由研究】NodeMCU/ESP8266で作る気温・湿度観測機

ハマったところ

 NodeMCUでDHTを使う場合、ファームウェアを専用に作ったほうが良いのか、プログラムのアップロードだけでできるのかのテストに時間がかかりました。

NodeMCUを使う場合ファームウェア書き換え手順:

  • NodeMCU firmwareを作成(NodeMCU custom builds)
  • firmwareをダウンロード
  • フラッシュツールで書き込み
  • 再起動して利用開始

一般的なリリース・ファームウェアの0.9.5/0.9.6版などを使ったりしましたが、DHTの計測データを得ることができませんでした。

カスタム・ファームウェアを作成して、ようやくプログラムで温度・湿度データを読み出せるようになりました。

Luaプログラムを使う手順:

  1. Luaプログラムの作成
  2. Luaプログラムのダウンロード(LuaDownloader利用)
  3. Luaプログラム起動・テスト・デバッグ・運用

その他.(WiFiネットワークの設定などもおこないます)

まとめると

ArduinoやESP8266ボードとセンサーを使った気象観測機を作成・観測/測定・レポートを作成するまで:

中学生が行うとして、
開発期間に4日程度必要と思います(内訳)

  • ボードやセンサーが配送されてくるまでの時間(1日〜2日)
  • アプリケーションを使ってLuaプログラムの実験をする時間(1日)
  • 測定データをThingSpeakを送信テストする時間(1日)

    おそらく、がんばれば1周間以内で「夏休みの自由研究(製作)」レポート作成を完成させられるでしょう。

ただ、研究テーマが観測の場合は、観測1日ということは考えにくいため、1週間程度の観測日を考えると合わせて2週間程、レポート作成に1〜2日程度でかかるでしょう。

観測期間の1週間の間に、ゲリラ雷雨や台風通過などの現象が起これば・・・興味深いデータがえられると思います。

Luaプログラムコード

プログラムは3つのパートで構成しています。
1. WiFi接続
2. DHTセンサー読み出し
3. ThingSpeakへ測定データ送信

sensorType="dht22"          -- set sensor type dht11 or dht22
WRITEKEY="*********"    -- set your thingspeak.com key
PIN = 2                --  data pin, GPIO4
   wifi.setmode(wifi.STATION)
   --wifi.sta.config("SSID","PASSWORD")
   wifi.sta.connect()
   tmr.delay(1000000)
   humi=0
   temp=0
   fare=0

--load DHT module and read sensor
function ReadDHT()
   status, temp, humi, temp_dec, humi_dec = dht.read(PIN)
   print("Humidity:    "..math.floor(humi).."%")
   print("Temperature: "..math.floor(temp).." deg C")
   -- release module
   dht=nil
   package.loaded["dht"]=nil
end

-- send to https://api.thingspeak.com
function sendTS(humi,temp)
conn = nil
conn = net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload)success = true print(payload)end)
conn:on("connection",
   function(conn, payload)
   print("Connected")
   conn:send('GET /update?key='..WRITEKEY..'&field1='..math_floor(humi)..'&field2='..math.floor(temp)..'HTTP/1.1\r\n\
   Host: api.thingspeak.com\r\nAccept: */*\r\nUser-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n\r\n')end)
conn:on("disconnection", function(conn, payload) print('Disconnected') end)
conn:connect(80,'184.106.153.149')
end
ReadDHT()
sendTS(humi,temp)
tmr.alarm(1,60000,1,function()ReadDHT()sendTS(humi,temp)end) 

変更する場所:

GPIOピンのどこに繋いだか設定します(D2ピンに接続しました)

PIN = 2 – data pin, GPIO4

ThingSpeakのAPIキーを設定します

WRITEKEY=”***” – set your thingspeak.com key

WiFiのSSIDとパスワードを設定します

–wifi.sta.config(“SSID”,”PASSWORD”)