Tabla de contenido:

Termostato basado en Arduino: 6 pasos
Termostato basado en Arduino: 6 pasos

Video: Termostato basado en Arduino: 6 pasos

Video: Termostato basado en Arduino: 6 pasos
Video: #106 Termostato WiFi. ARDUINO FÁCIL 2024, Noviembre
Anonim
Termostato basado en Arduino
Termostato basado en Arduino
Termostato basado en Arduino
Termostato basado en Arduino
Termostato basado en Arduino
Termostato basado en Arduino

En esta ocasión vamos a construir un Termostato basado en Arduino, sensor de temperatura y relé. Puedes encontrarlo en github.

Paso 1: configuración

Configuración
Configuración

Toda la configuración se almacena en Config.h. Puede cambiar los PIN que controlan los relés, la temperatura de lectura, los umbrales o los tiempos.

Paso 2: configurar relés

Supongamos que nos gustaría tener 3 relés:

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

Primero debe asegurarse de que el PIN de su elección no esté ya tomado. Todos los pines se pueden encontrar en Config.h, están definidos por variables que comienzan con DIG_PIN.

Tienes que editar Config.h y configurar PIN, umbrales y cantidad de relés. Obviamente, algunas propiedades ya existen, por lo que solo tiene que editarlas.

const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; const static uint8_t DIG_PIN_RELAY_2 = 11;

const static 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;

Ahora tenemos que configurar los relés y el controlador, esto sucede en 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

Paso 3: controlador de histéresis

Es el elegido en el ejemplo anterior, tiene algunas configuraciones adicionales:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minutos constantes estáticos uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS da tiempo de espera para cambiar el siguiente relé. Imagine que la configuración de nuestro ejemplo comenzaría a funcionar en un entorno de 40 grados. Esto daría como resultado la habilitación de los tres relés al mismo tiempo. Esto eventualmente podría conducir a un alto consumo de energía; dependiendo de lo que esté controlando, el motor eléctrico, por ejemplo, consume más energía durante el arranque. En nuestro caso, los relés de conmutación tienen el siguiente flujo: el primer relé se activa, espera 5 minutos, el segundo se enciende, espera 5 minutos y el tercero se enciende.

RHC_RELAY_MIN_SWITCH_MS define histéresis, es la frecuencia mínima para que un relé particular cambie su estado. Una vez encendido, permanecerá encendido al menos durante este período de tiempo, ignorando los cambios de temperatura. Esto es muy útil si está controlando motores eléctricos, ya que cada interruptor tiene un impacto negativo en el tiempo de vida.

Paso 4: controlador PID

Controlador PID
Controlador PID
Controlador PID
Controlador PID

Este es un tema avanzado. Implementar dicho controlador es una tarea simple, encontrar la configuración de amplitud correcta es una historia diferente.

Para utilizar el controlador PID, debe cambiar initRelayHysteresisController (…..) a initRelayPiDController (….) Y debe encontrar la configuración correcta para ello. Como de costumbre, los encontrará en Config.h

Implementé un simulador simple en Java, para que sea posible visualizar los resultados. Se puede encontrar en la carpeta: pidsimulator. A continuación se pueden ver simulaciones para dos controladores PID a P. PID no es perfectamente estable porque no apliqué ningún algoritmo sofisticado para encontrar los valores correctos.

En ambas parcelas, la temperatura requerida se establece en 30 (azul). La temperatura actual indica la línea de lectura. El relé tiene dos estados ON y OFF. Cuando está habilitado, la temperatura baja en 1,5, cuando está deshabilitado, aumenta en 0,5.

Paso 5: Bus de mensajes

Bus de mensajes
Bus de mensajes
Bus de mensajes
Bus de mensajes
Bus de mensajes
Bus de mensajes
Bus de mensajes
Bus de mensajes

Los diferentes módulos de software deben comunicarse entre sí, con suerte no en ambos sentidos;)

Por ejemplo:

  • El módulo de estadísticas debe saber cuándo se enciende y apaga un relé en particular,
  • presionar un botón tiene que cambiar el contenido de la pantalla y también tiene que suspender los servicios que consumirían muchos ciclos de la CPU, por ejemplo, la lectura de temperatura del sensor,
  • después de un tiempo se debe renovar la lectura de temperatura,
  • etcétera….

Cada módulo está conectado a Message Bus y puede registrarse para eventos particulares y puede producir cualquier evento (primer diagrama).

En el segundo diagrama podemos ver el flujo de eventos al presionar el botón.

Algunos componentes tienen algunas tareas que deben ejecutarse periódicamente. Podríamos llamar a sus métodos correspondientes desde el bucle principal, ya que tenemos Message Bus solo es necesario propagar el evento correcto (tercer diagrama)

Paso 6: Libs

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

Recomendado: