Índice:

Termostato baseado em Arduino: 6 etapas
Termostato baseado em Arduino: 6 etapas

Vídeo: Termostato baseado em Arduino: 6 etapas

Vídeo: Termostato baseado em Arduino: 6 etapas
Vídeo: Trocador de calor com Arduino 2024, Novembro
Anonim
Termostato baseado em Arduino
Termostato baseado em Arduino
Termostato baseado em Arduino
Termostato baseado em Arduino
Termostato baseado em Arduino
Termostato baseado em Arduino

Desta vez, vamos construir um termostato baseado em Arduino, sensor de temperatura e relé. Você pode encontrar no github

Etapa 1: Configuração

Configuração
Configuração

Toda a configuração é armazenada em Config.h. Você pode alterar os PINs de controle de relés, leitura de temperatura, limites ou temporizações.

Etapa 2: Configurando Relés

Vamos supor que gostaríamos de ter 3 relés:

  • ID: 0, PIN: 1, ponto de ajuste de temperatura: 20
  • ID: 1, PIN: 10, ponto de ajuste de temperatura: 30
  • ID: 2, PIN: 11, Ponto de ajuste de temperatura: 40

Em primeiro lugar, certifique-se de que o PIN de sua escolha ainda não foi obtido. Todos os pinos podem ser encontrados em Config.h, eles são definidos por variáveis que começam com DIG_PIN.

Você tem que editar Config.h e configurar PINs, limites e quantidade de relés. Obviamente, algumas propriedades já existem, então você deve apenas editá-las.

const estático uint8_t DIG_PIN_RELAY_0 = 1; const estático uint8_t DIG_PIN_RELAY_1 = 10; const estático uint8_t DIG_PIN_RELAY_2 = 11;

const estático uint8_t RELAYS_AMOUNT = 3;

const static int16_t RELAY_TEMP_SET_POINT_0 = 20;

const static int16_t RELAY_TEMP_SET_POINT_1 = 30; const static int16_t RELAY_TEMP_SET_POINT_2 = 40;

Agora temos que configurar relés e controlador, isso acontece em RelayDriver.cpp

initRelayHysteresisController (0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0); initRelayHysteresisController (1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresisController (2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

Etapa 3: Controlador de histerese

É o escolhido no exemplo acima, tem algumas configurações adicionais:

const estático uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutosconst estático uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS dá tempo de espera para comutar o próximo relé. Imagine que a configuração do nosso exemplo começaria a funcionar em um ambiente de 40 graus. Isso resultaria na ativação de todos os três relés ao mesmo tempo. Isso pode levar a um alto consumo de energia - dependendo do que você está controlando, o motor elétrico, por exemplo, consome mais energia durante a partida. No nosso caso, os relés de comutação têm o seguinte fluxo: o primeiro relé passa, espere 5 minutos, o segundo passa, espere 5 minutos, o terceiro passa.

RHC_RELAY_MIN_SWITCH_MS define histerese, é a frequência mínima para um determinado relé alterar seu estado. Uma vez ligado, ele permanecerá ligado por pelo menos este período de tempo, ignorando as mudanças de temperatura. Isso é bastante útil se você estiver controlando motores elétricos, uma vez que cada chave tem um impacto negativo no tempo ao vivo.

Etapa 4: Controlador PID

Controlador PID
Controlador PID
Controlador PID
Controlador PID

Este é um tópico avançado. Implementar tal controlador é uma tarefa simples, encontrar as configurações corretas de amplitude é uma história diferente.

Para usar o controlador PID, você deve alterar initRelayHysteresisController (…..) para initRelayPiDController (….) E encontrar as configurações corretas para ele. Como de costume, você os encontrará em Config.h

Implementei um simulador simples em Java, para que seja possível visualizar os resultados. Ele pode ser encontrado na pasta: pidsimulator. Abaixo você pode ver as simulações para dois controladores PID a P. O PID não é perfeitamente estável porque não apliquei nenhum algoritmo sofisticado para encontrar os valores corretos.

Em ambos os gráficos, a temperatura necessária é definida para 30 (azul). A temperatura atual indica linha lida. O relé tem dois estados ON e OFF. Quando está habilitado, a temperatura cai 1,5, quando é desabilitado, aumenta 0,5.

Etapa 5: Bus de mensagens

Bus de mensagens
Bus de mensagens
Bus de mensagens
Bus de mensagens
Bus de mensagens
Bus de mensagens
Bus de mensagens
Bus de mensagens

Módulos de software diferentes precisam se comunicar uns com os outros, espero que não de ambas as maneiras;)

Por exemplo:

  • o módulo de estatísticas deve saber quando um determinado relé liga e desliga,
  • pressionar um botão tem que alterar o conteúdo da tela e também suspender serviços que consumiriam muitos ciclos da CPU, por exemplo, leitura de temperatura do sensor,
  • depois de algum tempo, a leitura da temperatura deve ser renovada,
  • e assim por diante….

Cada módulo está conectado ao Message Bus e pode se registrar para eventos específicos e pode produzir quaisquer eventos (primeiro diagrama).

No segundo diagrama, podemos ver o fluxo de eventos ao pressionar o botão.

Alguns componentes têm algumas tarefas que precisam ser executadas periodicamente. Poderíamos chamar seus métodos correspondentes do loop principal, uma vez que temos Message Bus, é necessário apenas propagar o evento correto (terceiro diagrama)

Etapa 6: Libs

  • https://github.com/maciejmiklas/Thermostat
  • https://github.com/milesburton/Arduino-Temperature…
  • https://github.com/maciejmiklas/ArdLog.git

Recomendado: