Բովանդակություն:

Թերմոստատ Arduino- ի հիման վրա. 6 քայլ
Թերմոստատ Arduino- ի հիման վրա. 6 քայլ

Video: Թերմոստատ Arduino- ի հիման վրա. 6 քայլ

Video: Թերմոստատ Arduino- ի հիման վրա. 6 քայլ
Video: Ինչպես օգտագործել MAX6675 ջերմապլաստ k տիպը Arduino- ի հետ 2024, Նոյեմբեր
Anonim
Թերմոստատ Arduino- ի հիման վրա
Թերմոստատ Arduino- ի հիման վրա
Թերմոստատ Arduino- ի հիման վրա
Թերմոստատ Arduino- ի հիման վրա
Թերմոստատ Arduino- ի հիման վրա
Թերմոստատ Arduino- ի հիման վրա

Այս անգամ մենք պատրաստվում ենք կառուցել Թերմոստատ ՝ հիմնված Arduino- ի, ջերմաստիճանի տվիչի և ռելեի վրա: Դուք կարող եք գտնել github- ում

Քայլ 1: Կազմաձևում

Կազմաձևում
Կազմաձևում

Ամբողջ կոնֆիգուրացիան պահվում է Config.h- ում: Դուք կարող եք փոխել PEL կոդերը, որոնք վերահսկում են ռելեներ, ընթերցման ջերմաստիճանը, շեմերը կամ ժամկետները:

Քայլ 2: Ռելեների կազմաձևում

Ենթադրենք, որ մենք կցանկանայինք ունենալ 3 ռելե:

  • ID ՝ 0, PIN ՝ 1, ջերմաստիճանի սահմանման կետ ՝ 20
  • ID ՝ 1, PIN ՝ 10, ջերմաստիճանի սահմանման կետ ՝ 30
  • ID ՝ 2, PIN ՝ 11, setերմաստիճանի սահմանման կետ ՝ 40

Սկզբում դուք պետք է համոզվեք, որ ձեր ընտրած PIN- ը արդեն ընդունված չէ: Բոլոր կապում կարելի է գտնել Config.h- ում, դրանք սահմանվում են DIG_PIN- ով սկսվող փոփոխականներով:

Դուք պետք է խմբագրեք Config.h- ը և կազմաձևեք PIN- ները, շեմերը և ռելեների քանակը: Ակնհայտ է, որ որոշ հատկություններ արդեն գոյություն ունեն, այնպես որ դուք պարզապես պետք է դրանք խմբագրեք:

const ստատիկ uint8_t DIG_PIN_RELAY_0 = 1; const ստատիկ uint8_t DIG_PIN_RELAY_1 = 10; const ստատիկ uint8_t DIG_PIN_RELAY_2 = 11;

const static uint8_t RELAYS_AMOUNT = 3;

const ստատիկ int16_t RELAY_TEMP_SET_POINT_0 = 20;

const ստատիկ int16_t RELAY_TEMP_SET_POINT_1 = 30; const ստատիկ int16_t RELAY_TEMP_SET_POINT_2 = 40;

Այժմ մենք պետք է կարգավորենք ռելեներ և վերահսկիչ, դա տեղի է ունենում 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: Հիստերեզի վերահսկիչ

Այն ընտրված է վերը նշված օրինակում, այն ունի մի քանի լրացուցիչ կազմաձևեր.

const static uint32_t RELAY_DELAY_AFTER_SWITCH_MS = 300000; // 5 րոպե </ b> ստատիկ uint32_t RHC_RELAY_MIN_SWITCH_MS = 3600000;

RELAY_DELAY_AFTER_SWITCH_MS- ը տալիս է սպասման ժամանակ հաջորդ ռելեի անցման համար: Պատկերացրեք, որ մեր օրինակից կազմաձևումը սկսի աշխատել 40 աստիճանի միջավայրում: Սա կհանգեցնի միաժամանակ երեք ռելեների միացմանը: Սա, ի վերջո, կարող է հանգեցնել էներգիայի բարձր սպառման. Կախված այն բանից, թե ինչ եք վերահսկում, օրինակ ՝ էլեկտրական շարժիչը ավելի շատ էներգիա է սպառում գործարկման ընթացքում: Մեր դեպքում անջատիչ ռելեներ ունի հետևյալ հոսքը. Առաջին ռելեն անցնում է, սպասեք 5 րոպե, երկրորդը շարունակվում է, սպասվում է 5 րոպե, երրորդը շարունակվում է:

