Surveillance de la plante : Alarme de sécheresse
Fait partie de la section Projets du Journey Arduino de Coddy. Leçon 19 sur 24.
Lorsque la terre reste sèche, le moniteur appelle à l’aide avec le buzzer sur la broche 8. Pas immédiatement : une mesure peut baisser pendant un instant, et une alarme qui se déclenche pour rien finit vite par être ignorée. La règle est que la terre doit rester sèche pendant plus de 5 secondes (une vraie plante attendrait des heures).
Pour savoir depuis combien de temps la terre est sèche, note le moment où elle est devenue sèche. Il faut pour cela une information mémorisée supplémentaire : savoir si elle était sèche lors de la dernière mesure.
if (moisture < 30) {
if (wasDry == false) {
wasDry = true;
dryStart = millis(); // Il vient de devenir sec
}
if (millis() - dryStart > 5000) {
tone(buzzerPin, 880, 200);
}
} else {
wasDry = false;
}Le else est important : lorsque la terre est arrosée, wasDry repasse à false, afin que la période sèche suivante soit chronométrée à partir de son propre début.
loop() effectue une lecture par seconde. Le bip de 200 ms retentit donc une fois par seconde tant que la terre reste sèche.
Défi
MoyenAjoute l’alarme de sécheresse :
- mémorise si le sol était sec (
bool wasDry) et quand il est devenu sec (unsigned long dryStart) - une fois qu’il est resté sec pendant plus de 5000 ms, joue
tone(buzzerPin, 880, 200)après chaque lecture - lorsqu’il est à 30 % ou plus, remets
wasDryàfalse
Appuie sur Run, baisse le bouton et attends, puis appuie sur Check.
Essayez vous-même
// Le bouton rotatif 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’humidité en pourcentage : 0 signifie complètement sec, 100 signifie détrempé.
int readMoisture() {
int reading = analogRead(sensorPin);
return map(reading, 0, 1023, 0, 100);
}
// Rouge quand le sol est sec, vert quand l’humidité est adéquate, 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);
}
}
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);
}
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