Todas as notas
Avançado10 MIN DE LEITURA

Lógica sob medida: automações avançadas e o caso do crop steering

Como o construtor de automações do Growcast expressa qualquer lógica de controle com oito peças, quais proteções o cercam e como se lê o crop steering como árvore.

A maioria dos controladores oferece duas ferramentas: um temporizador e um acionador por limiar. Com isso resolvem-se uma luz e um exaustor. Não se resolve «ventilar só quando fora está mais frio que dentro, nunca com umidade alta, e esperar dez minutos antes de ligar», nem «irrigar até chegar a um nível e depois mantê-lo com pulsos curtos cada vez que baixar 10 %». Esse tipo de regra não é exótico: é o dia a dia de um processo bem conduzido.

O construtor de automações do Growcast parte de outra ideia. Uma automação é uma árvore de peças que respondem verdadeiro ou falso, e o valor da raiz é o estado de uma saída. Se é possível descrever como o processo deveria se comportar, a árvore pode expressar. O temporizador e o acionador são duas árvores pequenas, não o teto.

Uma árvore, uma saída

As peças vêm em duas famílias, as mesmas nas quais o editor separa o menu de adicionar nó. As condições perguntam algo e respondem verdadeiro ou falso:

  • Condição ambiental: compara uma variável com um valor e é verdadeira enquanto a comparação se cumprir. O valor pode ser fixo ou pode ser outra variável, com uma diferença opcional.
  • Faixa horária: verdadeira dentro do intervalo definido, com os dias da semana que se escolher.
  • Média: faz a média de 2 a 5 variáveis analógicas do mesmo dispositivo e compara essa média com uma referência.
  • Grupo: junta condições com E (todas precisam se cumprir) ou com OU (basta uma). De 2 a 8 por grupo.

Os modificadores não perguntam nada: pegam o resultado que chega até eles e o transformam antes de alcançar a saída:

  • Oscilador: enquanto sua condição estiver ativa, pulsa: tantos segundos ligado e tantos desligado. Mínimo de 5 segundos por fase.
  • Retardo: atrasa o acionamento, e só o acionamento. Quando a condição deixa de se cumprir, a saída desliga na hora. Entre 5 segundos e 6 horas.
  • Memória: fica ativa mesmo que sua condição deixe de se cumprir, até que o sinal de reset a desligue. Se ambos chegarem juntos, o reset ganha.
  • Inversor: devolve o contrário da sua condição.

A árvore é montada na nuvem, compilada para um formato compacto e enviada ao dispositivo, que a avalia no seu próprio ciclo de controle. Por isso cada peça pede uma versão mínima de firmware. Se o equipamento estiver atrás, a plataforma rejeita a regra ao salvar e diz qual peça não pode rodar.

PeçaFirmware mínimo
Oscilador2.4.1
Retardo2.4.2
Inversor2.5.1
Memória2.5.2
Média e referência dinâmica2.5.4

Exemplo 1: um exaustor com histerese

Quer-se que o exaustor ligue quando a temperatura passar de 28 °C e que não desligue até baixar de 25 °C. Um acionador por limiar não sabe fazer isso: com um só valor, a saída vibra em torno de 28.

Não há um nó «histerese». Há uma memória, e a histerese é o que uma memória faz quando seu set e seu reset são duas comparações diferentes sobre a mesma variável:

Duas comparações sobre a mesma variável e uma memória entre elas: isso é uma histerese.
set ≥ 28reset ≤ 252224262830°CSó limiar 28 °CMemória
A mesma temperatura, duas saídas: o limiar sozinho comuta a cada oscilação da leitura; a memória liga uma vez e desliga uma vez. Série ilustrativa.

Entre 25 e 28 a memória conserva a última coisa que decidiu. Se vinha ligada, continua ligada; se vinha desligada, continua desligada. E se por alguma razão os dois sinais coincidirem, o reset ganha: na dúvida, o exaustor desliga. Essa prioridade não é um detalhe de implementação, é o que torna a peça honesta. Sabe-se exatamente o que acontece no caso raro, porque está escrito.

Exemplo 2: desumidificar à noite, e só se a bomba não estiver funcionando

Agora uma regra com três condições que se cruzam. Desumidificar só entre 22:00 e 06:00, só se a umidade relativa estiver acima de 65 %, e nunca enquanto a bomba estiver ligada, porque o pico de umidade que uma lavagem ou uma irrigação deixa é esperado e não vale a pena persegui-lo.

Uma faixa horária, um limiar e o estado de outra saída invertido, com um retardo no topo.

Três coisas para ler aí. Primeiro, a condição sobre a bomba é uma comparação com outra saída, não com um sensor: uma saída digital também é uma variável, e seu estado pode ser usado como entrada de outra regra. Segundo, o inversor converte «bomba ligada» em «bomba desligada» sem precisar de um nó especial. Terceiro, o retardo de 120 segundos faz com que abrir uma porta por um momento não dispare o equipamento: a umidade tem que se manter dois minutos acima do limiar. E como o retardo atrasa só o acionamento, assim que a umidade baixa o desumidificador desliga sem esperar.

Um detalhe que a plataforma resolve sozinha: uma faixa que cruza a meia-noite não se monta igual a uma que não cruza. De 06:00 a 14:00 é preciso cumprir as duas pontas ao mesmo tempo; de 22:00 a 06:00 basta uma. Escreve-se o de e o até, e a árvore correta é gerada sozinha.

Exemplo 3: comparar com outra variável

Uma condição ambiental pode ser comparada com um valor fixo ou com outra variável, com uma diferença opcional. «Que a temperatura externa esteja pelo menos dois graus abaixo da interna» é uma só condição, e se mantém sozinha mesmo que o clima mude. Se o interior é medido por três sondas, a média as junta e compara a média com a referência. Regras relativas como esta são o que separa um controlador de um sistema que entende que o ambiente está dentro de um clima que também muda.

Uma regra relativa: o depósito é ventilado quando fora está mais frio que dentro e o produto ainda está morno, não em uma hora fixa.

Proteções

Uma árvore que pode expressar qualquer coisa também pode expressar um erro. As proteções cercam a árvore em quatro camadas, todas reais.

  • Estado de segurança. Cada condição ambiental define o que devolve quando a variável não está disponível, por exemplo se o sensor parou de reportar. É a decisão mais importante da árvore, porque é a que roda justamente quando algo deu errado. Uma bomba que depende de um sensor de nível deveria falhar desligada. Um exaustor de emergência, provavelmente ligado.
  • Proteção de saída. À margem da lógica, cada automação pode levar uma proteção de entre 5 e 3599 segundos que impede a saída de mudar de estado com mais frequência que isso. É o seguro para um relé ou um compressor que não deveria comutar a cada dez segundos mesmo que a árvore peça.
  • Os limites do equipamento. A lógica roda no dispositivo, então tem que caber na sua memória. Um grupo admite entre 2 e 8 condições, a árvore chega a 16 níveis de aninhamento, e o peso total da árvore é calculado contra a capacidade real do firmware antes de enviá-la. Se passar, a plataforma avisa ao salvar e é preciso simplificar. Uma árvore que não cabe nunca chega ao equipamento pela metade.
  • Análise e simulação. Antes de implantar, a plataforma analisa a árvore em busca de estruturas que tecnicamente são válidas mas quase sempre são um erro: dois ramos de um grupo OU que se sobrepõem e competem pela mesma saída, um ramo que nunca pode ser verdadeiro, um modificador cujo efeito fica tapado por um irmão. E o Simulador roda a árvore contra curvas desenhadas à mão, com estados inventados para o resto das variáveis, e mostra a saída segundo a segundo. O avaliador do Simulador é o mesmo que raciocina sobre a árvore na nuvem, então responde à mesma pergunta que o hardware vai responder.

E três hábitos que o manual recomenda ao montar a árvore: colocar as anulações críticas no nível superior, para que prevaleçam sobre os ciclos temporizados; fazer com que as faixas de cada oscilador sejam excludentes, para evitar sobreposições que gerem pulsos erráticos; e, ao combinar comportamentos diferentes, isolar cada ramo com condições mutuamente excludentes.

Crop steering, lido como árvore

