대부분의 농부들은 농지의 많은 부분을 사용하며 넓은 땅의 각 구석에 도달하고 추적하는 것이 매우 어려워집니다. 때때로 고르지 않은 물 뿌림이 발생할 가능성이 있습니다. 이로 인해 품질이 좋지 않은 작물이 생겨 재정적 손실이 발생합니다. 이 시나리오에서는 최신 IoT 기술을 사용하는 스마트 관개 시스템이 도움이되며 농업을 쉽게 할 수 있습니다.
스마트 관개 시스템 전체 관개 시스템을 자동화하는 넓은 범위를 가지고있다. 여기서는 ESP8266 NodeMCU 모듈과 DHT11 센서를 사용하여 IoT 기반 관개 시스템 을 구축하고 있습니다. 토양의 수분 수준에 따라 자동으로 물을 관개 할뿐만 아니라 데이터를 ThingSpeak 서버로 전송하여 토지 상태를 추적합니다. 이 시스템은 수분, 온도 및 습도와 같은 토지 환경 조건에 따라 토지에 물을 뿌리는 데 사용되는 워터 펌프로 구성됩니다.
이전에 IoT 클라우드가 아닌 모바일에서 경고를 보내는 유사한 자동 식물 관개 시스템을 구축했습니다. 이 외에도 비 경보 및 토양 수분 감지기 회로는 Smart Irrigation 시스템 구축에 도움이 될 수 있습니다.
시작하기 전에 서로 다른 작물에 서로 다른 토양 수분, 온도 및 습도 조건이 필요하다는 점에 유의하는 것이 중요합니다. 그래서이 튜토리얼에서 우리는 약 50-55 %의 토양 수분이 필요한 작물을 사용하고 있습니다. 따라서 토양의 수분이 50 % 미만으로 떨어지면 모터 펌프가 자동으로 켜지면서 물을 뿌려주고 수분이 55 %까지 올라갈 때까지 계속해서 물을 뿌린 다음 펌프가 꺼집니다. 센서 데이터는 정의 된 시간 간격으로 ThingSpeak 서버로 전송되어 전 세계 어디서나 모니터링 할 수 있습니다.
필요한 구성 요소
- NodeMCU ESP8266
- 토양 수분 센서 모듈
- 워터 펌프 모듈
- 릴레이 모듈
- DHT11
- 전선 연결
이 프로젝트에 필요한 모든 구성 요소를 구입할 수 있습니다.
회로도
이 IoT 스마트 관개 시스템의 회로도 는 다음과 같습니다.
자동 관개 시스템을위한 ESP8266 NodeMCU 프로그래밍
ESP8266 NodeMCU 모듈 프로그래밍의 경우 DHT11 센서 라이브러리 만 외부 라이브러리로 사용됩니다. 수분 센서는 ESP8266 NodeMCU 아날로그 핀 A0을 통해 읽을 수있는 아날로그 출력을 제공합니다. NodeMCU는 GPIO에서 3.3V 이상의 출력 전압을 제공 할 수 없으므로 릴레이 모듈을 사용하여 5V 모터 펌프를 구동합니다. 또한 수분 센서 및 DHT11 센서는 외부 5V 전원 공급 장치에서 전원이 공급됩니다.
이 튜토리얼의 끝에는 작동하는 비디오 가 포함 된 완전한 코드 가 제공됩니다. 여기서는 프로젝트의 작업 흐름을 이해하기위한 프로그램을 설명합니다.
필요한 라이브러리를 포함하여 시작하십시오.
#포함
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);
수분 센서 출력은 ESP8266 NodeMCU의 핀 A0에 연결됩니다. 그리고 모터 핀은 NodeMCU의 D0에 연결됩니다.
const int 수분 핀 = A0; const int motorPin = D0;
millis () 함수를 사용하여 여기서 정의 된 모든 시간 간격 (10 초) 후에 데이터를 보냅니다. 지연 () 는 마이크로 컨트롤러가 다른 작업을 할 수없는 정의 지연에 대한 프로그램을 중지하기 때문에 피할 수있다. 여기에서 delay ()와 millis ()의 차이점에 대해 자세히 알아보십시오.
부호없는 긴 간격 = 10000; 부호없는 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 연결됨"); }
현재 프로그램 시작 시간을 정의하고 경과 시간과 비교하기 위해 변수에 저장합니다.
부호없는 긴 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 && moisturePercentage <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 / 업데이트 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 기반 스마트 관개 시스템 에 대한 전체 자습서를 마칩니다. 물을 뿌린 후 토양 수분이 필요한 수준에 도달하면 모터를 끄는 것이 중요합니다. 다양한 작물에 대해 다른 제어를 포함 할 수있는보다 스마트 한 시스템을 만들 수 있습니다.
이 프로젝트를 수행하는 동안 문제가 발생하면 아래에 댓글을 달거나 포럼에 연락하여 더 관련성 높은 질문과 답변을 얻으십시오.
아래에서이 프로젝트에 대한 전체 프로그램 및 데모 비디오 를 찾으 십시오.