ほとんどの農民は農地の大部分を使用しており、広大な土地の隅々まで到達して追跡することは非常に困難になっています。時々、不均一な散水が発生する可能性があります。その結果、作物の品質が低下し、さらに経済的損失につながります。このシナリオでは、最新のIoTテクノロジーを使用したスマート灌漑システムが役立ち、農業を容易にします。
スマート灌漑システムは、完全な灌漑システムを自動化するために広い範囲を持っています。ここでは、ESP8266NodeMCUモジュールとDHT11センサーを使用してIoTベースの灌漑システムを構築しています。土壌の水分レベルに基づいて水を自動的に灌漑するだけでなく、土地の状態を追跡するためにデータをThingSpeakサーバーに送信します。このシステムは、水分、温度、湿度などの土地の環境条件に応じて、土地に水を散布するために使用されるウォーターポンプで構成されます。
以前は、モバイルではアラートを送信するがIoTクラウドではアラートを送信しない同様の自動植物灌漑システムを構築しました。これとは別に、雨警報と土壌水分検出回路もスマート灌漑システムの構築に役立ちます。
始める前に、作物ごとに異なる土壌水分、温度、湿度条件が必要であることに注意することが重要です。したがって、このチュートリアルでは、約50〜55%の土壌水分を必要とするような作物を使用しています。そのため、土壌の水分が50%未満に低下すると、モーターポンプが自動的にオンになり、水を散布します。水分が55%に達するまで水を散布し続け、その後ポンプをオフにします。センサーデータは、世界中のどこからでも監視できるように、定義された時間間隔でThingSpeakサーバーに送信されます。
必要なコンポーネント
- NodeMCU ESP8266
- 土壌水分センサーモジュール
- ウォーターポンプモジュール
- リレーモジュール
- DHT11
- 接続線
このプロジェクトに必要なすべてのコンポーネントを購入できます。
回路図
このIoTスマート灌漑システムの回路図を以下に示します。
自動灌漑システム用のESP8266NodeMCUのプログラミング
ESP8266 NodeMCUモジュールのプログラミングでは、DHT11センサーライブラリのみが外部ライブラリとして使用されます。水分センサーは、ESP8266NodeMCUアナログピンA0を介して読み取ることができるアナログ出力を提供します。NodeMCUはGPIOから3.3Vを超える出力電圧を提供できないため、リレーモジュールを使用して5Vモーターポンプを駆動しています。また、水分センサーとDHT11センサーは外部5V電源から電力を供給されます。
このチュートリアルの最後に、動作するビデオを含む完全なコードがあります。ここでは、プロジェクトの動作フローを理解するためのプログラムについて説明します。
必要なライブラリを含めることから始めます。
#include
ThingSpeakサーバーを使用しているため、サーバーと通信するにはAPIキーが必要です。ThingSpeakからAPIキーを取得する方法については、ThingSpeakのライブ温度と湿度の監視に関する以前の記事をご覧ください。
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
次のステップは、SSIDやパスワードなどのWi-Fi資格情報を書き込むことです。
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
DHTが接続されているDHTセンサーピンを定義し、DHTタイプを選択します。
#define DHTPIN D3 DHT dht(DHTPIN、DHT11);
水分センサー出力は、ESP8266NodeMCUのピンA0に接続されています。また、モーターピンはNodeMCUのD0に接続されています。
const intmoisturePin = A0; const int motorPin = D0;
ここでは10秒である定義された時間間隔ごとに、 millis() 関数を使用してデータを送信します。 遅延は() それは、マイクロコントローラは、他のタスクを実行することはできません定義された遅延のためのプログラムを停止しますので、避けています。delay()とmillis()の違いについて詳しくは、こちらをご覧ください。
unsigned long interval = 10000; unsigned long previousMillis = 0;
モーターピンを出力として設定し、最初にモーターをオフにします。DHT11センサーの読み取りを開始します。
pinMode(motorPin、OUTPUT); digitalWrite(motorPin、LOW); //モーターを最初はオフにしておく dht.begin();
指定されたSSIDとパスワードでWi-Fiに接続してみて、Wi-Fiが接続されるのを待ち、接続されている場合は次の手順に進みます。
WiFi.begin(ssid、pass); while(WiFi.status()!= WL_CONNECTED) { delay(500); Serial.print( "。"); } Serial.println( ""); Serial.println( "WiFi接続"); }
プログラムを開始する現在の時刻を定義し、それを変数に保存して経過時間と比較します。
unsigned long currentMillis = millis();
温度と湿度のデータを読み取り、変数に保存します。
float h = dht.readHumidity(); float t = dht.readTemperature();
DHTが接続されていて、ESP8266 NodeMCUが読み取り値を読み取ることができる場合は、次の手順に進むか、ここから戻って再度確認します。
if(isnan(h)-isnan(t)) { Serial.println( "DHTセンサーからの読み取りに失敗しました!"); 戻る; }
センサーから水分の読み取り値を読み取り、読み取り値を印刷します。
MoisturePercentage =(100.00-((analogRead(moisturePin)/ 1023.00)* 100.00)); Serial.print( "土壌水分は="); Serial.print(moisturePercentage); Serial.println( "%");
水分測定値が必要な土壌水分範囲の間にある場合は、ポンプをオフのままにするか、必要な水分を超えている場合は、ポンプをオンにします。
if( moisturePercentage <50){ digitalWrite(motorPin、HIGH); } if( moisturePercentage > 50 && milkpercentage <55){ digitalWrite(motorPin、HIGH); } if( moisturePercentage > 56){ digitalWrite(motorPin、LOW); }
10秒ごとに、 sendThingspeak() 関数を呼び出して、水分、温度、湿度のデータをThingSpeakサーバーに送信します。
if((unsigned long)(currentMillis-previousMillis)> = interval){ sendThingspeak(); previousMillis = millis(); client.stop(); }
で sendThingspeak() システムは、サーバに、はいが、我々は水分、温度文字列を作成した場合に接続されている場合、我々はチェック機能、湿度の読み取りが書き込まれ、この文字列は、APIキーとサーバアドレスと一緒にThingSpeakサーバーに送信されます。
if(client.connect(server、80)) { String postStr = apiKey; postStr + = "&field1 ="; postStr + = String(moisturePercentage); postStr + = "&field2 ="; postStr + = String(t); postStr + = "&field3 ="; postStr + = String(h); postStr + = "\ r \ n \ r \ n";
最後に、データは、APIキー、サーバーアドレス、および前の手順で準備された文字列を含む client.print() 関数を使用してThingSpeakサーバーに送信されます。
client.print( "POST / update HTTP / 1.1 \ n"); client.print( "ホスト:api.thingspeak.com \ n"); client.print( "接続:閉じる\ n"); client.print( "X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print( "Content-Type:application / x-www-form-urlencoded \ n"); client.print( "Content-Length:"); client.print(postStr.length()); client.print( "\ n \ n"); client.print(postStr);
最後に、これはThingSpeakダッシュボードでのデータの外観です。
この最後のステップは、IoTベースのスマート灌漑システムに関する完全なチュートリアルを終了します。散水後、土壌水分が必要なレベルに達したときにモーターをオフにすることが重要であることに注意してください。作物ごとに異なる制御を含めることができる、よりスマートなシステムを作成できます。
このプロジェクトの実行中に問題が発生した場合は、以下にコメントするか、フォーラムにアクセスして、より関連性の高い質問とその回答を入手してください。
このプロジェクトの完全なプログラムとデモンストレーションビデオを以下で見つけてください。