センサを使って室内の状態チェック
第1回:植物育成デバイス制作の準備
こんにちは、ヨシケンです!
小型のArduino互換機のM5Stackシリーズを使って、室内の植物を見守り、水やりなどを自動化するデバイスを作る今回の連載。まずはM5Stackに温湿度センサと水分センサを付けて、植物の環境、水分量をチェックできるようにします。計測した結果をM5Stackの画面に表示して、観葉植物周りの状況がよく分かるようにしましょう。
今回の記事で必要な物一覧
M5Stack Core
ESP32を搭載し、ディスプレイ、センサなども入ったArduino互換機
DHT11温湿度センサ
温度と湿度が両方測れるデジタル温湿度センサモジュール
水分センサ
土中の水分量を計測
今回の記事の流れ
1. 温湿度センサの設定
M5Stackに各種センサを付けて、室内の状況をチェックできるようにします。まずは植物周りの温度及び湿度を測れるようにしたいと思います。ここでは温度も湿度も両方測れるDHT11というセンサを使ったDHT11温湿度センサ モジュールを使います。
M5Stackでセンサを使えるようプログラミングするために、まずはArduinoの開発環境であるArduino IDEを整備します。M5StackでのArduino IDEのインストール、設定の仕方はこちらの記事『Arduino互換機(M5Stack)とセンサで作るミニリモコンカー! 第1回:小型Arduino互換機(M5Stack)で電子工作を楽しむ』などを見て、準備しておいてください。
次にこのDHT11を使うために、2つのライブラリを適用します。まず、Adafruitが出しているセンサライブラリをリンクからzip形式でダウンロードします。そしてArduino IDEメニューで スケッチ > ライブラリをインクルード > .ZIP形式ライブラリをインストール から先程のzipファイルを選択し、インストールします。
2つ目のライブラリをインストールするために、ツール > ライブラリを管理 からライブラリマネージャを呼び出します。ここで“DHT11“を検索し、出てくる「DHT Sensor Library」をインストールします。
これでDHT11を使うためのソフトウェアとライブラリの準備ができました。
それではM5Stackと温湿度センサをつないでみます。このセンサでは右からGND、VDO、OUTの3つの端子があります。
M5Stackには上下に8本、左右に15本の端子が付いており、裏面を見るとそのピン配置が書かれています。裏面に書かれた数字は、ArduinoのGPIO(入出力ピン)番号と対応しています。
温湿度センサを以下表と写真のように、3つのケーブルでM5Stackとつなぎます。
センサ側端子 (右から) | M5Stack側(側部) |
GND | GND (黒) |
VDO | 3.3V (白) |
OUT | GPIO5 (黄色) |
そして温湿度を計測するための以下のスケッチを作成します。
[ M5Stack_DHT11.ino ]
#include <M5Stack.h> #include <DHT.h> const int PIN_DHT = 5; DHT dht(PIN_DHT,DHT11); void setup() { M5.begin(); dht.begin(); } void loop() { delay(3000); float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); M5.Lcd.clear(); M5.Lcd.setTextColor(YELLOW); M5.Lcd.drawString("Humidity:",0,0,4); M5.Lcd.drawFloat(humidity, 2, 0, 30, 4); M5.Lcd.drawString("%",65,30,4); M5.Lcd.setTextColor(GREEN); M5.Lcd.drawString("Temperature:",0,110,4); M5.Lcd.drawFloat(temperature, 2, 0, 140, 4); M5.Lcd.drawString("*C",65,140,4); }
このプログラムの最初で、M5Stackのライブラリと、先ほどインストールしたDHTライブラリを読み込みます。
DHT11のOUTピンとしてGPIO5番につないだので、それを指定します。
3秒毎にDHT11から湿度と温度を取得し、M5Stackの画面に黄色と緑で出力します。
それではこのスケッチをM5Stackに流し込みます。適用が成功すると、下の写真のように、湿度と温度を計測、表示できるようになったでしょうか?
これで、M5Stackで温湿度センサを使い始めることができたと思います。
2. 水分センサの設定
観葉植物を育てるにあたって、植物の水分量が足りているのかはとても大事な情報です。そこで植物の土中の水分量を測ることにしたいと思います。
土中の水分量を測るには、写真のような二極型のアナログ水分センサを使います。このセンサは、写真中金色の電極で水分量が多いほど伝導性が高く(流れやすく)なり、逆に抵抗値は下がります。この数値をアナログ電気信号で取得し、水分量として計測します。
この水分センサでも右からGND、VDO、OUTとなっており、以下表と写真のようにM5Stackに接続しています。センサはアナログでの計測をおこなうので、M5Stackでアナログ接続がおこなえる36番につないでいます。
センサ側端子 (右から) | M5Stack側(側部) |
GND | GND (黒) |
VDO | 3.3V (赤) |
OUT | 36 (青) |
次に水分量計測のために、以下のような簡単なスケッチを書いてみます。
[M5Stack_Moist.ino]
#include <M5Stack.h> uint16_t analogRead_value = 0; void setup() { M5.begin(); } void loop() { delay(3000); analogRead_value = analogRead(36); M5.Lcd.clear(); M5.Lcd.setTextColor(BLUE); M5.Lcd.drawString("Moisture:",0,140,4); M5.Lcd.drawFloat(analogRead_value, 2, 0, 160, 4); }
まずアナログ信号を取得するための値をanalogRead_valueとして定義します。このアナログ接続は36番とつないだので、それをanalogRead(36)として指定します。これだけで水分センサからその値が取得できるので、それをM5Stackに青字で表示しています。
スケッチを流し込んで計測を始めます。何も触っていない状態だと数値は0ですが、指などを触れると抵抗が変わって数値が変化するはずです。土中に差してみたりして、数値が変わるか試してみてください。
3. 植物にセットして使ってみよう
M5Stackを使って、温湿度センサと水分センサでの計測ができたので、それらを組み合わせて実際植物にセットして使ってみましょう。まず、両方のセンサをM5Stackにコンパクトにセットします。
先ほどの温湿度センサと水分センサのスケッチを両方記述したスケッチを作ります。ここで温湿度センサと水分センサの結果から、全体の画面の色を変えています。例えば室温が28度以上、又は水分値が一定以下(例えば300)の場合は、植物に良くない環境なので画面全体を赤にして警告しています。
[M5Stack_DHT11_Moist.ino]
#include <M5Stack.h> #include <DHT.h> const int PIN_DHT = 5; DHT dht(PIN_DHT,DHT11); void setup() { M5.begin(); dht.begin(); } uint16_t analogRead_value = 0; void loop() { delay(3000); float humidity = dht.readHumidity(); float temperature = dht.readTemperature(); analogRead_value = analogRead(36); M5.Lcd.clear(BLACK); if ( (temperature > 28) or (analogRead_value < 300) ) { M5.Lcd.fillScreen(TFT_RED); } M5.Lcd.setTextColor(WHITE); M5.Lcd.drawString("M5STACK SENSORS",0,0,4); M5.Lcd.setTextColor(YELLOW); M5.Lcd.drawString("Humidity:",0,30,4); M5.Lcd.drawFloat(humidity, 0, 0, 60, 4); M5.Lcd.drawString("%",50,60,4); M5.Lcd.setTextColor(GREEN); M5.Lcd.drawString("Temperature:",0,90,4); M5.Lcd.drawFloat(temperature, 0, 0, 120, 4); M5.Lcd.drawString("C",50,120,4); M5.Lcd.setTextColor(BLUE); M5.Lcd.drawString("Moisture:",0,150,4); M5.Lcd.drawFloat(analogRead_value, 0, 0, 180, 4); }
ではこれを流し込んでみて、試してみます。土中に水分センサが入っていない状態だと数値はゼロなので、背景が赤くなっています。
それでは実際に植物に差して使ってみましょう。ここではちょっと直射日光が当たり過ぎか、気温が30度を超えてしまって暑過ぎたようです。
また、土中に差して使いやすいように、水分センサの接続位置などを変えて使いやすいようにもしてみました。
植物周りの状況が変わると色が変わったでしょうか?水分センサの数値は土中の状況によっても異なりますので、色々条件を変えてみて試してみてください。
4. まとめ
今回の連載では、M5Stackを使った観葉植物育成デバイスの工作を進めています。
まずは温湿度センサと水分センサを付けて、植物の水周りを測れるようにしてみました。数値を測れるだけで、環境に気を使ったり、植物の面倒を見ようと思い直したのではないでしょうか?数値の調整やM5Stackへの表示の仕方を変えたりして、より楽しく使えるように試行錯誤させてみてください。
次回はインターネットにつないで、遠隔から植物の状況をチェックしたり、操作できたりできるようにしてみたいと思います。
お楽しみに!
今回の連載の流れ
第1回:植物育成デバイス制作の準備
第2回:センサを使って室内の状態チェック(今回)
第3回:各種センサの結果をインターネットに接続して共有する
第4回:電動スプレーを操作して自動水やり機の完成!