Skip to content

Fluxo do firmware

Estrutura do Código

Arquivos circulação

Os arquivos circulacao.h e circulacao.c são responsáveis pelo controle da bomba de circulação de água no sistema de hidroponia. Juntos, eles gerenciam a ativação e desativação da bomba de circulação com base na distância medida por um sensor ultrassônico, garantindo que a bomba funcione apenas quando necessário, de acordo com o nível da água no reservatório.

Arquivo circulacao.h

O arquivo circulacao.h é o cabeçalho onde são feitas as declarações das funções e variáveis que serão utilizadas em outros arquivos. Ele contém:

  1. Função init_circulacao()
    A função init_circulacao() é declarada aqui e será responsável por inicializar os recursos necessários para o controle da bomba de circulação, como a configuração do pino e a criação da tarefa de controle da bomba.

  2. Variável Externa circulacao_status
    A variável circulacao_status é declarada como extern no cabeçalho, permitindo que seja acessada em outros arquivos do sistema. Ela é usada para armazenar o estado atual da bomba (ligada ou desligada).

Arquivo circulacao.c

O arquivo circulacao.c contém a implementação das funções que controlam diretamente o comportamento da bomba de circulação. Ele inclui a configuração do pino de controle e a lógica de operação da bomba com base no nível de água. A estrutura deste arquivo é a seguinte:

  1. Definição da Variável circulacao_status
    A variável circulacao_status armazena o estado atual da bomba de circulação (ligada ou desligada). Inicialmente, o valor é definido como false (desligado).

  2. Função config_circulacao()
    A função config_circulacao() configura o pino de controle da bomba de circulação como uma saída digital no ESP32. A bomba é inicialmente configurada para estar desligada.

  3. Função circula()
    A função circula() é onde ocorre a lógica de controle da bomba. Ela é executada em uma task do FreeRTOS e fica verificando continuamente a distância medida pelo sensor ultrassônico. Dependendo dessa distância, a bomba é ligada ou desligada:

  4. Se a distância for menor ou igual ao valor limite (circulacao_limite), a bomba é ligada.
  5. Se a distância for maior ou igual ao valor mínimo (minimo_ciculcao), a bomba é desligada.

  6. Função init_circulacao()
    A função init_circulacao() é responsável por chamar a função config_circulacao() para configurar o pino da bomba e, em seguida, cria a task que executará a função circula() em um loop contínuo. Esta task garante que a bomba seja controlada de forma assíncrona.

Arquivos do exaustor

Os arquivos exaustor.h e exaustor.c controlam o funcionamento do exaustor com base nas leituras de temperatura e umidade, regulando o ambiente para garantir condições ideais. O sistema liga o exaustor sempre que a temperatura ou a umidade ultrapassam os limites máximos predefinidos, e o desliga quando as condições ambientais voltam aos níveis normais.

Arquivo exaustor.h

O arquivo exaustor.h contém as declarações essenciais que serão utilizadas no arquivo exaustor.c e em outros arquivos do projeto. Ele inclui:

  1. Definição de Variáveis Externas
  2. temperatura_max: Temperatura máxima que aciona o exaustor.
  3. umidade_max: Umidade máxima que aciona o exaustor.
  4. exaustor_status: Variável que armazena o estado atual do exaustor (ligado ou desligado).

  5. Função init_exaustor()
    A função init_exaustor() é declarada no cabeçalho e será responsável por inicializar os recursos necessários para o controle do exaustor, como a configuração do pino e a criação da tarefa de controle.

Arquivo exaustor.c

