Kazalo:

Termostat na osnovi Arduina: 6 korakov
Termostat na osnovi Arduina: 6 korakov

Video: Termostat na osnovi Arduina: 6 korakov

Video: Termostat na osnovi Arduina: 6 korakov
Video: Котика ударило током, 10 т. Вольт 2024, November
Anonim
Termostat na osnovi Arduina
Termostat na osnovi Arduina
Termostat na osnovi Arduina
Termostat na osnovi Arduina
Termostat na osnovi Arduina
Termostat na osnovi Arduina

Tokrat bomo zgradili termostat na osnovi Arduina, temperaturnega senzorja in releja. Najdete ga na githubu

1. korak: Konfiguracija

Konfiguracija
Konfiguracija

Celotna konfiguracija je shranjena v Config.h. Kode PIN lahko spremenite z upravljanjem relejev, temperature branja, pragov ali časov.

2. korak: Konfiguriranje relejev

Predpostavimo, da bi radi imeli 3 releje:

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

Najprej se morate prepričati, da PIN po vaši izbiri še ni sprejet. Vse zatiče lahko najdete v Config.h, opredeljeni so s spremenljivkami, ki se začnejo z DIG_PIN.

Urediti morate Config.h in konfigurirati kode PIN, pragove in količino relejev. Očitno nekatere lastnosti že obstajajo, zato jih morate le urediti.

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;

Zdaj moramo nastaviti releje in krmilnik, to se zgodi v 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

3. korak: Krmilnik histereze

Ta je izbran v zgornjem primeru in ima nekaj dodatnih konfiguracij:

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

RELAY_DELAY_AFTER_SWITCH_MS daje čakalni čas za preklop naslednjega releja. Predstavljajte si, da bi konfiguracija iz našega primera začela delovati v okolju 40 stopinj. To bi povzročilo, da bi hkrati omogočili vse tri releje. To bi lahko sčasoma privedlo do velike porabe energije - odvisno od tega, kaj nadzirate, na primer električni motor med zagonom porabi več energije. V našem primeru imajo stikalni releji naslednji tok: prvi rele gre, počakajte 5 minut, drugi se vklopi, počakajte 5 minut, tretji se vklopi.

RHC_RELAY_MIN_SWITCH_MS opredeljuje histerezo, to je najmanjša frekvenca za spreminjanje stanja določenega releja. Ko je vklopljen, bo ostal vklopljen vsaj še nekaj časa, ne da bi upošteval temperaturne spremembe. To je tiho uporabno, če upravljate elektromotorje, saj vsako stikalo negativno vpliva na čas v živo.

4. korak: PID krmilnik

PID krmilnik
PID krmilnik
PID krmilnik
PID krmilnik

To je napredna tema. Izvajanje takega krmilnika je preprosta naloga, iskanje pravih nastavitev amplitude je druga zgodba.

Če želite uporabljati krmilnik PID, morate spremeniti initRelayHysteresisController (…..) v initRelayPiDController (….) In zanj morate najti ustrezne nastavitve. Kot ponavadi jih najdete v Config.h

Uporabil sem preprost simulator v Javi, tako da je mogoče vizualizirati rezultate. Najdete ga v mapi: pidsimulator. Spodaj si lahko ogledate simulacije dveh krmilnikov PID in P. PID ni popolnoma stabilen, ker nisem uporabil nobenega sofisticiranega algoritma za iskanje pravih vrednosti.

Na obeh ploskvah je zahtevana temperatura nastavljena na 30 (modra). Trenutna temperatura označuje vrstico za branje. Rele ima dva stanja VKLOP in IZKLOP. Ko je omogočen, temperatura pade za 1,5, ko je onemogočen, se dvigne za 0,5.

5. korak: vodilo sporočil

Avtobus sporočil
Avtobus sporočil
Avtobus sporočil
Avtobus sporočil
Avtobus sporočil
Avtobus sporočil
Avtobus sporočil
Avtobus sporočil

Različni programski moduli morajo komunicirati med seboj, upam, da ne v obe smeri;)

Na primer:

  • statistični modul mora vedeti, kdaj se določen rele vklopi in izklopi,
  • s pritiskom na gumb morate spremeniti vsebino zaslona in ustaviti tudi storitve, ki bi porabile veliko ciklov procesorja, na primer odčitavanje temperature s senzorja,
  • čez nekaj časa je treba obnoviti odčitek temperature,
  • in tako naprej….

Vsak modul je povezan z vodilom sporočil in se lahko registrira za določene dogodke ter lahko proizvede vse dogodke (prvi diagram).

Na drugem diagramu lahko vidimo tok dogodkov ob pritisku na gumb.

Nekatere komponente imajo nekatere naloge, ki jih je treba občasno izvajati. Njihove ustrezne metode bi lahko poklicali iz glavne zanke, saj imamo Message Bus, potrebno je le razširjanje desnega dogodka (tretji diagram)

6. korak: Ustnice

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

Priporočena: