Orodha ya maudhui:

Autostat: Thermostat ya mbali: Hatua 8 (na Picha)
Autostat: Thermostat ya mbali: Hatua 8 (na Picha)

Video: Autostat: Thermostat ya mbali: Hatua 8 (na Picha)

Video: Autostat: Thermostat ya mbali: Hatua 8 (na Picha)
Video: TRIK,, JANGAN BUANG TERMOSTAT KULKAS RUSAK, CUKUP PAKAI AMPLAS 2024, Novemba
Anonim
Autostat: Thermostat ya mbali
Autostat: Thermostat ya mbali

Swali ambalo labda unauliza ni "kwanini unatengeneza thermostat nyingine ya mbali?"

Jibu la swali hilo ni kwamba, ilibidi nifanye hivyo, na thermostats mahiri za soko ni ghali sana.

Onyo la haki, hii ni ujenzi wa "dhibitisho-ya-dhana" ambayo itahitaji matokeo machache ya ziada kudhibiti thermostat yako, lakini msingi uko mahali na unaweza kubadilishwa kulingana na hali yako maalum. Pia, hii bado ni kazi inayoendelea, kwa hivyo tegemea sasisho na mabadiliko kadhaa (haswa kwa nambari ya Matlab)

Ili kuanza nataka kukuonya, hii inahitaji programu tatu (moja yao ni ghali sana), maktaba kadhaa na vifurushi vya msaada kwa programu, na unahitaji kuwa na wao wote wazungumze. Ni maumivu ya kichwa. Kwa onyo hilo nje ya njia inakuwezesha kuanza na vifaa.

Vifaa

  • arduino nano
  • arduino uno (au nano nyingine, nilitumia tu uno kwa sababu nilikuwa na moja iliyolala)
  • nyaya za kuruka, wanaume wengine / wanaume na seti mbili za tatu walijiunga na wanarukaji wa kiume / wa kike
  • Mpokeaji wa redio ya 433MHz (RF), nilitumia MX-05V
  • Transmita ya RF ya 433MHz, nilitumia MX-FS-03V
  • DHT11 thermometer ya usahihi wa hali ya juu na sensorer ya unyevu (ile niliyotumia imewekwa kwenye kifaa cha prong tatu na vizuizi vinavyohitajika tayari vimewekwa)
  • ubao wa mkate (ikiwa hautaki kuunganishwa pamoja)
  • simu iliyo na GPS (iPhone 8 katika kesi hii, lakini pia nimetumia Galaxy S8)
  • Chombo kilichochapishwa cha 3D (sio lazima sana, kontena lolote litafanya kazi au halitumiki kabisa)

Programu

  • Matlab kutoka MathWorks (nina toleo la 2018a, lakini nimetumia matoleo ya 2017a-b pia)
  • Matlab mobile imewekwa kwenye simu yako
  • kifurushi cha msaada wa arduino kwa Matlab
  • Kifurushi cha sensorer cha iPhone cha Matlab
  • arduino IDE
  • Vifurushi vya msaada wa RadioHead na maktaba za arduino IDE
  • Maktaba ya DHT11 ya IDE arduino
  • python 3.7 (hakikisha maktaba ya vifaa au maktaba ya serial imewekwa, ambayo inapaswa kuwa ya toleo la 3.4 au jipya zaidi)

Hatua ya 1: Kuiweka Pamoja

Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja
Kuiweka Pamoja

Kwanza kabisa ningependekeza ufanye mafunzo machache ya arduino yanayoshughulika na wasambazaji wa RF ili kuhakikisha kuwa sehemu zako zinafanya kazi na wiring ni sahihi. Kuna mifano mingi inayopatikana, na nambari imejumuishwa (kwa sisi hapa nje ambao hatujui chochote kuhusu C na C ++).

Fuata michoro ya wiring hapa chini ili kupata arduino na sensorer kukusanyika. Jambo moja kukumbuka wakati wa kuunganisha arduino ni kwamba bandari za data nilizotumia hazihitajiki lakini zinapendekezwa.

Ikiwa unaamua kubadilisha bandari za data unazotumia, unahitaji tu kufafanua pini kwenye nambari yako. Binafsi, nadhani ni rahisi kushikamana na bandari chaguo-msingi ambazo maktaba za arduino zinatambua.

Na kuwa wazi tu, nano na uno hubadilishana, lakini nilitumia nano kwa upande wa mtoaji wa mradi huo kupunguza ukubwa wa kiangalizi cha joto.

Ujumbe wa kando: contraption ya kijani iliyoshikilia nano ni chombo kilichochapishwa cha 3D.

