Monitor della pianta: rapporto
Fa parte della sezione Progetti del percorso Arduino di Coddy. Lezione 20 di 24.
L'ultimo passaggio scrive un rapporto una volta al secondo: l'umidità e una parola di stato, DRY, OK o WET. Viene mostrato sul display LCD per chiunque si trovi vicino alla pianta e sul monitor seriale per un computer.
Il display LCD è collegato nel modo consueto: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); e lcd.begin(16, 2) in setup(). La riga superiore mostra Moisture: 42% e quella inferiore la parola.
Sul monitor seriale la parola termina sulla stessa riga dell'umidità, quindi stampa l'umidità con Serial.print(), non con println(). Poi scegli la parola usando i tre intervalli della spia di stato e stampala su entrambi:
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");
}Fai attenzione ai caratteri precedenti. OK è più corto di DRY, quindi stampa "OK " con uno spazio, altrimenti sullo schermo appare OKY. Lo stesso vale se 100% diventa 5%: stampa un paio di spazi dopo il %.
Sfida
MedioScrivi il report una volta al secondo:
- configura l’LCD (pin 12, 11, 5, 4, 3, 2) in
setup() - riga superiore:
Moisture: 42%, con spazi dopo - riga inferiore:
DRYsotto il 30%,OKdal 30% al 70%,WETsopra il 70%, con spazi di riempimento - monitor seriale: una riga come
Moisture: 42% OK
Mantieni la spia di stato e l’allarme. Premi Esegui, poi Verifica.
Provalo tu
// La manopola simula un sensore di umidità del terreno
const int sensorPin = A0;
// La spia di stato: un LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// L'allarme
const int buzzerPin = 8;
bool wasDry = false; // il terreno era asciutto all'ultima lettura?
unsigned long dryStart = 0; // quando il terreno è diventato asciutto
// L'umidità in percentuale: 0 indica un terreno completamente asciutto, 100 un terreno fradicio.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Rosso quando il terreno è asciutto, verde quando l'umidità è adeguata, blu quando è bagnato.
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);
}
}
// Emetti un segnale acustico ogni secondo quando il terreno è asciutto da più di 5 secondi.
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);
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Progetti
2Gioco di reazione
Gioco di reazione: attesa casualeGioco di reazione: timerGioco di reazione: falsa partenzaGioco di reazione: tempo migliore5Monitor della pianta
Monitor della pianta: umiditàMonitor della pianta: spia di statoMonitor della pianta: allarme di secchezzaMonitor della pianta: rapportoEsercitati da solo: Playground Arduino