Menu
CoddyTech

ניטור צמחים: התראת יובש

חלק מהיחידה פרויקטים במסלול ה-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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה פרויקטים

תרגלו בעצמכם: Arduino אונליין