Menu
CoddyTech

Pemantau Tanaman: Alarm Tanaman Kering

Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 19 dari 24.

Saat tanah tetap kering, monitor meminta bantuan dengan menyalakan buzzer pada pin 8. Tidak langsung: pembacaan bisa turun sesaat, dan alarm yang berbunyi tanpa alasan akan segera diabaikan. Aturannya adalah tanah kering selama lebih dari 5 detik (tanaman sungguhan akan menunggu berjam-jam).

Untuk mengetahui berapa lama tanah telah kering, catat saat tanah mulai kering. Kamu memerlukan satu informasi tambahan untuk diingat: apakah tanah kering pada pembacaan terakhir.

if (moisture < 30) {
  if (wasDry == false) {
    wasDry = true;
    dryStart = millis();   // Baru saja menjadi kering
  }
  if (millis() - dryStart > 5000) {
    tone(buzzerPin, 880, 200);
  }
} else {
  wasDry = false;
}

else penting: saat tanah disiram, wasDry kembali menjadi false, sehingga periode kering berikutnya dihitung mulai dari awalnya sendiri.

loop() membaca sekali setiap detik, jadi bunyi bip 200 ms terdengar sekali setiap detik selama tanah tetap kering.

challenge icon

Tantangan

Sedang

Tambahkan alarm kekeringan:

  • ingat apakah tanah dalam keadaan kering (bool wasDry) dan kapan tanah mulai kering (unsigned long dryStart)
  • setelah tanah kering selama lebih dari 5000 ms, bunyikan tone(buzzerPin, 880, 200) setelah setiap pembacaan
  • ketika kelembapan mencapai 30% atau lebih, setel kembali wasDry ke false

Tekan Run, putar kenop ke bawah dan tunggu, lalu tekan Check.

Coba sendiri

// Kenop ini berfungsi sebagai sensor kelembapan tanah
const int sensorPin = A0;
// Lampu status: LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;

// Kelembapan dalam persen: 0 berarti sangat kering, 100 berarti sangat basah.
int readMoisture() {
  int reading = analogRead(sensorPin);
  return map(reading, 0, 1023, 0, 100);
}

// Merah saat kering, hijau saat kelembapannya cukup, biru saat basah.
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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Proyek

Latihan sendiri: Playground Arduino