はじめに
前回の記事で日照時間を調査するためのデバイスを作製しました。
今回は実際に日照時間を測定・調査します。下の全体計画の赤枠部分となります。

調査環境と調査内容
・調査環境
今回は自宅のベランダを調査してみます。調査内容は”どこが一番日当たりが良く、日照時間が長いか”です。以下のようにベランダの4カ所を、1日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でどんなことができるのか、一目でわかる一冊になっています。
おすすめ記事
相変わらず、本ブログでは資格系の記事が人気です。ぜひご覧ください。



コメント