O arquivo exaustor.c contém a implementação das funções que controlam o funcionamento do exaustor. Ele inclui a configuração do pino de controle, a lógica de operação do exaustor com base nas condições ambientais e a criação da task que executa a lógica de controle. A estrutura deste arquivo é a seguinte:

  1. Definição de Variáveis
  2. temperatura_max e umidade_max são definidos com valores padrão (40°C para temperatura e 70% para umidade).
  3. exaustor_status: Inicialmente, o exaustor está desligado (false).

  4. Função config_exaustor()
    A função config_exaustor() configura o pino de controle do exaustor como saída digital no ESP32. O pino é inicializado desligado (nível baixo).

  5. Função exaustor()
    A função exaustor() executa a lógica de controle do exaustor em uma task do FreeRTOS. Ela fica verificando periodicamente os valores de temperatura e umidade lidos pelo sensor DHT11:

  6. Se a temperatura ou a umidade ultrapassarem os valores máximos definidos, o exaustor é ligado.
  7. Se ambos os valores estiverem abaixo dos limites e o status do DHT11 for bem-sucedido (indicando que a leitura foi realizada corretamente), o exaustor é desligado.

  8. Função init_exaustor()
    A função init_exaustor() chama a função config_exaustor() para configurar o pino do exaustor e cria uma task para monitorar e controlar o exaustor. A task é executada em um loop contínuo, verificando as condições de temperatura e umidade.

Arquivos hora

Os arquivos hora.h e hora.c controlam a sincronização de hora da ESP32 utilizando o protocolo NTP (Network Time Protocol). O sistema obtém a hora atual da internet e a ajusta para o fuso horário local, permitindo que a ESP32 tenha um horário preciso. As funções implementadas garantem que o horário seja sincronizado corretamente e possa ser utilizado em diversas aplicações.

Arquivo hora.h

O arquivo hora.h contém as declarações essenciais para o controle do horário. Ele inclui:

  1. Funções Declaradas
  2. init_sntp(): Função que inicializa o SNTP (Simple Network Time Protocol) para obter a hora da internet.
  3. update_time(): Função que atualiza o horário do sistema utilizando o NTP.
  4. get_formatted_time(): Função que obtém o horário atual formatado como string.

Arquivo hora.c

O arquivo hora.c contém a implementação das funções que controlam a sincronização do horário e a formatação do horário local. Ele inclui a inicialização do SNTP, a atualização do horário com base no NTP e a configuração do fuso horário para o horário local. A estrutura deste arquivo é a seguinte:

  1. Inicialização do SNTP
    A função init_sntp() inicializa o SNTP e define o servidor NTP (pool.ntp.org) para sincronizar a hora da ESP32 com a internet. O SNTP é configurado para funcionar no modo de polling.

  2. Configuração do Fuso Horário
    A função configure_timezone() permite configurar o fuso horário local da ESP32. Ela utiliza a função setenv() para definir a variável de ambiente "TZ" e tzset() para aplicar o fuso horário.

  3. Função update_time()
    A função update_time() é responsável por atualizar o horário da ESP32. Ela verifica repetidamente se o horário foi sincronizado corretamente com o servidor NTP e, quando isso ocorre, configura o fuso horário para o horário local (no exemplo, "BRT3" para o horário de Brasília).

  4. Função get_formatted_time()
    A função get_formatted_time() obtém a hora atual da ESP32 e a converte para o formato dd/mm/yy HH:MM:SS. O horário é obtido utilizando as funções time() e localtime_r(), e a formatação é feita com a função strftime(). A string formatada é armazenada no buffer passado como argumento.

Arquivos led

Os arquivos led.h e led.c controlam a ativação e desativação de um relé com base em horários predefinidos. O sistema verifica continuamente o horário atual e aciona o relé (e consequentemente o LED) dentro de um intervalo de tempo específico. O relé é ativado no horário de início e desativado no horário de fim.

Arquivo led.h

O arquivo led.h contém as declarações necessárias para o controle do relé. Ele inclui:

  1. Definição de Variáveis Externas
  2. start_hour, start_minute, start_second: Horário de início para a ativação do relé.
  3. stop_hour, stop_minute, stop_second: Horário de fim para a desativação do relé.
  4. led_status: Variável que armazena o status atual do LED (ativado ou desativado).

  5. Função start_rele_task()
    A função start_rele_task() inicia a tarefa de controle do relé, configurando o pino de controle e criando a task do FreeRTOS para verificar continuamente o horário e controlar o relé.

Arquivo led.c

