Sommario:

Termostato basato su Arduino: 6 passaggi
Termostato basato su Arduino: 6 passaggi

Video: Termostato basato su Arduino: 6 passaggi

Video: Termostato basato su Arduino: 6 passaggi
Video: Programmare Arduino, Spiegato Facile per Tutti 2024, Luglio
Anonim
Termostato basato su Arduino
Termostato basato su Arduino
Termostato basato su Arduino
Termostato basato su Arduino
Termostato basato su Arduino
Termostato basato su Arduino

Questa volta costruiremo un termostato basato su Arduino, sensore di temperatura e relè. Puoi trovare su github

Passaggio 1: configurazione

Configurazione
Configurazione

L'intera configurazione è memorizzata in Config.h. È possibile modificare i PIN di controllo relè, lettura temperatura, soglie o temporizzazioni.

Passaggio 2: configurazione dei relè

Supponiamo di volere 3 relè:

  • ID: 0, PIN: 1, setpoint di temperatura: 20
  • ID:1, PIN: 10, Setpoint temperatura: 30
  • ID: 2, PIN: 11, Setpoint temperatura: 40

Per prima cosa devi assicurarti che il PIN di tua scelta non sia già stato preso. Tutti i pin si trovano in Config.h, sono definiti da variabili che iniziano con DIG_PIN.

Devi modificare Config.he configurare PIN, soglie e quantità di relè. Ovviamente alcune proprietà esistono già, quindi devi solo modificarle.

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 statico int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Ora dobbiamo impostare relè e controller, questo accade in 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

Passaggio 3: controllore di isteresi

È quello scelto nell'esempio sopra, ha poche configurazioni aggiuntive:

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minuticonst static uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS fornisce il tempo di attesa per la commutazione del relè successivo. Immagina che la configurazione del nostro esempio inizi a funzionare in un ambiente di 40 gradi. Ciò comporterebbe l'abilitazione di tutti e tre i relè contemporaneamente. Ciò potrebbe eventualmente portare a un elevato consumo di energia: a seconda di cosa si sta controllando, il motore elettrico, ad esempio, consuma più energia durante l'avvio. Nel nostro caso la commutazione dei relè ha il seguente flusso: il primo relè si accende, aspetta 5 minuti, il secondo si accende, aspetta 5 minuti, il terzo si accende.

RHC_RELAY_MIN_SWITCH_MS definisce l'isteresi, è la frequenza minima per un particolare relè per cambiare il suo stato. Una volta acceso, rimarrà acceso almeno per questo periodo di tempo, ignorando i cambiamenti di temperatura. Questo è molto utile se stai controllando i motori elettrici, poiché ogni interruttore ha un impatto negativo sul tempo di vita.

Passaggio 4: controller PID

Controllore PID
Controllore PID
Controllore PID
Controllore PID

Questo è un argomento avanzato. L'implementazione di tale controller è un compito semplice, trovare le giuste impostazioni di ampiezza è una storia diversa.

Per utilizzare il controller PID devi cambiare initRelayHysteresisController(…..) in initRelayPiDController(….) e devi trovare le impostazioni giuste per questo. Come al solito li troverai in Config.h

Ho implementato un semplice simulatore in Java, in modo che sia possibile visualizzare i risultati. Si trova nella cartella: pidsimulator. Di seguito puoi vedere le simulazioni per due controller PID e P. Il PID non è perfettamente stabile perché non ho applicato alcun algoritmo sofisticato per trovare i valori corretti.

Su entrambi i grafici la temperatura richiesta è impostata su 30 (blu). La temperatura attuale indica la riga di lettura. Il relè ha due stati ON e OFF. Quando è abilitato la temperatura scende di 1,5, quando è disabilitato aumenta di 0,5.

Passaggio 5: bus messaggi

Autobus dei messaggi
Autobus dei messaggi
Autobus dei messaggi
Autobus dei messaggi
Autobus dei messaggi
Autobus dei messaggi
Autobus dei messaggi
Autobus dei messaggi

Diversi moduli software devono comunicare tra loro, si spera non in entrambi i modi;)

Per esempio:

  • il modulo statistiche deve sapere quando un particolare relè si accende e si spegne,
  • la pressione di un pulsante deve cambiare il contenuto del display e deve anche sospendere i servizi che consumerebbero molti cicli della CPU, ad esempio la lettura della temperatura dal sensore,
  • dopo un po' di tempo occorre rinnovare la lettura della temperatura,
  • e così via….

Ogni modulo è connesso al Message Bus e può registrarsi per eventi particolari, e può produrre qualsiasi evento (primo diagramma).

Sul secondo diagramma possiamo vedere il flusso degli eventi alla pressione del pulsante.

Alcuni componenti hanno alcune attività che devono essere eseguite periodicamente. Potremmo chiamare i loro metodi corrispondenti dal ciclo principale, poiché abbiamo Message Bus è solo necessario propagare l'evento giusto (terzo diagramma)

Passaggio 6: Libs

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

Consigliato: