裏庭のビニールハウスでの水耕栽培ですが、無事にプログラム通りに養液を噴霧しています。
溶液の噴霧や温度管理はarduinoで行い、家庭菜園の水やりも自動化、ビニールハウスの温度管理も今年はドライミストに挑戦です。
そこで、今度はセンサーを使って温度、湿度、気圧、照度、などを栽培管理の基礎データとして記録し、エクセルで分析しようと思います。
データロガーとは
センサーにより計測・収集した各種データを保存する装置のことで農業のIT化とか言われていますよね。
例えばトマト。
トマトのひび割れは早朝5時から6時頃にかけて多く発生するそうです。
この時間帯の照度を見ると0ルクスから100ルクスを超えてくる時間帯になります。
ということは、この時間帯での水耕栽培の噴霧間隔と時間を照度で管理するってことが有効かもしれませんね。
スマホで管理する
【新着記事】
温度や湿度などセンサーで計測したデータをスマホで見たり、スマホから潅水など設備の電源をON OFF出来るようにしてみました。
カイエン社のiotプラットフォーム(無料)を利用したもので簡単に設定することが出来ます。
海外旅行先からスマホで遠隔水やり

どのようなデータを記録するか
どのような機能を実装したらいいのでしょうか?
アプリを使っでIphoneから見れたり操作出来るって便利ですよね。でも、ここでは必要な機能に絞ってみます。
温度、湿度、照度(日射量)、土壌水分量それに炭酸ガス濃度とか必要なデータに思えます。
降雨量や風速などもあればいいですね。
必要機能を盛り込んでみる
土壌PH計やECメーターなんかも盛り込みたいけどセンサーがアマゾンで見当たらないので(単品ならあるけど)差し当たり、除外しておきます。
ということで、これからいろいろ追加しょうと思います。
arduinoにはwifiモジュールもあるけど裏庭ハウスなので今回は除外です。
wifiモジュール(EPS8266)を使えばネットから付近の降雨量、風速も収集して同時に記録できそうですね。
照度センサー
カズが購入した時には1個で販売していたけど送料込みで安過ぎだったのか現在は3個で販売してるみたいです。
BH1750を使っているモジュールなら使えます。
また、BH1750のスケッチはこちらで詳しく取り上げています。
BME280 はあの世界的企業のBOSH社の製品です。 車部品メーカーと思っていたけどこのような優れたセンサーも作っているんですね。 このBME280を使ったセンサーモジュールです とても高精度です。温度、湿度、気圧をコンマ以下まで測定出来ます。 実装方法はスイッチサイエンスさんが詳しくまとめてあるのでこのままコピペで使えます。 BME280があれば温度センサーはいらないと思われるかもしれませんがBME280は水温測定は出来ません。 水は厳禁です。 ということで防水サーミスタを使います。 カズは現在のところエアロポニック水耕栽培 養液温度と室温測定に使っていますが地温測定に回す予定です。 そのまま地中に入れることが出来ますからね。 地中に埋まる信号線はPVCホースを被せて保護するつもり….。 カズは炭酸ガス濃度センサーはつけていませんが炭酸ガスを与えると作物が良く育つということでビニールハウスに炭酸ガス発生器を設置している専業農家さんも多いと思います。 でも製品のCO2センサーは高価ですけど、arduinoで動作させるセンサーモジュール(CO2センサーを使えるように電子部品を組み込んだ基盤)なら桁違いに安くなります。 arduinoで使えるCO2センサーとしてはMG811が手頃ではないかと思います。 専業農家さんは検討してみるのもいいですね。 センサーモジュールで測定したデータをSDカードに記録します。 そのためのSDカードモジュールです。 マイクロSDカードは標準フォーマットのマイクロSDカードが使えます。 そしてarduino本体も準備したところで次ではSDカードに記録するためのスケッチ(プログラム)をしてみます 【2019/02 追記】 wifiモジュールesp8266より新しいesp32wifi開発版を購入しました。 arduinoとは勝手が違って戸惑っていますが、それでもSDカードに温度や湿度などを記録することが出来ました。 また、ビニールハウスに設置したセンサーの値をwifiでgoogleクラウド(無料)に保存するところまで出来ました。 googleクラウド(googleドライブ)にはエクセルと同じ機能のグーグルスプレッドシートが備わっています。 グーグルスプレッドシートのデータは簡単にエクセルに取り込むことも出来ますので、今までと同じようにエクセルで分析することも出来ますね。 グーグルスプレッドシートではスクリプトを使いますのでカズは駆け出しですが、多くの図を使って手順を説明していますので、コピー、ペーストで使えます。 ビニールハウス 農業のIT化 – データをクラウドで管理する SDカードモジュールにはピンが6本あります。 arduino mega2560との配線はこのようになります。 SDカードで使う電圧は3.3Vですが、SDcardモジュールに変圧回路が組み込んでありますのでarduinoと同じ5Vで使えます。 arduinoにはライブラリがあり、SDカードであれば『SD.hライブラリ』を使うことでSDモジュールを使うことが出来ます。 また、arduinoIDEにはスケッチ例があるのでそれも使えます。スケッチ例を参考にしながら追加していくといいですね。 SD.hとSPI.hライブラリを追加(インクルード)し、ファイルの名称とCSピン番号を指定します。 RTCや照度、温湿度を動作させるライブラリやピン指定、などもここに記入します。 セットアップではこのように記述しました。 RTCや照度、温湿度のセットアップもここに記入します。 先ず、年月日と時刻を書き込みます。 データはdata1というファイル名をつけてテキスト形式(data1.txt)にしています。 ファイルは最初に作っていてもいいし、なければ作ってくれます。 また、すべてカンマ区切にしてdelayは(1000)としています。 書き込み間隔はRTCのsecondを使いました。 ここでは温度を書き込んでいます。 照度センサーはBH1750モジュールを使いました。 実装方法はこちらの記事です。 このように『カンマ区切り』『摘要』『カンマ区切り』『データ』という順になっています。これを1セットにしていくつでも繰り返して記述します。 そして、最後にファイルを閉じます。もし、ファイルが開かれていなかったらシリアルでエラーを表示させます。 カンマで区切るのでエクセルに楽に吸い上げることが出来ます。また、wifiで飛ばしてクラウドにアップする時もCSV形式のデータになっているのでそのまま利用出来ます。 ここではRTCの秒(second)を使い、secondが1になった時に書き込みをするようにしました。 一分毎の書き込みですね。 マイクロSDカードに記録されたデータをエクセルで開くようにします。 一分間隔で数週間や、数か月ともなれば手作業と言うわけにはいきません。 そこで、マクロを組んでみました。 コマンドボタンにデータの取得と記入し(マクロは標準モジュールに貼り付けOK)後は『押すだけぇ~~(^^♪』です。 エクセルマクロは日本語でもOKですので判り易くていいですね。但し、命令の記述の部分は半角英数で記述します。 マクロ命令です。(excell VBA) フルパスの調べ方: パソコンでSDカードを開きDATA1.txtをデスクトップにドラッグします。 デスクトップにあるDATA1を右クリックしてプロパティを選択します。 場所:に表示されているのがファイルのフルパスですのでその後ろに\DATA1.txtを記入します。 データ数とは? データ数はカンマ区切りを除いた日時データと『摘要』『データ』になります。 サンプルスケッチではデータ数は合計7個ですので、マクロ記述ではデータ数のところに『7』と記述します。 このマクロでクリック一発!エクセルにSDカードデータを取り込めます。 2018/5/22の2時から2時15分の状況です。 ちょっと曇り空になっています。 あれっ? データが所々記録されていません。エラー発生ですね。 原因は判りませんが書き込みチャンスが1分間に1度だけというのに問題がありそうです。 それならもっと書き込みチャンスを増やそうということでスケッチを修正しました。 セットアップ前に int sd_time=61;を追加しました。 次にLoop()内記述を秒で動作させるのではなく分で動作するように変更しました。 if(sd_time!=minute){ に変更です。 このスケッチの意味は『もし、sd_timeとminuteが異なったら { 内を実行しなさい』という命令になります。 最初にsd_time=61としているので最初の実行が始まります。61秒ってありえませんからね。 エラーが起きたらの部分は削除しました。 これで書き込みチャンスは1分間に60回と大きく増えて書き込みエラーはなくなりました。 sd_timeとminuteを同期させるので一度書き込んだら次の書き込みは1分後ということになります。 野菜の成長と天候や温度,湿度,照度などの相関関係をつかみたいと思い実装してみました。 実装して判ったことは…. 天気が崩れる数時間前に気圧が下がってくる。 雨が降っていても気圧が上がってくると数時間先には晴れ間が出る。 カズは農業の経験がないので裏庭ハウスでも、何か『目途』になる指標が欲しくて作ってみました。 経験豊富な専業農家さんなら、簡単にデータをエクセルに取り込めるので有効にデータ活用が出来るのではと思います。温度,湿度,気圧センサー
温度センサー
炭酸ガス濃度センサー
SDカードモジュール
データロガー クラウド管理
データロガー モジュール配線
VCC → 5V(3.3Vでも可)
MOSO → 50番
MOSI → 51番
SCK → 52番
CS → 53番データロガー スケッチ
ライブラリの追加と指定
#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53;
setup()
pinMode(pinCS, OUTPUT);
if (SD.begin()){
Serial.println("SD card tukaemasu.");
}else{
Serial.println("SD card tukaemasen");
return;
}
Loop()
if(second==1){
myFile = SD.open("data1.txt", FILE_WRITE);
if (myFile) {
myFile.println("");
myFile.print("20");
myFile.print(year,DEC);
myFile.print("/");
myFile.print(month,DEC);
myFile.print("/");
myFile.print(date,DEC);
myFile.print(hour,DEC);
myFile.print(":");
myFile.print(minute,DEC);
データロガーの書き込み
温度
myFile.print(",");
myFile.print("house_ondo");
myFile.print(",");
myFile.print(onshitu_ondo);
myFile.print(",");
myFile.print("saibai_ondo");
myFile.print(",");
myFile.print(saibai_ondo);
照度
myFile.print(",");
myFile.print("lux");
myFile.print(",");
myFile.print(lux);
}
記入方法
myFile.close();
}else{
Serial.println("error opening data1.txt");
}
書き込み時間の設定
データロガーをエクセルで開く
コマンドボタン
データの取得
End Sub
Dim FileName As String, x As Integer, Result As Variant,FileNum As Integer,buf
FileName = “フルパスの調べ方\DATA1.txt”
FileNum = FreeFile
x = 1
Open FileName For Input As #FileNum
Do Until EOF(FileNum)
Line Input #FileNum, buf
Result = Split(buf, “,”)
Range(Cells(x, 1), Cells(x,データ数)).Value = Result
Loop
Close #FileNum
End Subデータが飛んでいる!
エラーを起こさないようにする
#include <SPI.h> <>は半角です。
int pinCS = 53;
int sd_time=61;
myFile = SD.open(“data1.txt”, FILE_WRITE);
if (myFile) {
……データを記録
……データを記録
……
myFile.close(); //ファイルを閉じる
}温度データロガーをエクセルで吸い上げる まとめ