Orodha ya maudhui:
- Hatua ya 1: Kuiweka Pamoja
- Hatua ya 2: Mpokeaji
- Hatua ya 3: Transmitter
- Hatua ya 4: Kanuni
- Hatua ya 5: Kufanya Kazi
- Hatua ya 6: Kutumia Mpango
- Hatua ya 7: Udhibiti wa Joto
- Hatua ya 8: Takwimu za Kihistoria
Video: Autostat: Thermostat ya mbali: Hatua 8 (na Picha)
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:53
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
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
Hatua ya 3: 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
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
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
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
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:
Kesi ngumu ya Apple TV Siri ya Mbali na Kitafuta Vigae cha Bluetooth: Hatua 7 (na Picha)
Kesi ngumu ya Apple TV Siri ya Kijijini na Kitafuta Kigae cha Bluetooth: Niliwahi kusoma maelezo ya iPhone kama " Fimbo ya siagi iliyotiwa mafuta na kuchomwa na WD40 kwa kipimo kizuri! &Quot; Nadhani ilikuwa wakati mtindo 6 ulitoka na kila mtu alikuwa akiangusha simu zake za bei ghali na kuvunja glasi
Kidude cha moto cha Bluetooth cha mbali: Hatua 6 (na Picha)
Kilometa cha mbali cha Bluetooth: Je! Haitakuwa nzuri kuwasha moto zaidi ya moja kwa wakati mmoja? Au hata uwe na umbali salama kwa milipuko hatari zaidi. Katika mradi huu nitakuonyesha jinsi ya kuunda mzunguko ambao unaweza kufanya hivyo tu kwa msaada wa utendaji wa Bluetooth
Jinsi ya Kurekebisha Udhibiti wa Mbali wa Xbox - Kupunguza Kichunguzi Chagua: Hatua 4 (na Picha)
Jinsi ya Kurekebisha Kidhibiti cha Mbali cha Xbox - Kupunguza Kukodisha uwezo: Hii inaweza kufundishwa kwa kujibu kuwa na Kidhibiti cha mbali cha Xbox kilichovunjika. Dalili ni kwamba kijijini kinaonekana kuwaka sawa. Wakati ninaelekeza kijijini kwenye Mpokeaji wa Runinga tu kwa madhumuni ya majaribio, naweza kuona taa nyekundu ya LED ikiwaka juu ya mpokeaji
Jinsi ya kuunda Roboti ya Kujisawazisha iliyodhibitiwa kwa mbali ya 3D: Hatua 9 (na Picha)
Jinsi ya kuunda Roboti ya Kujisawazisha Iliyodhibitiwa kwa mbali ya 3D: Hii ni mageuzi ya toleo la zamani la B-roboti. CHANZO CHA KUFUNGUA 100% / roboti ya Arduino. CODE, sehemu za 3D na vifaa vya elektroniki viko wazi kwa hivyo jisikie huru kuibadilisha au kuunda toleo kubwa la roboti. Ikiwa una mashaka, maoni au unahitaji msaada fanya
Onyesha Picha Mbali na PSP / Simu ya Mkononi kwenye Picha ya Dijitali: Hatua 3
Onyesha Picha Mbali na PSP / Simu ya Mkononi kwenye fremu ya Picha ya Dijitali: Kweli … kichwa kinasema yote kweli … Hii ni rahisi kufundisha na haiitaji vifaa au programu yoyote zaidi ya vile unapaswa kuwa nayo Maswali Yoyote Yaniandikie Maoni au Maoni! Sio lazima ufanye marekebisho yoyote kufanya th