Bitki İzleyici: Rapor
Coddy'nin Arduino Journey'sinin Projeler bölümünün bir parçası. Ders 20 / 24.
Son adım, saniyede bir rapor yazar: nem oranını ve DRY, OK veya WET durum sözcüğünü. Bu rapor, bitkinin yanındaki herkesin görebilmesi için LCD'ye, bilgisayar için de Serial monitöre gönderilir.
LCD her zamanki şekilde bağlanır: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); ve setup() içinde lcd.begin(16, 2). Üst satırda Moisture: 42%, alt satırda ise sözcük gösterilir.
Serial monitörde sözcük, nem oranıyla aynı satırın sonunda yer alır; bu nedenle nem oranını Serial.println() ile değil, Serial.print() ile yazdır. Ardından durum ışığının üç aralığını kullanarak sözcüğü seç ve her ikisine de yazdır:
if (moisture < 30) {
lcd.print("DRY");
Serial.println("DRY");
} else if (moisture <= 70) {
lcd.print("OK ");
Serial.println("OK");
} else {
lcd.print("WET");
Serial.println("WET");
}Eski karakterlere dikkat et. OK, DRY'den daha kısa olduğu için arada boşluk bulunan "OK " yazdır; yoksa ekranda OKY görünür. Aynı durum 100% değerinin 5% hâline gelmesi için de geçerlidir: % işaretinden sonra birkaç boşluk yazdır.
Görev
OrtaRaporu saniyede bir yazdır:
setup()içinde LCD'yi (12, 11, 5, 4, 3, 2 pinleri) kur- üst satır:
Moisture: 42%, ardından boşluklarla - alt satır: %30'un altında
DRY, %30 ile %70 arasındaOK, %70'in üzerindeWET; boşluklarla doldurulmuş - Seri monitör:
Moisture: 42% OKgibi tek satır
Durum ışığını ve alarmı koru. Run'a, ardından Check'e bas.
Kendin dene
// Döner düğme, toprak nem sensörünün yerine geçer
const int sensorPin = A0;
// Durum ışığı: bir RGB LED
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// Alarm
const int buzzerPin = 8;
bool wasDry = false; // son okumada toprak kuru muydu?
unsigned long dryStart = 0; // ne zaman kuruduğu
// 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ı, nemi uygunsa yeşil, ı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);
}
}
// Toprak 5 saniyeden uzun süredir kuruysa saniyede bir kez bip sesi çıkar.
void checkAlarm(int moisture) {
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis();
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}
}
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);
checkAlarm(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