Taula de continguts:

Termòstat basat en Arduino: 6 passos
Termòstat basat en Arduino: 6 passos

Vídeo: Termòstat basat en Arduino: 6 passos

Vídeo: Termòstat basat en Arduino: 6 passos
Vídeo: Самодельный контроллер насосной станцией Arduino + FlProg @rovkit 2024, Juliol
Anonim
Termòstat basat en Arduino
Termòstat basat en Arduino
Termòstat basat en Arduino
Termòstat basat en Arduino
Termòstat basat en Arduino
Termòstat basat en Arduino

Aquesta vegada construirem un termòstat basat en Arduino, sensor de temperatura i relé. Podeu trobar-lo a github

Pas 1: configuració

Configuració
Configuració

La configuració completa s’emmagatzema a Config.h. Podeu canviar els PIN que controlen els relés, la temperatura de lectura, els llindars o els temps.

Pas 2: Configuració de relés

Suposem que ens agradaria tenir 3 relés:

  • Identificador: 0, PIN: 1, temperatura nominal: 20
  • Identificador: 1, PIN: 10, temperatura nominal: 30
  • ID: 2, PIN: 11, temperatura nominal: 40

Primer heu d'assegurar-vos que el PIN que trieu no estigui ja pres. Tots els pins es poden trobar a Config.h, estan definits per variables que comencen per DIG_PIN.

Heu d’editar Config.h i configurar PIN, llindars i quantitat de relés. Viouslybviament, algunes propietats ja existeixen, de manera que només cal que les editeu.

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;

Ara hem de configurar els relés i el controlador, això passa a 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

Pas 3: controlador de la histèresi

És l’escollit a l’exemple anterior, té poques configuracions addicionals:

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

RELAY_DELAY_AFTER_SWITCH_MS dóna temps d'espera per canviar el següent relé. Imagineu que la configuració del nostre exemple començaria a funcionar en un entorn de 40 graus. Això resultaria en habilitar els tres relés al mateix temps. Això podria acabar provocant un elevat consum d’energia: segons el que controleu, per exemple, el motor elèctric consumeix més energia durant l’arrencada. En el nostre cas, el canvi de relés té el següent flux: el primer relé va, espereu 5 minuts, el segon continua, espereu 5 minuts, el tercer continua.

RHC_RELAY_MIN_SWITCH_MS defineix la histèresi, és la freqüència mínima perquè un relé concret canviï el seu estat. Un cop activat, romandrà encès durant aquest període de temps com a mínim, ignorant els canvis de temperatura. Això és útil si controles els motors elèctrics, ja que cada interruptor té un impacte negatiu en el temps en directe.

Pas 4: controlador PID

Controlador PID
Controlador PID
Controlador PID
Controlador PID

Aquest és un tema avançat. Implementar aquest controlador és una tasca senzilla, trobar una configuració d’amplitud adequada és una història diferent.

Per utilitzar el controlador PID, heu de canviar initRelayHysteresisController (…..) a initRelayPiDController (…) i heu de trobar la configuració adequada per a ell. Com és habitual, els trobareu a Config.h

He implementat un simulador senzill a Java, de manera que és possible visualitzar els resultats. Es pot trobar a la carpeta: pidsimulator. A continuació podeu veure simulacions per a dos controladors PID, un P. PID no és perfectament estable perquè no he aplicat cap algorisme sofisticat per trobar valors adequats.

A les dues parcel·les, la temperatura necessària s'estableix en 30 (blava). La temperatura actual indica la línia de lectura. El relé té dos estats ON i OFF. Quan està habilitat, la temperatura baixa 1,5 i, quan està desactivada, augmenta 0,5.

Pas 5: Bus de missatges

Bus de missatges
Bus de missatges
Bus de missatges
Bus de missatges
Bus de missatges
Bus de missatges
Bus de missatges
Bus de missatges

Diferents mòduls de programari han de comunicar-se entre ells, esperem que no siguin les dues maneres;)

Per exemple:

  • el mòdul d'estadístiques ha de saber quan s'activa i s'apaga un relé concret,
  • prement un botó ha de canviar el contingut de la pantalla i també ha de suspendre els serveis que consumeixen molts cicles de CPU, per exemple, la lectura de temperatura del sensor,
  • després d'un temps s'ha de renovar la lectura de la temperatura,
  • etcètera….

Tots els mòduls estan connectats al Message Bus i es poden registrar per a esdeveniments concrets i poden produir qualsevol esdeveniment (primer diagrama).

Al segon diagrama podem veure el flux d'esdeveniments prement el botó.

Alguns components tenen algunes tasques de les que cal executar periòdicament. Podríem trucar als seus mètodes corresponents des del bucle principal, ja que tenim Message Bus només és necessari propagar l’esdeveniment correcte (tercer diagrama)

Pas 6: Libs

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

Recomanat: