سیستم آبیاری خودکار گیاه با استفاده از آردوینو

  • ۱۱۴ بازدید

آیا می دانید برای تولید یک کیلوگرم برنج به طور متوسط ​​بین 2000 تا 5000 لیتر آب نیاز است؟ آب همیشه برای کشاورزی، حفظ رشد محصول و تضمین تولید مواد غذایی حیاتی بوده است. با این حال، در مواجهه با تغییرات آب و هوایی و افزایش آلودگی آب، نیاز به صرفه جویی در آب بیش از هر زمان دیگری حیاتی شده است. با در دست داشتن این چالش ها، اولویت بندی اقدامات حفاظت از آب برای حفظ پایداری کشاورزی و تامین مواد غذایی برای آینده ضروری است. امروز قصد داریم یک پروژه ساده و در عین حال موثر بسازیم، که می تواند نیاز آبی یک گیاه را کنترل کند و تنها در صورت نیاز به طور خودکار آن را آبیاری کند. به این ترتیب ما نه تنها می‌توانیم در مصرف آب صرفه‌جویی کنیم، بلکه می‌توانیم مطمئن شویم که فقط آب کافی برای گیاهان فراهم می‌کنیم تا بهترین عملکرد را داشته باشند. 

در این پروژه با استفاده از حسگر خازنی به طور مداوم سطح رطوبت خاک را پایش خواهیم کرد . هنگامی که سطح رطوبت از حد معینی پایین می آید، میکروکنترلر آردوینو نانو پمپ را روشن می کند و گیاهان را آبیاری می کند. در حالی که نمایش این پروژه با استفاده از یک گلدان گل کوچک انجام می شود، به راحتی می توان آن را به هکتورهای بزرگ زمین تبدیل کرد و به طور بالقوه تأثیر بیشتری بر مصرف و عملکرد آب داشت. 

ویژگی های سیستم آبیاری اتوماتیک گیاه

  • کاملا خودکار
  • سنسور خازنی رطوبت خاک برای حساسیت بهتر.
  • درایور موتور بسیار یکپارچه با حالت بسیار کم مصرف.
  • درایور موتور پل کامل با قابلیت جریان حداکثر 3.5 آمپر و حداکثر ولتاژ ورودی 36 ولت.
  • تنظیم درایو قابل تنظیم.

اجزای مورد استفاده برای ساخت APWS

تمام قطعاتی که برای ساخت APWS نیاز دارید در زیر لیست شده است. مقدار دقیق هر جزء را می توان در نمودارها یا BOM یافت.

  • آردوینو نانو
  • ADP7118ACPZN5.0 5V LDO
  • درایور موتور برس شده MAX22201 از دستگاه های آنالوگ .
  • تنظیم کننده ولتاژ LM4040DEX 3.3 ولت
  • سنسور خازنی رطوبت خاک .
  • پمپ آب 12 ولت .
  • مقاومت های SMD
  • خازن های SMD
  • سیم ها
  • PCB سفارشی
  • محفظه پرینت سه بعدی.
  • ابزارهای دیگر و متفرقه.

نمودار مدار کامل APWS

نمودار مدار کامل سیستم آبیاری اتوماتیک گیاه در زیر نشان داده شده است.

PCB توسعه برای MAX22201

از آنجایی که MAX22201 یک جزء SMD است و جای پای آن بسیار کوچک است، که کار با آن را سخت می کند، من یک PCB توسعه کوچک برای آن ایجاد کرده ام. می توانید MAX22201 و قطعات پشتیبانی کننده آن را روی PCB نصب کنید. پین های هدر استاندارد 2.54 میلی متری برای ورودی برق، رابط میکروکنترلر و برای اتصال سیم های موتور ارائه شده است. از آنجایی که برد نسبتاً کوچکی دارد و فقط اجزای کمی دارد، تصمیم گرفتم به جای ساخت PCB آن را خودم بسازم. اگرچه ردپای کوچک MAX22201 آن را چالش برانگیز می کند، PCB خانگی ساخته شده خوب است و بسیار خوب کار می کند.

در اینجا پروژه کامل مونتاژ شده است. بردهای توسعه آردوینو و MAX22201 روی یک PCB معمولی نصب شده اند. کل مدار کنترل با استفاده از ADP7118 5V LDO تغذیه می شود.

و در اینجا تنظیمات کامل در داخل محفظه است.

قطعات پرینت سه بعدی

من یک محفظه کوچک و جمع و جور برای APWS طراحی کرده ام. این با PLA با درصد پر شدن 20 چاپ شده است. Enclosure نه تنها پروژه را فشرده و نصب آسان می کند، بلکه از مدار و پمپ در برابر گرد و غبار و سایر زباله ها نیز محافظت می کند.

کد آردوینو برای APWS

حالا بیایید به کد نگاه کنیم. درست مانند مدار، کد نیز بسیار ساده است. ما فقط به چند خط کد برای کنترل APWS نیاز داریم. ما در کل فقط از 4 GPIO استفاده می کنیم. یکی برای سنسور رطوبت خاک، دو مورد برای کنترل موتور و دیگری برای نشانگر LED. در کد ابتدا چند متغیر برای خواندن سنسور و کالیبراسیون اعلام کرده ایم. پس از آن، در تابع راه‌اندازی، پین‌های کنترل موتور و LED را به عنوان خروجی تنظیم کرده‌ایم.

const int AirValue = 616;   //replace the value from calibration in air
const int WaterValue = 335;  //replace the value from calibration in water
int soilMoistureValue = 0;
int soilmoisturepercent=0;
void setup() {
  pinMode(5, OUTPUT); // MAX22201 IN1
  pinMode(6, OUTPUT); // MAX22201 IN2
  pinMode(13, OUTPUT); // LED output
  /*
  Put the mototr driver into sleep mode during startup.
  When both IN1 and IN2 inputs are low for longer than tSLEEP (2.2ms max), the MAX22201 enters low-power sleep mode.
  In this mode, outputs are three-stated and the device current consumption is ISLEEP (6.5μA max).  
  */
  digitalWrite(5, LOW);  
  digitalWrite(6, LOW);  
  digitalWrite(13, LOW);  
}

در تابع حلقه، از تابع analogRead برای خواندن سطح رطوبت از سنسور با استفاده از پایه آنالوگ A1 استفاده می کنیم. هنگامی که خواندن گرفته شد به درصد تبدیل می شود. پس از تبدیل، آردوینو موتور را با توجه به سطح رطوبت روشن یا خاموش می کند. ما می توانیم موتور را به سادگی با کشیدن پین های کنترل موتور به زمین بچرخانیم. اما برای روشن شدن باید MAX22201 را از حالت صرفه جویی در انرژی بیدار کنیم. برای این کار باید هر دو پین کنترل را برای حداقل 400 us بکشیم. هنگامی که MAX22201 فعال است، می‌توانیم پمپ را با کشیدن یک پایه کنترل به زمین روشن کنیم، در حالی که دیگری را در حالت HIGH نگه داریم. ما می توانیم جهت چرخش را با تغییر سطوح این پین های کنترل تغییر دهیم.

void loop() {
soilMoistureValue = analogRead(A0);  //Read Value from sensor
soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
if(soilmoisturepercent < 50)  // Soil is dry, Turn on motor
{
  /* For the MAX22201 to exit Sleep mode and power on the device, drive IN1 and IN2 high for at least 400μs. */
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);  
  delay(1);
  /* Once the MAX22201 is active turn on the motor. You can change the rotation direction by invering the states of IN1 and IN2. */                      
  digitalWrite(5, LOW);            
  digitalWrite(6, HIGH);    
  digitalWrite(13, HIGH);  
}
else if(soilmoisturepercent >85) // Soil is moist, Turn off motor
{
  /* Turn off the motor and put MAX22201 to sleep Mode. */
  digitalWrite(5, LOW);  
  digitalWrite(6, LOW);  
  digitalWrite(13, LOW);    
}
   delay(400); //Wait for few milliseconds and then continue the loop.
}

هنگامی که رطوبت خاک بالاتر از حد معینی است، در اینجا روی 85% تنظیم می شود، آردوینو هر دو پین کنترل را به زمین می کشد. این کار موتور را می چرخاند و MAX22201 را به حالت خواب می برد تا در مصرف انرژی صرفه جویی شود. هر زمان که سطح رطوبت خاک به زیر مقدار تعیین شده کاهش یابد، این روند تکرار می شود و سطح رطوبت را در بین سطوح تعیین شده حفظ می کند.

فایل های پشتیبانی

می توانید تمام فایل های لازم را از مخزن Circuit Digest GitHub دانلود کنید .

/***************************************************
 Code for Automatic Plant Watering System (APWS)
****************************************************/

const int AirValue = 540;   //replace the value from calibration in air
const int WaterValue = 250;  //replace the value from calibration in water
int soilMoistureValue = 0;
int soilmoisturepercent=0;
 
void setup() {
  Serial.begin(9600);
  pinMode(5, OUTPUT); // MAX22201 IN1
  pinMode(6, OUTPUT); // MAX22201 IN2
  pinMode(13, OUTPUT); // LED output
  /*
  Put the mototr driver into sleep mode during startup.
  When both IN1 and IN2 inputs are low for longer than tSLEEP (2.2ms max), the MAX22201 enters low-power sleep mode.
  In this mode, outputs are three-stated and the device current consumption is ISLEEP (6.5μA max).  
  */
  digitalWrite(5, LOW);  
  digitalWrite(6, LOW);  
  digitalWrite(13, LOW);  
}
 
void loop() {
	soilMoistureValue = analogRead(A0);  //Read Value from sensor
	soilmoisturepercent = map(soilMoistureValue, AirValue, WaterValue, 0, 100);
	Serial.println(soilmoisturepercent);
	if(soilmoisturepercent < 50)  // Soil is dry, Turn on motor
	{
	  /*
	  for the MAX22201 to exit Sleep mode and power on the device, drive IN1 and IN2 high for at least 400μs.
	  */
	  digitalWrite(5, HIGH);
	  digitalWrite(6, HIGH);  
	  delay(1);
	  /*
	  Once the MAX22201 is active turn on the motor. You can change the rotation direction by invering the states of IN1 and IN2.
	  */                     
	  digitalWrite(5, LOW);            
	  digitalWrite(6, HIGH);    
	  digitalWrite(13, HIGH);  
	}
	else if(soilmoisturepercent >85) // Soil is moist, Turn off motor
	{
	  /*
	  Turn off the mototr and put MAX22201 to sleep Mode.
	  */
	  digitalWrite(5, LOW);  
	  digitalWrite(6, LOW);  
	  digitalWrite(13, LOW);    
	}
	delay(400); //Wait for few milliseconds and then continue the loop.
}

مطالب مرتبط :

سیستم ساده آبیاری خودکار گیاه بدون میکروکنترلر