O arquivo led.c contém a implementação das funções que controlam a ativação e desativação do relé com base no horário. Ele inclui a configuração do pino de controle do relé, a lógica de controle do relé em uma task do FreeRTOS, e a atualização do status do relé. A estrutura deste arquivo é a seguinte:

  1. Função rele_control_init()
    A função rele_control_init() configura o pino de controle do relé como saída digital no ESP32. O relé é inicialmente configurado para o estado "desligado" (nível baixo).

  2. Função rele_task()
    A função rele_task() verifica o horário atual a cada 5 segundos (utilizando vTaskDelay()). Ela compara o horário atual com os horários de início e fim:

  3. Se o horário estiver dentro do intervalo predefinido, o relé é ativado (e o LED é ligado).
  4. Se o horário estiver fora do intervalo, o relé é desativado (e o LED é desligado). O status do LED é registrado no log utilizando ESP_LOGI().

  5. Função start_rele_task()
    A função start_rele_task() chama a função rele_control_init() para configurar o relé e cria a task do FreeRTOS para monitorar continuamente o horário e controlar o relé. A task é criada com uma prioridade de 5 e um tamanho de pilha de 4096 bytes.

Arquivos peristaltic

Os arquivos peristaltic.h e peristaltic.c realizam o controle do Ph e DTS através do acionamento de bombas peristalticas que adicionam soluções conforme a necessidade.

Arquivo peristaltic.h

O arquivo peristaltic.h contém as declarações essenciais que serão utilizadas no arquivo peristaltic.c e em outros arquivos do projeto. Ele inclui:

  1. Funções Declaradas
  2. config_peristaltic(): Função que configura os pinos das bombas.
  3. peristaltic(void *pvParameter): Função que realilza a regulagem do PH e TDS adicionando soluções de correção.
  4. addSoluc(uint8_t bomba, uint16_t tempo): Função genérica que liga a bomba por um tempo determinado pela variável tempo.
  5. init_peristaltic(): é declarada no cabeçalho e será responsável por inicializar os recursos necessários para o controle do exaustor, como a configuração do pino e a criação da tarefa de controle.

Arquivo peristaltic.c

O arquivo peristaltic.c contém a implementação das funções que mantém o equilíbrio dos níveis de pH e TDS conforme os parâmetros configurados, ajustando automaticamente quando necessário. Ele inclui a configuração do pino de controle, a lógica de operação das bombas peristalticas e a criação da task que executa a lógica de controle. A estrutura deste arquivo é a seguinte:

  1. Definição de Variáveis
  2. critic_acid e normal_acid: Definem os limites críticos e normais de pH ácido. Valores abaixo de critic_acid acionam uma bomba para corrigir a acidez.
  3. critic_base e normal_base: Definem os limites críticos e normais de pH básico. Valores acima de critic_base acionam uma bomba para corrigir a basicidade.
  4. HighTDS e LowTDS: Estabelecem os limites máximo e mínimo de sólidos dissolvidos totais (TDS). Abaixo de LowTDS ou acima de HighTDS, ações específicas são tomadas.
  5. water_need: Flag para indicar a necessidade de adicionar água. Controla a lógica de ajustes do sistema.

  6. config_peristaltic:

  7. Configura os pinos GPIO para controlar as bombas peristálticas.
  8. Define os pinos como saída e aplica resistores de pull-down para garantir que os estados inativos sejam mantidos em baixo (LOW).

  9. addSoluc:

  10. Ativa uma bomba específica por um tempo determinado (em milissegundos) e depois a desativa.
  11. Utiliza gpio_set_level para controlar o nível do pino e vTaskDelay para criar o atraso necessário.

  12. peristaltic:

  13. Função principal executada como uma tarefa FreeRTOS que monitora continuamente os níveis de pH e TDS.
  14. Fluxo da lógica:
    • Monitoramento de pH: Se o pH estiver fora dos limites críticos (critic_base ou critic_acid), ativa as bombas de ácido ou base para correção.
    • Monitoramento de TDS: Se o TDS for muito baixo (LowTDS), ativa bombas para adicionar solução. Se for muito alto (HighTDS), indica necessidade de adicionar água.
    • Ajustes normais de pH: Se o pH estiver fora dos limites normais (normal_base ou normal_acid), ativa as bombas correspondentes.
  15. Após cada ciclo de controle, insere um atraso de 100ms para evitar leituras excessivas.

  16. init_peristaltic:

  17. Inicializa o sistema de controle das bombas peristálticas.
  18. Configura os pinos GPIO chamando config_peristaltic.
  19. Cria uma tarefa FreeRTOS para executar a função peristaltic em paralelo.

Arquivos solenoide

Os arquivos solenoide.h e solenoide.c são responsáveis pelo controle automatizado do nível de um reservatório. Eles acionam uma válvula solenóide com base nos dados fornecidos por um sensor ultrassônico, que monitora continuamente o nível do líquido no reservatório, ajustando o funcionamento da válvula conforme a necessidade.

O que acha?

Arquivo solenoide.h

O arquivo solenoide.h contém as declarações essenciais que serão utilizadas no arquivo solenoide.c e em outros arquivos do projeto. Ele inclui:

  1. Função init_solenoide()
    A função init_solenoide() é declarada no cabeçalho e será responsável por inicializar os recursos necessários para o controle da válvula solenoide. Isso inclui a configuração dos pinos GPIO e a criação da tarefa que monitora e controla a válvula conforme o nível de água do reservatório.

Arquivo solenoide.c

O arquivo solenoide.c implementa o controle da válvula solenoide para gerenciar o nível de água no reservatório. Ele utiliza as leituras de um sensor ultrassônico para monitorar o nível de água e ajusta o estado da válvula com base em parâmetros predefinidos. Além disso, considera o estado da flag water_need para determinar se há necessidade de água adicional devido aos níveis de TDS. A estrutura deste arquivo é a seguinte:

  1. Definição de Variáveis
  2. TAG: String usada para identificar mensagens de log relacionadas à funcionalidade da válvula solenoide.
  3. nivel_max: Distância máxima da água no reservatório. Quando alcançada, a válvula é fechada para evitar transbordamento.
  4. nivel_ideal: Distância ideal da água no reservatório. O sistema tenta manter o nível próximo a esse valor.
  5. nivel_min: Distância mínima da água no reservatório. Quando ultrapassada, a válvula é aberta para reabastecer o reservatório.
  6. water_distance: Variável global que armazena a distância atual medida pelo sensor ultrassônico. Utilizada para avaliar o nível de água no reservatório.

  7. config_solenoide

  8. Configura o pino GPIO associado à válvula solenoide.
  9. Define o pino como saída e habilita o resistor de pull-down para garantir que o estado inicial da válvula seja desligado (LOW).
  10. Utiliza a estrutura gpio_config_t para aplicar as configurações.

  11. solenoide

  12. Função principal que executa o controle dinâmico da válvula de entrada de água em um loop infinito.
  13. Fluxo da Lógica:
  14. Obtém o nível atual da água no reservatório usando a função get_distance.
  15. Verifica o estado de water_need:
    • Quando water_need é falso (sem necessidade de ajuste devido ao TDS):
    • Se o nível de água estiver acima ou igual a nivel_max, desliga a válvula para evitar transbordamento.
    • Se o nível estiver abaixo de nivel_min, liga a válvula para reabastecer o reservatório.
    • Se o nível estiver próximo de nivel_ideal, desliga a válvula para estabilizar o sistema.
    • Quando water_need é verdadeiro (necessidade de água devido a TDS alto):
    • Liga a válvula se o nível de água estiver abaixo de nivel_max para adicionar mais água.
    • Desliga a válvula se o nível for maior ou igual a nivel_max para evitar transbordamento.
  16. Após cada ciclo de controle, insere um atraso de 100ms para evitar leituras excessivas e sobrecarga do sistema.
  17. Registra mensagens de log (ESP_LOGI) para informar o estado da válvula e as ações tomadas.

  18. init_solenoide

  19. Inicializa o sistema de controle da válvula solenoide.
  20. Configura os pinos GPIO chamando a função config_solenoide.
  21. Cria uma tarefa FreeRTOS que executa continuamente a função solenoide em paralelo, permitindo o controle dinâmico e independente da válvula.
Versão Data Modificação Autor
1.0 20/01/2025 Documento inicial criado. Mariana Gomes
1.1 20/01/2025 Arquivos hora Mariana Gomes
1.2 20/01/2025 Arquivos led Mariana Gomes
1.3 20/01/2025 Arquivos das bombas e nivel do reservatorio João Vitor