8 METODOLOGIA DE DESENVOLVIMENTO
8.4 DESENVOLVIMENTO DO SOFTWARE DO MICROCONTROLADOR
8.4.2 Operação do dispositivo
O dispositivo proposto por este trabalho deve realizar as seguintes funções: ● Se conectar à rede sem fio local com acesso à internet para publicação dos
valores obtidos do sensoriamento, e para receber comandos.
● Monitorar os sensores de luminosidade, temperatura ambiente, e umidade gravimétrica do solo e publicar no banco de dados para análise futura.
● Controlar o funcionamento da válvula de controle de fluxo, realizando a irrigação quando o solo estiver com umidade gravimétrica abaixo do especificado para o cultivo.
● Recuperar o seu modo de operação em caso de falha momentânea de alimentação.
● Salvar dados localmente em memória não volátil, como o nome e a senha de acesso da rede em que ele deve se conectar.
● Receber e tratar mensagens publicadas especificamente para o dispositivo, nos tópicos em que ele está inscrito. Um exemplo de comando via mensagem é a opção “regar agora” que permite o usuário testar o sistema de irrigação sem passar pelo crivo da lógica dos sensores.
● Receber remotamente os horários de irrigação.
A arquitetura escolhida para este software é dividida em duas partes: Setup e loop. No modo setup, o programa é responsável por configurar alguns parâmetros necessários para o correto funcionamento do dispositivo. São eles:
● Inicializar a comunicação serial transistor transistor logic responsável para depuração do código, em uma velocidade de 115200 bit/s.
● Declarar à quais pinos estão conectados os periféricos presentes no projeto, como sensores,conversor analógico digital, etc.
● Inicializar as bibliotecas dos sensores, responsáveis pela comunicação e/ou obtenção de dados.
● Configurar os tópicos requisitados pela comunicação via protocolo MQTT para publicação de mensagens.
● Inicializar o real time clock do controlador, para se obter a base de tempo utilizada no software.
● Inicializar a memória não volátil do microcontrolador, deixando esta pronta para salvar dados de configuração.
● Inicializar o dispositivo em modo ponto de acesso e aguardar ações do usuário para que ele se conecte à rede local sem fio.
O modo loop é responsável pela leitura contínua dos sensores, verificação do estado da comunicação e verificar a disponibilidade de mensagens nos tópicos inscritos relativo ao protocolo MQTT. Um descritivo pontual das sub funções do modo loop estão descritas abaixo:
● Atualizar os valores dos sensores nas memórias voláteis do microcontrolador. ● Atualizar o real time clock do microcontrolador via Network Time Protocol. ● Publicar os valores dos sensores e informações sobre o estado de operação
do microcontrolador via rede sem fio e protocolo MQTT.
● Verificar a disponibilidade de mensagens publicadas nos tópicos em que o dispositivo está inscrito, como por exemplo o comando “regar agora”.
● Verificar se, pelos valores obtidos dos sensores, a irrigação deve ser feita liberando o fluxo de água pela válvula de controle.
Pela incapacidade do microcontrolador de realizar as equações 6 e 7 necessárias para a conversão dos valores de tensão em umidade gravimétrica do solo, os valores de tesão são publicados no banco de dados e a conversão é por processamento em nuvem.
8.4.2.1 Controle da irrigação
A irrigação é configurada remotamente, na qual, por meio da rede sem fio via protocolo de dados MQTT, o usuário envia ao microcontrolador quais os horários a válvula de controle de fluxo deve ser liberada. Esta funcionalidade tem operação parecida com um despertador convencional, onde o usuário pode configurar o horário de início e a duração da irrigação por gotejamento.
A irrigação é programada no momento da instalação do dispositivo, onde o usuário deve se atentar às condições do ambiente para a correta programação. Porém, visando um controle em malha fechada, o controlador pode tomar a decisão de liberar o fluxo na válvula de controle. Essa decisão é tomada de acordo com a leitura da quantidade de horas de sol direta que a área de cultivo recebe, e a leitura do sensor de umidade gravimétrica do solo.
O microcontrolador contabiliza quantas horas de sol direto a área de cultivo recebeu em um dia. Se o valor ultrapassar três horas de sol direto e o valor do sensor de umidade estiver abaixo do valor mínimo pré-configurado no programa, ele toma a decisão de iniciar a irrigação. Esta irrigação é realizada em três etapas, com duração de 2 minutos cada. Após o fim da primeira etapa, o controlador espera 10 min e inicia a segunda etapa, e o processo é repetido para a terceira etapa. Este controle auxiliar é executado desta maneira para permitir que a água tenha tempo o suficiente para se espalhar pelo solo, proporcionando leituras mais homogêneas e menos pontuais.
8.4.2.2 Publicação e subscrição via MQTT
Conforme citado na seção 8.4.3 deste trabalho, a comunicação via protocolo MQTT funciona pela arquitetura publicação e subscrição. Se um dispositivo pretende captar mensagens via protocolo MQTT, ele subscreve em um tópico definido pelo arquiteto do sistema, e a partir do momento em que a subscrição é validada, ele está apto a ler todas as mensagens que forem enviadas naquele tópico. O mesmo ocorre quanto ao envio de mensagens, onde o dispositivo publica a mensagem em um tópico definido pelo arquiteto do sistema.
Os tópicos que o dispositivo está inscrito para receber mensagens do servidor mostrados na figura 41 são:
● schedules: horários de irrigação.
● pump Enabled: habilitar ou desabilitar o acionamento da válvula de controle de fluxo.
● pump Now: comando “regar agora” que permite o usuário testar o sistema de irrigação.
● resync:comando para esquecer a rede local e a senha configurada.
● new Version: comando que indica uma nova versão de software disponível.
Figura 41: Tópicos de inscrição do dispositivo. Fonte: Autoria própria (2017).
Da mesma maneira, o dispositivo faz publicações em tópicos definidos pelo arquiteto do software quando ele deseja mandar uma mensagem, mostrado na figura 42. Os tópicos de publicação do dispositivo são:
● sensors: tópico onde ele publica os valores de todos os sensores.
● heart beat: responsável para que o servidor saiba que o dispositivo está ativo e conectado. O dispositivo envia uma mensagem vazia no tópico heartbeat a cada 60 segundos, independente da lógica de operação.
● new Version: tópico responsável por receber qual a versão do software do dispositivo.
Figura 42: Tópicos de publicação do dispositivo. Fonte: Autoria própria (2017).