Descrição do Firmware
Objetivo
O objetivo do firmware da Estufa Hidropônica Inteligente é automatizar o monitoramento e o controle dos parâmetros críticos do ambiente hidropônico, garantindo condições ideais para o crescimento saudável das plantas. Por meio de um único microcontrolador ESP32, o sistema integra sensores e atuadores para gerenciar temperatura, umidade, iluminação, pH, nutrientes e circulação da água, promovendo eficiência, sustentabilidade e facilidade de uso no cultivo hidropônico.
Arquitetura Geral
O firmware está estruturado da seguinte forma:
main/
├── includes/
│ ├── circulacao.h
│ ├── device_defs.h // Definição dos pinos da ESP32
│ ├── exaustor.h
│ ├── hora.h
│ ├── led.h
│ ├── mqtt.h
│ ├── peristaltic.h
│ ├── ph.h
│ ├── solenoide.h
│ ├── tds.h
│ ├── ultrassonic_sensor.h
│ ├── water_temp.h
├── circulacao.c // Controle de circulação da água
├── exaustor.c // Controle da ventoinha para a regulação da temperatura
├── hora.c // SNTP para obter horário pela internet
├── led.c // Controle de luminosidade
├── main.c // Arquivo principal que integra todos os módulos
├── mqtt.c // Comunicação MQTT
├── peristaltic.c // Controle da bomba peristáltica para adicionar soluções na água
├── ph.c // Monitorar pH da água
├── solenoide.c // Controle da válvula solenoide para o reservatório de água
├── tds.c // Monitorar TDS na água
├── ultrassonic_sensor.c // Sensor usado para monitorar nível do reservatório de água
├── water_temp.c // Sensor para medir a temperatura da água
Cada módulo é responsável por uma funcionalidade específica do sistema: - circulacao: Gerencia a circulação de água no sistema. - exaustor: Controla a ventoinha para regular a temperatura. - hora: Usa SNTP para sincronização de horário pela internet. - led: Gerencia a luminosidade do sistema. - mqtt: Implementa a comunicação MQTT para troca de dados. - peristaltic: Controla a bomba peristáltica para dosagem de soluções. - ph: Monitora o pH da água. - tds: Monitora os sólidos dissolvidos totais (TDS) na água. - ultrassonic_sensor: Mede o nível do reservatório de água usando um sensor ultrassônico. - water_temp: Mede a temperatura da água.
Fluxo de Operação
O fluxo de operação do firmware da Estufa Hidropônica Inteligente é gerenciado pelo microcontrolador ESP32, que coordena os diversos subsistemas para monitorar e controlar as condições ambientais e de cultivo. Vale destacar que utilizamos o recurso de FreeRTOS para termos diversos subsistemas operando paralelamente independentes, porém com uso de flag para controle de prioridades. Veja a figura 1.

Figura 1: Diagrama geral de alto nivel. Fonte: Elaboração própria. Todos os direitos reservados.
O processo de operação segue as etapas descritas abaixo:
-
Configuração Inicial
Ao iniciar, o firmware configura a rede Wi-Fi através da funçãoconfig_wifi()
e estabelece a comunicação MQTT com a funçãoinit_mqtt()
. Em seguida, a sincronização de horário é feita utilizando o SNTP com a funçãoinit_sntp()
e a hora é atualizada comupdate_time()
. -
Inicialização dos Sensores e Atuadores
- O sensor ultrassônico é inicializado com
init_ultrasonic_resources()
para monitorar o nível de água. - O sensor de temperatura e umidade DHT11 é inicializado para coleta de dados ambientais.
- As tarefas para leitura dos sensores são criadas, como a tarefa
ultrasonic_task
para medir a distância continuamente. -
Outros sensores como o pH, TDS e temperatura da água são configurados para coleta periódica de dados.
-
Leitura e Monitoramento
No loop principal, o sistema realiza as leituras e ajustes periódicos para garantir as condições ideais: - pH da água é medido pela função
get_ph()
e o valor é logado. - O nível de água é monitorado com o sensor ultrassônico, e a distância do reservatório é registrada.
- A temperatura e umidade do ambiente são obtidas através do sensor DHT11 e os valores são exibidos no log.
-
A temperatura da água é lida pela função
read_temperature()
, com o valor sendo exibido periodicamente. -
Ajuste e Controle de Subsistemas
Enquanto o firmware coleta os dados dos sensores, ele também ajusta os subsistemas de controle: - O rele é iniciado com a função
start_rele_task()
, controlando os atuadores necessários para manter a estufa nas condições desejadas. -
A comunicação contínua com o servidor MQTT é realizada pela função
mqtt_task()
, permitindo o envio de dados para monitoramento remoto. -
Monitoramento de Hora
O horário atualizado é formatado e exibido periodicamente, permitindo acompanhar a sincronização do sistema. -
Operação Contínua
O loop principal é responsável por manter o sistema em operação contínua, realizando leituras a cada 1 segundo (vTaskDelay(1000 / portTICK_PERIOD_MS)
) e ajustando os parâmetros de controle conforme necessário.
Versionamento
Versão | Data | Modificação | Autor |
---|---|---|---|
1.0 | 20/01/2025 | Documento inicial criado. | Mariana Gomes |
1.1 | 20/01/2025 | Inclusão do controle de versões. | Mariana Gomes |
1.2 | 20/01/2025 | Inclusão do Fluxo de Operação | Mariana Gomes |
1.3 | 20/01/2025 | Inclusão de diagrama de alto nível | João Vitor |