Orodha ya maudhui:

Thermostat Kulingana na Arduino: 6 Hatua
Thermostat Kulingana na Arduino: 6 Hatua

Video: Thermostat Kulingana na Arduino: 6 Hatua

Video: Thermostat Kulingana na Arduino: 6 Hatua
Video: How to use W1209 Temperature relay controller and program the thermostat 2024, Julai
Anonim
Thermostat Kulingana na Arduino
Thermostat Kulingana na Arduino
Thermostat Kulingana na Arduino
Thermostat Kulingana na Arduino
Thermostat Kulingana na Arduino
Thermostat Kulingana na Arduino

Wakati huu tutaunda Thermostat kulingana na Arduino, sensorer ya joto na relay. Unaweza kupata kwenye github

Hatua ya 1: Usanidi

Usanidi
Usanidi

Usanidi mzima umehifadhiwa katika Config.h. Unaweza kubadilisha PIN kudhibiti kudhibiti relays, kusoma joto, vizingiti au nyakati.

Hatua ya 2: Kusanidi Upelekaji

Wacha tufikirie kwamba tungependa kuwa na relays 3:

  • Kitambulisho: 0, PIN: 1, Kiwango cha kuweka joto: 20
  • Kitambulisho: 1, PIN: 10, Kiwango cha kuweka joto: 30
  • Kitambulisho: 2, PIN: 11, Kiwango cha kuweka joto: 40

Kwanza lazima uhakikishe kuwa PIN ya chaguo lako haijachukuliwa tayari. Pini zote zinaweza kupatikana katika Config.h, zinafafanuliwa na anuwai zinazoanza na DIG_PIN.

Lazima uhariri Config.h na usanidi PIN, vizingiti na kiwango cha relays. Kwa wazi mali zingine tayari zipo, kwa hivyo lazima uzibadilishe tu.

const static uint8_t DIG_PIN_RELAY_0 = 1; const static uint8_t DIG_PIN_RELAY_1 = 10; const tuli uint8_t DIG_PIN_RELAY_2 = 11;

const tuli uint8_t RELAYS_AMOUNT = 3;

st tuli int16_t RELAY_TEMP_SET_POINT_0 = 20;

st tuli int16_t RELAY_TEMP_SET_POINT_1 = 30; st tuli int16_t RELAY_TEMP_SET_POINT_2 = 40;

Sasa tunalazimika kusanidi relays na mtawala, hii hufanyika katika RelayDriver.cpp

initRelayHysteresisController (0, DIG_PIN_RELAY_0, RELAY_TEMP_SET_POINT_0); initRelayHysteresisController (1, DIG_PIN_RELAY_1, RELAY_TEMP_SET_POINT_1); initRelayHysteresis Mdhibiti (2, DIG_PIN_RELAY_2, RELAY_TEMP_SET_POINT_2);

xxx

Hatua ya 3: Mdhibiti wa Hysteresis

Ni ile iliyochaguliwa kwa mfano hapo juu, ina mipangilio michache ya ziada:

const tuli uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // Dakika 5 tuli tuli u3232t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS inatoa wakati wa kusubiri kwa kubadili relay inayofuata. Fikiria kuwa usanidi kutoka kwa mfano wetu ungeanza kufanya kazi katika mazingira ya digrii 40. Hii itasababisha kuwezeshwa kwa relays zote tatu kwa wakati mmoja. Hii inaweza kusababisha matumizi makubwa ya nguvu - kulingana na kile unachodhibiti, injini ya umeme kwa mfano hutumia nguvu zaidi wakati wa kuanza. Kwa upande wetu, kubadili relay kuna mtiririko ufuatao: relay ya kwanza huenda, subiri dakika 5, pili inaendelea, subiri dakika 5, tatu inaendelea.

RHC_RELAY_MIN_SWITCH_MS inafafanua hysteresis, ni kiwango cha chini cha relay fulani kubadilisha hali yake. Mara tu ikiwasha, itabaki kwa angalau kipindi hiki cha wakati, ikipuuza mabadiliko ya joto. Hii ni utulivu mzuri na unadhibiti motors za umeme, kwani kila swichi ina athari mbaya kwa wakati wa moja kwa moja.

Hatua ya 4: Mdhibiti wa PID

Mdhibiti wa PID
Mdhibiti wa PID
Mdhibiti wa PID
Mdhibiti wa PID

Hii ni mada ya hali ya juu. Utekelezaji wa mtawala kama huo ni kazi rahisi, kutafuta mipangilio ya amplitude sahihi ni hadithi tofauti.

Ili kutumia mtawala wa PID lazima ubadilishe initRelayHysteresisController (…..) kuwa initRelayPiDController (….) Na unahitaji kupata mipangilio sahihi ya hiyo. Kama kawaida utazipata kwenye Config.h

Nimetekeleza simulator rahisi katika Java, ili iweze kuibua matokeo. Chini inaweza kupatikana kwenye folda: pidsimulator. Ka chini unaweza kuona masimulizi kwa watawala wawili PID P. PID sio sawa kabisa kwa sababu sikutumia algorithm yoyote ya hali ya juu kupata maadili sahihi.

Kwenye viwanja vyote joto linahitajika hadi 30 (bluu). Joto la sasa linaonyesha mstari wa kusoma. Relay ina majimbo mawili ON and OFF. Inapowezeshwa joto hupungua kwa 1.5, wakati imelemazwa huongezeka kwa 0.5.

Hatua ya 5: Ujumbe wa basi

Basi la Ujumbe
Basi la Ujumbe
Basi la Ujumbe
Basi la Ujumbe
Basi la Ujumbe
Basi la Ujumbe
Basi la Ujumbe
Basi la Ujumbe

Moduli tofauti za programu zinapaswa kuwasiliana na kila mmoja, kwa matumaini sio njia zote mbili;)

Kwa mfano:

  • moduli ya takwimu inapaswa kujua wakati relay fulani inaendelea na kuzima,
  • kubonyeza kitufe lazima ibadilishe yaliyomo kwenye onyesho na inapaswa pia kusimamisha huduma ambazo zitatumia mizunguko mingi ya CPU, kwa mfano kusoma joto kutoka kwa sensa,
  • baada ya kusoma kwa muda wa joto inapaswa kufanywa upya,
  • Nakadhalika….

Kila moduli imeunganishwa na Ujumbe wa Basi na inaweza kujiandikisha kwa hafla fulani, na inaweza kutoa hafla yoyote (mchoro wa kwanza).

Kwenye mchoro wa pili tunaweza kuona mtiririko wa hafla kwenye kitufe cha kubonyeza.

Vipengele vingine vina majukumu kadhaa kuliko mahitaji ya kutekelezwa mara kwa mara. Tunaweza kupiga njia zao zinazolingana kutoka kitanzi kuu, kwa kuwa tuna Ujumbe wa Basi ni muhimu tu kueneza tukio la kulia (mchoro wa tatu)

Hatua ya 6: Libs

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

Ilipendekeza: