知り合いの農家の方が、ビニールハウスでイチゴ栽培をしておられるのですが、そのハウスにて、温度を観測・記録したいと考えています。
イチゴ栽培においては、温度の管理が大切とのことで、特にクラウンと呼ばれる株元の温度により、成長の具合が大きく変わってくるそうです。
知り合いの方は、クラウン周りのみを温める方策を取り入れることで、暖房を利用しない「環境にやさしい」イチゴの栽培を目指しておられます。
ただ、最初から大掛かりな対策は負担が大きいため、今シーズンはハウス内の一部エリアのみに方策を取り入れ、方策の有無による収量への影響を調査したいとのことです。
その際には温度データも蓄積しておき、「方策の有無」→「方策による温度への影響」→「温度による収量への影響」の相関を確認したいと考えておられます。
そのため、ハウス内の温度を観測・蓄積する方法を考えました。
前述のように、ハウス内の多数の地点(いずれもイチゴのクラウン近辺)で温度を観測する必要があります。
ハウスの端には電源コンセントがありますが、そこから多数の観測ポイントまで電源ケーブルを延ばすのは現実的ではありません。
また、ハウス内にはWi-Fi設備はありません。
そのため、以下の方針とすることにしました。
- ハウス内の電源コンセント付近に、モバイルWi-Fiルータを設置する。
- IoTデバイスは、バッテリーで長期間連続稼働できるものとする。
- IoTデバイスで温度を採取し、モバイルWi-Fiルータ経由でWebサーバにデータを蓄積する。
- Ioデバイスは多数設置するので、安価かつ構成が簡単なものにする。
当初は、IoTデバイスとして「TimerCamera F」+「ENV IIIユニット」の構成としました。
以前調査した内容(こちら)を、ほぼそのまま適用することができます(以前はENV IIユニットを使っていましたが、搭載されている温湿度センサは同じものです)。
今回は15分間隔でデータ採取しようと考えていますが、内蔵バッテリーで20日程度連続稼働できる見込みです。これであれば、シーズン中に1台あたり5〜6回充電すれば良く、十分対応可能と考えました。
ところが、実際にハウスに設置したところ(4台のデバイスを設置しました)、1台は既に20日近く連続稼働できているものの、残り3台は数日でバッテリーがなくなってしまいました。充電し直しても状況は変わりません。
3台が数日おきに止まってしまうとなると、ほぼ毎日いずれかのデバイスの充電が必要となり、さすがにこれでは結構な負担になってしまいます。
TimerCameraの個体によって問題が生じたり生じなかったりしており、原因は不明です(原因を推定した記事は こちら)。
いずれにしろ、TimerCameraにはハードウェア的な工夫の余地はほとんどなく、なんの対処もできません。
「安価」かつ「簡単」という条件を満たしていただけに残念ですが、他の対策を考える必要があります。
M5Stack社の製品で、他に低電力のデバイスといえば「M5Stamp Pico」があります。
コネクタなどが付いておらず「簡単」にデバイスをつくることはできませんが、「安価」「低電力」という条件は満たしているので、今回はこれを使うことにします。
「M5Stamp Pico」にはピンヘッダなどを取り付けることもできますが、ブレッドボードなどを使うと構成がどんどん面倒になり、接触不良などが生じる懸念も増えます。
ただ、端子に外付け部品を直接はんだづけすると、将来的に別の用途に流用することができなくなるので、それも避けたいと思います。
そんな訳で、「M5Stamp Pico」にはGROVEコネクタのみを取り付け、そこに外付け部品を取り付けることにします。
4つの「M5Stamp Pico」を加工します。
ネジを外してカバーを取り外します。
GROVEコネクタをはんだづけします。
今回、「M5Stamp Pico」にスケッチが書き込めないという問題が生じました(記事は こちら)。原因は端子の接触不良だったため、ダウンローダを接続する6ピンについて、ピンソケットもはんだづけしました。
カバーのGROVEポートの部分を切り取ってから本体に取り付けます。これで「M5Stamp Pico」本体については完成です。
電源として単三型Ni-MH電池を4本使います。
スイッチ付きの電池ボックスを用意します。
共立エレショップで「Grove互換コネクタ」というものを見つけました。
圧着ペンチで、電池ボックスのケーブルにコンタクトピンを取り付けます。
コンタクトピンをハウジングに取り付けて、電源についても完成です。
電池はアマゾンで購入しました。
次は「ENV IIIユニット」です。
センサへの日射を遮るために「日よけ」をつくります(つくり方は こちら)。
アマゾンで鉢皿を16個購入しました。
多数の鉢皿に穴を開けなければならないので、目印となる型紙をつくりました。
型紙の目印にあわせて、ドリルで鉢皿に3つの穴を開けます。
左右の穴は直径3.2mmに、中央の穴はステップドリルを使って7mmに広げます。
鉢皿16個のうち12個は、ホールソーを使って、中央の穴を更に32mmに広げます。
長さ60mmのM3ネジで日よけを組み立てます。鉢皿の間のスペーサーにはアイロンビーズを使います。
長さ50cmのGROVEケーブルの片方の端から一旦ハウジングを取り外し、ケーブルを日よけの中央の穴にとおします。
再度ハウジングを取り付け、「ENV IIIユニット」をつなぎます。
鉢皿の穴に「自己融着テープ」を巻き付け、上から水が入ってこないようにして完成です。
「M5Stamp Pico」のひとつのGROVEポートに、「ENV IIIユニット」と電池ボックスのふたつをつなぐ必要があるため、「ハブユニット」を使います。
「M5Stamp Pico」と「ハブユニット」をつなぎ、その先に「ENV IIIユニット」と電池ボックスをつなぎます。
できあがりはこちらです。
左が「TimerCamera F」を使ったもの、右が今回つくったデバイスです。
作成の手間は格段に増えてしまいましたが、材料費は同程度に収まりました。
スケッチはこちらです。
基本的には、TimerCamera用につくったスケッチに対し、スリープ移行時の処理を、単純な「esp_deep_sleep_start();」に変更しただけです。
動作中だけLEDが光るようにしておきました。
#include <FastLED.h>
#include <WiFi.h>
#include "SHT3X.h"
#define NUM_LEDS 1
#define LED_PIN 27
CRGB leds[NUM_LEDS];
SHT3X sht30;
float val0 = 0.0;
const char* ssid = "XXXXXXXX";
const char* password = "XXXXXXXX";
unsigned long interval = 900; // unit:sec
void sleepStamp() {
Serial.println("### DEEP SLEEP START");
leds[0] = CRGB::Black;
FastLED.show();
esp_deep_sleep_start();
}
boolean connect_wifi() {
省略
}
void disconnect_wifi() {
WiFi.disconnect(true);
Serial.printf("WiFi disconnected\n");
}
void setup() {
Serial.begin(115200);
Serial.println("### Get temperature data with ENV.III Unit & send request");
esp_sleep_enable_timer_wakeup(interval*1000*1000);
FastLED.addLeds<SK6812, LED_PIN, GRB>(leds, NUM_LEDS);
leds[0] = CRGB::Green;
FastLED.show();
// Get Data
if(sht30.get()!=0) {
Serial.println("### ENV III ERROR");
sleepStamp();
}
val0 = sht30.cTemp;
Serial.printf("Temperature: %.2f\n", val0);
// Connect WiFi
if(!connect_wifi()) sleepStamp();
// Send Data
if(!sendRequest(val0, 0, 0, 0)) {
Serial.println("Failed to send request.");
sleepStamp();
}
Serial.println("Send request is finished.");
// Disconnect WiFi
disconnect_wifi();
sleepStamp();
}
void loop() {}
boolean sendRequest(float val0, float val1, float val2, float val3) {
省略
}
さて、以前行った調査の結果、この構成で「M5Stamp Pico」を15分間隔で間欠動作させると、半年以上にわたり連続稼働できる見込みが得られています(記事は こちら)。
ただ、今回の回路構成では、「M5Stamp Pico」がディープスリープしている間も、「ENV IIIユニット」には電源供給されることになります。
もしも「ENV IIIユニット」の消費電力が大きければ、連続稼働できる期間が大幅に減ってしまうかもしれません。
そんな訳で、「ENV IIIユニット」の消費電流値を調査してみることにしました。
以下のように、電池ボックスと「ハブユニット」の間にテスターを挿入して、電流値を測定してみました。
調査の結果、「M5Stamp Pico」がディープスリープしている間の消費電流値は「0.88mA」となりました。
「ENV IIIユニット」を取り外すと「0.39mA」になることから、「ENV IIIユニット」自体の消費電流値は「0.5mA程度」となります。
「M5Stamp Pico」が動作している時の消費電流値に比べると2桁小さいため、「ENV IIIユニット」の消費電流値は無視でき、見込みどおりの期間、連続稼働できると思われます。
今後、実際にこのデバイスをビニールハウスに設置して、問題なく運用できるか確認していこうと思います。
なお、私がM5Stack、M5StickCの使い方を習得するのにあたっては、以下の書籍を参考にさせていただきました。
ごく基本的なところから、かなり複雑なスケッチや、ネットワーク接続など、比較的高度なものまで、つまづかずに読み進めていけるような構成になっており、大変わかりやすい本です。