Surveillance de la plante : Rapport
Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 20 sur 24.
La dernière étape écrit un rapport une fois par seconde : l’humidité et un mot d’état, DRY, OK ou WET. Il s’affiche sur l’écran LCD pour toute personne près de la plante, et sur le moniteur série pour un ordinateur.
L’écran LCD est câblé de la manière habituelle : LiquidCrystal lcd(12, 11, 5, 4, 3, 2); et lcd.begin(16, 2) dans setup(). La ligne du haut affiche Moisture: 42% et celle du bas, le mot.
Sur le moniteur série, le mot termine la même ligne que l’humidité ; affiche donc l’humidité avec Serial.print(), et non println(). Choisis ensuite le mot en fonction des trois plages du voyant d’état et affiche-le sur les deux :
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");
}Surveille les anciens caractères. OK est plus court que DRY, alors affiche "OK " avec une espace, sinon l’écran affiche OKY. Il en va de même lorsque 100% devient 5% : affiche quelques espaces après le %.
Défi
MoyenÉcris le rapport une fois par seconde :
- configure l’écran LCD (broches 12, 11, 5, 4, 3, 2) dans
setup() - ligne du haut :
Moisture: 42%, avec des espaces après - ligne du bas :
DRYen dessous de 30 %,OKde 30 % à 70 %,WETau-dessus de 70 %, complété par des espaces - Moniteur série : une ligne comme
Moisture: 42% OK
Garde le voyant d’état et l’alarme. Appuie sur Run, puis sur Check.
Essayez vous-même
// Le bouton remplace un capteur d’humidité du sol
const int sensorPin = A0;
// Le voyant d’état : une LED RGB
const int redPin = 9;
const int greenPin = 10;
const int bluePin = 6;
// L’alarme
const int buzzerPin = 8;
bool wasDry = false; // le sol était-il sec lors de la dernière mesure ?
unsigned long dryStart = 0; // quand le sol est devenu sec
// L’humidité en pourcentage : 0 correspond à un sol complètement sec, 100 à un sol détrempé.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Rouge quand le sol est sec, vert quand tout va bien, bleu quand le sol est humide.
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);
}
}
// Émet un bip une fois par seconde lorsque le sol est sec depuis plus de 5 secondes.
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);
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Projets
2Jeu de réflexes
Jeu de réflexes : attente aléatoireJeu de réflexes : chronomètreJeu de réflexes : faux départJeu de réflexes : meilleur temps5Surveillance de la plante
Surveillance de la plante : HumiditéSurveillance de la plante : Voyant d’étatSurveillance de la plante : Alarme de sécheresseSurveillance de la plante : RapportEntraînez-vous par vous-même : Playground Arduino