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.
Görev
OrtaKuru 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,
wasDrydeğerini tekrarfalseolarak 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);
}
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
2Tepki Oyunu
Tepki Oyunu: Rastgele BeklemeTepki Oyunu: ZamanlayıcıTepki Oyunu: Erken BaşlangıçTepki Oyunu: En İyi Süre5Bitki İzleyici
Bitki İzleyici: NemBitki İzleyici: Durum IşığıBitki İzleyici: Kuruluk AlarmıBitki İzleyici: RaporKendi başına pratik yap: Arduino playground