Բովանդակություն:
- Քայլ 1: Ամեն ինչ միասին դնել
- Քայլ 2: Ստացող
- Քայլ 3: Հաղորդիչ
- Քայլ 4: Կոդ
- Քայլ 5: Գործողության մեջ դնելը
- Քայլ 6: Օգտագործելով ծրագիրը
- Քայլ 7: Temերմաստիճանի վերահսկում
- Քայլ 8: Պատմական տվյալներ
Video: Autostat ՝ հեռակառավարման ջերմաստիճան ՝ 8 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Հավանաբար հարցն այն է, թե «ինչու՞ եք մեկ այլ հեռակառավարվող ջերմաստիճան պատրաստում»:
Այդ հարցի պատասխանը հետևյալն է. Ես ստիպված էի, և շուկայի խելացի թերմոստատները չափազանց թանկ են:
Արդար նախազգուշացում, սա «հայեցակարգի ապացույց» կառուցում է, որը կպահանջի մի քանի լրացուցիչ ելք `իրականում ձեր ջերմաչափը կառավարելու համար, սակայն միջուկը տեղում է և կարող է փոփոխվել` կախված ձեր հատուկ հանգամանքներից: Բացի այդ, սա դեռ ընթացքի մեջ է, այնպես որ ակնկալեք մի քանի թարմացում և փոփոխություն (հատկապես 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 ռեժիմով, այնուհետև հաներ ձեր օգտագործած իրական էներգիան:
Հաջողություն շինարարության մեջ:
Խորհուրդ ենք տալիս:
Իրական ժամանակում ջրհորի ջրի ջերմաստիճան, հաղորդունակություն և ջրի մակարդակի հաշվիչ ՝ 6 քայլ (նկարներով)
Իրական ժամանակի ջրհորի ջրի ջերմաստիճան, հաղորդունակություն և ջրի մակարդակի հաշվիչ. Այս հրահանգները նկարագրում են, թե ինչպես կարելի է կառուցել էժան, իրական ժամանակի ջրաչափ `ջերմաստիճանը մոնիտորինգի համար, Էլեկտրական հաղորդունակություն (ԵՀ) և ջրի մակարդակները փորված հորերում: Հաշվիչը նախատեսված է փորված ջրհորի ներսում կախված լինելու համար, չափելու ջրի ջերմաստիճանը
Բոլորը մեկ թվային ժամանակաչափ (ժամացույց, ժամաչափ, զարթուցիչ, ջերմաստիճան). 10 քայլ (նկարներով)
All in One Digital Chronometer (ockամացույց, erամաչափ, rmարթուցիչ, peratերմաստիճան). Մենք պլանավորում էինք ժամաչափ պատրաստել մեկ այլ մրցույթի համար, բայց հետագայում մենք նաև գործարկեցինք ժամացույց (առանց RTC): Երբ մենք սկսեցինք ծրագրավորումը, մենք հետաքրքրվեցինք սարքի վրա ավելի շատ գործառույթներ կիրառելով և վերջում ավելացրեցինք DS3231 RTC, քանի որ
Ավտոմատ Arduino- ի վրա հիմնված IR հեռակառավարման ջերմաստիճան `7 քայլ
Ավտոմատ Arduino- ի վրա հիմնված IR հեռակառավարման ջերմաստիճան, որը հիմնված է. Աքարշ այստեղ ՝ CETech- ից: Հոգնել եք ձայնի քնի արթնանալուց միայն այն պատճառով, որ սենյակի ջերմաստիճանը չափազանց ցածր է կամ չափազանց բարձր `ձեր բութ AC- ի պատճառով: Ապա այս նախագիծը ձեզ համար է: Այս նախագծում մենք պատրաստվում ենք մեր
Շաբաթվա օր, օրացույց, ժամանակ, խոնավություն/ջերմաստիճան մարտկոցի խնայարարով. 10 քայլ (նկարներով)
Շաբաթվա օր, օրացույց, ժամանակ, խոնավություն/ջերմաստիճան մարտկոցի խնայարարով. Էներգախնայողության ռեժիմն այստեղ այն է, ինչ այս հրահանգը առանձնացնում է շաբաթվա օրը, ամիսը, ամսվա օրը, ժամանակը, խոնավությունը և ջերմաստիճանը ցուցադրող այլ օրինակներից: Այս հնարավորությունն է, որ թույլ է տալիս այս նախագիծը գործարկել մարտկոցից ՝ առանց տ
Սովորական հեռակառավարման հավաքածուն վերածվեց չորս ալիքի RC Toy հեռակառավարման վահանակի `4 քայլ
Սովորական հեռակառավարման հավաքածուն վերածվեց չորս ալիքի RC Toy հեռակառավարման վահանակի. 如何 将 通用 遥控 器 62改造 方法 非常 简单. 只需 准备 一些 瓦楞纸 板, 然后 按照 视频 教程 完成 这个 电子 项目 并 为 您 服务: 玩具 车船 提供 远程 无线 控制: