مراقبة النبات: إنذار الجفاف
جزء من قسم المشاريع في رحلة 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 مرة كل ثانية ما دامت التربة جافة.
التحدي
متوسطأضف إنذار الجفاف:
- تذكّر ما إذا كانت التربة جافة (
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);
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المشاريع
2لعبة سرعة الاستجابة
لعبة سرعة الاستجابة: انتظار عشوائيلعبة سرعة الاستجابة: المؤقّتلعبة سرعة الاستجابة: انطلاق مبكرلعبة سرعة الاستجابة: أفضل وقت5مراقبة النبات
مراقبة النبات: الرطوبةمراقبة النبات: ضوء الحالةمراقبة النبات: إنذار الجفافمراقبة النبات: التقريرتدرّب بنفسك: Playground لـ Arduino