Read this post in: de_DEen_USes_ESfr_FRid_IDjapl_PLru_RUvizh_CNzh_TW

Estudo de Caso: Projeto de Máquina de Estados para um Controlador Inteligente de Irrigação para Jardim

AIAI ChatbotYesterday

1. Introdução

A jardinagem e a agricultura modernas dependem cada vez mais da automação para otimizar o uso de recursos, especialmente água — um recurso escasso em muitas regiões. Um controlador de irrigação inteligente automatiza a irrigação com base nas condições reais do solo, em vez de cronômetros fixos, reduzindo desperdícios, evitando regas excessivas ou insuficientes e apoiando um crescimento mais saudável das plantas.

Este estudo de caso foca na modelagem do comportamento desse sistema usando um diagrama de máquina de estados UML (também chamado de diagrama de estado). O diagrama captura o ciclo de vida do sistema, pontos de decisão e respostas a eventos como leituras de umidade, tempos esgotados e intervenções do usuário.

O projeto utiliza PlantUMLsintaxe, semelhante ao exemplo da cafeteria fornecido, que modela elegantemente estados compostos, guardas, ações e caminhos de erro/recuperação.

2. Enunciado do Problema e Requisitos

Um controlador automatizado de irrigação para um jardim doméstico ou pequeno greenhouse deve:

  • Iniciar em um modo de baixo consumo Standbya maioria do tempo.
  • Acordar periodicamente de acordo com um cronograma (gatilho por temporizador) para verificar as condições.
  • Entrar em um estado de Sensingestado para ler o nível de umidade do solo (por meio de um sensor capacitivo ou resistivo).
  • Se a umidade < 30% (limite configurável de seca), iniciar Irrigandoabrindo uma válvula solenóide ou ativando uma bomba.
  • Se a umidade ≥ 30%, retornar para Aguardando (não é necessário regar).
  • Enquanto Regando, monitorar continuamente (ou periodicamente) a umidade.
  • Parar de regar e fechar a válvula quando:
    • A umidade atinge 80% (limiar de umidade configurável) → objetivo alcançado.
    • Um Tempo limite de segurança expira (por exemplo, 30 minutos) → evita inundação, estouros de tubos ou problemas elétricos caso o sensor falhe.
  • Após parar a irrigação, passe para o estado de Desligamento estado.
  • No estado de Desligamento, aguarde por confirmação manual (pressão de botão ou comando do aplicativo) antes de retornar ao Aguardando — isso permite que o usuário inspecione o sistema ou faça uma sobreposição, se necessário.
  • Gerencie falhas de forma adequada (por exemplo, falha no sensor, válvula travada) passando para um estado de Erro estado com opções de recuperação.

Comportamentos desejáveis adicionais (mantidos simples aqui):

  • Nenhuma irrigação durante determinadas horas (gerenciado por horário/contador).
  • Registro ou notificações estão fora do escopo desta máquina de estados principal.

3. Conceitos principais da máquina de estados utilizados

  • Estados: Ocioso/Standby, Sensando, Irrigando, Desligamento, Erro.
  • Estado composto: Irrigando inclui lógica interna de monitoramento (embora mantida plana aqui para simplificação).
  • Transições:
    • Acionado por eventos (temporizador, leitura de umidade, tempo limite).
    • Protegido por condições [umidade < 30%], [umidade >= 80%].
  • Ações: /abrir_valvula(), /fechar_valvula(), /notificar_usuario(), etc.
  • Pseudostados iniciais/finais: [*] para início/fim.
  • Transições próprias e loops de recuperação.

4. Diagrama de estados em PlantUML

Abaixo está o código completo em PlantUML que implementa o comportamento descrito. Ele segue as convenções do exemplo da cafeteria (estilo skinparam, estados compostos quando apropriado, guardas entre [], ações com /).

plantuml

@startuml

skinparam {
‘ Estilo geral
‘ Cores
CorDaSeta #333333
CorDaFonteDaSeta #333333
CorDeFundo #FFFFFF
CorDaBorda #333333

‘ Estilo de estado
Estado {
CorDaBorda #005073
CorDeFundo #E6F5FF
CorDaFonte #005073
}
}

[*] –> Standby

Standby –> Sensing : timer_triggers()

Sensing –> Irrigating : umidade_do_solo < 30%
Sensing –> Standby : umidade_do_solo >= 30%

Irigando –> Desligamento : umidade_do_solo >= 80% OU timeout_de_segurança()
Irigando –> Desligamento : timeout_de_segurança() // Proteção de tempo limite de fallback

Desligamento –> Standby : usuario_confirma_reinicializacao()

Standby –> [*]

@enduml

Explicação do Diagrama

  • Standby — Estado padrão de baixo consumo/ocioso.
  • Sensibilidade — Verificação rápida acionada por temporizador; evita rega desnecessária.
  • Irrigando (composto) — Fase ativa de irrigação com subatividade internaIrrigação subatividade.
    • Sai quando atinge a umidade alvo ou ocorre timeout de segurança.
  • Desligamento — Estado de espera pós-irrigação que exige confirmação para retomar a automação (funcionalidade de segurança).
  • Erro — Estado de contenção de falhas com transição de recuperação manual.

5. Racional de Design e Benefícios

  • Conservação de água — Apenas irriga quando realmente necessário (baseado na umidade do solo, em vez de tempo).
  • Prevenção de inundação — Condições duplas de saída do estado de irrigação (alvo de umidade + timeout).
  • Segurança e controle do usuário — Confirmação manual após parada anormal evita reinício automático após possíveis problemas.
  • Extensibilidade — Fácil de adicionar estados (por exemplo, Chuva Detectada, Bateria Baixa, Modo Inverno) ou ajustar os limites.
  • Baixa complexidade — Plano sempre que possível, composto apenas quando o agrupamento lógico aumenta a clareza (Irrigação).

Este design equilibra robustez, segurança e simplicidade — adequado para implementação em microcontroladores embarcados (Arduino, ESP32, etc.).

6. Conclusão

Máquina de estadosAs máquinas de estados fornecem um formalismo excelente para modelar sistemas de controle reativos, como controladores de irrigação inteligentes. Ao definir claramente estados, eventos, guardas e ações, os engenheiros podem analisar o comportamento do sistema, casos extremos e recuperação de erros antes de escrever o código.

A representação em PlantUML acima serve tanto como documentação quanto como projeto para implementação. Renderizá-la (por meio de ferramentas PlantUML ou servidores online) produz um diagrama limpo e profissional, pronto para revisões de requisitos, geração de código ou ensino de conceitos de UML.

Extensões futuras poderiam incluir:

  • Integração com API de clima (pular sensação se houver previsão de chuva).
  • Múltiplas zonas com limites de umidade por zona.
  • Notificações no aplicativo móvel em caso de tempo esgotado ou erro.

Este estudo de caso demonstra como um problema aparentemente simples de automação se beneficia muito com modelagem estruturada baseada em estados.

Sidebar Search
Loading

Signing-in 3 seconds...

Signing-up 3 seconds...