### 5.10 自動灌漑システム #### 5.10.1 揚水システム この実験では、ESP32開発ボードを使用してリレーモジュールでウォーターポンプのオン/オフを切り替えます。ポンプは水を汲み上げ、液体を輸送し、通常はリレーモジュールと組み合わせて使用されます。 **リレーモジュール:** 使用時には、モーター、高電流センサー、高出力ライトなど、高電圧および負荷電流の管理によく使用されます。 ![cou101](../media/551.png) **ノーマリーオープン (NO):** このピンは通常開いています。リレーの信号ピンが信号を受信しない限り開いています。したがって、共通ピンはNCピンを介して切断され、NOピンを介して接続されます。 **コモンコンタクト (COM):** このピンは、ウォーターポンプなど、他のモジュールに接続します。 **ノーマリークローズ (NC):** NCピンはCOMピンとリンクして閉回路を形成します。ESP32ボードを使用してリレーモジュールの閉鎖と切断を制御します。 ![couy101](../media/couy101.png) **ウォーターポンプ:** ![cou1011](../media/1561.png) **パラメータ:** 電源電圧: 5V 静止電流: 2mA 最大接触電圧: 250VAC/30VDC 最大電流: 10A Arduino IDEで**5.10.1Water-Pump**コードを開きます。 ```c #define RelayPin 25 char content; //Define a character string as the received value from serial port void setup() { Serial.begin(9600); pinMode(RelayPin,OUTPUT); } void loop() { //Serial.read() receives one byte once. For example, when input "aaa", it receives one "a" at a time for three times in total. if(Serial.available() > 0) { if (Serial.read() == 'a') //When the input value equals to "a", irrigation begins. { digitalWrite(RelayPin,HIGH); delay(400);//irrigation delay digitalWrite(RelayPin,LOW); delay(700); } } } ``` **ESP32 Dev Module**ボードと**COM**ポートを選択し、コードをアップロードします。 ![5458448](../media/5458448.png) **テスト結果:** シリアルモニターを開き、**「a」を入力すると、水が1回ポンプされます**。 注意:実験中にプラスチックプールから水があふれないようにしてください。他のセンサーに水をこぼすと、短絡やモジュールの故障だけでなく、発熱や爆発の原因にもなります。細心の注意を払ってください!特に若いユーザーは、保護者と一緒に操作してください。 #### 5.10.2 自動灌漑システム この実験では、ESP32開発ボードに2つのセンサーを接続し、その出力値を読み取ってリレーとウォーターポンプを制御するプログラムを作成します。 土壌が非常に乾燥している場合、リレーがオンになり、ウォーターポンプを制御して植物に水をやります。水位が低すぎる場合、ウォーターポンプは作動せず、ブザーが警報を発します。 Arduino IDEで**5.10.2Auto-irrigation**コードを開きます。 ```c #include #define BuzzerPin 16 #define SoilHumidityPin 32 #define WaterLevelPin 33 #define RelayPin 25 #define ButtonPin 5 //Define a button pin int value = 0; //Set an initial button value LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { //Set the pins mode pinMode(SoilHumidityPin, INPUT); pinMode(WaterLevelPin, INPUT); pinMode(RelayPin, OUTPUT); pinMode(ButtonPin, INPUT); //Initialize LCD lcd.init(); //Turn on LCD backlight lcd.backlight(); //Clear LCD displays lcd.clear(); ledcAttachChannel(BuzzerPin, 1000, 8, 4); } void loop() { //define variables as the read values of water level, humidity and button state int shvalue = analogRead(SoilHumidityPin); int wlvalue = analogRead(WaterLevelPin); int ReadValue = digitalRead(ButtonPin); //Set the display position of cursor lcd.setCursor(0, 0); //Set the display position of character strings lcd.print("SoilHum:"); lcd.setCursor(9, 0); lcd.print(shvalue); lcd.setCursor(0, 1); lcd.print("WaterLevel:"); lcd.setCursor(11, 1); lcd.print(wlvalue); //Determine whether the button is pressed if (ReadValue == 0) { //Eliminate the button shake delay(10); if (ReadValue == 0) { value = !value; Serial.print("The current status of the button is : "); Serial.println(value); } //Again, determine whether the button is still pressed //Pressed: execute the loop; Released: exit the loop to next execution while (digitalRead(ButtonPin) == 0) ; } //When the detected humidity is lower than the set threshold, the buzzer starts to alarm. Press button to stop alarming. if (500 >= shvalue && value == 0) { ledcWriteTone(BuzzerPin, 532); delay(100); ledcWriteTone(BuzzerPin, 532); delay(100); ledcWriteTone(BuzzerPin, 659); delay(100); ledcWriteTone(BuzzerPin, 0); //Stop alarming } //When the detected water level is lower than the set threshold, the buzzer starts to alarm. Press button to stop alarming. if (500 >= wlvalue && value == 0) { ledcWriteTone(BuzzerPin, 411); delay(100); ledcWriteTone(BuzzerPin, 639); delay(100); ledcWriteTone(BuzzerPin, 411); delay(100); ledcWriteTone(BuzzerPin, 0); //Stop alarming } //When the detected humidity is lower than the set threshold, and the water is sufficient in the pool, irrigation starts automatically. if (500 >= shvalue && wlvalue >= 1000) { digitalWrite(RelayPin, HIGH); delay(400); //Irrigation delay. digitalWrite(RelayPin, LOW); delay(700); } delay(500); //Clear displays lcd.clear(); } ``` **ESP32 Dev Module**ボードと**COM**ポートを選択し、コードをアップロードします。 ![5458448](../media/5458448.png) **テスト結果:** LCD 1602には、土壌湿度と水位の現在の値が表示されます。 ![cou102](../media/cou102.png) 検出された土壌湿度の値が500より低い場合、土壌が乾燥していることを知らせるためにブザーが鳴ります。水位の値が1000より大きい場合、自動的に灌漑が開始されます。 検出された水位が500より低い場合、揚水システムは作動せず、水が不足していることを知らせるためにブザーが鳴ります。ボタンを押すと警報が停止します。 ![flo10](../media/flo10.png)