O modelo de irrigação com sensor — o crop steering, um caso comum no cultivo de precisão — é o melhor exemplo de que as peças compõem, e de que a plataforma integra o que cada indústria já usa: aqui, uma sonda de substrato de referência comandando uma bomba. É um modelo, então configura-se com um formulário. Mas o que gera é uma árvore comum, e pode-se abri-la no editor avançado para vê-la inteira. O crop steering é descrito em quatro fases:

  1. F0
    Fase 0

    Período com luzes ligadas em que o substrato seca naturalmente; as plantas estão acordadas e transpirando.

  2. F1
    Fase 1

    Irrigação incremental com pequenos shots que elevam gradualmente a umidade até alcançar o objetivo.

  3. F2
    Fase 2

    Começa quando a umidade cruza o limiar desejado; o sistema irriga em pequenos intervalos para manter a umidade objetivo.

  4. F3
    Fase 3

    Deixa-se o substrato secar antes da noite para promover o crescimento das raízes.

O formulário pede: a variável de umidade de substrato (por exemplo o conteúdo volumétrico de água de uma TEROS 12), a umidade objetivo, como se ativa (com a luz, com um retardo opcional para a fase 0, ou por horário), a duração de ligado e desligado dos pulsos da fase 1, e para a fase 2 os pulsos mais uma porcentagem de dryback. Um exemplo concreto: objetivo 50 %, fase 1 com pulsos de 2 minutos a cada 10, fase 2 com pulsos de 30 segundos a cada 30 minutos e um dryback de 10 %.

objetivo 50 %piso 45 %F0F1F2F300:0006:0012:0018:0024:0042465054Substrato (% VWC)LuzBomba de irrigação
Um dia com esses valores: a fase 1 sobe o substrato em pulsos, a fase 2 o mantém entre o piso e o objetivo, a fase 3 o deixa secar. Série ilustrativa.

Isto é o que o modelo gera com esses valores, ativado pela luz:

A árvore completa do modelo: dois osciladores, três memórias, um inversor, grupos e comparações. Convém lê-la de baixo para cima.

A memória «já chegou hoje» liga na primeira vez em que o substrato cruza o objetivo e não desliga até as luzes apagarem. É o relógio do dia: lembra se a fase 1 já cumpriu seu trabalho.

O ramo da fase 1 pulsa enquanto a luz estiver ligada, o substrato estiver abaixo do objetivo e essa memória estiver desligada, ou seja, enquanto ainda não chegou hoje. Assim que o substrato toca 50 %, a memória liga, o inversor a nega, e a fase 1 fica inibida pelo resto do dia. Ao apagarem as luzes a memória é resetada e a fase 1 se rearma para amanhã. Uma fase que roda uma só vez por dia, sem um contador nem uma data: só uma memória com o reset correto.

O ramo da fase 2 usa duas memórias. A primeira é a mesma «já chegou hoje», desta vez sem inverter: a fase 2 não pode começar antes de a fase 1 ter terminado. A segunda, «houve dryback», é uma banda de histerese idêntica à do exaustor do primeiro exemplo: arma-se quando o substrato baixa do piso (objetivo menos os 10 % de dryback, 45 %) e desarma-se quando volta a superar o objetivo. Entre 45 e 50 conserva a última coisa que decidiu. Assim a fase 2 só irriga depois de uma secagem real, e para de irrigar assim que recupera o objetivo.

E a fase 3 não é um nó. É o que acontece quando as luzes apagam: nenhum ramo tem ativação, a bomba não volta a ligar, e o substrato seca durante a noite.

Fechamento

Nada nessa árvore é especial. São dois osciladores, três memórias, um inversor, alguns grupos e algumas comparações, as mesmas peças que se podem arrastar no editor. O modelo as ordena para o caso conhecido de uma indústria; quando o caso é outro — uma ventilação, uma dosagem, uma climatização —, ordenam-se à mão com as mesmas peças, ou descrevem-se ao Agente e revisa-se o que ele desenhou.

O que roda no dispositivo é exatamente o que se vê na tela, o que o Simulador testou e o que o assistente lê na próxima vez em que se pede uma mudança. Uma só lógica, em quatro lugares. Esse é o ponto.

Seguir com os painéis

A partir do manual do usuário da plataforma Growcast. Os valores das figuras são ilustrativos.

CONTATO

Vamos falar da sua operação.

Existe algum processo importante que hoje é resolvido "no olho", sem dados? Cada implementação começa entendendo a operação.