Hatua ya 2: Mpokeaji

Mpokeaji
Mpokeaji

Hatua ya 3: Transmitter

Transmitter
Transmitter

Hatua ya 4: Kanuni

Mara tu wiring imekamilika unahitaji kupata programu zote zinazoendesha na maktaba zimesakinishwa (ikiwa haujafanya hivyo), nitadhani tu unayo, unahitaji kuanzisha Matlab na kuendesha kifurushi cha msaada cha iPhone. Wote simu yako na Matlab wanahitaji kuwa kwenye mtandao huo wa wifi wakati huu.

Katika dirisha la amri la Matlab andika:

kiunganishi kimewashwa

Hii itakushawishi kuingiza nywila ya nambari tano ambayo utatumia kuungana kwenye iPhone yako. Hakikisha unakumbuka nywila. Unapoingiza nenosiri Matlab itaonyesha habari zingine, pamoja na anwani yako ya IP. Tumia hii katika hatua inayofuata, ambayo hutoka kwa maagizo kutoka kwa menyu ya usaidizi ya "Kuanza na sensorer" katika rununu ya Matlab.

  • Fuata hatua hizi kutuma data ya sensorer kwa MathWorks Cloud au kompyuta:
  • Ikiwa unatuma data ya sensorer kwa kompyuta na ikiwa haijasakinishwa tayari, pakua na usakinishe kifurushi cha MATLAB Support kwa Apple Apple Sensors katika MATLAB.
  • Unganisha MATLAB Mobile kwa MathWorks Cloud au kompyuta kwa kutumia Mipangilio.
  • Unda kitu cha mobilesev katika MATLAB (kwenye kompyuta yako), kwa mfano: >> m = mobiledev
  • Chagua sensorer moja au zaidi na ugonge Anza.

Fuata hatua hizi ili kuingia data ya sensorer ndani ya kifaa chako:

  • Kwenye skrini ya Sensorer, chagua sensorer ambazo unataka kukusanya data kutoka.
  • Chagua Ingia.
  • Gonga kitufe cha Anza.
  • Ukimaliza kukusanya data, gonga kitufe cha Stop.
  • Katika pop-up, ingiza jina la logi ya sensorer.
  • Rudia hatua 1-5 ikiwa inahitajika.

Sehemu hii itarejelewa katika Sehemu ya 4, kwa hivyo hakuna haja ya kuanza kukusanya data bado. Endelea kuweka simu yako karibu na Matlab mobile tayari.

Sasa unahitaji kuunda folda mahali pengine kwenye kompyuta yako ili kuweka faili za nambari za Matlab. Utakuwa na faili nne tofauti, mbili kwa kazi za usuli (faili za.m) na faili moja ya nambari ya Matlab kwa GUI (.mlapp),.

Kwanza ni hesabu kubwa ya hewa ndani ya nyumba yako (hii inamruhusu Matlab kujua inachukua muda gani kupasha moto / kupoza nyumba yako)

kazi [Misa] = CalcMass (T_ins, P_out, Chng_dir)

runCalc = 0; Tmp_start = T_ins; muda_wakati = saa; time_end = 0 wakati runCalc <= 1 ikiwa T_ins == (Tmp_start + (7 * Chng_dir)) time_end = saa; PwrCntr = 0; runCalc = 0; mwingine PwrCntr = P_out; runCalc = runCalc + 0.1 mwisho time_diag = time_end-time_start Mass = (P_out * time_diag) /7.035

Na ya pili:

kazi [mihuri ya nyakati, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, kasi, T_pref, misa)

AutoStat = 1; i = 1; wakati AutoStat == 1 time_start = saa; m = mobilesev; t = csvread ('maadili.csv', 0, 1); t = t (i); mihuri ya nyakati = [0, 0, 0, 0, 0, 0]; pwr_usage = 0; i = i + 1; fomati ndefu; Fomula% haversine ya kuhesabu umbali kulingana na latitudo na% longintude a_hav = (sind ((m. Latitude-Lat_in)./ 2)). ^ 2 + cosd (Lat_in). * cosd (m.latitude). * (sind ((m. Longitude-Lon_in)./ 2)). ^ 2; c_hav = 2. * atan2d (sqrt (a_hav), sqrt (1-a_hav)); d_hav = 6371. * c_hav; Dist = d_hav. * 1000; % inakadiria wakati wako wa kurudi time_rtn = (Dist-r_pref)./ kasi; % huhesabu mipangilio ya thermostat inayofaa kulingana na kuweka nje kwa kiyoyozi na hali ya hewa ya nyumbani. calcTmp_set = ((- - 1. * P_out. * time_rtn)./ (misa. * (1.005))) + T_pref; % huamua ikiwa mpangilio wa sasa wa thermostat unahitaji kubadilishwa ikiwa pande zote (calcTmp_set) ~ = pande zote (t) wakatiACon = saa; PwrCntr = P_out; wakatiACon = saaACon + saa-saa-kuanza; gharama = P_out * wakatiACon * kiwango; mwingine PwrCntr = 0 mihuri ya nyakati (mwisho + 1, [1: 6]) = saa; pwr_usage (mwisho + 1, 1) = PwrCntr; pause (5) mwisho mwisho

