Përmbajtje:

Termostat Bazuar në Arduino: 6 hapa
Termostat Bazuar në Arduino: 6 hapa

Video: Termostat Bazuar në Arduino: 6 hapa

Video: Termostat Bazuar në Arduino: 6 hapa
Video: Lesson 47: Using K-Type MAX6675 as thermostat | Arduino Step By Step Course 2024, Nëntor
Anonim
Termostat Bazuar në Arduino
Termostat Bazuar në Arduino
Termostat Bazuar në Arduino
Termostat Bazuar në Arduino
Termostat Bazuar në Arduino
Termostat Bazuar në Arduino

Këtë herë ne do të ndërtojmë një Termostat të bazuar në Arduino, sensor të temperaturës dhe stafetë. Mund ta gjeni në github

Hapi 1: Konfigurimi

Konfigurimi
Konfigurimi

Konfigurimi i tërë ruhet në Config.h. Mund të ndryshoni stafetat kontrolluese, temperaturën e leximit, pragjet ose kohën.

Hapi 2: Konfigurimi i Relays

Le të supozojmë se do të donim të kishim 3 stafeta:

  • ID: 0, PIN: 1, Pika e caktuar e temperaturës: 20
  • ID: 1, PIN: 10, Pika e caktuar e temperaturës: 30
  • ID: 2, PIN: 11, Pika e caktuar e temperaturës: 40

Së pari ju duhet të siguroheni që PIN -i i zgjedhur nga ju nuk është marrë tashmë. Të gjitha kunjat mund të gjenden në Config.h, ato përcaktohen nga ndryshore duke filluar me DIG_PIN.

Duhet të redaktoni Config.h dhe të konfiguroni kodet PIN, pragjet dhe sasinë e stafetave. Shtë e qartë se disa prona tashmë ekzistojnë, kështu që ju vetëm duhet t'i modifikoni ato.

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

const statike uint8_t RELAYS_AMOUNT = 3;

const statike int16_t RELAY_TEMP_SET_POINT_0 = 20;

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

Tani duhet të konfigurojmë stafetë dhe kontrolluesin, kjo ndodh në 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

Hapi 3: Kontrolluesi i histerezës

Theshtë ai i zgjedhur në shembullin e mësipërm, ka pak konfigurime shtesë:

const statike uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 minuta konstante uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS jep kohë pritjeje për ndërrimin e stafetës tjetër. Imagjinoni që konfigurimi nga shembulli ynë do të fillonte të punonte në një mjedis 40 gradë. Kjo do të rezultonte në mundësimin e të tre stafetëve në të njëjtën kohë. Kjo përfundimisht mund të çojë në konsum të lartë të energjisë - në varësi të asaj që po kontrolloni, motori elektrik për shembull konsumon më shumë energji gjatë fillimit. Në rastin tonë, stafetat e ndërrimit kanë rrjedhën e mëposhtme: stafeta e parë shkon, prisni 5 minuta, e dyta vazhdon, prisni 5 minuta, e treta vazhdon.

RHC_RELAY_MIN_SWITCH_MS përcakton histerezën, është frekuenca minimale që stafetat e veçanta të ndryshojnë gjendjen e saj. Pasi të jetë ndezur, do të qëndrojë ndezur për së paku këtë periudhë kohe, duke injoruar ndryshimet e temperaturës. Kjo është e qetë e dobishme nëse kontrolloni motorët elektrikë, pasi secili ndërprerës ka ndikim negativ në kohën e funksionimit.

Hapi 4: Kontrolluesi PID

Kontrolluesi PID
Kontrolluesi PID
Kontrolluesi PID
Kontrolluesi PID

Kjo është temë e avancuar. Zbatimi i një kontrolluesi të tillë është një detyrë e thjeshtë, gjetja e cilësimeve të duhura të amplitudës është një histori e ndryshme.

Për të përdorur kontrolluesin PID duhet të ndryshoni initRelayHysteresisController (…..) në initRelayPiDController (….) Dhe duhet të gjeni cilësimet e duhura për të. Si zakonisht, do t'i gjeni në Config.h

Kam zbatuar imituesin e thjeshtë në Java, në mënyrë që të jetë e mundur të vizualizohen rezultatet. Mund të gjendet në dosjen: pidsimulator. Më poshtë mund të shihni simulimet për dy kontrollues PID a P. PID nuk është krejtësisht i qëndrueshëm sepse nuk kam aplikuar ndonjë algoritëm të sofistikuar për të gjetur vlerat e duhura.

Në të dy komplotet temperatura e kërkuar është vendosur në 30 (blu). Temperatura aktuale tregon vijën e leximit. Rele ka dy gjendje ON dhe OFF. Kur është e aktivizuar temperatura bie me 1.5, kur është e çaktivizuar rritet me 0.5.

Hapi 5: Autobusi i Mesazheve

Autobusi i mesazheve
Autobusi i mesazheve
Autobusi i mesazheve
Autobusi i mesazheve
Autobusi i mesazheve
Autobusi i mesazheve
Autobusi i mesazheve
Autobusi i mesazheve

Module të ndryshme softuerike duhet të komunikojnë me njëri -tjetrin, me shpresë jo në të dyja mënyrat;)

Për shembull:

  • moduli i statistikave duhet të dijë kur stafeta e veçantë ndizet dhe fiket,
  • shtypja e një butoni duhet të ndryshojë përmbajtjen e ekranit dhe gjithashtu duhet të pezullojë shërbimet që do të konsumonin shumë cikle të CPU -së, për shembull leximi i temperaturës nga sensori,
  • pas ca kohësh leximi i temperaturës duhet të rinovohet,
  • dhe kështu me radhë….

Çdo modul është i lidhur me Message Bus dhe mund të regjistrohet për ngjarje të veçanta, dhe mund të prodhojë çdo ngjarje (diagrami i parë).

Në diagramin e dytë ne mund të shohim rrjedhën e ngjarjes duke shtypur butonin.

Disa komponentë kanë disa detyra sesa duhet të ekzekutohen në mënyrë periodike. Ne mund t'i quajmë metodat e tyre përkatëse nga lak kryesor, pasi kemi Bus Bus është vetëm e nevojshme të përhapet ngjarja e duhur (diagrami i tretë)

Hapi 6: Libs

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

Recommended: