6. 植物モニター

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

Blynk Cloudでスイッチをオンにすると、ポンプが動作を開始し、植物に水分が供給されます。

必要な部品

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

全体のキットを購入するのは非常に便利です。リンクは以下のとおりです:

名前

このキットのアイテム

リンク

3 in 1 Starter Kit

380+

3 in 1 Starter Kit

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

コンポーネントの紹介

購入リンク

Arduino Uno R4 Minima

-

ブレッドボード

BUY

ESP8266モジュール

BUY

ジャンパーワイヤー

BUY

抵抗器

BUY

フォトレジスタ

BUY

DHT11 温湿度センサ

-

土壌湿度モジュール

BUY

L9110 モータードライバーモジュール

-

遠心ポンプ

-

1. 回路を組む

注釈

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

../_images/iot_6_bb.png

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

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

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

    ../_images/sp220610_155221.png
  3. 次に Wed Dashboard ページに移動し、2つの Label ウィジェットをドラッグし、それらのデータストリームをそれぞれ V4V5 に設定します。2つの Gauge ウィジェットをドラッグし、そのデータストリームをそれぞれ V6V7 に設定します。最後に、 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 Name、および Auth Token を自分のものに置き換えます。使用しているWiFiの ssid および password も入力する必要があります。詳しいチュートリアルは 1.4 R4ボードをBlynkに接続する を参照してください。

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

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

    ../_images/2_ready.png

    注釈

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

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

    • ピンRSTを1秒間GNDに接続して、ESP8266モジュールをリセットします。その後、それを取り外します。

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

    この操作を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() {

    // 温度または湿度の読み取りには約 250 ミリ秒かかります。
     // センサーの読み取り値は最大 2 秒ほど「古い」場合もあります (非常に遅いセンサーです)
    humidity = dht.readHumidity();
    // 温度を摂氏として読み取ります (デフォルト)
    temperature = dht.readTemperature();

    // 失敗した読み取りがあるかどうかを確認し、早めに終了します (再試行するため)。
    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);
}