Pemantau Tanaman: Laporan
Termasuk bagian Proyek dalam perjalanan Arduino di Coddy. Pelajaran 20 dari 24.
Langkah terakhir menulis laporan sekali setiap detik: kelembapan dan kata status, DRY, OK, atau WET. Laporan ini ditampilkan di LCD agar dapat dilihat siapa pun di dekat tanaman, dan di monitor Serial untuk komputer.
LCD disambungkan dengan cara biasa: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); dan lcd.begin(16, 2) di setup(). Baris atas menampilkan Moisture: 42% dan baris bawah menampilkan katanya.
Di monitor Serial, kata tersebut mengakhiri baris yang sama dengan kelembapan, jadi cetak kelembapan dengan Serial.print(), bukan println(). Lalu pilih katanya berdasarkan tiga rentang lampu status dan cetak ke keduanya:
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");
}Perhatikan karakter lama. OK lebih pendek daripada DRY, jadi cetak "OK " dengan spasi, atau layar akan menampilkan OKY. Hal yang sama berlaku saat 100% menjadi 5%: cetak beberapa spasi setelah %.
Tantangan
SedangTulis laporan sekali setiap detik:
- siapkan LCD (pin 12, 11, 5, 4, 3, 2) di
setup() - baris atas:
Moisture: 42%, dengan spasi setelahnya - baris bawah:
DRYdi bawah 30%,OKdari 30% hingga 70%,WETdi atas 70%, beri spasi sebagai pengisi - Serial monitor: satu baris seperti
Moisture: 42% OK
Pertahankan lampu status dan alarm. Tekan Jalankan, lalu Periksa.
Coba sendiri
// Kenop ini menggantikan sensor kelembapan tanah
const int sensorPin = A0;
// Lampu status: LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// Alarm
const int buzzerPin = 8;
bool wasDry = false; // apakah tanah kering pada pembacaan terakhir?
unsigned long dryStart = 0; // saat tanah mulai kering
// 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 pas, 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);
}
}
// Bunyikan alarm sekali setiap detik jika tanah sudah kering selama lebih dari 5 detik.
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);
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Proyek
2Game Reaksi
Game Reaksi: Waktu Tunggu AcakGame Reaksi: TimerGame Reaksi: Mulai Terlalu CepatGame Reaksi: Waktu Terbaik5Pemantau Tanaman
Pemantau Tanaman: KelembapanPemantau Tanaman: Lampu StatusPemantau Tanaman: Alarm Tanaman KeringPemantau Tanaman: LaporanLatihan sendiri: Playground Arduino