6. 植物モニター

本プロジェクトの目的は、現在の温度、湿度、光の強度、土壌の湿度を検出し、それらをBlynkに表示するスマートな水やりシステムを作成することです。

Blynk Cloudのスイッチトグルをオンにすると、ポンプが動作し始め、植物に水が供給されます。

必要な部品

このプロジェクトでは、以下の部品が必要です。

一式を購入するのが便利です。リンクは以下のとおりです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

以下のリンクから個別に購入することもできます。

コンポーネントの紹介

購入リンク

SunFounder R3ボード

BUY

ブレッドボード

BUY

ESP8266 モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

DHT11 湿度温度センサ

-

土壌湿度モジュール

BUY

L298N モジュール

BUY

遠心ポンプ

-

1. 回路を組む

注釈

ESP8266モジュールは、安定した動作環境を提供するために高電流が必要ですので、9Vのバッテリーが接続されていることを確認してください。

../_images/wiring_soil_pump.jpg

2. ダッシュボードを編集

  1. 以前のプロジェクトで作成したデータストリームは保存しておく必要があり、このプロジェクトでも使用されます。

  2. 土壌の湿度を記録するために、 Datastream ページで Virtual Pin タイプの別の Datastream を作成します。DATA TYPEを Integer に設定し、MINとMAXを 0 および 1024 に設定します。

    ../_images/sp220610_155221.png
  3. さらに、 Web Dashboard ページに移動し、2つの Label ウィジェットをドラッグして、それぞれのデータストリームを V4 および V5 に設定します。次に、2つの Gauge ウィジェットをドラッグして、それぞれのデータストリームを V6 および V7 に設定します。最後に、 Switch ウィジェットをドラッグして、そのデータストリームを V0 に設定します。

    ../_images/sp220610_155350.png

3. コードの実行

3in1-kit\iot_project\6.plant_monitoring のパスの下で 6.plant_monitoring.ino ファイルを開くか、このコードを Arduino IDE にコピーします。

注釈

  • ここでは DHT sensor library が使用されています。 Library Manager からインストールできます。

    ../_images/lib_dht11.png
  1. Template IDDevice NameAuth Token を自分のものに置き換えます。また、使用しているWiFiの ssidpassword を入力する必要があります。詳細なチュートリアルは 1.4 R3ボードをBlynkに接続 を参照してください。

  2. 正しいボードとポートを選択した後、 Upoad ボタンをクリックします。

  3. シリアルモニター(ボーレートを115200に設定)を開き、接続成功などのプロンプトが表示されるのを待ちます。

    ../_images/2_ready.png

    注釈

    接続時に ESP is not responding というメッセージが表示される場合、次の手順に従ってください。

    • 9Vのバッテリーが接続されていることを確認します。

    • ピンRSTを1秒間GNDに接続してESP8266モジュールをリセットし、その後プラグを抜きます。

    • R3ボードのリセットボタンを押します。

    ときどき、上記の操作を3~5回繰り返す必要がありますので、お待ちください。

  4. Blynkに戻ると、現在の温度、湿度、光の強度、土壌の湿度が表示されます。必要に応じて、ボタン制御ウィジェットをクリックして植物に水をやることができます。

    ../_images/sp220610_155350.png
  5. Blynkをモバイルデバイスで使用したい場合は、 モバイルデバイスでBlynkを使用する方法は? を参照してください。

    ../_images/mobile_plant.jpg

どのように動作するのか?

この 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);
}