Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
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 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
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
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