Faili hizi zote ni kazi za Matlab. Hautahitaji kuzipata isipokuwa unapanga kuzibadilisha kwa mahitaji maalum, kwani utawaita kutoka kwa GUI. Hifadhi faili zote mbili kando, ya kwanza kama CalcMass.m na ya pili kama dist_cntrl.m, hayo yatakuwa majina ambayo nambari ya GUI hutumia kuita kazi hizo, kwa hivyo isipokuwa unataka kuhariri nambari iliyobaki hapa chini, shika na mkutano wa kutaja majina.

Kabla ya kuingia kwenye nambari ya GUI, unahitaji kufungua mtengenezaji wa programu ya Matlab, ambayo unaweza kufungua kwa kuabiri kwenye upau wa menyu ya Matlab, au kwa njia ninayopenda ambayo inaingiza amri ifuatayo kwenye dirisha la amri la Matlab:

mbuni

Mara tu mbuni wa programu atakapofunguliwa fungua faili mpya ya programu (.mlapp) na ufute nambari yote chaguomsingi kutoka kwa dirisha la nambari. Kisha ibadilishe yote na yafuatayo na bonyeza kitufe cha kukimbia.

classdef Control_1 <matlab.apps. AppBase% Mali ambazo zinahusiana na mali ya vifaa vya programu (Ufikiaji = umma) UIFigure matlab.ui. Figure TabGroup matlab.ui.container. TabGroup SetupTab matlab.ui.container. Tab RunDiagnosticButton matlab.ui.control. button 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.udhibiti. Joto la Spinner2SpinnerLabel matlab.ui.cont rol. Label Joto2Spinner matlab.ui.control. Spinner Kubadilisha matlab.ui.control. Badilisha HaririFieldLabel matlab.ui.control. Label tempnow matlab.ui.control. Kuweka AkibaTab matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control.

njia (Ufikiaji = faragha)

Thamani iliyopita kazi: tempnow

kazi tempnowValueChanged (programu, tukio) temp = app.tempnow. Value; temp = randi ([60, 90], 1, 50) programu.

% Thamani ilibadilisha kazi: JotoDirectionSwitch

kazi TemperatureDirectionSwitchValueChanged (programu, tukio) njia = app. TemperatureDirectionSwitch. Value; njia = uint8 (njia) njia = urefu (njia) ikiwa njia == 4 Chng_dir = -1; mwingine Chng_dir = 1; mwisho Chng_dir; mwisho

Thamani iliyopita kazi: DDFH

kazi DDFHValueChanged (programu, tukio) r_pref = app. DDFH. Value; mwisho

Thamani iliyopita kazi: AvgLocalSpeedEditField

kazi AvgLocalSpeedEditFieldValueChanged (programu, tukio) speed = app. AvgLocalSpeedEditField. Value; mwisho

Thamani iliyopita kazi: PowerOutputRatingEditField

kazi PowerOutputRatingEditFieldValueChanged (programu, tukio) value = app. PowerOutputRatingEditField. Value; mwisho

Thamani iliyopita kazi: NishatiEfficiencyRatingEditField

kazi NishatiEfficiencyRatingEditFieldValueChanged (programu, tukio) value = app. EnergyEfficiencyRatingEditField. Value; mwisho

Kitufe cha kushinikiza kazi: RunDiagnosticButton

kazi RunDiagnosticButtonPushed (app, event) way = app. TemperatureDirectionSwitch. Value; njia = uint8 (njia) njia = urefu (njia) ikiwa njia == 4 Chng_dir = -1; mwingine Chng_dir = 1; end T_ins = app.tempnow. Thamani P_out = app. PowerOutputRatingEditField. Thamini CalcMass1 (T_ins, P_out, Chng_dir)

mwisho

Thamani iliyopita kazi: Joto1Spinner

Joto la kazi1SpinnerValueChanged (programu, tukio) thamani = app. Temperature1Spinner. Value; mwisho

Thamani iliyopita kazi: Joto2Spinner

kazi Temperature2SpinnerValueChanged (programu, tukio) thamani = app. Temperature2Spinner. Value; mwisho

Thamani iliyopita kazi: Badilisha

kazi SwitchValueChanged (programu, tukio) m = mobilesev; Lat_in = m. Latitude Lon_in = m. Urefu P_out = 0; r_pref = programu. DDFH. Thamani; T_pref = programu. Joto1Spinner. Uthamini; kasi = m. Speed; misa = 200; kasi = programu. AvgLocalSpeedEditField. Value; Auto_Stat = programu. Switch. Thamani; dist_cntrl (Lat_in, Lon_in, P_out, r_pref, T_pref, kasi, misa) mwisho mwisho

Uanzishaji wa programu na ujenzi

njia (Ufikiaji = faragha)

Unda UIFigure na vifaa

kazi ya kuunda Vipengele (programu)

Unda UIFigure

programu. UIFigure = uifigure; programu. UIFigure. Position = [100 100 640 480]; programu. UIFigure. Name = 'Kielelezo cha UI';

Unda Kikundi cha Tab

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

Kuunda SetupTab

programu. SetupTab = uitab (app. TabGroup); programu. SetupTab. Title = 'Setup';

Unda Kitufe cha RunDiagnostic

programu. RunDiagnosticButton = uibutton (app. SetupTab, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (programu, @RunDiagnosticButtonPush, kweli); programu. RunDiagnosticButton. FontWeight = 'ujasiri'; programu. RunDiagnosticButton. Position = [465 78 103 23]; programu. RunDiagnosticButton. Text = 'Run Diagnostic';

Kuunda Ufanisi wa NishatiKupimaEditFieldLabel

programu. EnergyEfficiencyRatingEditFieldLabel = uilabel (app. SetupTab); programu. EnergyEfficiencyRatingEditFieldLabel. HorizontalAlignment = 'right'; programu. EnergyEfficiencyRatingEditFieldLabel. Position = [8 425 135 22]; programu. EnergyEfficiencyRatingEditFieldLabel. Text = 'Upimaji wa Ufanisi wa Nishati';

Unda Utengenezaji wa NishatiUpimaji wa Kiwango cha Nishati

programu. EnergyEfficiencyRatingEditField = uieditfield (app. SetupTab, 'numeric'); programu. EnergyEfficiencyRatingEditField. Limits = [0 100]; programu. EnergyEfficiencyRatingEditField. ValueChangedFcn = createCallbackFcn (app, @EnergyEfficiencyRatingEditFieldValueChanged, true); programu. EnergyEfficiencyRatingEditField. HorizontalAlignment = 'center'; programu. EnergyEfficiencyRatingEditField. Position = [158 425 100 22];

Kuunda PowerOutputRatingEditFieldLabel

programu. PowerOutputRatingEditFieldLabel = uilabel (app. SetupTab); programu. PowerOutputRatingEditFieldLabel. HorizontalAlignment = 'right'; programu. PowerOutputRatingEditFieldLabel. Position = [18 328 118 22]; programu. PowerOutputRatingEditFieldLabel. Text = 'Upimaji wa Pato la Nguvu';

Kuunda PowerOutputRatingEditField

app. PowerOutputRatingEditField = uieditfield (programu. SetupTab, 'nambari'); programu. PowerOutputRatingEditField. Limits = [0 Inf]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (programu, @PowerOutputRatingEditFieldValueChanged, kweli); programu. PowerOutputRatingEditField. HorizontalAlignment = 'center'; programu. PowerOutputRatingEditField. Position = [151 328 100 22];

Unda AvgLocalSpeedEditFieldLabel

programu. AvgLocalSpeedEditFieldLabel = uilabel (app. SetupTab); programu. AvgLocalSpeedEditFieldLabel. HorizontalAlignment = 'right'; programu. AvgLocalSpeedEditFieldLabel. Position = [27 231 100 22]; programu. AvgLocalSpeedEditFieldLabel. Text = 'Avg. Kasi ya Mitaa ';

Unda AvgLocalSpeedEditField

programu. AvgLocalSpeedEditField = uieditfield (app. SetupTab, 'numeric'); programu. AvgLocalSpeedEditField. Limits = [0 70]; app. AvgLocalSpeedEditField. ValueChangedFcn = createCallbackFcn (programu, @AvgLocalSpeedEditFieldValueChanged, true); programu. AvgLocalSpeedEditField. HorizontalAlignment = 'center'; programu. AvgLocalSpeedEditField. Position = [142 231 100 22];

Kuunda DesiredDistancefromHouseEditFieldLabel

programu. DesiredDistancefromHouseEditFieldLabel = uilabel (app. SetupTab); programu. DisiredDistancefromHouseEditFieldLabel. HorizontalAlignment = 'right'; programu. DisiredDistancefromHouseEditFieldLabel. Position = [24 129 100 28]; programu. DisiredDistancefromHouseEditFieldLabel. Text = {'Umbali Unayotaka'; 'kutoka Nyumba'};

Unda DDFH

programu. DDFH = uieditfield (app. SetupTab, 'numeric'); programu. DDFH. Mipaka = [0 50]; programu. DDFH. ValueChangedFcn = createCallbackFcn (programu, @DDFHValueChanged, kweli); programu. DDFH. HorizontalAlignment = 'center'; programu. DDFH. Position = [139 135 100 22];

% Unda Kiashiria cha Joto la Kuelekeza

programu. TemperatureDirectionSwitchLabel = uilabel (app. SetupTab); programu. TemperatureDirectionSwitchLabel. HorizontalAlignment = 'center'; programu. TemperatureDirectionSwitchLabel. Position = [410 343 124 22]; programu. TemperatureDirectionSwitchLabel. Text = 'Mwelekeo wa Joto';

Kuunda JotoDirectionSwitch

programu. TemperatureDirectionSwitch = uiswitch (app. SetupTab, 'slider'); programu. TemperatureDirectionSwitch. Items = {'Up', 'Down'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (programu, @TemperatureDirectionSwitchValueChanged, true); programu. TemperatureDirectionSwitch. Position = [449 380 45 20]; programu. TemperatureDirectionSwitch. Value = 'Up';

Kuunda TempSettingsTab

programu. TempSettingsTab = uitab (app. TabGroup); programu. TempSettingsTab. Title = 'Temp. Mipangilio ';

Kuunda Joto1SpinnerLabel

programu. Temperature1SpinnerLabel = uilabel (app. TempSettingsTab); programu. Temperature1SpinnerLabel. HorizontalAlignment = 'center'; programu. Joto1SpinnerLabel. Position = [66 363 76 28]; programu. Temperature1SpinnerLabel. Text = {'Joto'; '# 1'};

Kuunda Joto1Spinner

programu. Temperature1Spinner = uispinner (app. TempSettingsTab); programu. Joto 1Spinner. Mipaka = [60 90]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (programu, @ Temperature1SpinnerValueChanged, true); programu Joto1Spinner. Position = [157 346 100 68]; programu. Joto1Spinner. Uthamani = 60;

Kuunda joto2SpinnerLabel

programu. Temperature2SpinnerLabel = uilabel (app. TempSettingsTab); programu. Temperature2SpinnerLabel. HorizontalAlignment = 'center'; programu. Temperature2SpinnerLabel. Position = [66 248 76 28]; app. Temperature2SpinnerLabel. Text = {'Joto'; '# 2'};

Unda Joto2Spinner

programu. Temperature2Spinner = uispinner (app. TempSettingsTab); programu. Temperature2Spinner. Limits = [60 90]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (programu, @ Temperature2SpinnerValueChanged, true); programu. Temperature2Spinner. Position = [157 230 100 70]; programu. Temperature2Spinner. Thamani = 60;

Kuunda kubadili

programu. Switch = uiswitch (app. TempSettingsTab, 'slider'); programu. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (programu, @SwitchValueChanged, kweli); programu. Switch. FontName = 'Nyala'; programu. Switch. FontSize = 28; programu. Switch. Position = [522 21 74 32]; programu. Switch. Value = '0';

Kuunda EditFieldLabel

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

Kuunda tempnow

app.tempnow = uieditfield (app. TempSettingsTab, 'nambari'); programu.kujua. Mipaka = [60 89]; app.tempnow. ValueChangedFcn = createCallbackFcn (programu, @tempnowValueChanged, kweli); app.tempnow. HorizontalAlignment = 'kituo'; app.tempnow. FontSize = 26; programu.juzi. Position = [409 230 133 117]; programu.tempnow. Thamani = 60;

Kuunda GaugeLabel

programu. GaugeLabel = uilabel (app. TempSettingsTab); programu. GaugeLabel. HorizontalAlignment = 'center'; programu. GaugeLabel. Position = [225 32 42 22]; programu. GaugeLabel. Text = 'Pima';

Kuunda kupima

programu. Gauge = uigauge (app. TempSettingsTab, 'mviringo'); programu. Gauge. Mipaka = [60 90]; programu. Gauge. MajorTicks = [60 65 70 75 80 85 90]; programu. Gauge. Position = [185 69 120 120]; programu. Gauge. Thamani = 60;

Unda Tabia ya Akiba

programu. SavingsTab = uitab (app. TabGroup); programu. SavingsTab. Title = 'Akiba';

Kuunda UIAxes

programu. UIAxes = uiaxes (programu. SavingsTab); jina (programu. programu. UIAxes. Color = [0.9412 0.9412 0.9412]; programu. UIAxes. Position = [146 219 348 237];

Kuunda ThisMonthCostEditFieldLabel

programu. ThisMonthCostEditFieldLabel = uilabel (app. SavingsTab); programu. ThisMonthCostEditFieldLabel. HorizontalAlignment = 'center'; programu. ThisMonthCostEditFieldLabel. Position = [439 96 94 22]; programu. ThisMonthCostEditFieldLabel. Text = 'Gharama ya Mwezi huu';

Unda HiiMonthCostEditField

programu. ThisMonthCostEditField = uieditfield (app. SavingsTab, 'numeric'); programu. ThisMonthCostEditField. Limits = [0 Inf]; programu. ThisMonthCostEditField. ValueDisplayFormat = '$% 7.2f'; programu. ThisMonthCostEditField. HorizontalAlignment = 'center'; programu. HiiMonthCostEditField. Position = [417 39 137 58];

Kuunda Jumla ya KuokoaEditFieldLabel

programu. TotalSavingsEditFieldLabel = uilabel (app. SavingsTab); programu. TotalSavingsEditFieldLabel. HorizontalAlignment = 'right'; programu. TotalSavingsEditFieldLabel. Position = [111 96 77 22]; programu. TotalSavingsEditFieldLabel. Text = 'Jumla ya Akiba';

Kuunda Jumla ya HifadhiEditField

programu. TotalSavingsEditField = uieditfield (app. SavingsTab, 'numeric'); programu. TotalSavingsEditField. Limits = [0 Inf]; programu. TotalSavingsEditField. ValueDisplayFormat = '$% 9.2f'; programu. TotalSavingsEditField. HorizontalAlignment = 'center'; programu. TotalSavingsEditField. Position = [88 39 137 58]; mwisho mwisho

mbinu (Ufikiaji = umma)

Jenga programu

programu ya kazi = Control_1

Kuunda na kusanidi vifaa

tengeneza vifaa (programu)

Sajili programu na Mbuni wa App

rejistaApp (programu, programu. Usasishaji)

ikiwa nargout == 0

mwisho mwisho wa programu

Nambari inayotekelezwa kabla ya kufutwa kwa programu

kazi kufuta (programu)

Futa UIFigure wakati programu inafutwa

futa (app. UIFigure) mwisho mwisho

Labda utapata kosa, ambalo sio shida. Funga tu GUI ambayo ilitengenezwa baada ya kushinikiza kukimbia, tutakusanya programu na data zingine zinazofaa kwa muda mfupi.

Kwa kuwa Matlab imewekwa tunaweza kuendelea na chatu. Kwanza, endesha programu ya chatu iwe kutoka kwa haraka ya amri yako (kwenye windows) au kwa kutumia faili ya.exe kwenye folda yako ya chatu. Hakikisha kwamba maktaba zote zinazofaa zinawekwa kwa kutumia amri ya kuagiza.

kuagiza serial

kuagiza muda wa kuagiza csv

Hizi ndizo maktaba tatu utahitaji kuanza, ingawa tutatengeneza maktaba yetu hivi karibuni. Ikiwa kulikuwa na aina fulani ya kosa na amri hizi, rudi nyuma na uhakikishe kuwa maktaba zimewekwa na ziko kwenye folda ya Lib kwenye folda ya chatu. Ifuatayo tutazalisha kile nilichoita maktaba ya pythonlogger. Jina hili sio lazima, unaweza kuliita chochote unachotaka, ni jina tu la faili ya chatu (.py) unayounda.

Fungua kihariri cha maandishi, ninatumia Sublime3 lakini notepad inafanya kazi vizuri, na ingiza nambari hii.

def pythonprint ():

kuagiza pythonlogger kuagiza serial serial time kuagiza csv ser = serial. Serial ('COM8') # COM8 ni bandari ya serial ya arduino, hii itakuwa tofauti kwa kila mtumiaji, yaani angalia bandari yako ya serial katika seru ya IDE ya seru. flushInput () wakati Kweli: jaribu: ser_bytes = ser.lineline () chapa (ser_bytes) na wazi ("test_data.csv", "a") kama f: mwandishi = csv.writer (f, delimiter = ",") # inaweka data kuwa ingizwa kama mwandishi aliyetengwa na koma.

Hifadhi maandishi kama "ingiza jina la maktaba unayotaka".py kwenye folda ya Lib. Pia kumbuka kuwa mstari wa def pythonprint () unafafanua jina la kazi ambayo utaita, kwa hivyo unaweza kuibadilisha ili kufafanua "ingiza jina unalotaka kwa kazi yako" (). Maktaba inapookolewa tunaweza kuendelea na nambari ya arduino.

Fungua IDE ya arduino na ufungue madirisha mawili mapya ya mchoro. Hifadhi faili hizi mbili za mchoro mahali pazuri, jina la faili hizi haijalishi. Kisha futa nambari yote chaguomsingi na ubadilishe ifuatayo.

Kwa arduino ya kupokea:

# pamoja

# pamoja na # pamoja # # pamoja na // hii haitumiki lakini inahitajika kukusanya dereva wa RH_ASK; data dataStruct {kuelea temp; } data yangu; kuanzisha batili () {Serial.begin (9600); // Utatuaji tu ikiwa (! Driver.init ()) Serial.println ("init imeshindwa"); } kitanzi batili () {uint8_t buf [RH_ASK_MAX_MESSAGE_LEN]; uint8_t buflen = saizi ya (buf); ikiwa (dereva.recv (buf, & buflen)) // Isiyozuia {int i; // Ujumbe na hundi nzuri iliyopokelewa, itupe. //driver.printBuffer ("Got:", buf, buflen); memcpy (& myData, buf, sizeof (myData)); Serial.println (""); Serial.print (myData.temp); }}

P. S. //driver.printBuffer …….. nk laini ni nambari ya majaribio. Hakuna haja ya kuwa na wasiwasi juu yake isipokuwa utambuzi wako na unataka kujua ikiwa kweli unapokea data.

Kwa transmitter arduino

# pamoja

#jumuisha # pamoja na # pamoja na // hii haitumiki lakini inahitajika kukusanya # ni pamoja na # pamoja na int pin = 4; DHT11 dht11 (pini); Dereva wa RH_ASK; data dataStruct {kuelea temp; } data yangu; byte tx_buf [sizeof (myData)] = {0}; // Kwa hivyo hoja ni bitrate, sambaza pini (tx), // pokea pini (rx), ppt pini, isInverse. Zilizopita 2 hazitumiki.punguza usanidi () {Serial.begin (9600); // Utatuaji tu ikiwa (! Driver.init ()) Serial.println ("init imeshindwa"); } kitanzi batili () {int err; kuelea temp, humi; uint8_t msg; ikiwa ((err = dht11.read (humi, temp)) == 0) myData.temp = temp; memcpy (tx_buf, & myData, sizeof (myData)); byte zize = saizi ya (myData); {Serial.println (myData.temp); tuma dereva ((uint8_t *) tx_buf, zize); dereva.waitPacketSent (); // kusimamisha utekelezaji hadi data yote itumiwe kuchelewa (2000); // subiri sekunde 2}}

Amri zinazojumuisha zinapaswa kuwa za kutosha, lakini ikiwa una maswala yoyote baadaye na uhamishaji wa data unaweza kutaka kuangalia kwenye folda ya maktaba ya RadioHead na ujumuishe majina ya faili yaliyosalia, katika muundo huo huo.

Hatua ya 5: Kufanya Kazi

Kufanya Kazi
Kufanya Kazi
Kufanya Kazi
Kufanya Kazi
Kufanya Kazi
Kufanya Kazi

Sasa kwa kuwa tuna nambari zote pamoja na arduino wamekusanyika, tunaweza kuunganisha arduino kwenye kompyuta yako na kupakia nambari hiyo. Hakikisha unatuma nambari sahihi kwa wadhibiti-kupokea na kupitisha. Unaweza kuwa na arduino zote mbili zilizounganishwa kwenye kompyuta yako wakati hii inaendelea lakini itabidi uhakikishe kuwa una bandari sahihi iliyochaguliwa kusonga mbele, au unaweza kukata arduino inayopitisha na kuiweka nguvu kutoka kwa chanzo kingine mara tu msimbo ume imepakiwa.

Ukizungumzia ambayo, unapaswa kuchagua bandari ambayo imeunganishwa na upokeaji wako wa arduino kutoka kwa menyu ya zana za IDE sasa na uendesha chatu.

Usifungue mfuatiliaji wa serial wakati unafanya hivi, chatu hawezi kusoma serial wakati mfuatiliaji uko wazi. Mara chatu iko wazi piga kazi ya chapa kama ifuatavyo.

pythonlogger.pythonprint ()

Hii itaanza ukusanyaji wa data kutoka bandari ya serial ya arduino. Ukifungua folda yako ya chatu sasa, utaona kuwa faili mpya ya.csv imeundwa iitwayo "test_data.csv", ambayo inashikilia wakati wote na habari ya joto. Hii itakuwa faili ambayo Matlab atapata kufanya mahesabu na udhibiti wake wote.

Onyo lingine: usifungue test_data.csv wakati data inapatikana au kuandikwa. Ukifanya hivyo, chatu na / au nambari ya Matlab itaanguka na kurudisha kosa

Ukiamua kufungua.csv baadaye, utaona kuwa safuwima ya muda ni safu tu kubwa sana ya nambari. Hiyo ni kwa sababu amri ya time.time () inaandika idadi ya sekunde tangu Januari 1, 1970.

Wakati huu chatu inapaswa kuchapisha data ya joto inayosoma kutoka bandari ya serial. Inapaswa kuonekana kama:

b'25.03 '/ r / n

Usijali juu ya herufi za ziada, faharisi za nambari za Matlab za nambari tano za kati kwenye safu ya pili ya faili ya.csv.

Sasa kwa kuwa programu zote zinazounga mkono zinafanya kazi na data inakusanywa tunaweza kuanza kukusanya data ya GPS kutoka kwa programu ya rununu ya Matlab ambayo ilianzishwa mapema na kuendesha nambari ya Matlab GUI. Mara tu unapokuwa kwenye kichupo cha sensorer cha Matlab mobile, chagua GPS na bonyeza kitufe cha kuanza.

Ikiwa wewe ni mpya kwa Matlab mobile rejea hatua ya 4 na angalia picha za skrini hapo juu. Ikiwa bado una shida, hakikisha umeunganishwa na kompyuta uliyochagua mapema (kwenye kichupo cha mipangilio) na utumie kiunga kutoka kwa amri ya "kontakt" ili kuangalia kuwa Matlab yuko mkondoni.

Hatua ya 6: Kutumia Mpango

Kutumia Mpango
Kutumia Mpango

Kuna mambo mengi yanaendelea nyuma kwenye mfumo huu. Takwimu za joto hukusanywa na kuingizwa na arduino na pyton, Matlab inakusanya data ya GPS kutoka kwa simu yako na inakokotoa mahesabu ili kuona uko mbali sana na nyumba yako na kuweka thermostat yako kulingana na habari hiyo yote. Mahali unapoingia kunatoa mapendeleo yako.

Endesha nambari ya Matlab GUI. Fungua faili ya.mlapp na uangalie kichupo cha kwanza. Utahitaji kukusanya habari hii mwenyewe, ufanisi na kiwango cha nguvu cha kitengo chako cha kupokanzwa / baridi inaweza kupatikana kwenye kitengo yenyewe, na kasi yako ya wastani ni makadirio mazuri ya jinsi unavyoendesha haraka. Mara tu maadili yakiingizwa, gonga kitufe cha "Run Diagnostic" na programu inadhibiti thermostat yako kukusanya habari kuhusu nyumba yako.

Nenda kwenye menyu inayofuata.

Hatua ya 7: Udhibiti wa Joto

Udhibiti wa Joto
Udhibiti wa Joto

Menyu hii hukuruhusu kuchagua joto unalopendelea ukiwa nyumbani na mbali. Weka Joto # 1 kwa joto lako la kupendeza, na Joto # 2 kwa kiwango cha juu au cha chini ambacho ni salama kwa nyumba yako (hakikisha hauiweki kwa digrii 100 wakati una mbwa nyumbani, n.k.).

Hatua ya 8: Takwimu za Kihistoria

Takwimu za Kihistoria
Takwimu za Kihistoria

Mwishowe unaweza kutazama akiba yako ni pesa ngapi kwa kutumia udhibiti wa moja kwa moja. Kwa kweli hii inakadiria ni nguvu ngapi ingetumika ikiwa thermostat yako ingewekwa kwenye joto unayopendelea 24/7, kisha inachukua nguvu yako halisi inayotumika.

Bahati nzuri.

Ilipendekeza: