Menu
CoddyTech

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 %.

challenge icon

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 : DRY en dessous de 30 %, OK de 30 % à 70 %, WET au-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);
}
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Arduino