Monitor de plantas: informe
Parte de la sección Proyectos del Journey de Arduino de Coddy. Lección 20 de 24.
El último paso escribe un informe una vez por segundo: la humedad y una palabra de estado, DRY, OK o WET. Se muestra en la LCD para cualquiera que esté junto a la planta, y en el monitor Serial para una computadora.
La LCD está conectada de la manera habitual: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); y lcd.begin(16, 2) en setup(). La fila superior muestra Moisture: 42% y la fila inferior muestra la palabra.
En el monitor Serial, la palabra termina en la misma línea que la humedad, así que imprime la humedad con Serial.print(), no con println(). Después, elige la palabra usando los tres rangos de la luz de estado e imprímela en ambos:
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");
}Fíjate en los caracteres anteriores. OK es más corto que DRY, así que imprime "OK " con un espacio, o la pantalla mostrará OKY. Lo mismo ocurre cuando 100% se convierte en 5%: imprime un par de espacios después del %.
Desafío
IntermedioEscribe el informe una vez por segundo:
- configura la pantalla LCD (pines 12, 11, 5, 4, 3, 2) en
setup() - fila superior:
Moisture: 42%, con espacios después - fila inferior:
DRYpor debajo del 30%,OKdel 30% al 70%,WETpor encima del 70%, rellenada con espacios - monitor Serial: una línea como
Moisture: 42% OK
Conserva la luz de estado y la alarma. Pulsa Run y después Check.
Pruébalo tú mismo
// La perilla hace las veces de sensor de humedad del suelo
const int sensorPin = A0;
// La luz de estado: un LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// La alarma
const int buzzerPin = 8;
bool wasDry = false; // ¿estaba seco el suelo en la última lectura?
unsigned long dryStart = 0; // cuándo se secó
// La humedad en porcentaje: 0 es completamente seco, 100 es empapado.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Rojo si está seco, verde si está bien, azul si está húmedo.
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);
}
}
// Emite un pitido una vez por segundo cuando el suelo lleva seco más de 5 segundos.
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);
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Proyectos
2Juego de reacción
Juego de reacción: espera aleatoriaJuego de reacción: temporizadorJuego de reacción: salida en falsoJuego de reacción: mejor tiempo5Monitor de plantas
Monitor de plantas: humedadMonitor de plantas: luz de estadoMonitor de plantas: alarma de sequedadMonitor de plantas: informePractica por tu cuenta: Playground de Arduino