Monitor de Plantas: Alerta de Secura
Parte da seção Projetos do Journey de Arduino da Coddy. Lição 19 de 24.
Quando o solo permanece seco, o monitor pede ajuda com o buzzer no pino 8. Não imediatamente: uma leitura pode cair por um momento, e um alarme que dispara à toa logo é ignorado. A regra é permanecer seco por mais de 5 segundos (uma planta de verdade esperaria horas).
Para saber há quanto tempo o solo está seco, registre o momento em que ele ficou seco. Isso exige mais uma informação na memória: se ele estava seco na última leitura.
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis(); // acabou de ficar seco
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}O else é importante: quando o solo é regado, wasDry volta a false, então o próximo período de seca é cronometrado a partir do próprio início.
loop() faz uma leitura por segundo, então o bipe de 200 ms soa uma vez por segundo enquanto o solo permanecer seco.
Desafio
MédioAdicione o alarme de solo seco:
- lembre-se se o solo estava seco (
bool wasDry) e quando ficou seco (unsigned long dryStart) - depois que ele ficar seco por mais de 5000 ms, toque
tone(buzzerPin, 880, 200)após cada leitura - quando estiver em 30% ou mais, defina
wasDrynovamente comofalse
Pressione Run, gire o botão para baixo e espere; em seguida, Check.
Experimente você mesmo
// O botão giratório simula um sensor de umidade do solo
const int sensorPin = A0;
// A luz indicadora de status: um LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// A umidade em porcentagem: 0 é completamente seco, 100 é encharcado.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Vermelho quando está seco, verde quando a umidade está adequada, azul quando está úmido.
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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Projetos
2Jogo de Reflexos
Jogo de Reflexos: Espera AleatóriaJogo de Reflexos: CronômetroJogo de Reflexos: Falsa PartidaJogo de Reflexos: Melhor Tempo5Monitor de Plantas
Monitor de Plantas: UmidadeMonitor de Plantas: Luz de StatusMonitor de Plantas: Alerta de SecuraMonitor de Plantas: RelatórioPratique por conta própria: Playground de Arduino