日照時間の調査【農業IoT・AgriTechデバイス開発#3】

IoT

はじめに

計画通りに進めていても記事の投稿にラグがある可能性がありますが、悪しからず。
本当に計画通りに進められていない場合もありますが・・・。

前回の記事で日照時間を調査するためのデバイスを作製しました。

今回は実際に日照時間を測定・調査します。下の全体計画の赤枠部分となります。

調査環境と調査内容

・調査環境
今回は自宅のベランダを調査してみます。調査内容は”どこが一番日当たりが良く、日照時間が長いか”です。以下のようにベランダの4カ所を、1日1カ所として調査・分析してみます。しかし、天気に大きく左右されてしまうことが懸念されます。そこで、今回は日の中で最も照度[lx]が高い値で規格化して、各カ所を比較することにします。理想的には同じような天気の時に測定したり、4デバイスで同時に測定するべきです。しかし、それでは時間&コストがかかってしまうので、今回は簡易的に測定したいと思います。

スケッチ

今回はM5Stack Basic V2.6を使っています。スケッチは以下のようにしました。なお、スケッチはM5Stack様の公式HPに公開されているサンプルコードを一部参考にさせていただいています。

#include <M5Stack.h>
#include <M5GFX.h>
#include <M5_DLight.h>
#include <SD.h>

//ディスプレイ関連
M5GFX display; //インスタンス生成
M5Canvas canvas(&display); //引数は&displayで参照を渡す

//センサー関連
M5_DLight sensor; //インスタンス生成
uint16_t lux_data; //照度を格納する変数、uint_t型でメモリを節約
File csvFile;
char fileName[99];

void setup() {
  M5.begin();
  display.begin();
  sensor.begin();
  canvas.setTextDatum(MC_DATUM); //テキストの基準位置を中央に設定
  canvas.setColorDepth(1); //カラービット深度をモノクロ表示に設定(メモリ消費を抑える)
  canvas.setFont(&fonts::Orbitron_Light_24); //フォントを指定
  canvas.createSprite(display.width(), display.height()); //仮想画面(Sprite)を生成、引数はディスプレイの幅と高さ
  canvas.setPaletteColor(1, ORANGE); //フォントカラーを指定
  
  //SDカード内に"Data"というファイルがなければ作成する
  if (!SD.exists("/Data")) {
    SD.mkdir("/Data");
  }
  //
  snprintf(fileName, 99, "/Data/testFile.csv");

//SDカードにcsvファイルを作成して、項目を記入しておく
//今回はData_Noとlux[lx]
  if (SD.exists(fileName) == false) {
    csvFile = SD.open(fileName, FILE_APPEND);
    csvFile.print("Data_No,lux[lx]\n");
    csvFile.close();
    delay(1000);
  }
}

float interval_min = 1.0; //データ取得の間隔を分単位で指定する用の変数(今回は1分に1回測定)
char lux[40]; //照度を文字列にフォーマットするときの変数
int n = 0;  //測定回数を格納する変数

void loop() {
  //画面に測定データを表示する
  sensor.setMode(ONE_TIME_H_RESOLUTION_MODE); //低消費電力モード ただし、getLUX()を呼び出す毎にリセット
  lux_data = sensor.getLUX();
  snprintf(lux, sizeof(lux), "lux: %d", lux_data); //lux_data(float)をlux(char)フォーマットして格納
  canvas.fillSprite(BLACK); //背景を黒にリセット
  canvas.drawString(lux, 160, 120); //luxを画面に描画
  canvas.pushSprite(0, 0); //仮想画面の内容を実際の画面に送信して描画
  
  //csvファイルにデータ保存(詳細は参考記事にあります)
  csvFile = SD.open(fileName, FILE_APPEND);
  csvFile.print(n);
  csvFile.print(",");
  csvFile.print(lux_data);
  csvFile.print("\n");
  csvFile.close();
  n++;
  delay(interval_min*1000*60);
}

今回はM5Stackの画面に測定値[lx]を表示するようにしていますが、必要に応じて削除してもらっても良いかと思います。おそらく表示しない方が消費電力を抑えられるはずです。

また、SDカードへの保存方法は以下の記事で詳しく説明していますので、併せてご覧ください。

調査結果

結果をお見せする前に、データの処理方法をまとめてききます。今回測定では以下のようにデータを処理しました。もちろん、もっと良い処理や判断基準があるとは思いますので、後々改善していこうと思います。

データの処理方法

  • 四分位範囲内のデータを使用することでノイズ等を除去
  • 天気(測定日)の影響を受けるため、測定値[lx]で単純に比較できないので、各栽培場所の候補における測定データを最大値で規格化し、四分位範囲内のデータの合計Sを計算
  • 上記Sで各候補の日照時間を比較し、最もSが大きい場所を栽培場所として決定

続いて、測定結果です。1つのグラフにまとめています。繰り返すようですが、縦軸は規格化しています。横軸は時間ですが、若干のズレがあり紛らわしいため、削除しています。

やはりこれだけだと何もわからないため、データの合計Sを見てみます。

栽培場所の候補S
137.0
241.0
156.7
269.1

これを見ると、候補④が日当たりが一番良いみたいです。我が家は3階建てで、2階のベランダで調査をしたので、角度的に候補④が有利だったようです。ということは、季節によって太陽の高さが変わると、日当たりの良さも変わりそうですね。まあ、ひとまず候補④で栽培を進めたいと思います。

最後に

今回はAgriTechを始めるにあたり、栽培環境を決める指標となる日照時間を調査しました。デバイスは単純な構成ですが、今後のデバイスにも活かすことができると思います。感覚ではなく、実際の測定値を元に判断すると、納得感があっていいです。

では、今回はこの辺で。

おすすめの書籍

 もっと詳しくM5Stackについて知りたい!という方はこちらの書籍がおすすめです。とても詳しく載っていてわかりやすいです。

とりあえず何か作ってみたい!という方にはこちらの書籍がおすすめです。書いてある通りにやるだけでお手軽にIoTデバイスを作ることができます。

Arduinoで電子工作したい方にはこちらもおすすめです!Arduinoでどんなことができるのか、一目でわかる一冊になっています。

おすすめ記事

相変わらず、本ブログでは資格系の記事が人気です。ぜひご覧ください。

コメント

タイトルとURLをコピーしました