Monitor de Plantas: Relatório
Parte da seção Projetos do Journey de Arduino da Coddy. Lição 20 de 24.
A última etapa escreve um relatório uma vez por segundo: a umidade e uma palavra de status, DRY, OK ou WET. Ele vai para o LCD, para quem estiver perto da planta, e para o monitor Serial, para um computador.
O LCD é conectado da maneira usual: LiquidCrystal lcd(12, 11, 5, 4, 3, 2); e lcd.begin(16, 2) em setup(). A linha de cima mostra Moisture: 42% e a linha de baixo mostra a palavra.
No monitor Serial, a palavra termina na mesma linha que a umidade, então imprima a umidade com Serial.print(), não println(). Em seguida, escolha a palavra usando as três faixas da luz de status e imprima-a em 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");
}Fique atento aos caracteres antigos. OK é mais curto que DRY, então imprima "OK " com um espaço, ou a tela mostrará OKY. O mesmo acontece quando 100% se torna 5%: imprima alguns espaços depois do %.
Desafio
MédioExiba o relatório uma vez por segundo:
- configure o LCD (pinos 12, 11, 5, 4, 3, 2) em
setup() - linha superior:
Moisture: 42%, com espaços depois - linha inferior:
DRYabaixo de 30%,OKde 30% a 70%,WETacima de 70%, preenchida com espaços - monitor Serial: uma linha como
Moisture: 42% OK
Mantenha a luz de status e o alarme. Pressione Run e, em seguida, Check.
Experimente você mesmo
// O botão giratório substitui 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;
// O alarme
const int buzzerPin = 8;
bool wasDry = false; // o solo estava seco na última leitura?
unsigned long dryStart = 0; // quando o solo ficou seco
// 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 está adequado, 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);
}
}
// Emite um bipe por segundo quando o solo está seco há mais 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 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