イチゴ栽培用ビニールハウスの温度を観測する(2シーズンめ)

知り合いの農家の方が、ビニールハウスでイチゴ栽培をしておられるのですが、昨シーズン、そのハウスにて、IoTデバイスを使った温度観測を行いました。
IoTデバイスで温度を測定、Webサーバに送信して保存することで、「離れた場所での温度監視」「温度が下がった時のメール通知」の他、「温度の変動状況を後から確認」できるようにしました。

IoTデバイスは「M5Stamp Pico」+「ENV IIIユニット」+「単三型Ni-MH電池4本」でつくりました。



4台のIoTデバイスとモバイルWi-Fiルータをハウス内に設置し、途中でいろいろな問題も発生しましたが、10月下旬〜5月上旬の半年以上にわたり、なんとか温度を観測することができました(詳しくは こちら)。

さて、今シーズンも同じハウスで温度観測を行うことになりました。
やることは昨シーズンと全く同じですが、せっかくなので、昨シーズンに生じた問題にも対応しておきたいと思います。

防水対策

ビニールハウス内なので雨はかからないからと安易に考え、昨シーズンはIoTデバイスに対して特別な防水対策を行っていませんでした。
しかし実際には、湿度の変動により、デバイスを入れていたビニール袋やケースが結露し、それを繰り返すうちに袋やケースの中に大量の水が溜まってしまい、その結果、デバイスの動作が不安定になってしまいました。

よって今シーズンは、IoTデバイスをきちんとした防水ボックスに格納することにしました。
使ったのはタカチの「BCAS071005G」です。単三電池4本用の電池ボックスがちょうど入る大きさです。


ケーブルグランドを取り付けて「ENV IIIユニット」を引き出します。
「ENV IIIユニット」自体は防水対策されないことになりますが、センサなのでやむを得ません。昨シーズンと同様、自作の「日よけ」に格納します。

スケッチも昨シーズン(詳しくは こちら)と同じものです。

ソーラーパネルを追加

上記のデバイスの消費電流値を調査した結果、動作中の電流値は平均66.24mA、1回の処理にかかる動作時間は平均2977msec、ディープスリープ中の電流値は平均0.69mAでした。
10分に1回の間隔で温度を測定する場合、平均消費電流値は「66.24mA * 2977msec / 600s + 0.69mA = 1.02mA」となります。
単三型Ni-MH電池4本(2000mAh)であれば、理想的には「2000mAh / 1.02mA = 1960.7h = 81.7日」と、2ヶ月以上連続稼働できる計算になりますが、実際には1〜2ヶ月毎に電池交換する感じになるかと思います。

シーズン中の電池交換回数が3〜4回ということになりますので、このままでも十分実用的ですが、せっかくなのでソーラーパネルを追加して、電池交換なしでも常時稼働できるようにしてみたいと思います。

以前、M5Stamp Picoを0.5Wソーラーパネルで常時稼働させたことがあります(記事は こちら)。M5Stamp Picoの平均消費電流値が11mA程度までであれば、なんとか常時稼働できそうという見込みが得られています。
今回の平均消費電流値は1.02mAなので、この構成で余裕で常時稼働できるはずです。


作業としては、先ほどつくったデバイスにソーラーパネルとダイオード1個を追加するだけですが、ついでに電源電圧を観測できるようにしておこうと思います。

電源-グランド間に10kΩ抵抗2個を直列に挿入し、中間ノードをM5Stamp Picoの「25」番ピンにつないでアナログ値を測定します。

抵抗の接続にはブレッドボードをつかいました。

スケッチに以下を追加します。

  // Get Voltage
  pinMode(25, INPUT);
  uint16_t vbat = analogRead(25);
  float val1 = vbat * 3.3 * 2.0 /4096.0;
  Serial.printf("Battery Voltage: %.2f\n", val1);
  // Connect WiFi
  if(!connect_wifi()) sleepStamp();
  // Send Data
  if(!sendRequest(val0, val1, 0, 0)) {
    Serial.println("Failed to send request.");
    sleepStamp();
  }

25番ピンのアナログ値から電圧値を計算し、温度データと一緒にWebサーバに送信します。
なお、当初はアナログ入力として36番ピンを使おうとしていましたが、M5Stamp PicoのGROVEポートに「ENV IIIユニット」をつなぐと、私の環境では36番ピンのアナログ値を正しく取得できなくなるという問題が発生しました。
原因追及はしていませんが、GROVEポート(32番、33番ピン)、36番ピンともに「ADC2」につながっており、お互いのピンが何らか干渉しているのではないか?と思います。

今回は回避策として25番ピン(ADC1)を使いました。ADC1はWi-Fiと併用できないという制約があるため、アナログ値を測定してからWi-Fi接続するようにしています。

マイクロビット版IoTデバイス

上記のデバイスで温度データは問題なく測定できるはずですが、将来的には、このようなことが農家の方自身でできるようになればいいなぁと考えています。

農家の方にArduino IDEでスケッチをつくってもらうのはハードルが高いかな?などと考えていて、ふと思いついたのが「マイクロビット」の利用です。


私はボランティアで、小学生向けにマイクロビットプログラミングのワークショップを行っていますが、マイクロビットのブロックプログラミングであれば、少し教えただけで、小学生でも難なくプログラムをつくれるようになります。
これであれば、農家の方自身がIoTデバイスをつくることも可能ではないか?と考えました。