RHC_RELAY_MIN_SWITCH_MS- ը սահմանում է հիստերեզը, դա որոշակի ռելեի նվազագույն հաճախականությունն է ՝ փոխելու իր վիճակը: Միացնելուց հետո այն կմնա առնվազն այս ժամանակահատվածում ՝ անտեսելով ջերմաստիճանի փոփոխությունները: Սա հանգիստ է, եթե վերահսկում եք էլեկտրական շարժիչները, քանի որ յուրաքանչյուր անջատիչ բացասաբար է անդրադառնում կենդանի ժամանակի վրա:

Քայլ 4: PID վերահսկիչ

PID վերահսկիչ
PID վերահսկիչ
PID վերահսկիչ
PID վերահսկիչ

Սա առաջադեմ թեմա է: Նման վերահսկիչի ներդրումը պարզ խնդիր է, իսկ ամպլիտուդայի ճիշտ պարամետրերը գտնելը այլ պատմություն է:

PID վերահսկիչ օգտագործելու համար դուք պետք է փոխեք initRelayHysteresisController (…..) - ը initRelayPiDController (…) և դրա համար անհրաժեշտ է գտնել համապատասխան կարգավորումներ: Ինչպես միշտ, դրանք կգտնեք Config.h- ում

Ես պարզ սիմուլյատոր եմ ներդրել Java- ում, որպեսզի հնարավոր լինի պատկերացնել արդյունքները: Այն կարելի է գտնել թղթապանակում ՝ pidsimulator: Ստորև կարող եք տեսնել երկու կարգավորիչների համար մոդելավորումներ PID a P. PID- ը կատարյալ կայուն չէ, քանի որ ես չեմ կիրառել որևէ բարդ ալգորիթմ ՝ ճիշտ արժեքներ գտնելու համար:

Երկու հողամասերում պահանջվող ջերմաստիճանը սահմանվում է 30 (կապույտ): Ընթացիկ ջերմաստիճանը ցույց է տալիս ընթերցման տողը: Ռելեին ունի երկու վիճակ ON և OFF: Երբ այն միացված է, ջերմաստիճանը նվազում է 1.5 -ով, երբ անջատված է, այն բարձրանում է 0.5 -ով:

Քայլ 5. Հաղորդագրությունների ավտոբուս

Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս
Հաղորդագրությունների ավտոբուս

Softwareրագրային ապահովման տարբեր մոդուլներ պետք է շփվեն միմյանց հետ, հուսով եմ ՝ ոչ երկու եղանակներով;)

Օրինակ:

  • վիճակագրության մոդուլը պետք է իմանա, երբ որոշակի ռելեդը միանում և անջատվում է,
  • կոճակը սեղմելը պետք է փոխի ցուցադրման բովանդակությունը, ինչպես նաև պետք է դադարեցնի այն ծառայությունները, որոնք կպահանջեն պրոցեսորի բազմաթիվ ցիկլեր, օրինակ ՝ ջերմաստիճանից կարդալ սենսորից,
  • որոշ ժամանակ անց ջերմաստիճանի ցուցանիշը պետք է նորացվի,
  • և այլն…

Յուրաքանչյուր մոդուլ կապված է Message Bus- ի հետ և կարող է գրանցվել որոշակի իրադարձությունների համար, և կարող է պատրաստել ցանկացած իրադարձություն (առաջին դիագրամ):

Երկրորդ դիագրամում մենք կարող ենք տեսնել իրադարձությունների հոսքը `սեղմելով կոճակը:

Որոշ բաղադրիչներ ունեն որոշակի առաջադրանքներ, քան անհրաժեշտ է պարբերաբար կատարել: Մենք կարող ենք նրանց համապատասխան մեթոդները անվանել հիմնական օղակից, քանի որ մենք ունենք Message Bus, անհրաժեշտ է միայն ճիշտ իրադարձության տարածումը (երրորդ դիագրամ)

Քայլ 6: Libs

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

Խորհուրդ ենք տալիս: