Menu
CoddyTech

Bitki İzleyici: Kuruluk Alarmı

Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 19 / 24.

Toprak kuru kaldığında, izleyici 8. pine bağlı buzzer ile yardım ister. Hemen değil: bir ölçüm kısa süreliğine düşebilir ve boş yere çalan bir alarm kısa sürede görmezden gelinir. Kural, 5 saniyeden uzun süre kuru kalmasıdır (gerçek bir bitki saatlerce beklerdi).

Toprağın ne kadar süredir kuru olduğunu bilmek için, toprağın kuruduğu anı not edin. Bunun için bellekte bir bilgi daha gerekir: son ölçümde kuru olup olmadığı.

if (moisture < 30) {
  if (wasDry == false) {
    wasDry = true;
    dryStart = millis();   // az önce kurudu
  }
  if (millis() - dryStart > 5000) {
    tone(buzzerPin, 880, 200);
  }
} else {
  wasDry = false;
}

else önemlidir: toprak sulandığında wasDry yeniden false olur, böylece bir sonraki kuraklık dönemi kendi başlangıcından itibaren süreye alınır.

loop() saniyede bir okuma yapar, bu nedenle toprak kuru kaldığı sürece 200 ms'lik bip sesi saniyede bir duyulur.

challenge icon

Görev

Orta

Kuru alarmını ekle:

  • toprağın kuru olup olmadığını (bool wasDry) ve ne zaman kuruduğunu (unsigned long dryStart) hatırla
  • 5000 ms'den uzun süre kuru kaldıktan sonra, her ölçümden sonra tone(buzzerPin, 880, 200) çal
  • nem %30 veya daha fazla olduğunda, wasDry değerini tekrar false olarak ayarla

Run'a bas, düğmeyi aşağı çevir ve bekle, sonra Check'e bas.

Kendin dene

// Düğme, toprak nem sensörü yerine geçer
const int sensorPin = A0;
// Durum ışığı: bir RGB LED
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;

// Yüzde cinsinden nem: 0 kupkuru, 100 sırılsıklam demektir.
int readMoisture() {
  int reading = analogRead(sensorPin);
  return map(reading, 0, 1023, 0, 100);
}

// Kuruysa kırmızı, nem uygunsa yeşil, çok ıslaksa mavi.
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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Projeler bölümündeki tüm dersler

Kendi başına pratik yap: Arduino playground