また、以前「Power」拡張機能をつかって、マイクロビットの消費電力を低減する方法を調べました(記事は こちら)。
この拡張機能をつかうと、「low power」モード中の消費電流値を1.4mA程度まで低減できます。M5Stamp Picoのディープスリープ中電流値(0.69mA)に比べると大きな値ですが、この程度であれば電池駆動でも何とか長期間稼働できそうです。

以下のような「IoTデバイス」+「ゲートウェイ」の構成にします。

IoTデバイスでデータを測定して「micro:bit無線」でゲートウェイに送信します。
ゲートウェイは「マイクロビット」と「M5StickC」の2チップ構成です。マイクロビットでIoTデバイスから送られてきた無線データを受信し、それをシリアル通信(有線)でM5StickCに渡します。M5StickCでは、受け取ったデータをWi-Fiを使ってWebサーバに送信します。
ここではゲートウェイのプログラムについて詳しく説明しませんが、ゲートウェイの機能は汎用的なものなので、私の方であらかじめ準備しておき、農家の方には所望の機能をもったIoTデバイスだけをつくってもらう、といったような運用ができるのではないかと思います。

IoTデバイスでは、マイクロビットに温度センサをつなぎますが、今回は「Grove I2C温湿度センサ(AHT20)」という温度センサを使います。MakeCode for micro:bitの拡張機能にこのセンサ用のブロックが用意されているのが理由です(記事は こちら)。

マイクロビットとGROVEセンサをつなぐには「micro:bit用Groveシールド」を使うのが一般的ですが、このシールドにはLEDがついており、電源が供給されている間はずっと点灯します。それだけでも常時数mAの電流消費となり、電池で長期間稼働させたいという用途には向いていません。
仕方がないので、代わりに「micro:bit用エッジコネクタ」を使うことにします。


GROVEケーブルの一方の端を加工してジャンパーワイヤ(メス)のコネクタを取り付け、エッジコネクタに差し込んで使います。

プログラムは以下のとおりです。

10分毎に温度を測定し、「micro:bit無線」で送信します。測定が終わったら「low power」モードに移行します。

なお、今回あらためて「low power」モード中の消費電流値を調査したところ、「2.7mA」と、以前の調査時(1.4mA)よりもずいぶん大きな値になりました。主な原因は以下のとおりです。

  • 測定方法の違い(前回はテスタで測定したのに対し、今回は電流センサで測定)。
  • 前回調査では、既に販売されていない「マイクロビットV2.0」を使っていたのに対し、今回は現在も入手可能な「マイクロビットV2.2」を使用した。V2.0→V2.2では周辺チップが変更されており、それに伴い「low power」モード中の消費電流値が0.8mA程度増加した。
  • 前回はマイクロビットのみだったのに対し、今回は温度センサも接続している。
  • 個体差(デバイスによって0.1mA程度の差あり)。

動作中の電流値は平均17.2mA、1回の処理にかかる動作時間は平均956msecなので、10分毎の処理程度であれば動作時消費電流を無視できます。
よって、動作時も含めた平均消費電流値を2.7mAとすると、理想的には単三型Ni-MH電池4本(2000mAh)で「2000mAh / 2.7mA = 740.7h = 30.8日」と、ちょうど1ヶ月連続稼働できる計算になります。実際には数週間毎の電池交換が必要で、何とか実使用は可能なレベルですが、若干物足りない感じです。

そんな訳で、こちらのデバイスにもソーラーパネルをつけることにしました。
以前、マイクロビットをソーラーパネルで長期間稼働させたことがあります(記事は こちら)。今回もこれと同じ構成にします。このソーラーパネルで、平均消費電流値が3.1mAのIoTデバイスを駆動できる計算なので、今回のデバイスもぎりぎり常時稼働できそうです。

こちらのデバイスにも、電源-グランド間に10kΩ抵抗2個を直列に挿入し、中間ノードのアナログ値を測定することで、電源電圧を確認できるようにしておきます。

ケーブルと抵抗を直接はんだづけし、熱収縮チューブで封止しておきます。

スケッチは以下のようになります。

組み立てたデバイスはこのような感じです。

ケースは一回り大きいタカチの「BCAS081307G」を使いました。


ケースは今後、別の用途に流用する可能性があるので、ちょっと格好悪いですが、ソーラーパネルはケース側面に貼り付けました。

「micro:bit用エッジコネクタ」へのピンヘッダ取り付け、ソーラーパネルへのケーブルやダイオードの取り付けに、はんだづけが必要です。
また、圧着ペンチでケーブルにコネクタを取り付ける作業も必要になります。
プログラム作成はともかく、この辺りの作業も農家の方にやっていただくのは少々難しいかもしれませんが、おいおい良いやり方を考えていこうと思います。

まとめ

IoTデバイスは3種類準備しました。

  • 「M5Stamp Pico」+「ENV IIIユニット」
  • 「M5Stamp Pico」+「ENV IIIユニット」+「0.5Wソーラーパネル」
  • 「マイクロビットV2.2」+「GROVE温湿度センサ(AHT20)」+「0.3Wソーラーパネル」

また、マイクロビット用ゲートウェイ(「マイクロビットV1.5」+「M5StickC」)も準備し、モバイルWi-Fiルータと一緒に防水ボックスに格納します。
使ったケースは、さらに一回り大きいタカチの「BCAS121207G」です。


こちらは設置場所の融通がきくので、ハウス内に引き込まれている電源コンセントで動かします。

まとめると、今回準備したデバイスは以下のとおりです。全て防水ボックスに格納しています。

これで、昨年度よりも安定して稼働できれば良いのですが。