6. 植物モニター¶
本プロジェクトの目的は、現在の温度、湿度、光の強度、土壌の湿度を検出し、それらをBlynkに表示するスマートな水やりシステムを作成することです。
Blynk Cloudのスイッチトグルをオンにすると、ポンプが動作し始め、植物に水が供給されます。
必要な部品
このプロジェクトでは、以下の部品が必要です。
一式を購入するのが便利です。リンクは以下のとおりです:
名前 |
このキットのアイテム |
リンク |
---|---|---|
3 in 1 Starter Kit |
380+ |
以下のリンクから個別に購入することもできます。
コンポーネントの紹介 |
購入リンク |
---|---|
- |
|
- |
1. 回路を組む
注釈
ESP8266モジュールは、安定した動作環境を提供するために高電流が必要ですので、9Vのバッテリーが接続されていることを確認してください。
2. ダッシュボードを編集
以前のプロジェクトで作成したデータストリームは保存しておく必要があり、このプロジェクトでも使用されます。
土壌の湿度を記録するために、 Datastream ページで Virtual Pin タイプの別の Datastream を作成します。DATA TYPEを
Integer
に設定し、MINとMAXを0
および1024
に設定します。さらに、 Web Dashboard ページに移動し、2つの Label ウィジェットをドラッグして、それぞれのデータストリームを V4 および V5 に設定します。次に、2つの Gauge ウィジェットをドラッグして、それぞれのデータストリームを V6 および V7 に設定します。最後に、 Switch ウィジェットをドラッグして、そのデータストリームを V0 に設定します。
3. コードの実行
3in1-kit\iot_project\6.plant_monitoring
のパスの下で 6.plant_monitoring.ino
ファイルを開くか、このコードを Arduino IDE にコピーします。
注釈
ここでは
DHT sensor library
が使用されています。 Library Manager からインストールできます。
Template ID
、Device Name
、Auth Token
を自分のものに置き換えます。また、使用しているWiFiのssid
とpassword
を入力する必要があります。詳細なチュートリアルは 1.4 R3ボードをBlynkに接続 を参照してください。正しいボードとポートを選択した後、 Upoad ボタンをクリックします。
シリアルモニター(ボーレートを115200に設定)を開き、接続成功などのプロンプトが表示されるのを待ちます。
注釈
接続時に
ESP is not responding
というメッセージが表示される場合、次の手順に従ってください。9Vのバッテリーが接続されていることを確認します。
ピンRSTを1秒間GNDに接続してESP8266モジュールをリセットし、その後プラグを抜きます。
R3ボードのリセットボタンを押します。
ときどき、上記の操作を3~5回繰り返す必要がありますので、お待ちください。
Blynkに戻ると、現在の温度、湿度、光の強度、土壌の湿度が表示されます。必要に応じて、ボタン制御ウィジェットをクリックして植物に水をやることができます。
Blynkをモバイルデバイスで使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。
どのように動作するのか?
この BLYNK_WRITE
は、Blynkの Switch ウィジェットがONのときにポンプを起動し、OFFのときにポンプをオフにします。
BLYNK_WRITE(V0)
{
if(param.asInt()==1){
digitalWrite(pumpA,HIGH);
}else{
digitalWrite(pumpA,LOW);
}
}
以下の三つの関数は、現在の環境温度、湿度、光の強度、土壌の湿度を取得するために使用されます。
int readMoisture(){
return analogRead(moisturePin);
}
int readLight(){
return analogRead(lightPin);
}
bool readDHT() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
humidity = dht.readHumidity();
// Read temperature as Celsius (the default)
temperature = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return false;
}
return true;
}
Blynkの Timer
を使用して、周囲の温度、湿度、光の強度、土壌の湿度が毎秒取得され、 Blynk Cloud 上のデータストリームに送信され、ウィジェットがデータを表示します。
void myTimerEvent()
{
bool chk = readDHT();
int light = readLight();
int moisture = readMoisture();
if(chk){
Blynk.virtualWrite(V4,humidity);
Blynk.virtualWrite(V5,temperature);
}
Blynk.virtualWrite(V6,light);
Blynk.virtualWrite(V7,moisture);
}