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

Autostat ՝ հեռակառավարման ջերմաստիճան ՝ 8 քայլ (նկարներով)
Autostat ՝ հեռակառավարման ջերմաստիճան ՝ 8 քայլ (նկարներով)

Video: Autostat ՝ հեռակառավարման ջերմաստիճան ՝ 8 քայլ (նկարներով)

Video: Autostat ՝ հեռակառավարման ջերմաստիճան ՝ 8 քայլ (նկարներով)
Video: Не работает AUTOASTAT? Где проверять авто с аукциона? 2024, Նոյեմբեր
Anonim
Autostat ՝ հեռակառավարման ջերմաստիճան
Autostat ՝ հեռակառավարման ջերմաստիճան

Հավանաբար հարցն այն է, թե «ինչու՞ եք մեկ այլ հեռակառավարվող ջերմաստիճան պատրաստում»:

Այդ հարցի պատասխանը հետևյալն է. Ես ստիպված էի, և շուկայի խելացի թերմոստատները չափազանց թանկ են:

Արդար նախազգուշացում, սա «հայեցակարգի ապացույց» կառուցում է, որը կպահանջի մի քանի լրացուցիչ ելք `իրականում ձեր ջերմաչափը կառավարելու համար, սակայն միջուկը տեղում է և կարող է փոփոխվել` կախված ձեր հատուկ հանգամանքներից: Բացի այդ, սա դեռ ընթացքի մեջ է, այնպես որ ակնկալեք մի քանի թարմացում և փոփոխություն (հատկապես Matlab ծածկագրին)

Սկսելու համար ես ուզում եմ նախազգուշացնել ձեզ. Սա պահանջում է երեք ծրագիր (դրանցից մեկը բավականին թանկ է), բավականին շատ գրադարաններ և ծրագրերի աջակցության փաթեթներ, և դուք պետք է ունենաք, որպեսզի բոլորը խոսեն միմյանց հետ: Դա գլխացավ է: Այդ նախազգուշացումն այլևս թույլ չի տալիս սկսել նյութերը:

Սարքավորումներ

  • արդուինո նանո
  • arduino uno (կամ մեկ այլ նանո, ես պարզապես օգտագործել եմ uno- ն, քանի որ մոտս մեկ պառկած էր)
  • ցատկող մալուխների տեսականի, որոշ արու/արու և երկու հավաքածու `երեք միացած արական/իգական թռիչքների
  • 433 ՄՀց ռադիոհաճախականության (ՌԴ) ընդունիչ, ես օգտագործել եմ MX-05V
  • 433 ՄՀց ՌԴ հաղորդիչ, ես օգտագործել եմ MX-FS-03V
  • DHT11 բարձր ճշգրտության ջերմաչափ և խոնավության տվիչ (այն, ինչ ես օգտագործել եմ, տեղադրված է երեք ճյուղի չիպի վրա ՝ արդեն տեղադրված անհրաժեշտ դիմադրիչներով)
  • տախտակ (եթե չեք ցանկանում այս ամենը միասին զոդել)
  • հեռախոս GPS- ով (այս դեպքում iPhone 8, բայց ես օգտագործել եմ նաև Galaxy S8)
  • 3D տպագիր տարա (իրականում անհրաժեշտ չէ, ցանկացած տարա կաշխատի կամ ընդհանրապես չկա)

Ծրագրային ապահովում

  • Matlab MathWorks- ից (ես ունեմ 2018a հրատարակություն, բայց ես օգտագործել եմ նաև 2017a-b հրատարակությունները)
  • Ձեր հեռախոսում տեղադրված Matlab բջջային հեռախոս
  • arduino աջակցության փաթեթ Matlab- ի համար
  • iPhone սենսորային փաթեթ Matlab- ի համար
  • arduino IDE
  • RadioHead- ի աջակցման փաթեթներն ու arduino IDE գրադարանները
  • DHT11 գրադարան arduino IDE- ի համար
  • python 3.7 (համոզվեք, որ pyserial գրադարանը կամ սերիական գրադարանը տեղադրված է, որը պետք է լինի 3.4 կամ ավելի նոր տարբերակի համար)

Քայլ 1: Ամեն ինչ միասին դնել

Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը

Նախևառաջ ես կառաջարկեի ձեզ կատարել մի քանի arduino ձեռնարկներ, որոնք վերաբերում են ՌԴ հաղորդիչներին ՝ միայն համոզվելու համար, որ ձեր մասերն աշխատում են, և լարերը ճիշտ են: Կան բազմաթիվ օրինակներ ՝ ներառված ծածկագրով (մեզանից դուրս գտնվողների համար, ովքեր քիչ բան չգիտեն C և C ++):

Հետևեք ստորև բերված էլեկտրագծերի գծապատկերներին `արդուինոյի և տվիչների հավաքման համար: Արդուինոները միացնելիս պետք է հիշել մի բան, որ իմ օգտագործած տվյալների պորտերը ոչ թե պահանջվում են, այլ խորհուրդ են տրվում:

ԵԹԵ որոշեք փոխել ձեր օգտագործած տվյալների պորտերը, ապա պարզապես անհրաժեշտ է սահմանել ձեր ծածկագրի կապերը: Անձամբ ես կարծում եմ, որ ավելի հեշտ է մնալ կանխադրված նավահանգիստներին, որոնք arduino գրադարանները ճանաչում են:

