Sisukord:

Arduino baasil valmistatud termostaat: 6 sammu
Arduino baasil valmistatud termostaat: 6 sammu

Video: Arduino baasil valmistatud termostaat: 6 sammu

Video: Arduino baasil valmistatud termostaat: 6 sammu
Video: Самодельный гитарный аналоговый синтезатор на базе GR-300 - Часть 01 2024, Juuli
Anonim
Termostaat Arduino baasil
Termostaat Arduino baasil
Termostaat Arduino baasil
Termostaat Arduino baasil
Termostaat Arduino baasil
Termostaat Arduino baasil

Seekord ehitame termostaadi, mis põhineb Arduino, temperatuurianduril ja releel. Leiad githubist

Samm: seadistamine

Seadistamine
Seadistamine

Kogu konfiguratsioon on salvestatud Config.h. Saate muuta relee, lugemistemperatuuri, künniseid või ajastusi juhtivaid PIN -koode.

2. samm: releede seadistamine

Oletame, et sooviksime kolme releed:

  • ID: 0, PIN: 1, temperatuuri seadepunkt: 20
  • ID: 1, PIN: 10, temperatuuri seadepunkt: 30
  • ID: 2, PIN: 11, Temperatuuri seadeväärtus: 40

Kõigepealt peate veenduma, et teie valitud PIN -koodi pole juba võetud. Kõik tihvtid leiate Config.h -st, need on määratletud muutujatega, mis algavad tähega DIG_PIN.

Peate muutma Config.h -d ja konfigureerima PIN -koodid, künnised ja releede hulga. Ilmselt on mõned atribuudid juba olemas, seega peate neid lihtsalt muutma.

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

const staatiline uint8_t RELAYS_AMOUNT = 3;

const staatiline int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Nüüd peame seadistama releed ja kontrolleri, see juhtub saidil 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. samm: hüstereesikontroller

See on ülaltoodud näites valitud, sellel on vähe lisakonfiguratsioone:

const staatiline uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minuti staatiline uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS annab järgmise relee lülitamiseks ooteaja. Kujutage ette, et meie näite konfiguratsioon hakkaks töötama 40 -kraadises keskkonnas. Selle tulemusel lubatakse kõik kolm releed korraga. See võib lõppkokkuvõttes kaasa tuua suure energiatarbimise - olenevalt sellest, mida te kontrollite, tarbib näiteks elektrimootor käivitamise ajal rohkem energiat. Meie puhul on lülitusreleedel järgmine vool: esimene relee läheb, oodake 5 minutit, teine läheb edasi, oodake 5 minutit, kolmas läheb edasi.

RHC_RELAY_MIN_SWITCH_MS määratleb hüsterees, see on konkreetse relee oleku muutmise minimaalne sagedus. Kui see on sisse lülitatud, jääb see vähemalt sellel ajavahemikul sisselülitatuks, eirates temperatuurimuutusi. See on vaikne, kui kasutate elektrimootoreid, kuna igal lülitil on negatiivne mõju reaalajas toimuvale ajale.

4. samm: PID -kontroller

PID -kontroller
PID -kontroller
PID -kontroller
PID -kontroller

See on arenenud teema. Sellise kontrolleri rakendamine on lihtne ülesanne, õigete amplituudiseadete leidmine on teine lugu.

PID -kontrolleri kasutamiseks peate muutma initRelayHysteresisController (…..) väärtuseks initRelayPiDController (…) ja leidma selle jaoks õiged seaded. Nagu tavaliselt, leiate need Config.h -st

Olen rakendanud Java -s lihtsa simulaatori, nii et tulemusi oleks võimalik visualiseerida. Selle võib leida kaustast: pidsimulator. Allpool näete kahe kontrolleri PID a P simulatsioone. PID ei ole täiesti stabiilne, kuna ma ei rakendanud õigete väärtuste leidmiseks ühtegi keerukat algoritmi.

Mõlemal proovitükil on nõutav temperatuur 30 (sinine). Praegune temperatuur näitab lugemisjoont. Releel on kaks olekut ON ja OFF. Kui see on lubatud, langeb temperatuur 1,5 võrra, väljalülitamisel tõuseb see 0,5 võrra.

5. samm: sõnumibuss

Sõnumibuss
Sõnumibuss
Sõnumibuss
Sõnumibuss
Sõnumibuss
Sõnumibuss
Sõnumibuss
Sõnumibuss

Erinevad tarkvaramoodulid peavad omavahel suhtlema, loodetavasti mitte mõlemal viisil;)

Näiteks:

  • statistikamoodul peab teadma, millal konkreetne relee sisse ja välja lülitub,
  • nupu vajutamine peab muutma kuvasisu ja peatama ka teenused, mis kulutaksid palju protsessoritsükleid, näiteks temperatuuri lugemine andurilt,
  • mõne aja pärast tuleb temperatuurinäitu uuendada,
  • ja nii edasi….

Iga moodul on ühendatud sõnumibussiga ja saab registreeruda teatud sündmuste jaoks ning toota mis tahes sündmusi (esimene skeem).

Teisel skeemil näeme nupu vajutamisel sündmuste voogu.

Mõnel komponendil on teatud ülesanded, kui seda tuleb perioodiliselt täita. Võiksime kutsuda nende vastavaid meetodeid põhiahelast, kuna meil on sõnumibuss, on vaja ainult õiget sündmust levitada (kolmas skeem)

Samm 6: Libid

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

Soovitan: