Menu
CoddyTech
flag Ar iconالعربيةdown icon

مراقبة النبات: إنذار الجفاف

جزء من قسم المشاريع في رحلة Arduino على Coddy. الدرس 19 من 24.

عندما تظل التربة جافة، يطلب جهاز المراقبة المساعدة باستخدام الطنان على المنفذ 8. ليس على الفور: فقد تنخفض القراءة للحظة، وسرعان ما يُتجاهل إنذار ينطلق بلا سبب. القاعدة هي أن تستمر حالة الجفاف لأكثر من 5 ثوانٍ (أما النبات الحقيقي فسوف ينتظر ساعات).

لمعرفة المدة التي ظلت فيها التربة جافة، سجّل اللحظة التي أصبحت فيها جافة. وهذا يتطلب معلومة إضافية للتذكر: هل كانت جافة عند آخر قراءة؟

if (moisture < 30) {
  if (wasDry == false) {
    wasDry = true;
    dryStart = millis();   // أصبحت جافة للتو
  }
  if (millis() - dryStart > 5000) {
    tone(buzzerPin, 880, 200);
  }
} else {
  wasDry = false;
}

إن else مهمة: عندما تُسقى التربة، تعود wasDry إلى false، لذا تُحسب مدة فترة الجفاف التالية من بدايتها.

تقرأ loop() مرة كل ثانية، لذا تصدر الصافرة التي تدوم 200 ms مرة كل ثانية ما دامت التربة جافة.

challenge icon

التحدي

متوسط

أضف إنذار الجفاف:

  • تذكّر ما إذا كانت التربة جافة (bool wasDry) ومتى أصبحت جافة (unsigned long dryStart)
  • بعد أن تظل جافة لأكثر من 5000 ms، شغّل tone(buzzerPin, 880, 200) بعد كل قراءة
  • عندما تصل الرطوبة إلى 30% أو أكثر، أعد wasDry إلى false

اضغط على Run، وأدر المقبض إلى الأسفل وانتظر، ثم اضغط على Check.

جرّب بنفسك

// يحلّ المقبض محلّ مستشعر رطوبة التربة
const int sensorPin = A0;
// مصباح الحالة: مصباح LED من نوع RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;

// الرطوبة بالنسبة المئوية: 0 يعني جفافًا تامًا، و100 يعني بللًا شديدًا.
int readMoisture() {
  int reading = analogRead(sensorPin);
  return map(reading, 0, 1023, 0, 100);
}

// أحمر عند الجفاف، وأخضر عندما تكون الرطوبة مناسبة، وأزرق عند البلل.
void showStatus(int moisture) {
  digitalWrite(redPin, LOW);
  digitalWrite(greenPin, LOW);
  digitalWrite(bluePin, LOW);
  if (moisture < 30) {
    digitalWrite(redPin, HIGH);
  } else if (moisture <= 70) {
    digitalWrite(greenPin, HIGH);
  } else {
    digitalWrite(bluePin, HIGH);
  }
}

void setup() {
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int moisture = readMoisture();
  Serial.print("Moisture: ");
  Serial.print(moisture);
  Serial.println("%");
  showStatus(moisture);
  delay(1000);
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المشاريع

تدرّب بنفسك: Playground لـ Arduino