Եվ պարզ լինելու համար, nano- ն և uno- ն փոխանակելի են, բայց ես օգտագործել եմ nano- ն ծրագրի հաղորդիչ կողմի համար `ջերմաստիճանի մոնիտորի չափը նվազեցնելու համար:

Կողմնակի նշում. Նանոն պահող կանաչ հակածառը 3D տպագրությամբ տարան է:

Քայլ 2: Ստացող

Ընդունիչ
Ընդունիչ

Քայլ 3: Հաղորդիչ

Հաղորդիչ
Հաղորդիչ

Քայլ 4: Կոդ

Էլեկտրագծերի ավարտից հետո դուք պետք է գործարկեք բոլոր ծրագրերը և տեղադրեք գրադարանները (եթե դեռ չեք արել), ես պարզապես ենթադրում եմ, որ ունեք, դուք պետք է գործարկեք Matlab- ը և գործարկեք iPhone- ի աջակցության փաթեթը: Այս պահին և՛ ձեր հեռախոսը, և՛ Matlab- ը պետք է լինեն միևնույն wifi ցանցում:

Matlab- ի հրամանի պատուհանում գրեք.

միակցիչը միացված է

Սա ձեզ հուշում է մուտքագրել հնգանիշ գաղտնաբառ, որը կօգտագործվի ձեր iPhone- ում միանալու համար: Համոզվեք, որ հիշում եք գաղտնաբառը: Երբ մուտքագրեք գաղտնաբառը, Matlab- ը կցուցադրի որոշ տեղեկություններ, ներառյալ ձեր IP հասցեն: Օգտագործեք սա հաջորդ քայլին, որը գալիս է Matlab բջջայինի «Սկսել սենսորներով» օգնության ցանկի ցուցումներից:

  • Հետևեք այս քայլերին ՝ սենսորային տվյալներ ուղարկելու համար MathWorks Cloud կամ համակարգիչ.
  • Եթե դուք սենսորների տվյալներ եք ուղարկում համակարգիչ և եթե դրանք արդեն տեղադրված չեն, ներբեռնեք և տեղադրեք MATLAB- ի աջակցման փաթեթը Apple iOS սենսորների համար MATLAB- ում:
  • Միացրեք MATLAB Mobile- ը MathWorks Cloud- ին կամ համակարգչին `օգտագործելով Կարգավորումներ:
  • Ստեղծեք mobiledev օբյեկտ MATLAB- ում (ձեր համակարգչի վրա), օրինակ ՝ >> m = mobiledev
  • Ընտրեք մեկ կամ մի քանի տվիչ և կտտացրեք Սկսել:

Հետևեք այս քայլերին ՝ ձեր սարքի վրա սենսորային տվյալները գրանցելու համար.

  • Սենսորների էկրանին ընտրեք այն տվիչները, որոնցից ցանկանում եք տվյալներ հավաքել:
  • Ընտրեք Մատյան:
  • Հպեք «Սկսել» կոճակին:
  • Երբ ավարտեք տվյալների հավաքումը, կտտացրեք «Stop» կոճակին:
  • Թռուցիկ պատուհանում մուտքագրեք սենսորների մատյան անունը:
  • Անհրաժեշտության դեպքում կրկնել 1-5-րդ քայլերը:

Այս բաժինը կվերադառնա 4 -րդ մասին, ուստի դեռ կարիք չկա իրականում սկսել տվյալների հավաքագրումը: Պարզապես պահեք ձեր հեռախոսը ձեռքի տակ և պատրաստեք Matlab բջջային հեռախոսը:

Այժմ դուք պետք է ձեր համակարգչում ինչ -որ տեղ թղթապանակ ստեղծեք ՝ Matlab կոդի ֆայլերը տեղավորելու համար: Դուք կունենաք չորս առանձին ֆայլ, երկուսը `ֆոնային գործառույթների համար (.m ֆայլեր) և մեկ Matlab կոդի ֆայլ GUI- ի համար (.mlapp),.

Սկզբում ձեր տան օդի զանգվածային հաշվարկն է (սա Matlab- ին թույլ է տալիս իմանալ, թե որքան ժամանակ է պահանջվում ձեր տունը տաքացնելու/սառեցնելու համար)

գործառույթ [զանգված] = CalcMass (T_ins, P_out, Chng_dir)

runCalc = 0; Tmp_start = T_ins; time_start = ժամացույց; time_end = 0 մինչ runCalc <= 1 եթե T_ins == (Tmp_start+(7*Chng_dir)) time_end = ժամացույց; PwrCntr = 0; runCalc = 0; այլ PwrCntr = P_out; runCalc = runCalc+0.1 ավարտի ավարտի ժամանակը_դիագն = time_end-time_start զանգված =

Եվ երկրորդը.

գործառույթ [ժամանակային նշաններ, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, speed, T_pref, mass)

AutoStat = 1; i = 1; իսկ AutoStat == 1 time_start = ժամացույց; m = mobiledev; t = csvread ('values.csv', 0, 1); t = t (i); timestamps = [0, 0, 0, 0, 0, 0]; pwr_usage = 0; i = i+1; ֆորմատ longg; Լայնության և %longintude a_hav = (sind ((m. Latitude-Lat_in)./ 2)) հիման վրա հեռավորությունը հաշվարկելու %haversine բանաձև.^2+cosd (lat_in).*cosd (m. լայնություն).*(sind ((մ. Երկարություն-Միայնություն):/2)):^2; c_hav = 2.*atan2d (sqrt (a_hav), sqrt (1-a_hav)); d_hav = 6371.*c_hav; Dist = d_hav.*1000; %-ը գնահատում է ժամանակը վերադարձնելու ժամանակը_rtn = (Dist-r_pref)./ արագություն; %-ը հաշվարկում է անհրաժեշտ թերմոստատի կարգավորումը `ելնելով տան օդորակիչի և օդային զանգվածի անջատումից: calcTmp_set = ((--1.*P_out.*time_rtn)./ (զանգված.*(1.005)))+T_pref; %-ը որոշում է, թե արդյոք անհրաժեշտ է փոխել ընթացիկ ջերմաստիճանի կարգավորումը, եթե կլոր (calcTmp_set) ~ = կլոր (t) ժամանակը ACon = ժամացույց; PwrCntr = P_out; timeACon = timeACon + ժամացույց-ժամանակ_սկսում; արժեքը = P_out*timeACon*տոկոսադրույքը; else PwrCntr = 0 վերջի ժամկետային նշաններ (վերջ +1, [1: 6]) = ժամացույց; pwr_usage (վերջ+1, 1) = PwrCntr; դադար (5) վերջի վերջ

Այս երկու ֆայլերն էլ Matlab գործառույթներ են: Դուք կարիք չեք ունենա մուտք գործել դրանք, եթե չեք նախատեսում դրանք փոփոխել հատուկ կարիքների համար, քանի որ դրանք կանչելու եք GUI- ից: Երկու ֆայլերն առանձին պահեք, առաջինը ՝ CalcMass.m և երկրորդը ՝ dist_cntrl.m, դրանք կլինեն այն անունները, որոնք GUI ծածկագիրը օգտագործում է գործառույթները կանչելու համար, ուստի, եթե չեք ցանկանում խմբագրել ներքևի մնացած ծածկագիրը, անվանման պայմանագիրը:

Նախքան GUI կոդի մեջ մտնելը, դուք պետք է բացեք ծրագրի դիզայները Matlab- ի համար, որը կարող եք բացել ՝ նավարկելով Matlab- ի ընտրացանկում կամ իմ նախընտրած մեթոդով, որը մուտքագրում է հետևյալ հրամանը Matlab հրամանի պատուհանում.

ծրագրավորող

Հավելվածի դիզայները բացվելուց հետո բացեք ծրագրի նոր ֆայլ (.mlapp) և ջնջեք բոլոր կանխադրված ծածկագիրը կոդի պատուհանից: Այնուհետև այն փոխարինեք հետևյալով և կտտացրեք գործարկման կոճակին:

classdef Control_1 <matlab.apps. AppBase % Հատկություններ, որոնք համապատասխանում են հավելվածի բաղադրիչների հատկություններին (Access = public) UIFigure matlab.ui. Figure TabGroup matlab.ui.container. TabGroup SetupTab matlab.ui.container. Tab RunDiagnosticButton matlab.ui.control կոճակը EnergyEfficiencyRatingEditFieldLabel matlab.ui.control. Label EnergyEfficiencyRatingEditField matlab.ui.control. NumericEditField PowerOutputRatingEditFieldLabel matlab.ui.control. Label PowerOutputRatingEditField matlab.ui.control. NumericEditField AvgLocalSpeedEditFieldLabel matlab.ui.control. Label AvgLocalSpeedEditField matlab.ui.control. NumericEditField DesiredDistancefromHouseEditFieldLabel matlab.ui.control. Label DDFH matlab.ui.control. NumericEditField TemperatureDirectionSwitchLabel matlab.ui.control. Label TemperatureDirectionSwitch matlab.ui.control. Switch TempSettingsTab matlaber1abel.in.control.abl. ui.control. Spinner Temperature2SpinnerLabel matlab.ui.cont rol. Label Temperature2Spinner matlab.ui.control. Spinner Switch matlab.ui.control. Switch EditFieldLabel matlab.ui.control. Label tempnow matlab.ui.control. NumericEditField GaugeLabel matlab.ui.control.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.abontrol.ablontabel.ablontabel.abu.control.ab. չափել SavingsTab matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField TotalSavingsEditFieldLabel matlab.ui.control. Label TotalSavingsEditField matlab.ui.control. NumericEditField վերջ

մեթոդներ (Մուտք = մասնավոր)

% Արժեքը փոխեց գործառույթը ՝ tempnow

գործառույթը tempnowValueChanged (ծրագիր, իրադարձություն) temp = app.tempnow. Value; temp = randi ([60, 90], 1, 50) app. Gauge. Value = 0 i = երկարության (temp) հավելվածի համար: Gauge. Value = temp (i) դադար (1) վերջի վերջ

% Արժեքը փոխեց գործառույթը ՝ TemperatureDirectionSwitch

գործառույթը TemperatureDirectionSwitchValueChanged (հավելված, իրադարձություն) way = app. TemperatureDirectionSwitch. Value; ճանապարհ = uint8 (ճանապարհ) ճանապարհ = երկարություն (ճանապարհ), եթե ճանապարհ == 4 Chng_dir = -1; այլ Chng_dir = 1; վերջ Chng_dir; վերջ

% Արժեքը փոխեց գործառույթը ՝ DDFH

գործառույթը DDFHValueChanged (հավելված, իրադարձություն) r_pref = app. DDFH. Value; վերջ

% Արժեքը փոխեց գործառույթը ՝ AvgLocalSpeedEditField

գործառույթը AvgLocalSpeedEditFieldValueChanged (հավելված, իրադարձություն) արագություն = app. AvgLocalSpeedEditField. Value; վերջ

