Computing">
Sistema Automático Irrigação
Sistema Automático Irrigação
Sistema Automático Irrigação
UBERLÂNDIA
2021
Paulo Vicktor Felix Dias
de Engenharia Elétrica
UBERLÂNDIA
2021
Dias, Paulo Vicktor Felix
Sistema Automático de
Irrigação e Controle de Temperatura para Estufas/ Paulo
Vicktor Felix Dias. – UBERLÂNDIA, 2021- 28 p. 30 cm.
Com foco no plantio realizado em vasos, nas regiões urbanas, propõe-se um modelo de
automação do processo de irrigação e de supervisão das variáveis do ambiente, a exemplo:
umidade do solo; umidade do ar; temperatura do ar e o volume de água injetado durante a
irrigação. Para isso, foi utilizada uma estação de sensoriamento e atuação dessas condições da
planta. Sendo elas, controladas por um microcontrolador ESP32 que se comunica via protocolo
MQTT com um armazenamento em nuvem, nos servidores da Adafruit IO. Dessa forma, o
usuário é capaz de supervisionar os resultados e observar o histórico das condições de seu
cultivo. Sistema esse que colhe os valores condicionais e a partir deles atua no ambiente de
maneira precisa, otimizando o uso dos recursos e a absorção dos nutrientes pela planta. Ao longo
do desenvolvimento, para encontrar as configurações ideais de atuação no sistema, modelos
distintos foram testados. Cada modelo apresentava uma atuação diferente, com relação a fatores
como a distribuição de diferentes horários e o set point referente à umidade do solo. Foi possível
concluir que a montagem da arquitetura atingiu os objetivos propostos por esse trabalho e um
modelo final foi configurado.
Focusing on planting carried out in pots, in urban areas, a model for the automation of the
irrigation process and the supervision of environmental variables is proposed, such as: soil
humidity; air humidity; air temperature and the volume of water injected during irrigation. For
this, a station for sensing and functioning of these plant conditions was used. They are controlled
by an ESP32 microcontroller that communicates via MQTT protocol with a cloud storage, on
Adafruit IO servers. In this way, the user is able to supervise the results and observe the history
of their cultivation conditions. This system collects the conditional values and acts precisely from
them in the environment, optimizing the use of resources and the absorption of nutrients by the
plant. During the development, to find out the ideal configurations to act on the system, different
models were tested. Each model had a different performance, in relation to factors such as the
distribution of different times and the set point referring to soil humidity. It was possible to realize
that an assembly of the architecture reached the objectives proposed by this work and a final
model was configured.
Figura 01: Gráfico das pesquisas realizadas no Google com o termo “kit de jardinagem”...... 16
Figura 02: Sensor de Umidade do Solo Higrômetro................................................................. 19
Figura 03: Sensor de Umidade e Temperatura DHT11.............................................................19
Figura 04: Sensor de Fluxo de Água de 1/2"............................................................................ 20
Figura 05: Válvula Solenóide de fluxo de água 1/2" -220V..................................................... 21
Figura 06: Relé de Estado Sólido SSR de 1 Canal................................................................... 21
Figura 07: Detalhamento da Pinagem do ESP32 DevKit v1.................................................... 22
Figura 08: Arduino IDE............................................................................................................ 23
Figura 09: Modelo de publicação e assinatura do MQTT para sensores de IoT....................... 25
Figura 10: Tela Inicial Adafruit IO........................................................................................... 27
Figura 11: Exemplo de feed da plataforma Adafruit IO........................................................... 28
Figura 12: Exemplo de Dashboard da plataforma Adafruit IO................................................. 28
Figura 13: Arquitetura desenvolvida........................................................................................ 30
Figura 14: Arranjo do Nó Sensor/Atuador................................................................................ 31
Figura 15: Instalação da Placa ESP32....................................................................................... 31
Figura 16: Arquitetura de Comunicação e Supervisão dos dados............................................ 36
Figura 17: Dashboard de Supervisão do Sistema...................................................................... 38
Figura 18: Fluxo do código fonte do nó.................................................................................... 39
Figura 19: Umidade do Solo do Vaso 3 em Valores Brutos do sensor (0-4095) ao longo de Oito Dias…….. 44
Figura 20: Temperatura do Ar em Graus Celsius ao longo de Oito Dias..................................45
Lista de tabelas
Tabela 1: Temperaturas para o Cultivo de Tomates................................................................. 18
Tabela 2: Pinagem do Sensor de Fluxo de Água...................................................................... 20
Tabela 3: Tópicos da Comunicação em uma etapa inicial do desenvolvimento...................... 37
Tabela 4: Tópicos da Comunicação em uma etapa final do desenvolvimento......................... 37
Lista de abreviaturas e siglas
AD Analog to Digital
AO Analog Output
DO Digital Output
IP Internet Protocol
1.1 Justificativa 15
1.2 Objetivo 16
2. Referencial Teórico 17
2.1 Cultivo 17
2.10 Adafruit IO 26
2.10.1 Feeds 27
2.10.2 Dashboards 28
3. Metodologia 29
3.1 Arquitetura 29
3.4.3.1 Inicializações 41
3.4.3.3 Irrigação 41
4. Resultados e Discussões 44
4.4 Discussões 48
5. Conclusão 49
Bibliografia 51
Anexo 1 53
13
1. Introdução
O Brasil é conhecido mundialmente como um grande exportador de commodities
agrícolas, mas não só para exportações são destinadas às plantações Brasileiras, possuindo
também modelos de agricultura familiar, nas quais são citadas pelo portal do ministério da
agricultura (2020) como principais responsáveis pelo fornecimento de alimentos para a mesa do
brasileiro. Esses modelos têm se diversificado ainda mais, atingido novas regiões e até mesmo
ambientes urbanos e residenciais, como é o caso da empresa brasileira Pink Farm (2020), a
primeira fazenda vertical urbana e comercial da América Latina, onde as plantas são cultivadas
em um ambiente totalmente controlado, fechado, e alimentadas por luzes de LED (Diodo
Emissor de Luz) azul e rosa, que simulam a luz do sol e aceleram a fotossíntese. A água e o
adubo são fornecidos em doses exatas e os agrotóxicos são dispensados nesse sistema.
Para isso, pensando em possíveis arquiteturas que podem ser montadas para ser a base
do sistemas automático de cultivo, e que também seja capaz de trocar informações com a central
de uma casa inteligente, destacasse o protocolo MQTT (Message Queue Telemetry Transport)
que encontrou seu espaço nesse universo de conectar objetos via internet, por ser um protocolo
simples sem deixar de contemplar características como segurança, qualidade de serviço e pela
sua facilidade de implementação.
14
1.1 Justificativa
Em conjunto a essa busca pelas condições ótimas de cultivo para cada espécie, visando
um cenário de plantio urbano residencial, que vem crescendo desde o primeiro trimestre após o
início do isolamento social decorrente da covid-19, como pode ser visto a partir do crescimento
pela busca do termo “kit de jardinagem” realizadas no Google (2021) (resultados da pesquisa
relacionados com kits voltados para plantações em quintais), Figura 01, evidencia-se a
necessidade de um maior foco em pesquisas relacionadas ao uso consciente da água utilizada
para a irrigação, principalmente em regiões metropolitanas como a de São Paulo e Distrito
Federal destacados em nota da Câmara dos Deputados (2018) como regiões que já enfrentam a
falta de abastecimento de água em determinadas épocas do ano mesmo estando em áreas
geográficas que não apresentavam essas dificuldades anteriormente, problema conhecido
popularmente como crise hídrica, sendo uma questão social que assola o mundo inteiro, até
mesmo o Brasil que abriga a maior reserva hídrica potável do mundo, em perspectiva mundial
o World Resources Institute (WRI) (2015), expõe os dados de que no ano de 2040 mais de 3,5
bilhões de pessoas no mundo sofrerão com a escassez de água se medidas não forem tomadas,
ocasionando assim riscos à segurança alimentar dos países, inclusive o Brasil, como já apontava
o Centro de Pesquisas Meteorológicas e Climáticas Aplicada a Agricultura da Unicamp desde
2008, expondo assim uma extrema necessidade do uso consciente e correto desse recurso
insubstituível para a vida de maneira geral. Principalmente em práticas agrícolas, visto que os
15
dados da Organização das Nações Unidas para Alimentação e Agricultura (2018) demonstram
que em média 70% dos recursos hídricos disponíveis no mundo e extraídos para o consumo
humano são destinados à agricultura.
Figura 01: Gráfico das pesquisas realizadas no Google com o termo “kit de jardinagem” entre
16/03/2019 e 16/03/2021.
1.2 Objetivo
Este trabalho propõe-se a desenvolver uma arquitetura para um sistema de irrigação
automático em um ambiente urbano residencial, aplicado ao cultivo em vasos de plantas.
Juntamente com uma Interface Homem Máquina (IHM) para fins de supervisão e comandos
remotos nas amostras. Interligando os periféricos de atuação e sensoriamento a partir do uso de
um microcontrolador, o qual será responsável por condensar as informações e as disponibilizar
ao sistema supervisório. De forma que um usuário administrador do sistema possa compreender
o histórico das variáveis, e controlar o sistema a partir de um dispositivo com conexão à internet.
16
2. Referencial Teórico
Neste tópico serão embasadas algumas teorias e conceitos principais cujo conhecimento
são necessários para uma melhor compreensão do desenvolvimento realizado.
2.1 Cultivo
Dentre os vários critérios existentes para o manejo da irrigação, nenhum pode ser
considerado padrão nem indicado para todas as situações. Métodos clássicos que permitem um
controle bastante criterioso da irrigação, como o do balanço hídrico e da tensão de água no solo,
baseiam-se no conhecimento das características físico-hídricas do solo, das necessidades
específicas da cultura e de fatores climáticos relacionados à evapotranspiração. Dependem ainda
do uso de equipamentos para o monitoramento da umidade do solo (tensiômetros, blocos de
resistência elétrica, etc.) ou de equipamentos para a estimativa da evapotranspiração (tanque
Classe A, termômetros, higrômetros, etc.). Essas informações e equipamentos, além de não
estarem, em geral, ao alcance do irrigante, exigem conhecimentos técnicos específicos para seu
manuseio.
De modo geral, as irrigações na região do Cerrado são feitas por aspersão, utilizando-se o
pivô-central. No Vale do São Francisco, usa-se a irrigação por sulco, que consiste na distribuição
de água por meio de sulcos paralelos às fileiras de plantio. A água é geralmente conduzida por um
canal principal, de onde é derivada para os sulcos, utilizando-se tubos plásticos denominados de
sifões, com diâmetro de uma a duas polegadas. A distribuição da água pode ser feita também por
tubos janelados, que possuem diversas aberturas reguláveis que permitem o controle da quantidade
de água aplicada em cada sulco de irrigação.
Para a temperatura, a pesquisa de Geisenberg & Stewart (1986) chega nos resultados da
tabela 1, que apresenta as temperaturas ideais para o cultivo de tomates.
Temperatura (°C)
Estágio de desenvolvimento
Mínima Ótima Maxima
Germinação 11 16 a 29 34
Crescimento vegetativo 18 21 a 24 32
Este sensor serve para detectar as variações de umidade no solo, sendo que quando o solo
está seco a saída do sensor fica em estado alto, e quando úmido em estado baixo. O limite entre
seco e úmido pode ser ajustado através do potenciômetro presente no sensor que regulará a saída
digital D0. Contudo, para ter uma resolução melhor, é possível utilizar a saída analógica A0 e
conectar a um conversor AD.
18
A saída analógica varia de 300 mV a 700 mV em solo úmido, e de 700 mV até 950 mV em
solo encharcado ou água pura. Em solo seco ou pouco úmido varia de 0 (zero) a 300 mV.
Este Sensor de Fluxo de Água, modelo YF-S201, possui um rotor de água e um sensor de
efeito Hall. Quando a água flui através do rotor, faz com que este gire, e as mudanças de velocidade
19
que variam de acordo com o fluxo de água são lidas pelo sensor de efeito hall, que emite o pulso
de sinal correspondente. O sensor vem com 3 cabos conforme a tabela 2:
preto terra
Contando os pulsos é possível calcular o fluxo de água. Note que este não é um sensor de
precisão e que a taxa de pulsos pode variar um pouco dependendo do fluxo, da pressão e da
orientação do sensor. No entanto é um excelente aliado para medições básicas.
O sinal do pulso é uma onda quadrada que se registra e se converte em litros por segundos
com uma técnica de somar os valores enviados pelo sensor a cada segundo ao longo do tempo de
calibração, e tirar uma média desses valores observados dentro do intervalo de acionamento. Ao
injetar água na entrada do sensor e a armazenar em um recipiente de medida (copo de medidas em
litros), teremos o valor em litros despejado no intervalo amostrado. Assim, descobrimos qual
multiplicação devemos aplicar no valor lido pelo sensor para a resposta condizer com a água
despejada no recipiente.
20
2.5 Válvula Solenóide de Entrada de Água
Esta Válvula Solenóide serve para controlar o fluxo de água do projeto. Quando alimentada
em 220V ela permite a vazão de água, e corta o fluxo quando deixa de ser energizada.
Com um módulo relé de estado sólido SSR de 1 canal você pode controlar equipamentos
que normalmente são ligados em tomadas residenciais com apenas um pino do microcontrolador,
o qual é responsável por fechar ou abrir a rede de energia onde o equipamento está conectado. O
Relé de estado sólido (SSR - Solid State Relay, em inglês), se refere a um dispositivo semicondutor
capaz de desempenhar as mesmas funções de um relé eletromecânico comum, com a diferença de
não possuir partes ou contatos mecânicos. Isso aumenta a vida útil do relé, reduz a produção de
ruídos durante o acionamento e aumenta a segurança de operação. O relé de estado sólido de 1
canal é ativado em estado baixo (LOW), com tensão entre 0 e 2,5V. Para desligar o relé, aplica-se
de 3 a 5V no pino CH1.
21
2.7 Microcontrolador ESP32
Conforme destacado por Bertoleti (2019) em seu livro Projetos com ESP32 e LoRa, ESP32
é o nome de um SoC (System on a Chip) (ou combo chip, conforme referenciado na
documentação), o qual foi desenvolvido pela Espressiff System (2019). Ele dispõe de
conectividade com Wifi e Bluetooth, e seu poder computacional dividido entre a CPU e as
memórias. Possuindo um sistema Dual Core com duas CPUs Harvard Architecture Xtensa LX6,
tendo dois núcleos, PRO_CPU para protocolo e APP_CPU para aplicação, no entanto, os objetivos
desses não são fixos. Em seu chip ainda está incluso I/O 's, RTC (Real Time Clock), e suporte a
comunicações diversas (SPI, I²C I²S, etc.). Além de suporte Low-Power e blocos de hardware
dedicados à segurança. Com relação a sua CPU e memórias, são ROM de 448KB, SRAM de
520KB e duas memórias RTC de 8 KB. Sendo que sua memória externa suporta até quatro vezes
o Flash de 16 MB. O espaço de endereço para o barramento de dados e instrução é de 4 GB e o
espaço de endereço periférico é de 512 KB.
A Espressiff System tem uma placa de desenvolvimento com base no módulo ESP32
chamada ESP32-WROOM-32. Uma das placas de desenvolvimento criadas por outra empresa
para demonstrar o ESP-WROOM-32 é o DevKit v1, feito pela DOIT. Ela é baseada também no
microcontrolador ESP32 que possui suporte a Wifi, Bluetooth, Ethernet e baixa potência em seu
único chip. Essa será usada no desenvolvimento deste trabalho.
22
2.8 Arduino IDE
23
2.9 Comunicação MQTT
Para os dispositivos de Internet das Coisas (IoT), a conexão com a Internet é um requisito.
A conexão com a Internet permite que os dispositivos trabalhem entre si e com serviços de
backend. O protocolo de rede subjacente da Internet é o TCP/IP. Desenvolvido com base na pilha
TCP/IP (Transmission Control Protocol/Internet Protocol), o MQTT (Message Queue Telemetry
Transport) tornou-se o padrão para comunicações de IoT.
O protocolo MQTT define dois tipos de entidades na rede: um message broker e inúmeros
clientes. O broker é um servidor que recebe todas as mensagens dos clientes e, em seguida, roteia
essas mensagens para os clientes de destino relevantes. Um cliente é qualquer coisa que possa
interagir com o broker e receber mensagens. Um cliente pode ser um sensor de IoT em campo ou
um aplicativo em um data center que processa dados de IoT.
24
Figura 09: Modelo de publicação e assinatura do MQTT para sensores de IoT.
Conforme levantado pelo Professor Doutor Marcelo Barros no blog embarcados (2015),
apesar do broker representar um elo de fragilidade na rede ao centralizar as comunicações, ele
permite um desacoplamento entre as partes comunicantes, algo que não é possível em modelos de
comunicação do tipo cliente/servidor, por exemplo. Vale lembrar que existem soluções de brokers
redundantes ou operando em clusters, na tentativa de mitigar esta fragilidade.
25
A conexão do cliente ao broker é feita via TCP para ambos os casos (subscritor ou
publicador), sendo possível configurar login (usuário e senha) e uso de criptografia
(SSL/TLS)(Secure Sockets Layer/Transport Layer Security). É possível encontrar também outros
meios físicos com MQTT rodando, como em links seriais, por exemplo.
● QoS 0 (at most once): É o que conhecemos como “best effort”, ou melhor esforço.
Assemelha-se ao protocolo de transporte UDP (User Datagram Protocol), onde não se tem
confirmação de entrega da mensagem. Quem envia também não tem a obrigação de manter
a mensagem armazenada para futuras retransmissões;
● QoS 1 (at least once): Neste nível existe a confirmação de entrega de uma mensagem. Atende
situações onde quem envia acaba gerando várias mensagens iguais possivelmente por um
atraso na chegada de confirmação de recebimento. Neste caso, é garantido que uma delas
terá o reconhecimento realizado. Note que existe um armazenamento da mensagem por parte
de quem envia até a posterior confirmação;
● QoS 2 (exactly once): Garante que a mensagem seja entregue exatamente uma vez, com
envio de confirmações de recebimento e confirmações de recebimento de confirmações de
recebimento. Existem confirmações nos dois sentidos, para tudo que é trafegado. Enquanto
uma mensagem não é confirmada, ela é mantida. É um caso mais próximo do protocolo de
transporte TCP.
Vale ressaltar que não existe um QoS melhor ou pior, isto irá depender dos recursos
disponíveis no seu sensor, de cada cenário de aplicação do MQTT, da qualidade do link de
comunicação, etc. Cada nível de QoS é negociado entre o cliente e o broker, não entre o publicador
e o subscritor. Assim, é possível ter uma publicação em QoS 0 e uma subscrição em QoS 2, para
um mesmo tópico.
2.10 Adafruit IO
Adafruit IO é uma plataforma projetada pela empresa norte-americana Adafruit. Tem como
objetivo exibir, responder e interagir com os dados de projetos diversos. Com a promessa de manter
os dados privados (feeds de dados são privados por padrão) e seguros (nunca serão vendidos ou
doados para outra empresa). Ela disponibiliza um armazenamento em nuvem e funcionalidades de
26
gerenciamento dos dados publicados a ela. É possível fazer projetos tanto em em Python como na
linguagem Arduino (variação do C/C++), através do protocolo de comunicação MQTT. Se
apresentando com uma opção de ferramenta para implementação de desenvolvimentos de IoT.
Para utilizar a plataforma é necessário criar uma conta, existindo dois tipos de planos de
assinatura, um plano gratuito e um plano pago. Como é apresentado na tela inicial do Adafruit IO,
(Figura 4). No plano gratuito, é possível realizar uma troca de até trinta dados por minuto, entre
cliente e broker, caracterizando assim 1 envio a cada dois segundos. E esses dados são
armazenados na nuvem por até 30 dias, e excluídos do banco de dados após este período. Nessa
troca de dados entre os pontos, são permitidos 10 Feeds (equivalentes aos tópicos da comunicação
MQTT), e a partir destes dados 5 Dashboards podem ser desenvolvidas. Já para o plano pago, a
taxa de comunicação dobra, passando para sessenta dados por minuto, e os Feeds e as Dashboards
são ilimitadas.
Dentro da plataforma existe um esquema de login e senha, que permite que cada projeto
possua uma conta distinta para recepcionar seus dados com segurança, ambas as informações
podem ser encontradas no botão AIO KEY presente no canto superior direito da Figura 4. Quando
um cliente envia informações a plataforma Adafruit IO, o usuário pode interagir com esses dados
a partir dos Feeds e das Dashboards, que serão melhor explicadas a seguir.
2.10.1 Feeds
2.10.2 Dashboards
28
3. Metodologia
Durante a elaboração do sistema automático de irrigação e controle de temperatura para
estufas, o desenvolvimento foi dividido em etapas nas quais serão descritas a seguir.
3.1 Arquitetura
Neste projeto, é proposta uma arquitetura que tem como característica a possibilidade de
interligar um sistema de irrigação a uma central de dados, que abrigue dados distintos, de forma
que dentro de um universo crescente de interconexão de objetos via internet, este arranjo tenha a
adaptabilidade de se conectar em uma rede maior, a qual lida com outros tipos de informações. De
forma que, em modelos de casas inteligentes, para aquelas que tiverem o espaço para vasos de
plantas, esse sistema apresentado possa facilmente ser incorporado ao restante da casa, ao enviar
os dados à central, que os processa e sustenta a automação residencial. Esse tipo de arquitetura
funciona para os diversos tipos de aplicações, como pode ser observado pelo exemplo do trabalho
de conclusão de curso do Augusto Quinaglia (2019), apresentado ao Instituto de Ciência de
Tecnologia de Sorocaba, da (UNESP), onde ele demonstra um arranjo que monitora as variáveis
ambientais de um estoque de peças aeronáuticas, evidenciando assim, que a partir deste modelo de
arquitetura, onde há um nó cliente e um servidor do tipo broker MQTT, é possível condensar os
mais diversos tipos de informações dentro desse arranjo.
Esta placa foi conectada a sensores DHT11 e também a sensores de umidade do solo
relacionados aos três vasos de amostra montados para a validar a arquitetura do sistema proposto,
além de receber informações do medidor de fluxo de água e a partir de um tratamento das
condições observadas, o módulo ESP32 comanda dois relés que acionam uma válvula solenóide e
um ventilador.
30
A partir daí, a placa ficou em condições de receber o programa usando a plataforma
Arduino IDE. Código este que irá realizar o sensoriamento e a atuação nas amostras e também
configurar a comunicação com um broker MQTT.
Para avaliar a umidade e a temperatura ambiente em que os três vasos com as amostras
estão condicionados, foi utilizado um sensor DHT11 em cada um, este que possui uma biblioteca
que ajuda a interpretar seus dados. Ele é um equipamento que possui quatro pinos de conexão,
onde apenas três deles foram usados, sendo VCC, GND e Data. O sensor de umidade é capacitivo
e o sensor de temperatura é um termistor NTC, isto é, um resistor sensível à variações de
temperatura. Dentro do sensor existe um microcontrolador que faz as medições e transmite os
valores no formato digital através de um pino de saída. Para ler os dados utiliza-se as funções da
biblioteca DHT: “.readHumidity();” e “.readTemperature();”. Que já lhe devolve os valores de
umidade relativa em uma escala de 20 a 90% e o de temperatura dentro de uma faixa de 0 a 50 °C.
Já para o sensoriamento da umidade da terra no interior dos vasos foi usado um sensor do
tipo Higrômetro que consiste em duas partes: uma sonda que entra em contato com o solo, e um
pequeno módulo contendo um chip comparador LM393, que vai ler os dados que vêm do sensor
e enviá-los para o microcontrolador (ESP32) . Como saída, ele tem um pino D0 (digital output),
que fica em nível 0 (zero) ou 1 dependendo da umidade, e um pino de saída analógica (A0) (analog
output), que possibilita monitorar a umidade do solo com maior precisão usando uma porta
analógica do microcontrolador.
A medição da quantidade de água injetada para os vasos das plantas a cada irrigação é feita
por um sensor de fluxo de água de modelo YF-S201, este sensor usa os princípios do
eletromagnetismo, de forma que, quando os líquidos passam pelo sensor, a ação do fluxo atinge
as aletas de uma turbina no sensor, fazendo com que a roda gire. O eixo da roda da turbina é
conectado a um sensor de efeito Hall, de modo que a cada giro é gerado um pulso e, monitorando
esse pulso pelo microcontrolador, o sensor pode ser usado para determinar o volume de fluido que
passa por ele.
Para isso, é preciso habilitar um pino do microcontrolador para trabalhar como interrupção
de descida, de forma que é contada a quantidade de bordas de descida da onda quadrada do pulso,
o que a partir de uma constante de calibração e de médias, é possível determinar quantos mililitros
de água são injetados nos vasos a cada atuação de irrigação. O que será melhor elucidado no tópico
3.4 desta seção.
Uma válvula solenóide é usada para abrir a passagem de água, quando se deseja controlar a
32
irrigação das plantas. Ao ser alimentada em 220V ela permite a vazão de água, e corta o fluxo
quando deixa de ser energizada. Essa válvula é acionada por um relé de estado sólido, que é ativado
em estado baixo (low), com tensão entre 0 (zero) e 2,5V. Para desligar o relé se aplica de 3 a 5V no
pino CH1. Este que conecta e desconecta a rede de energia em 220 Volts que alimenta a válvula
solenóide. O relé de estado sólido é um dispositivo semicondutor capaz de desempenhar as mesmas
funções de um relé eletromecânico comum, com a diferença de não possuir partes ou contatos
mecânicos.
Por entender que dentre os diversos dispositivos e placas como alguns modelos de Raspberry
Pi, ou de Beaglebones, que são equipamentos que possuem recursos para sustentar os periféricos do
Nó em sua leitura e atuação nas condições do ambiente, e que também conseguem controlar uma
Interface Homem Máquina (IHM) em paralelo a isso, todos apresentam um preço para aquisição
superior a um microcontrolador mais simples que tenha acesso a algum tipo de conexão que o
33
permita realizar comunicação. De forma que placas como o DOIT Esp32 DevKit v1 se apresentam
como uma opção viável por ter capacidade de sustentar a arquitetura do nó, como outros
microcontroladores também podem, mas em conjunto a isso ela já possui integrada ao seu chip uma
antena de rede que a permite realizar conexão Wifi. De forma que a partir desta comunicação ela
pode enviar as informações do Nó para outro dispositivo.
Então, de frente a esta condição, onde é preciso enviar os dados adquiridos pelos sensores
do Nó a outros dispositivos via Wifi, precisamos escolher um protocolo de comunicação adequado
para as características do sistema proposto. Onde possa garantir a entrega dos dados de maneira
precisa e segura, sem que as informações do sistema fiquem visíveis para terceiros, e de forma que
os dados continuem privados.
Considerando este cenário apresentado, podemos sondar alguns possíveis protocolos como
o HTTP (Hyper Text Transfer Protocol), desde seu uso em uma implementação de uma página web,
até no uso de REST (Representational State Transfer) que não é exatamente um protocolo mas sim
um padrão bem estabelecido para transmissão de dados, no qual todo computador moderno e
linguagem de programação tem suporte para REST API (application program interface). Porém,
pensando no crescente universo da automação residencial e no aumento de dispositivos com suporte
para integrarem uma rede de Internet das Coisas, podemos desenvolver a comunicação do Nó sensor
via protocolo MQTT (Message Queue Telemetry Transport) , no qual o possibilita uma fácil
integração a uma possível central de dados, ou seja, o broker. E como nosso sistema é proposto a
um ambiente urbano, este cenário nos permite que em uma ampliação da estrutura controlada seja
possível integrar dados da horta com informações de outros Nós, seja equivalentes ao desenvolvido
neste trabalho, ou outros com objetivos de sensoriamento e atuação distintos da irrigação, como
uma geladeira conectada ao broker por exemplo, ou um sistema de vigilância de câmeras. Por isso,
ao se demonstrar como um protocolo que permite escalar e ampliar a arquitetura de comunicação
em diversas direções, o MQTT foi o escolhido para o uso neste trabalho.
35
Tabela 3: Tópicos da Comunicação em uma etapa inicial do desenvolvimento.
/feeds/umidadesolo.vaso2 /feeds/litros2
Vaso 2
/feeds/umidadesolo.vaso3 /feeds/litros3
Vaso 3
/feeds/umidadesolo.vaso2
Vaso 2
/feeds/umidadesolo.vaso3
Vaso 3
A partir dos Feeds recebidos pelo broker após o envio dos dados por um cliente, podemos
desenvolver dashboards para melhor interpretar estas informações. Elas permitem que você
visualize dados e controle os projetos conectados ao Adafruit IO, a partir de qualquer navegador da
web moderno. Widgets como gráficos, controles deslizantes e botões estão disponíveis para ajudar
a colocar o projeto em operação, sem a necessidade de um código personalizado. Uma dashboard
37
foi desenvolvida para este trabalho, visando supervisionar as condições das plantas sensoriadas e
realizar comandos manuais nos relés de atuação, um para a válvula solenóide de irrigação e o outro
para o ventilador. Conforme a figura 17.
38
Em sequência, foram declaradas as variáveis globais usadas no processo, aquelas que
são usadas por mais de uma função (prototype).
No momento da Tabela 03, foram realizados três tipos de irrigações diferentes, sendo duas
definidas por horários e uma por um setpoint de umidade do solo. Essa parte aparece comentada no
código exposto no Anexo I. Já no momento da Tabela 04 foi aplicado apenas um modelo para todos
os vasos, que avalia a umidade do solo dos três vasos com relação a um setpoint uma vez ao dia, e
com relação a resposta, atua.
Além disso, a cada trinta segundos é feita uma leitura em todos os sensores, verifica-se a
qualidade dos valores obtidos, e os publicam ao broker MQTT, e por fim checa a necessidade de
ligar ou desligar o ventilador observando a temperatura atual.
40
3.4.3 Detalhamento dos Prototypes
3.4.3.1 Inicializações
Temos quatro prototypes de inicializações, um para o monitor serial, outro para setar os
pinos como entrada ou saída e suas condições iniciais, um terceiro para estabelecer a conexão Wifi
e um último que conecta com o relógio online, são eles: initSerial(); initPins(); initWiFi(); e
initRelogio().
3.4.3.3 Irrigação
41
Para calibrar o valor lido pelas bordas de descida da onda quadrada do sensor, e torná-lo
correspondente a quantidade de água injetada em litros, foi colocado um recipiente medidor de
volumes na saída da mangueira que a válvula solenóide abre e fecha o fluxo de água, após a
atuação, se comparou o valor em litros depositados no recipiente com o valor lido pelo sensor. Ao
comparar os valores, pode-se aplicar uma constante multiplicadora que correlacione ambos, para
definir o valor mais próximo das condições de pressão da rede de água na qual a válvula solenóide
e o medidor de fluxo estão instalados, esse teste foi realizado diversas vezes. Mas, é importante
pontuar que a rede de água pública não mantém exatamente a mesma pressão ao longo do dia em
sua linha, assim, caso a pressão na qual a água chega até a torneira alimentadora da válvula, e por
consequência do medidor de fluxo, não seja a mesma de quando a calibração foi realizada, o valor
lido sofre divergências com relação ao real volume usado na irrigação. Os maiores problemas se
apresentam em momentos onde há ar presente na tubulação, visto que os intervalos de irrigação
são muito curtos (por volta de 3 a 5 segundos) de forma que um pequeno volume de ar que
movimenta a turbina do sensor já apresenta uma grande diferença entre a quantidade de água real
injetada e o valor colhido pelo equipamento referente a volume de fluidos (água + ar) que passou
pela tubulação.
Quando essa função é chamada, são feitas as leituras dos três sensores de umidade do solo,
utilizando de uma leitura analógica para cada um, os quais recebem um valor entre 4095 e 0, de
forma que 4095 representa um solo seco e 0 um solo encharcado, e a partir deste valor
convertemos essa escala para ficar entre 0 e 100, onde 0 é para um solo seco e 100 úmido. Também
são realizadas as leituras de temperatura e umidade relativas do ar dos sensores DHT11 a partir da
biblioteca do equipamento, para estes, se soma os valores dos três sensores para obter a média, a
qual é enviada ao broker em outra parte do algoritmo.
42
3.4.3.6 Conexão com o broker
43
4. Resultados e Discussões
Ao implementar os modelos de irrigação feitos para testes, que tiveram o intuito de avaliar
o melhor comportamento do algoritmo de atuação automática, logo nos primeiros dias ficou
explícito que a frequência de irrigação de forma diária, indiscriminadamente do valor da umidade
do solo, resultava em plantas com excesso de água em seus vasos. Como pode ser observado por
um recorte do gráfico da umidade da terra presente no vaso 3, visto na Figura 18, que representa os
valores brutos (antes da conversão para porcentagem) lidos pelo sensor de umidade do tipo
higrômetro, de forma que, solos encharcados tem um valor inferior ao de uma terra seca:
Figura 19: Umidade do Solo do Vaso 3 em Valores Brutos do sensor (0-4095) ao longo de Oito Dias.
Como pode se observar pela curva, no dia 26 de abril, após um período em que a terra secou
rapidamente devido a incidência do sol sobre a superfície do recipiente, e como foi um dia com
poucas nuvens no céu tornando a irradiação mais expressiva, a umidade do solo reduziu de maneira
visível. E assim, foi realizada a atuação de irrigação, porém, do dia 26 para o dia 27 iniciou-se uma
sequência de dias nublados nos horários que há incidência direta do sol nas amostras, o que
ocasionou os vasos permanecerem em situação de sombra em grande parte do dia, e como isso, a
umidade do solo não apresentou grandes variações entre os dias 27 e 30 de abril. Isso ocorreu mesmo
que a temperatura nestes dias não estivesse discrepante com relação aos outros dias, como pode ser
visto na Figura 19, demonstrando assim que estar nublado ou não, pode influenciar mais a umidade
44
da terra do que a temperatura do ar naquele dia em si.
No dia 2 de Maio, após a umidade da terra no vaso 3 voltar a diminuir, foi realizada uma
irrigação quando o sensor observou uma condição pré configurada de setpoint. Nesse dia o céu
estava aberto e com poucas nuvens, a atuação ocorreu por volta do início da manhã, e após a
incidência direta do sol, por volta do meio do dia, quando a irradiação acumulou no plano, houve
uma redução rápida da umidade, mesmo sendo um dia mais frio com relação aos dias anteriores.
Evidenciando ainda mais, o efeito que o sombreamento dos dias nublados causam nas condições
monitoradas dos vasos.
Essa situação mostrou de forma clara que qualquer ato de irrigação deve ser feito apenas
após uma avaliação da umidade da terra do vaso naquele instante. Pois, como é visto na relação
entre as Figuras 18 e 19, mesmo em dias com temperaturas similares, são necessários outros fatores
como a incidência do sol para resultar em efeitos no ambiente monitorado.
Agora, pensando com relação à análise esperada para a comparação entre os modelos de
irrigação dos vasos 1 e 2, onde se correlaciona o impacto de atuar logo no início do dia, em
comparação com regar os vasos à noite. Seus resultados foram impactados pelo ponto apresentado
na análise do vaso 3, pois, assim como entre os dias 27 e 30 de abril, uma irrigação que seja realizada
indiscriminadamente do valor da umidade da terra no instante pode resultar em uma terra
encharcada, o que também é prejudicial para uma planta. Porém, observando o ocorrido para o vaso
03 demonstrado na Figura 18, podemos compreender uma correlação de um dia com pouco sol com
o período noturno. Pois sem a incidência do sol, não há grandes variações na umidade do solo, visto
45
que no cultivo feito em vasos, se não for por evaporação, apenas a absorção das plantas interfere na
umidade da terra.
Com isso, sabendo que para o modelo final de irrigação será avaliado o valor da umidade do
solo, de cada um dos vasos uma vez ao dia, com base em um horário ideal para essa avaliação. E,
considerando o que foi percebido ao longo da etapa de testes, este trabalho opta pelo horário do
período da manhã para essa avaliação das umidades dos solos, visando condicionar água o suficiente
para as plantas absorverem da terra durante um dia ensolarado, desta forma, caso o valor para todos
os vasos estejam abaixo de um setpoint pré estabelecido em 30%, às 8 horas da manhã, ocorrerá a
atuação.
46
Durante seu desenvolvimento, o sensor de fluxo de água do modelo YF-S201 apresentou
resultados insatisfatórios, pois, seu sensoriamento que é feito ao gerar uma onda quadrada que pode
ser utilizada para contar quantas bordas de descida houveram dentro de um intervalo de tempo, para
determinar quantas voltas o eixo da turbina do sensor realizou, e assim estipular um volume de água
transportado, não apresenta precisão em sua obtenção de dados, pois condições como uma mudança
na pressão da água vinda da torneira, influenciam de forma evidente na aquisição e calibração do
equipamento. Visto que a velocidade com que a água passa pelo sensor muda conforme a pressão
da rede, e o número de voltas realizadas pela turbina não correspondem ao mesmo volume de água
injetado que foi considerado durante o momento de ajuste e configuração de sua leitura.
Dessa forma, esta baixa precisão na leitura do sensor de fluxo nos força a buscar um outro
tipo de equipamento para quantificar o uso da água no sistema, com foco em equipamentos que nos
garanta que o valor registrado como o volume de água transportado é correspondente ao volume
que fluiu pela via, independente da pressão momentânea e que não perca a precisão durante uma
alteração na velocidade em que o fluxo foi transportado pela tubulação. O que nos permitiria somar
o volume de água usado para a irrigação ao longo das semanas, o que não foi realizado durante e o
desenvolvimento deste trabalho pois a constante necessidade de calibração do sensor gerou um erro
no valor registrado.
Mas, com relação aos outros periféricos do nó (relés, DHT11, e sensor Higrômetro) o
conjunto como um todo cumpriu com o que foi proposto, desde a aquisição dos dados pelo Nó,
passando pelo envio dos dados, até a supervisão feita no portal Adafruit. De forma que, a partir do
sistema, foi possível uma maior compreensão de como as variáveis do ambiente se comportam em
relação a determinadas condições climáticas, visto a possibilidade de avaliar as amostras a partir de
um acesso ao portal Adafruit IO. Além de realizar atuações na válvula solenóide e no ventilador
tanto por comandos remotos quanto por ação automática.
47
para 5 minutos entre uma publicação e outra, seria reduzido o uso da rede em 10 vezes considerado
com o que foi usado neste trabalho. Sendo essa uma característica que reforça o resultado positivo
da arquitetura.
Pensando no cenário levantado, em que este arranjo de irrigação se conecte com uma central
de automação residencial, é expressamente recomendado que seja aplicado este aumento do
intervalo entre cada publicação, pois outros nós concorrerão pelo uso da largura de banda disponível
na rede, e um uso exagerado pelo nó sensor e atuador de irrigação poderia gerar uma sobrecarga
deste, sem real necessidade de demandar dessa frequência de comunicação.
E, considerando uma situação onde mais tópicos necessitem ser publicados ou subscritos, e
essa abordagem de enviar todos ao broker sequencialmente, e depois esperar um intervalo para
realizar as publicações novamente, cause gargalo-los na rede durante os momentos de publicação.
É possível mitigar essa sobrecarga separando os dados em pacotes de publicações, os quais seriam
reunidos com relação a sua criticidade para o correto funcionamento do sistema, e enviados em filas,
distribuindo a troca de informações dentro de intervalos, de forma que todos não fossem enviados
em uma única execução do loop.
4.4 Discussões
Por meio das constatações que puderam ser feitas neste trabalho de conclusão de curso, é
preciso pontuar que ao buscar um sistema que auxilie os administradores durante o cultivo de
vegetais, é importante controlar também a iluminação do ambiente, ação que não foi abordada
durante esse trabalho, e que deve ser considerada em desenvolvimentos futuros. Pois, a iluminação
é um fator chave no crescimento de uma planta, e sem um sistema atuador que complemente a luz
natural do sol, a produtividade fica comprometida em dias nublados ou chuvosos, e as plantas se
tornam mais suscetíveis às estações do ano, visto que em cada uma o dia possui um tamanho
diferente com relação a noite, o que influencia nos ciclos de luz das plantas e em suas possibilidades
de crescimento. O que poderia ser contornado utilizando um sistema suplementar de iluminação
para compensar as necessidades dos vegetais.
Assim, pensando neste cenário em que as três amostras são irrigadas simultaneamente, caso
uma tenha necessidade de ser irrigada, e a outra ainda possua uma porcentagem considerável de
água, o sistema tem que optar por deixar uma abaixo do setpoint ou levar a outra ao excesso.
49
5. Conclusão
A partir das considerações apresentadas ao longo deste trabalho, é possível concluir que
a arquitetura proposta para o sistema de irrigação automático e controle de temperatura, para
vasos de plantas no ambiente urbano, cumpre com o que foi proposto. Pois, desde sua coleta de
dados, até a correta disponibilização das informações ao utilizar do protocolo MQTT para enviar
as informações ao broker, apresentaram respostas condizentes e satisfatórias. Pois, esse sistema
desenvolvido permitiu uma melhor compreensão dos efeitos que os diversos tipos de ações do
ambiente causam nas condições de cultivo de vegetais. E, a partir dessas compreensões, um
modelo final de irrigação foi proposto e implementado, o qual irriga as plantas uma vez ao dia,
com base no valor atual da umidade da terra nos vasos, evitando excesso ou falta de água no
cultivo.
Dessa forma, este modelo de irrigação para o cultivo de vegetais demonstra um uso
mínimo de água para sua manutenção. Visto que apenas quando é constatada a real necessidade
de repor a umidade ao vaso é permitido que o sistema realize uma ação de irrigação.
49
ser aplicada uma taxa de transferência de dados entre os pontos excessiva com relação ao real
demandado pelo sistema.
50
Bibliografia
ARDUINO. What is Arduino?, 2018. Disponível em: <https://www.arduino.cc/en/Guide/Introduction>.
Acesso em: 12 jun. 2021.
DE LUCENA, Leandro Pessoa; DA SILVA, Claudio Eurico Seibert Fernandes. Modelos de agricultura
urbana para a segurança alimentar: um estudo comparativo entre Singapura e Brasil. Revista Ibero-
Americana de Ciências Ambientais, v. 9, n. 3, p. 379-397, 2018.
FAO. FAO e CNA lançam estudo sobre agricultura irrigada brasileira, 2018. Disponível em:
<http://www.fao.org/brasil/noticias/detail-events/pt/c/1107498/>. Acesso em: 06 jun. 2021.
GEISENBERG, C.; STEWART, K. Field crop management. In: The tomato crop. Springer, Dordrecht,
1986. p. 511-557.
51
LIU, Thomas. Digital-output relative humidity & temperature sensor/module DHT22 (DHT22 also
named as AM2302). Aosong Electronics.[En línea]. Disponible: https://www. sparkfun.
com/datasheets/Sensors/Temperature/DHT22. pdf [Último acceso: 09/2018], 2013.
MURTA, José. Sensores DHT11 e DHT22: Guia básico dos sensores de umidade e temperatura.
2019. Disponível em: < https://blog.eletrogate.com/sensores-dht11-
dht22/#:~:text=O%20sensor%20DHT11%20%C3%A9%20um,umidade%20e%20temperatura%20do%
20ar.&text=Dentro%20do%20sensor%20existe%20um,de%20um%20pino%20de%20sa%C3%ADda.>.
Acesso em: 06 jun. 2021.
VIDAL, Vitor. Automação de sistema de irrigação: Sensor de umidade e válvula solenóide. 2017.
Disponível em: < http://blog.eletrogate.com/automacao-de-sistema-de-irrigacao-sensor-de-umidade-e-
valvula-solenoide/>. Acesso em: 06 jun. 2021.
WRI. Ranking the World’s Most Water-Stressed Countries in 2040, 2015. Disponível em:
<https://www.wri.org/blog/2015/08/ranking-world-s-most-water-stressed-countries-2040>. Acesso em:
06 jun. 2021.
YASSEIN, Muneer Bani et al. Internet of Things: Survey and open issues of MQTT protocol. In: 2017
international conference on engineering & MIS (ICEMIS). IEEE, 2017. p. 1-6.
53
/****************************** Declaração dos Topicos ***************************************/
//Instancia-se classes para envio da informação no Feed do servidor broker Adafruit
Adafruit_MQTT_Publish temperatura = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/temperatura", MQTT_QOS_1);
Adafruit_MQTT_Publish umidade = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/umidade", MQTT_QOS_1);
Adafruit_MQTT_Publish solo1 = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/umidadesolo.vaso1", MQTT_QOS_1);
Adafruit_MQTT_Publish solo2 = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/umidadesolo.vaso2", MQTT_QOS_1);
Adafruit_MQTT_Publish solo3 = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/umidadesolo.vaso3", MQTT_QOS_1);
//Adafruit_MQTT_Publish litros1 = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/litros1", MQTT_QOS_1);
//Adafruit_MQTT_Publish litros2 = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/litros2", MQTT_QOS_1);
//Adafruit_MQTT_Publish litros3 = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/litros3", MQTT_QOS_1);
Adafruit_MQTT_Publish litros = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/litros", MQTT_QOS_1);
Adafruit_MQTT_Publish status_ventilador = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/ventilador", MQTT_QOS_1);
Adafruit_MQTT_Publish status_solenoide = Adafruit_MQTT_Publish(&mqtt,AIO_USERNAME"/feeds/solenoide", MQTT_QOS_1);
Adafruit_MQTT_Subscribe rele_ventilador = Adafruit_MQTT_Subscribe(&mqtt,AIO_USERNAME"/feeds/ventilador", MQTT_QOS_1);
Adafruit_MQTT_Subscribe rele_solenoide = Adafruit_MQTT_Subscribe(&mqtt,AIO_USERNAME"/feeds/solenoide", MQTT_QOS_1);
/*************************** Declaração dos Prototypes ************************************/
void initSerial();
void initPins();
void initWiFi();
void initRelogio();
void conectar_broker();
void atua(Adafruit_MQTT_Publish titulo);
void ventila(Adafruit_MQTT_Publish titulo);
void incpulso();
void escreveSerial(String titulo, float valor, String unidade);
void publica(Adafruit_MQTT_Publish titulo, float valor);
void publica_status(Adafruit_MQTT_Publish titulo, String valor);
void sensores();
void verifica();
void avalia_subscri();
/*************************** Sketch ************************************/
void setup() {
initSerial();
initPins();
initWiFi();
initRelogio();
mqtt.subscribe(&rele_ventilador);
mqtt.subscribe(&rele_solenoide); }
void loop() {
// ping adafruit io broker a few times to make sure we remain connected
if(! mqtt.ping(3)) {
// reconnect to adafruit io
if(! mqtt.connected())
conectar_broker(); }
avalia_subscri();
//Armazena na variável hora, o horário atual.
hora = ntp.getFormattedTime();
//Atua quando a umidade abaixa
if (s1 <= 30 && s2 <= 30 && s3 <= 30 && hora >= "08:00:00" && hora <= "08:00:10"){
atua(litros);
delay(10000); }
//Atua quando a umidade abaixa
/*if (s3 <= 30){
atua(litros3);
delay(10000); }
//Atua no horario 1
if (hora >= "08:00:00" && hora <= "08:00:10" && s2 <= 30){
atua(litros2);
delay(10000); }
//Atua no horario 2
if (hora >= "19:00:00" && hora <= "19:00:10"&& s1 <= 30){
atua(litros1);
delay(10000); }*/
// Função responsável por ler e enviar o valor do sensor a cada 30 segundos
unsigned long currentMillis = millis();
if (currentMillis - previousMillis > 30000 && mqtt.connected()) {
54
previousMillis = currentMillis;
Serial.println(hora); // Escreve a hora no monitor serial.
sensores();
verifica();
publica(solo1, float(s1));
publica(solo2, float(s2));
publica(solo3, float(s3));
publica(umidade, float(h));
publica(temperatura, float(t));
//Controle do ventilador
if (t >= 24){
digitalWrite(pino_ventilador, LOW);// Liga o ventilador;
publica_status(status_ventilador, "ON"); }
if (t <= 21){
digitalWrite(pino_ventilador, HIGH);// Desliga o ventilador;
publica_status(status_ventilador, "OFF"); } }}
/*************************** Implementação dos Prototypes ************************************/
/* Conexao Serial */
void initSerial() {
Serial.begin(115200);//BaudRate
delay(10); }
/* Configuração dos pinos */
void initPins() {
// Inicializa os sensores de umidade do solo
pinMode(SOLO1, INPUT);
pinMode(SOLO2, INPUT);
pinMode(SOLO3, INPUT);
//DEFINE O PINO COMO SAÍDA
pinMode(pino_ventilador, OUTPUT);
// Ventilador INICIA DESLIGADO....(ligado no low)
digitalWrite(pino_ventilador, HIGH);
//DEFINE O PINO COMO SAÍDA
pinMode(pinoRele, OUTPUT);
//MÓDULO RELÉ INICIA DESLIGADO....(ligado no low)
digitalWrite(pinoRele, HIGH );
// Inicializa os sensores DHT
dht1.begin();
dht2.begin();
dht3.begin();
// Inicializa o sensor de vasao
pinMode(AGUA, INPUT); }
attachInterrupt(digitalPinToInterrupt(AGUA), incpulso, FALLING); //Configura o pino AGUA(Interrupção 0) para trabalhar como interrupção
/* Configuração da conexão WiFi */
void initWiFi() {
//Conecta o Wi-fi
Serial.print("Conectando-se na rede ");
Serial.println(ssid);
WiFi.begin(ssid, password);
//Verifica se há internet conectada
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); }
Serial.println();
Serial.println("Conectado à rede com sucesso"); Serial.print("Endereço IP: "); Serial.println(WiFi.localIP()); }
/* Inicia o Relogio */
void initRelogio() {
ntp.begin(); // Inicia o protocolo
ntp.forceUpdate(); // Atualização . }
/*************************** Implementação das Leituras e atuações************************************/
/* Avalia os Subscritos */
void avalia_subscri(){
Adafruit_MQTT_Subscribe *subscription;
while (subscription = mqtt.readSubscription(5000)) {
// Eventos do Ventilador
if (subscription == &rele_ventilador) {
55
// convert mqtt ascii payload to int
char *value = (char *)rele_ventilador.lastread;
Serial.print(F("Received: "));
Serial.println(value);
// Apply message to ventilador
String message = String(value);
message.trim();
if (message == "ON") {digitalWrite(pino_ventilador, LOW);}
if (message == "OFF") {digitalWrite(pino_ventilador, HIGH);} }
// Eventos da solenoide
if (subscription == &rele_solenoide) {
// convert mqtt ascii payload to int
char *value = (char *)rele_solenoide.lastread;
Serial.print(F("Received: "));
Serial.println(value);
// Apply message to soleoide
String message = String(value);
message.trim();
if (message == "Open") {
atua(litros);
publica_status(status_solenoide, "Close"); }
if (message == "Close") {digitalWrite(pinoRele, HIGH);} } } }
/* atuação da irrigação via bomba ligada a Rele,
& leitura do fluxo de agua + chamada de publicação*/
void atua(Adafruit_MQTT_Publish titulo) {
digitalWrite(pinoRele, LOW); // liga a agua
publica_status(status_solenoide, "Open");
//Faz a leitura 3 vezes
i = 0; //Zera a variável i para uma nova contagem
vazao = 0; //Zera a variável vazao para uma nova contagem
media = 0; //Zera a variável media para uma nova contagem
while (i < 2){
contaPulso = 0; //Zera a variável para contar os giros por segundos
sei(); //Habilita interrupção
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupção
i++;
vazao = contaPulso*calibragem; //Converte para mL
media=(media+vazao)/2; //Soma a vazão para o calculo da media
escreveSerial("\nVazao injetada", vazao, "L");
escreveSerial("", i, "s"); }
digitalWrite(pinoRele, HIGH); //desliga a agua
publica_status(status_solenoide, "Close");
escreveSerial("\nMedia injetada = ", media, "L");
publica(titulo, float(media)); }
//Incrementa a variável de contagem dos pulsos
void incpulso(){ contaPulso++; }
//Escreve no Monitor Serial
void escreveSerial(String titulo, float valor, String unidade){
Serial.print(titulo); //Imprime a frase do titulo
Serial.print(valor); //Imprime o valor
Serial.println(unidade); //Imprime unidade
Serial.println();}
//Publica os dados para o broker
void publica(Adafruit_MQTT_Publish titulo, float valor){
if (! titulo.publish(float(valor))) {
Serial.println(F("Failed")); }
else { Serial.println(F("OK!")); } }
//Publica os dados para o broker
void publica_status(Adafruit_MQTT_Publish titulo, String valor){
char Buf[10];
valor.toCharArray(Buf, 50);
if (! titulo.publish(Buf)) {
Serial.println(F("Failed"));
} else { Serial.println(F("OK!")); } }
56
//Faz a leitura dos sensores
void sensores()
{ // Leitura do solo1
s1 = analogRead(32);
// Leitura do solo 2
s2 = analogRead(34);
// Leitura do solo 3
s3 = analogRead(35);
57
if (isnan(h3) || isnan(t3)){ //Caso o dado não seja válido
Serial.println("Falha ao ler dados !!!");
return;
}else{ //Caso o dado seja válido mostra o dado no monitor
escreveSerial("Temperatura3: ", t3, " *C ");
escreveSerial("Umidade3 : ", h3, " %"); }
// Verifica se a média é valida
if (isnan(h)){ //Caso o dado não seja válido
Serial.println("Falha ao relacionar dados !!!");
return;
}else{ //Caso o dado seja válido mostra o dado no monitor
escreveSerial("Umidade Média: ", h, " %"); }
// Verifica se a média é valida
if (isnan(t)){ //Caso o dado não seja válido
Serial.println("Falha ao relacionar dados !!!");
return;
}else{ //Caso o dado seja válido mostra o dado no monitor
escreveSerial("Temperatura Média: ", t, " *C ");} }
/*************************** Demais implementações ************************************/
/* Conexão com o broker e também servirá para reestabelecer a conexão caso caia */
void conectar_broker() {
Serial.print(F("Connecting to Adafruit broker mqtt... "));
int8_t ret;
while ((ret = mqtt.connect()) != 0) {
switch (ret) {
case 1: Serial.println(F("Wrong protocol")); break;
case 2: Serial.println(F("ID rejected")); break;
case 3: Serial.println(F("Server unavail")); break;
case 4: Serial.println(F("Bad user/pass")); break;
case 5: Serial.println(F("Not authed")); break;
case 6: Serial.println(F("Failed to subscribe")); break;
default: Serial.println(F("Connection failed")); break;
}
if(ret >= 0)
mqtt.disconnect();
Serial.println(F("Retrying connection..."));
delay(5000);
}
Serial.println(F("Conectado ao broker com sucesso!"));
}
58