Monitor de plantas: alarma de sequedad
Parte de la sección Proyectos del Journey de Arduino de Coddy. Lección 19 de 24.
Cuando la tierra permanece seca, el monitor pide ayuda con el zumbador del pin 8. No de inmediato: una lectura puede bajar por un momento, y una alarma que se activa sin motivo pronto se ignora. La regla es que esté seca durante más de 5 segundos (una planta real esperaría horas).
Para saber cuánto tiempo lleva seca la tierra, anota el momento en que se secó. Eso requiere una pieza más de memoria: si estaba seca en la última lectura.
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis(); // acaba de secarse
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}El else es importante: cuando se riega la tierra, wasDry vuelve a false, así que el siguiente período seco se mide desde su propio comienzo.
loop() lee una vez por segundo, así que el pitido de 200 ms suena una vez por segundo mientras la tierra permanece seca.
Desafío
IntermedioAñade la alarma de sequedad:
- recuerda si la tierra estaba seca (
bool wasDry) y cuándo se secó (unsigned long dryStart) - cuando haya estado seca durante más de 5000 ms, reproduce
tone(buzzerPin, 880, 200)después de cada lectura - cuando esté al 30 % o más, vuelve a establecer
wasDryenfalse
Pulsa Run, gira el mando hacia abajo y espera; después, pulsa 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 humedad en porcentaje: 0 es completamente seco, 100 es muy húmedo.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Rojo cuando está seco, verde cuando la humedad es adecuada y azul cuando 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);
}
}
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);
}
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