% Արժեքը փոխեց գործառույթը ՝ PowerOutputRatingEditField

գործառույթը PowerOutputRatingEditFieldValueChanged (հավելված, իրադարձություն) value = app. PowerOutputRatingEditField. Value; վերջ

% Արժեքը փոխեց գործառույթը ՝ EnergyEfficiencyRatingEditField

գործառույթը EnergyEfficiencyRatingEditFieldValueChanged (հավելված, իրադարձություն) value = app. EnergyEfficiencyRatingEditField. Value; վերջ

% Կոճակը սեղմված գործառույթ. RunDiagnosticButton

գործառույթը RunDiagnosticButtonPushed (ծրագիր, իրադարձություն) way = app. TemperatureDirectionSwitch. Value; ճանապարհ = uint8 (ճանապարհ) ճանապարհ = երկարություն (ճանապարհ), եթե ճանապարհ == 4 Chng_dir = -1; այլ Chng_dir = 1; վերջ T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)

վերջ

% Արժեքը փոխված գործառույթ ՝ Temperature1Spinner

գործառույթը Temperature1SpinnerValueChanged (հավելված, իրադարձություն) value = app. Temperature1Spinner. Value; վերջ

% Արժեքը փոխված գործառույթ ՝ Temperature2Spinner

գործառույթը Temperature2SpinnerValueChanged (հավելված, իրադարձություն) value = app. Temperature2Spinner. Value; վերջ

% Արժեքը փոխված գործառույթ. Փոխարկիչ

գործառույթը SwitchValueChanged (ծրագիր, իրադարձություն) m = mobiledev; Lat_in = m. Լայնություն Lon_in = մ. Երկայնություն P_out = 0; r_pref = app. DDFH. Value; T_pref = app. Temperature1Spinner. Value; արագություն = մ. Արագություն; զանգված = 200; արագություն = app. AvgLocalSpeedEditField. Value; Auto_Stat = app. Switch. Value; dist_cntrl (Lat_in, Lon_in, P_out, r_pref, T_pref, արագություն, զանգված) վերջի վերջ

% Initialրագրի նախաստորագրում և կառուցում

մեթոդներ (Մուտք = մասնավոր)

% Ստեղծել UIFigure և բաղադրիչներ

գործառույթը createComponents (հավելված)

% Ստեղծել UIFigure

app. UIFigure = uifigure; app. UIFigure. Position = [100 100 640 480]; app. UIFigure. Name = 'UI նկար';

% Ստեղծել TabGroup

app. TabGroup = uitabgroup (app. UIFigure); app. TabGroup. Position = [1 1 640 480];

% Ստեղծեք SetupTab

app. SetupTab = uitab (app. TabGroup); app. SetupTab. Title = 'Կարգավորում';

% Ստեղծել RunDiagnosticButton

app. RunDiagnosticButton = uibutton (app. SetupTab, «հրում»); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (հավելված, @RunDiagnosticButtonPushed, true); app. RunDiagnosticButton. FontWeight = 'համարձակ'; app. RunDiagnosticButton. Position = [465 78 103 23]; app. RunDiagnosticButton. Text = 'Գործարկել ախտորոշիչ';

% Ստեղծել EnergyEfficiencyRatingEditFieldLabel

app. EnergyEfficiencyRatingEditFieldLabel = uilabel (app. SetupTab); app. EnergyEfficiencyRatingEditFieldLabel. HorizontalAlignment = 'աջ'; app. EnergyEfficiencyRatingEditFieldLabel. Position = [8 425 135 22]; app. EnergyEfficiencyRatingEditFieldLabel. Text = 'Էներգաարդյունավետության գնահատական';

% Ստեղծել EnergyEfficiencyRatingEditField

app. EnergyEfficiencyRatingEditField = uieditfield (app. SetupTab, «թվային»); app. EnergyEfficiencyRatingEditField. Limits = [0 100]; app. EnergyEfficiencyRatingEditField. ValueChangedFcn = createCallbackFcn (հավելված, @EnergyEfficiencyRatingEditFieldValueChanged, true); app. EnergyEfficiencyRatingEditField. HorizontalAlignment = 'կենտրոն'; app. EnergyEfficiencyRatingEditField. Position = [158 425 100 22];

% Ստեղծել PowerOutputRatingEditFieldLabel

app. PowerOutputRatingEditFieldLabel = uilabel (app. SetupTab); app. PowerOutputRatingEditFieldLabel. HorizontalAlignment = 'աջ'; app. PowerOutputRatingEditFieldLabel. Position = [18 328 118 22]; app. PowerOutputRatingEditFieldLabel. Text = 'Էլեկտրաէներգիայի ելքային գնահատական';

% Ստեղծել PowerOutputRatingEditField

app. PowerOutputRatingEditField = uieditfield (app. SetupTab, «թվային»); app. PowerOutputRatingEditField. Limits = [0 Inf]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (հավելված, @PowerOutputRatingEditFieldValueChanged, true); app. PowerOutputRatingEditField. HorizontalAlignment = 'կենտրոն'; app. PowerOutputRatingEditField. Position = [151 328 100 22];

% Ստեղծել AvgLocalSpeedEditFieldLabel

app. AvgLocalSpeedEditFieldLabel = uilabel (app. SetupTab); app. AvgLocalSpeedEditFieldLabel. HorizontalAlignment = 'աջ'; app. AvgLocalSpeedEditFieldLabel. Position = [27 231 100 22]; app. AvgLocalSpeedEditFieldLabel. Text = 'Միջ. Տեղական արագություն ';

% Ստեղծել AvgLocalSpeedEditField

app. AvgLocalSpeedEditField = uieditfield (app. SetupTab, «թվային»); app. AvgLocalSpeedEditField. Limits = [0 70]; app. AvgLocalSpeedEditField. ValueChangedFcn = createCallbackFcn (հավելված, @AvgLocalSpeedEditFieldValueChanged, true); app. AvgLocalSpeedEditField. HorizontalAlignment = 'կենտրոն'; app. AvgLocalSpeedEditField. Position = [142 231 100 22];

% Ստեղծել DesiredDistancefromHouseEditFieldLabel- ը

app. DesiredDistancefromHouseEditFieldLabel = uilabel (app. SetupTab); app. DesiredDistancefromHouseEditFieldLabel. HorizontalAlignment = 'աջ'; app. DesiredDistancefromHouseEditFieldLabel. Position = [24 129 100 28]; app. DesiredDistancefromHouseEditFieldLabel. Text = {'iredանկալի հեռավորություն'; 'տնից'};

% Ստեղծել DDFH

app. DDFH = uieditfield (app. SetupTab, «թվային»); app. DDFH. Limits = [0 50]; app. DDFH. ValueChangedFcn = createCallbackFcn (հավելված, @DDFHValueChanged, true); app. DDFH. HorizontalAlignment = 'կենտրոն'; app. DDFH. Position = [139 135 100 22];

% Ստեղծել TemperatureDirectionSwitchLabel

app. TemperatureDirectionSwitchLabel = uilabel (app. SetupTab); app. TemperatureDirectionSwitchLabel. HorizontalAlignment = 'կենտրոն'; app. TemperatureDirectionSwitchLabel. Position = [410 343 124 22]; app. TemperatureDirectionSwitchLabel. Text = 'peratերմաստիճանի ուղղություն';

% Ստեղծել TemperatureDirectionSwitch

app. TemperatureDirectionSwitch = uiswitch (app. SetupTab, «սահող»); app. TemperatureDirectionSwitch. Items = {'վեր', 'վար'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (հավելված, @TemperatureDirectionSwitchValueChanged, true); app. TemperatureDirectionSwitch. Position = [449 380 45 20]; app. TemperatureDirectionSwitch. Value = 'Վերև';

% Ստեղծել TempSettingsTab

app. TempSettingsTab = uitab (app. TabGroup); app. TempSettingsTab. Title = 'pերմ. Կարգավորումներ';

% Ստեղծել Temperature1SpinnerLabel

app. Temperature1SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature1SpinnerLabel. HorizontalAlignment = 'կենտրոն'; app. Temperature1SpinnerLabel. Position = [66 363 76 28]; app. Temperature1SpinnerLabel. Text = {'peratերմաստիճան'; '#1'};

% Ստեղծել Temperature1Spinner

app. Temperature1Spinner = uispinner (app. TempSettingsTab); app. Temperature1Spinner. Limits = [60 90]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (հավելված, @Temperature1SpinnerValueChanged, true); app. Temperature1Spinner. Position = [157 346 100 68]; app. Temperature1Spinner. Value = 60;

% Ստեղծել Temperature2SpinnerLabel

app. Temperature2SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature2SpinnerLabel. HorizontalAlignment = 'կենտրոն'; app. Temperature2SpinnerLabel. Position = [66 248 76 28]; app. Temperature2SpinnerLabel. Text = {'peratերմաստիճան'; '#2'};

% Ստեղծել Temperature2Spinner

app. Temperature2Spinner = uispinner (app. TempSettingsTab); app. Temperature2Spinner. Limits = [60 90]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (հավելված, @Temperature2SpinnerValueChanged, true); app. Temperature2Spinner. Position = [157 230 100 70]; app. Temperature2Spinner. Value = 60;

% Ստեղծեք անջատիչ

app. Switch = uiswitch (app. TempSettingsTab, «slider»); app. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (հավելված, @SwitchValueChanged, true); app. Switch. FontName = 'Նյալա'; app. Switch. FontSize = 28; app. Switch. Position = [522 21 74 32]; app. Switch. Value = '0';

% Ստեղծել EditFieldLabel

app. EditFieldLabel = uilabel (app. TempSettingsTab); app. EditFieldLabel. HorizontalAlignment = 'աջ'; app. EditFieldLabel. Position = [374 291 25 22]; app. EditFieldLabel. Text = ";

% Ստեղծել tempnow

app.tempnow = uieditfield (app. TempSettingsTab, «թվային»); app.tempnow. Limits = [60 89]; app.tempnow. ValueChangedFcn = createCallbackFcn (հավելված, @tempnowValueChanged, ճշմարիտ); app.tempnow. HorizontalAlignment = 'կենտրոն'; app.tempnow. FontSize = 26; app.tempnow. Position = [409 230 133 117]; app.tempnow. Value = 60;

Ստեղծել GaugeLabel

app. GaugeLabel = uilabel (app. TempSettingsTab); app. GaugeLabel. HorizontalAlignment = 'կենտրոն'; app. GaugeLabel. Position = [225 32 42 22]; app. GaugeLabel. Text = 'Չափիչ';

Ստեղծել չափիչ

app. Gauge = uigauge (app. TempSettingsTab, «շրջանաձև»); app. Gauge. Limits = [60 90]; app. Gauge. MajorTicks = [60 65 70 75 80 85 90]; app. Gauge. Position = [185 69 120 120]; app. Gauge. Value = 60;

% Ստեղծեք SavingsTab

app. SavingsTab = uitab (app. TabGroup); app. SavingsTab. Title = 'Խնայողություն';

% Ստեղծել UIAxes

app. UIAxes = uiaxes (app. SavingsTab); վերնագիր (հավելված. UIAxes, «Խնայողություններ») xlabel (հավելված. UIAxes, «ամիս և տարի») ylabel (app. UIAxes, «Money») app. UIAxes. PlotBoxAspectRatio = [1 0.606666666666667 0.606666666666667]; app. UIAxes. Color = [0.9412 0.9412 0.9412]; app. UIAxes. Position = [146 219 348 237];

% Ստեղծել ThisMonthCostEditFieldLabel

app. ThisMonthCostEditFieldLabel = uilabel (app. SavingsTab); app. ThisMonthCostEditFieldLabel. HorizontalAlignment = 'կենտրոն'; app. ThisMonthCostEditFieldLabel. Position = [439 96 94 22]; app. ThisMonthCostEditFieldLabel. Text = 'Այս ամսվա արժեքը';

% Ստեղծել ThisMonthCostEditField

app. ThisMonthCostEditField = uieditfield (app. SavingsTab, «թվային»); app. ThisMonthCostEditField. Limits = [0 Inf]; app. ThisMonthCostEditField. ValueDisplayFormat = '$%7.2f'; app. ThisMonthCostEditField. HorizontalAlignment = 'կենտրոն'; app. ThisMonthCostEditField. Position = [417 39 137 58];

% Ստեղծել TotalSavingsEditFieldLabel

app. TotalSavingsEditFieldLabel = uilabel (app. SavingsTab); app. TotalSavingsEditFieldLabel. HorizontalAlignment = 'աջ'; app. TotalSavingsEditFieldLabel. Position = [111 96 77 22]; app. TotalSavingsEditFieldLabel. Text = 'Ընդհանուր խնայողություն';

% Ստեղծել TotalSavingsEditField

app. TotalSavingsEditField = uieditfield (app. SavingsTab, «թվային»); app. TotalSavingsEditField. Limits = [0 Inf]; app. TotalSavingsEditField. ValueDisplayFormat = '$%9.2f'; app. TotalSavingsEditField. HorizontalAlignment = 'կենտրոն'; app. TotalSavingsEditField. Position = [88 39 137 58]; վերջ վերջ

մեթոդներ (Մուտք = հանրային)

% Կառուցել հավելվածը

գործառական ծրագիր = Control_1

% Ստեղծեք և կազմաձևեք բաղադրիչներ

ստեղծել բաղադրիչներ (ծրագիր)

Գրանցեք ծրագիրը App Designer- ի հետ

registerApp (ծրագիր, ծրագիր. UIFigure)

եթե nargout == 0

հստակ ծրագրի ավարտի ավարտը

% Կոդ, որը գործում է մինչև ծրագրի ջնջումը

գործառույթի ջնջում (ծրագիր)

% Leteնջել UIFigure- ը, երբ ծրագիրը ջնջվի

ջնջել (app. UIFigure) end end end end

Դուք հավանաբար սխալ կստանաք, որը խնդիր չէ: Պարզապես փակեք GUI- ն, որը ստեղծվել է run- ը սեղմելուց հետո, մենք մի պահ հավաքելու ենք մնացած անհրաժեշտ ծրագրերն ու տվյալները:

Քանի որ Matlab- ը ստեղծվել է, մենք կարող ենք անցնել python- ին: Նախ, գործարկեք python ծրագիրը կամ ձեր հրամանի տողից (Windows- ում), կամ ՝ օգտագործելով.exe ֆայլը ձեր python պանակում: Համոզվեք, որ բոլոր համապատասխան գրադարանները տեղադրված են ՝ օգտագործելով ներմուծման հրամանը:

ներմուծել սերիալ

ներմուծման ժամանակ ներմուծում csv

Սրանք այն երեք գրադարաններն են, որոնք անհրաժեշտ են գործի դնելու համար, չնայած շուտով մենք պատրաստելու ենք մեր սեփական գրադարանը: Եթե այս հրամանների հետ ինչ -որ սխալ է տեղի ունեցել, հետ գնացեք և համոզվեք, որ գրադարանները տեղադրված են և գտնվում են Python պանակում գտնվող Lib պանակում: Հաջորդը մենք կստեղծենք այն, ինչ ես անվանել եմ pythonlogger գրադարան: Այս անունը պարտադիր չէ, կարող եք այն անվանել ինչպես ուզում եք, դա պարզապես ձեր ստեղծած պիթոնի ֆայլի անունն է (.py):

Բացեք տեքստային խմբագիր, ես օգտագործում եմ Sublime3 բայց նոթատետրը լավ է աշխատում և մուտքագրեք այս կոդը:

def pythonprint ():

ներմուծել pythonlogger ներմուծում սերիա ներմուծման ժամանակ ներմուծում csv ser = սերիալ: Սերիալ ('COM8') # COM8- ը arduino սերիական պորտն է, սա ամենայն հավանականությամբ տարբեր կլինի յուրաքանչյուր օգտագործողի համար, այսինքն `ստուգեք ձեր սերիական պորտը arduino IDE ser.flushInput () - ում:Իշտ է `փորձեք: ser_bytes = ser.readline () print (ser_bytes) with open (" test_data.csv "," a ") as f: writer = csv.writer (f, delimiter =", ") # տվյալները դնում է մուտքագրվել որպես ստորակետով առանձնացված գրող:writerow ([time.time (), ser_bytes]) #տվյալները գրում է test_data.csv- ում, բացառությամբ `print (" Error Occident ") ընդմիջման:

Պահեք տեքստը որպես «տեղադրեք ձեր ուզած գրադարանի անունը»: py Lib թղթապանակում: Նաև նշեք, որ def pythonprint () տողը սահմանում է այն ֆունկցիայի անունը, որը դուք կանչելու եք, այնպես որ կարող եք այն փոխել `def" տեղադրելու համար, որը ցանկանում եք ձեր գործառույթի համար "(): Երբ գրադարանը պահվում է, մենք կարող ենք անցնել arduino կոդին:

Բացեք arduino IDE- ն և բացեք էսքիզների երկու նոր պատուհան: Պահեք այդ երկու ուրվագծային ֆայլերը հարմար վայրում, այս ֆայլերի անունը նշանակություն չունի: Այնուհետև ջնջեք բոլոր կանխադրված ծածկագիրը և այն փոխարինեք հետևյալով:

Ստացող arduino- ի համար.

#ներառում

#ներառել #ներառել #ներառել // սա չի օգտագործվում, բայց անհրաժեշտ է RH_ASK վարորդը կազմելու համար; struct dataStruct {բոց ջերմաստիճան; } myData; void setup () {Serial.begin (9600); // Վրիպազերծում միայն այն դեպքում, եթե (! Driver.init ()) Serial.println ("init ձախողվեց"); } void loop () {uint8_t buf [RH_ASK_MAX_MESSAGE_LEN]; uint8_t buflen = sizeof (buf); if (driver.recv (buf, & buflen)) // Չարգելափակման {int i; // Ստացված լավ ստուգիչով հաղորդագրություն, թափեք այն: //driver.printBuffer("Got: ", buf, buflen); memcpy (& myData, buf, sizeof (myData)); Serial.println (""); Serial.print (myData.temp); }}

Պ. Ս. //driver.printBuffer …… etc տողը փորձարկման կոդ է: Անհրաժեշտ չէ անհանգստանալ դրա համար, եթե դուք ախտորոշում չեք կատարում և ցանկանում եք պարզել, թե իրականում տվյալներ եք ստանում:

Արդուինոյի հաղորդիչի համար

#ներառում

#ներառել #ներառել #ներառել // սա չի օգտագործվում, բայց անհրաժեշտ է կազմելու համար #ներառել #ներառել int pin = 4; DHT11 dht11 (քորոց); RH_ASK վարորդ; struct dataStruct {բոց ջերմաստիճան; } myData; բայթ tx_buf [sizeof (myData)] = {0}; // Այսպիսով, փաստարկները բիթային արագություն են, փոխանցում են pin (tx), // ընդունում են pin (rx), ppt pin, isInverse: Վերջին 2 -ը չեն օգտագործվում.void setup () {Serial.begin (9600); // Վրիպազերծում միայն այն դեպքում, եթե (! Driver.init ()) Serial.println ("init ձախողվեց"); } void loop () {int err; float temp, humi; uint8_t msg; եթե ((err = dht11.read (humi, temp)) == 0) myData.temp = temp; memcpy (tx_buf, & myData, sizeof (myData)); բայթ zize = sizeof (myData); {Serial.println (myData.temp); driver.send ((uint8_t *) tx_buf, zize); driver.waitPacketSent (); // դադարեցնել կատարումը մինչև բոլոր տվյալների ուղարկումը հետաձգվի (2000); // սպասիր 2 վայրկյան}}

Ներառելու հրամանները պետք է բավական լինեն, բայց եթե տվյալների փոխանցման հետ կապված որևէ խնդիր առաջանա, գուցե ցանկանաք փնտրել RadioHead գրադարանի թղթապանակում և ներառել ֆայլերի մնացորդները ՝ նույն ձևաչափով:

Քայլ 5: Գործողության մեջ դնելը

Գործող դարձնելը
Գործող դարձնելը
Գործող դարձնելը
Գործող դարձնելը
Գործող դարձնելը
Գործող դարձնելը

Այժմ, երբ մենք ունենք ամբողջ կոդը միասին և arduino- ն հավաքված է, մենք կարող ենք arduino- ն միացնել ձեր համակարգչին և բեռնել կոդը: Համոզվեք, որ ճիշտ կոդը ուղարկեք ստացող և փոխանցող միկրոկոնտրոլերներին: Դուք կարող եք միացնել երկու arduinos- ին ձեր համակարգչին, քանի դեռ այն աշխատում է, բայց դուք պետք է համոզվեք, որ ճիշտ նավահանգիստն է ընտրված առաջ շարժվելու համար, կամ կարող եք անջատել փոխանցող arduino- ն և միացնել այն այլ աղբյուրից, երբ կոդը մուտքագրվի: վերբեռնված:

Խոսելով դրա մասին, IDE գործիքների ընտրացանկից այժմ պետք է ընտրեք այն պորտը, որը միացված է ձեր ստացող arduino- ին և գործարկեք python- ը:

Մի բացեք սերիական մոնիտորը, մինչ դա անում եք, պիթոնը չի կարող կարդալ սերիալը, քանի դեռ մոնիտորը բաց է: Երբ python- ը բաց է, զանգահարեք pythonprint գործառույթը հետևյալ կերպ.

pythonlogger.pythonprint ()

Սա կսկսի տվյալների հավաքումը arduino սերիական պորտից: Եթե այժմ բացեք ձեր պիթոնի թղթապանակը, կտեսնեք, որ ստեղծվել է նոր.csv ֆայլ, որը կոչվում է «test_data.csv», որը պահում է ամբողջ ժամանակի և ջերմաստիճանի մասին տեղեկությունները: Սա կլինի այն ֆայլը, որին հասանելի է Matlab- ը ՝ իր բոլոր հաշվարկներն ու վերահսկումները կատարելու համար:

Մեկ այլ նախազգուշացում. Մի բացեք test_data.csv մինչ տվյալները մուտքագրվում կամ գրվում են: Եթե դա անեք, python- ը և/կամ Matlab ծածկագիրը կփլուզվեն և հետ կուղարկեն սխալ:

Եթե որոշեք.csv- ն ավելի ուշ բացել, կնկատեք, որ ժամանակի սյունակը պարզապես թվերի շատ մեծ տող է: Դա պայմանավորված է նրանով, որ time.time () հրամանը գրում է վայրկյանների թիվը 1970 թվականի հունվարի 1 -ից:

Այս պահին պիթոնը պետք է տպի ջերմաստիճանի տվյալները, որոնք կարդում է սերիական նավահանգստից: Այն պետք է նման լինի հետևյալին.

բ'25.03 '/ռ/ն

Մի անհանգստացեք լրացուցիչ նիշերի համար. Matlab ծածկագիրը ինդեքսավորում է.csv ֆայլի երկրորդ սյունակի միջին հինգ արժեքները:

Այժմ, երբ բոլոր օժանդակ ծրագրերն աշխատում են և հավաքվում են տվյալները, մենք կարող ենք սկսել GPS տվյալների հավաքումը Matlab բջջային ծրագրից, որը նախկինում ստեղծվել էր և գործարկել Matlab GUI կոդը: Երբ հայտնվել եք Matlab բջջայինի սենսորների ներդիրում, ընտրեք GPS և սեղմեք մեկնարկի կոճակը:

Եթե դուք նորեկ եք Matlab բջջային հեռախոսով, ապա վերադարձեք 4 -րդ քայլին և նայեք վերևի էկրանի նկարներին: Եթե դեռ խնդիրներ ունեք, համոզվեք, որ միացված եք ավելի վաղ ընտրած համակարգչին (պարամետրերի ներդիրում) և օգտագործեք «միակցիչ միացված» հրամանի հղումը ՝ ստուգելու համար, թե արդյոք Matlab- ը առցանց է:

Քայլ 6: Օգտագործելով ծրագիրը

Օգտագործելով րագիրը
Օգտագործելով րագիրը

Այս համակարգում շատ բաներ են կատարվում հետին պլանում: Laերմաստիճանի տվյալները հավաքվում և գրանցվում են arduino- ի և pyton- ի միջոցով, Matlab- ը ձեր հեռախոսից հավաքում է GPS տվյալներ և կատարում հաշվարկներ ՝ տեսնելու, թե որքան հեռու եք դուք ձեր տնից և ձեր ջերմաստիճանը կարգավորում է այդ բոլոր տեղեկությունների հիման վրա: Որտեղ եք մտնում, տրամադրում է ձեր նախասիրությունները:

Գործարկեք Matlab GUI կոդը: Բացեք.mlapp ֆայլը և նայեք առաջին ներդիրին: Դրա համար ինքներդ պետք է հավաքեք տեղեկատվությունը, ձեր ջեռուցման/հովացման միավորի արդյունավետությունն ու հզորությունը սովորաբար կարելի է գտնել հենց սարքի վրա, և ձեր միջին արագությունը պարզապես լավ գնահատական է այն մասին, թե որքան արագ եք վարում: Երբ արժեքները մուտքագրվում են, սեղմեք «Գործարկել ախտորոշիչ» կոճակը, և ծրագիրը վերահսկում է ձեր ջերմաստիճանը ՝ ձեր տան մասին տեղեկություններ հավաքելու համար:

Անցեք հաջորդ ընտրացանկին:

Քայլ 7: Temերմաստիճանի վերահսկում

Երմաստիճանի վերահսկում
Երմաստիճանի վերահսկում

Այս ընտրացանկը թույլ է տալիս ընտրել ձեր նախընտրած ջերմաստիճանը տանը և տանից դուրս գտնվելու ընթացքում: Սահմանեք ջերմաստիճանը #1 ձեր հարմարավետ ջերմաստիճանին, իսկ ջերմաստիճանը #2 բարձր կամ ցածր արժեքին, որն անվտանգ է ձեր տան համար (համոզվեք, որ այն չեք դնում 100 աստիճանի վրա, երբ տանը շներ ունեք և այլն):

Քայլ 8: Պատմական տվյալներ

Պատմական տվյալներ
Պատմական տվյալներ

Ի վերջո, դուք կարող եք դիտել, թե որքան գումար եք խնայում ՝ օգտագործելով ավտոմատ կառավարիչը: Սա ըստ էության գնահատում է, թե որքան էներգիա կծախսվեր, եթե ձեր ջերմաստիճանը կարգավորվեր ձեր նախընտրած ջերմաստիճանի 24/7 ռեժիմով, այնուհետև հաներ ձեր օգտագործած իրական էներգիան:

Հաջողություն շինարարության մեջ:

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