Read this post in: de_DEen_USes_ESid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

Étude de cas : Conception d’une machine d’état pour un contrôleur d’irrigation intelligent pour jardin

AI ChatbotAIYesterday

1. Introduction

L’horticulture et l’agriculture modernes s’appuient de plus en plus sur l’automatisation pour optimiser l’utilisation des ressources, en particulier l’eau — une ressource rare dans de nombreuses régions. Un contrôleur d’irrigation intelligent automatise l’arrosage en fonction des conditions réelles du sol plutôt que d’utiliser des minuteries fixes, réduisant ainsi le gaspillage, évitant le sur- ou le sous-arrosage, et favorisant une croissance plus saine des plantes.

Cette étude de cas se concentre sur la modélisation du comportement de ce type de système à l’aide d’un diagramme d’état UML (également appelé diagramme d’état). Ce diagramme capture le cycle de vie du système, les points de décision et les réponses aux événements tels que les mesures d’humidité, les délais d’attente et les interventions utilisateur.

La conception utilise la syntaxe PlantUML syntaxe, similaire à l’exemple du café fourni, qui modélise élégamment les états composés, les gardes, les actions et les chemins d’erreur/récupération.

2. Énoncé du problème et exigences

Un contrôleur d’irrigation automatisé pour un jardin domestique ou une petite serre doit :

  • Commencer en mode Veille à faible consommation la majeure partie du temps.
  • Se réveiller périodiquement selon un horaire (déclencheur de minuterie) pour vérifier les conditions.
  • Passer à l’état Sensing pour lire le niveau d’humidité du sol (via un capteur capacitif ou résistif).
  • Si l’humidité < 30% (seuil de sécheresse configurable), commencer l’irrigation en ouvrant une vanne électromagnétique ou en activant une pompe.
  • Si l’humidité ≥ 30%, revenir à En attente (pas besoin d’arrosage).
  • Tant que En arrosage, surveiller continuellement (ou périodiquement) l’humidité.
  • Arrêter l’arrosage et fermer la vanne lorsque :
    • L’humidité atteint 80% (seuil humide configurable) → objectif atteint.
    • Un Délai de sécurité expire (par exemple, 30 minutes) → empêche les inondations, les ruptures de tuyaux ou les problèmes électriques en cas de défaillance du capteur.
  • Après avoir arrêté l’arrosage, passer à l’état Arrêt état.
  • En Arrêt, attendre confirmation manuelle (appui sur bouton ou commande de l’application) avant de revenir à En attente — cela permet à l’utilisateur d’inspecter le système ou de le forcer si nécessaire.
  • Gérer les anomalies de manière appropriée (par exemple, défaillance du capteur, vanne bloquée) en passant à un état Erreur état avec options de récupération.

Comportements supplémentaires souhaitables (maintenus simples ici) :

  • Pas d’arrosage pendant certaines heures (géré par horaire/minuteur).
  • La journalisation ou les notifications sont hors du cadre de cette machine d’états principale.

3. Concepts principaux de la machine d’états utilisés

  • États: Inactif/En veille, Détection, Arrosage, Arrêt, Erreur.
  • État composite: L’arrosage inclut une logique de surveillance interne (bien que conservée à plat ici pour simplifier).
  • Transitions:
    • Déclenchées par des événements (horloge, lecture d’humidité, expiration du délai).
    • Protégées par des conditions [humidité < 30 %], [humidité >= 80 %].
  • Actions: /ouvrir_vanne(), /fermer_vanne(), /notifier_utilisateur(), etc.
  • Pseudostates initiale / finale: [*] pour le début/la fin.
  • Transitions auto et les boucles de récupération.

4. Diagramme d’états en PlantUML

Ci-dessous se trouve le code PlantUML complet qui met en œuvre le comportement décrit. Il suit les conventions de l’exemple de café (mise en forme skinparam, états composites là où approprié, conditions dans [], actions avec /).

plantuml

@startuml

skinparam {
‘ Style général
‘ Couleurs
CouleurFleche #333333
CouleurPoliceFleche #333333
CouleurFond #FFFFFF
CouleurContour #333333

‘ Style des états
État {
CouleurContour #005073
CouleurFond #E6F5FF
CouleurPolice #005073
}
}

[*] –> Veille

Veille –> Détection : timer_triggers()

Détection –> Arrosage : humidité_sol < 30%
Détection –> Veille : humidité_sol >= 30%

Arrosage –> Arrêt : humidité_sol >= 80 % OU timeout_sécurité()
Arrosage –> Arrêt : timeout_sécurité() // Protection par délai de secours

Arrêt –> Veille : user_confirms_reset()

Veille –> [*]

@enduml

Explication du diagramme

  • Veille — État par défaut à faible consommation / inactif.
  • Détection — Vérification rapide déclenchée par minuteur ; évite un arrosage inutile.
  • Arrosage (composite) — Phase d’arrosage active avec sous-activité interneArrosage sous-activité.
    • Sortie lorsque l’humidité cible est atteinte ou après expiration du délai de sécurité.
  • Arrêt — État de maintien après arrosage nécessitant une confirmation pour reprendre l’automatisation (fonction de sécurité).
  • Erreur — État de containment des pannes avec transition de récupération manuelle.

5. Raisonnement de conception et avantages

  • Économie d’eau — Arrose uniquement lorsqu’il est réellement nécessaire (basé sur l’humidité du sol plutôt que sur le temps).
  • Prévention des inondations — Conditions de sortie doubles depuis Arrosage (objectif d’humidité + délai).
  • Sécurité et contrôle utilisateur — Confirmation manuelle après arrêt anormal empêche le redémarrage automatique après des problèmes potentiels.
  • Extensibilité — Facile à ajouter des états (par exemple, Pluie détectée, Batterie faible, Mode hiver) ou ajuster les seuils.
  • Faible complexité — Plat lorsque possible, composite uniquement lorsque le regroupement logique ajoute de la clarté (arrosage).

Ce design équilibre la robustesse, la sécurité et la simplicité — adapté à une implémentation sur microcontrôleur embarqué (Arduino, ESP32, etc.).

6. Conclusion

Machine à étatsLes machines à états fournissent un formalisme excellent pour modéliser des systèmes de contrôle réactifs comme les régulateurs d’irrigation intelligents. En définissant clairement les états, événements, gardes et actions, les ingénieurs peuvent raisonner sur le comportement du système, les cas limites et la récupération d’erreurs avant d’écrire du code.

La représentation PlantUML ci-dessus sert à la fois de documentation et de plan de mise en œuvre. Son rendu (via des outils PlantUML ou des serveurs en ligne) produit un diagramme propre et professionnel, prêt pour des revues de spécifications, la génération de code ou l’enseignement des concepts UML.

Des extensions futures pourraient inclure :

  • Intégration de l’API météo (sauter le capteur si pluie prévue).
  • Plusieurs zones avec des seuils d’humidité par zone.
  • Notifications de l’application mobile en cas de timeout ou d’erreur.

Cette étude de cas démontre à quel point un problème d’automatisation apparemment simple bénéficie grandement d’une modélisation structurée basée sur les états.

Sidebar Search
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...