قياس رطوبة التربة باستخدام الاردوينو

مبتدئ

image_pdf

في هذا المشروع سنتعلم كيف يمكننا قياس رطوبة التربة باستخدام حساس Soil Moisture مع الاردوينو. لمعرفة ما اذا كانت التربة جافة تحتاج الى ماء ام رطبة بشكل كافي.

قياس رطوبة التربة باستخدام الاردوينو

 

المكونات المطلوبة

arduino uno r3

Arduino Uno

Soil Moisture Sensor

green led 5mm

Green LED

blue led 5mm

Blue LED

 

Red LED

 

220 Ω resistor

220 Ohm Resistor

Full size breadboard 830

Breadboard

Breadboard Jumper Wire 65 pcs

Wires

حساس الرطوبة Moisture Sensor :

هو حساس إلكتروني يقوم بتحويل نسبة الرطوبة الموجودة في التربة إلى اشارة كهربائية يمكن قياسها. مخرجات هذا الحساس عبارة عن اشارة جهد من 0 إلى 5 فولت تعبر عن نسبة الرطوبة في التربة. فإذا كانت التربة جافة يكون المخرج 0 فولت وإذا كانت التربة رطبة جدا يعطي 5 فولت.

يمكننا قياس هذا الجهد الناتج عن طريق الاردوينو ،ومن خلال الأوامر البرمجية يمكننا التحكم بإظهار نسبة الرطوبة على مجموعة الـ LEDs .

 

توصيل الدارة

قم بتوصيل الدارة كما هو موضح بالصورة التالية :

قياس رطوبة التربة باستخدام الاردوينو

يتم توصيل حساس الرطوبة إلى الأردوينو كما هو موضح بالجدول :

الطرف (بداية من اليسار) التوصيل
VCC VCC
GND GND
SIG Output to Arduino

سنقوم بكتابه برنامج يقوم بقياس نسبة الرطوبة في التربة وعرضها على الشاشة التسلسلية Serial Monitor وتشغيل الـ LEDs للدلاله على نسبة الرطوبة في التربة.
فإذا كانت التربة جافة، لايتم تشغيل اي LED. وكلما زادت نسبة الرطوبة تبدأ الـ LEDs في الإضاءة تدريجيا. وعند وصول التربة إلى درجة التشبع تكون جميع الـ LEDs مضاءة.

قياس رطوبة التربة باستخدام الاردوينو

الكود البرمجي

#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
#define SENSOR A0

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
}

void loop() {
  int sensorValue = analogRead(SENSOR);
  Serial.println(sensorValue);

  if (sensorValue >= 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, HIGH);
  }
  else if (sensorValue >= 720  && sensorValue < 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 615  && sensorValue < 720)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 410 && sensorValue < 615)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 250 && sensorValue < 410)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 0 && sensorValue < 250)
  {
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  delay(1000);      
}

شرح الكود :

في البداية، نقوم بتسمية منافذ الأردوينو المستخدمة في المشروع، من أجل تسهيل عملية التعامل معها.

#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
#define SENSOR A0

ثم فى دالة ()setup نقوم بضبط الاعدادات اللازمة للمشروع مثل تشغيل الاتصال التسلسلى و ضبط الـ LEDs المستخدمة كمخرجات

void setup() {
  Serial.begin(9600);
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
}

في الدلة ()loop، نقوم بقراءة الحساس وعرض هذه القراءة على الشاشة التسلسلية Serial Monitor. بعد ذلك نبدأ بتشغيل الـ LEDs على حسب القيمة التي تمت قراءتها.

int sensorValue = analogRead(SENSOR);
  Serial.println(sensorValue);

مثلا إذا كان قيمة الحساس أعلى من 760، يدل ذلك على أن التربطة رطبة جدا، لذلك يتم إضاءة جميع الـ LEDs.

 if (sensorValue >= 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, HIGH);
  }

على عكس إذا كان قيمة الحساس اقل من 250، دل ذلك على أن التربة جافة وتحتاج إلى ماء ونعبر عن ذلك بإطفاء جميع الـ LEDs .

else if (sensorValue >= 0 && sensorValue < 250)
  {
    digitalWrite(LED1, LOW);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }

ويتم إضاءة الـ LEDs تدريجيا اعتمادا على القيمة التي تم قراءتها من الحساس .

  else if (sensorValue >= 720  && sensorValue < 760)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 615  && sensorValue < 720)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, HIGH);
    digitalWrite(LED4, HIGH);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 410 && sensorValue < 615)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, HIGH);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }
  else if (sensorValue >= 250 && sensorValue < 410)
  {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED2, LOW);
    digitalWrite(LED3, LOW);
    digitalWrite(LED4, LOW);
    digitalWrite(LED5, LOW);
  }

 

X
Product added to the cart