Мазмуну:
- 1 -кадам: Бардыгын бириктирүү
- 2 -кадам: Алуучу
- 3 -кадам: өткөргүч
- 4 -кадам: Код
- 5 -кадам: Аны иштетүү
- 6 -кадам: Программаны колдонуу
- 7 -кадам: Температураны көзөмөлдөө
- 8 -кадам: Тарыхый маалыматтар
Video: Автостат: Алыскы термостат: 8 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Балким сиз сурап жаткан суроо "эмнеге башка алыстан термостатты жасап жатасыз?"
Бул суроого жооп берүү керек болчу, жана базардагы акылдуу термостаттар өтө кымбат.
Адилеттүү эскертүү, бул "түшүнүктүн далили", ал термостатты иш жүзүндө көзөмөлдөө үчүн бир нече кошумча чыгымдарды талап кылат, бирок өзөгү ордунда жана сиздин конкреттүү жагдайыңызга жараша өзгөртүлүшү мүмкүн. Ошондой эле, бул дагы эле уланып жаткан жумуш, андыктан бир нече жаңыртууларды жана өзгөрүүлөрдү күтүңүз (өзгөчө Matlab кодексине)
Баштоо үчүн мен сизге эскертип кетким келет, бул үчүн үч программа (алардын бири абдан кымбат), бир нече китепканалар жана программалар үчүн колдоо пакеттери талап кылынат жана алардын баардыгы бири -бири менен сүйлөшүүсү керек. Анын баш оорусу. Бул эскертүү менен материалдарды баштайлы.
Аппараттык
- arduino nano
- arduino uno (же башка нано, мен жөн эле унону колдондум, анткени менде бирөө жатты)
- ар кандай секирүүчү кабелдер, кээ бир эркек/эркек жана үч эркек/ургаачы секирген эки комплект
- 433MHz радио жыштыгын (RF) кабыл алуучу, мен MX-05V колдондум
- 433MHz RF өткөргүч, мен MX-FS-03V колдондум
- DHT11 жогорку тактык термометр жана нымдуулук сенсору (мен колдонгон үч резинке чипке орнотулган, буга чейин керектүү резисторлор орнотулган)
- нан
- GPS менен телефон (бул учурда iPhone 8, бирок мен дагы Galaxy S8 колдонгом)
- 3D басылган контейнер (чынында эле зарыл эмес, кандайдыр бир контейнер иштейт же такыр жок)
Программалык камсыздоо
- MathWorksтон Matlab (менде 2018a чыгарылышы бар, бирок мен 2017a-b басылмаларын да колдонгом)
- Телефонуңузга Matlab mobile орнотулган
- Matlab үчүн arduino колдоо пакети
- Matlab үчүн iPhone сенсордук пакети
- arduino IDE
- RadioHead arduino IDE пакеттерин жана китепканаларын колдойт
- Arduino IDE үчүн DHT11 китепканасы
- python 3.7 (pyserial китепканасынын же сериялык китепкананын орнотулгандыгын текшериңиз, ал 3.4 же андан кийинки версия үчүн болушу керек)
1 -кадам: Бардыгын бириктирүү
Биринчиден, мен сизге сиздин бөлүктөрүңүздүн иштеп жатканына жана зымдардын туура экенине ынануу үчүн RF өткөргүчтөрү менен иштеген бир нече ардуино үйрөткүчтөрүн жасоону сунуштайт элем. Жеткиликтүү көптөгөн мисалдар бар, код камтылган (ал жерде биз үчүн C жана C ++ жөнүндө эч нерсе билбегендер үчүн).
Ардуино менен сенсорлорду чогултуу үчүн төмөндөгү электр схемаларын аткарыңыз. Ардуинолорду туташтыруу учурунда эстен чыгарбоо керек болгон нерсе, мен колдонгон маалымат порттору талап кылынбайт, бирок сунушталат.
ЭГЕР сиз колдонгон маалымат портторун өзгөртүүнү чечсеңиз, анда кодуңуздагы төөнөгүчтөрдү аныктап алышыңыз керек. Жеке менимче, arduino китепканалары тааныган демейки портторго жабышуу оңой.
Жөн эле түшүнүктүү болуш үчүн, нано менен уно бири -бирин алмаштырат, бирок мен температуранын мониторунун өлчөмүн азайтуу үчүн долбоордун өткөргүч тарабы үчүн нанону колдондум.
Кошумча эскертүү: нанону кармап турган жашыл түстөгү контейнер 3D басылган контейнер.
2 -кадам: Алуучу
3 -кадам: өткөргүч
4 -кадам: Код
Зымдарды бүтүргөндөн кийин, бардык программаларды иштетип, китепканаларды орнотушуңуз керек (эгер сизде жок болсо), мен сизде бар деп ойлойм, сиз Matlabти иштетип, iPhone колдоо пакетин иштетишиңиз керек. Телефонуңуз да, Матлабыңыз дагы ушул убакта бир wifi тармагында болушу керек.
Matlabтин командалык терезесине жазыңыз:
туташтыргычы күйүк
Бул сизден iPhone'уңузга туташуу үчүн колдонула турган беш орундуу сырсөздү киргизүүнү талап кылат. Сырсөздү унутпаганыңызды текшериңиз. Сырсөздү киргизгенден кийин Matlab сиздин IP дарегиңизди камтыган кээ бир маалыматты көрсөтөт. Муну кийинки кадамда колдонуңуз, ал Matlab mobileдагы "Сенсорлор менен иштөө" жардам менюсунун көрсөтмөлөрүнөн келип чыгат.
- Сенсордук маалыматтарды MathWorks Cloud же компьютерге жөнөтүү үчүн бул кадамдарды аткарыңыз:
- Эгерде сиз сенсордук маалыматтарды компьютерге жөнөтүп жатсаңыз жана ал орнотула элек болсо, MATLABдагы Apple iOS сенсорлору үчүн MATLAB колдоо пакетин жүктөп алып орнотуңуз.
- Орнотуулар аркылуу MATLAB Mobile'ди MathWorks Cloud же компьютерге туташтырыңыз.
- MATLABда (сиздин компьютерде) mobiledev объектисин түзүңүз, мисалы: >> m = mobiledev
- Бир же бир нече сенсорду тандап, Старт басыңыз.
Сенсор дайындарын түзмөгүңүзгө локалдык түрдө каттоо үчүн бул кадамдарды аткарыңыз:
- Сенсорлор экранында маалыматтарды чогултууну каалаган сенсорлорду тандаңыз.
- Журналды тандаңыз.
- Баштоо баскычын басыңыз.
- Маалымат чогултуп бүткөндөн кийин, Stop баскычын басыңыз.
- Калкыма терезеге сенсор журналынын атын киргизиңиз.
- Керек болсо 1-5 кадамдарды кайталаңыз.
Бул бөлүм 4 -бөлүккө кайрылат, андыктан азырынча маалыматтарды чогултууну баштоонун кажети жок. Телефонуңузду колуңузда кармап туруңуз жана Matlab mobile даяр.
Эми сиз Matlab код файлдарын сактоо үчүн компьютериңиздин кайсы бир жеринде папка түзүшүңүз керек. Сизде төрт башка файл болот, экөө фондук функциялар үчүн (.m файлдары) жана GUI (.mlapp) үчүн бир Matlab код файлы,.
Биринчиден, үйүңүздөгү абанын массалык эсеби (бул Matlabке үйүңүздү жылытууга/муздатууга канча убакыт кетерин билүүгө мүмкүндүк берет)
функция [Массасы] = CalcMass (T_ins, P_out, Chng_dir)
runCalc = 0; Tmp_start = T_ins; time_start = саат; time_end = 0 while runCalc <= 1 if T_ins == (Tmp_start+(7*Chng_dir)) time_end = саат; PwrCntr = 0; runCalc = 0; else PwrCntr = P_out; runCalc = runCalc+0.1 аяктоо убактысы_diag = time_end-time_start Mass = (P_out*time_diag) /7.035
Ал эми экинчиси:
функция [timestamps, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, ылдамдык, T_pref, массалык)
AutoStat = 1; i = 1; ал эми AutoStat == 1 time_start = саат; m = mobiledev; t = csvread ('values.csv', 0, 1); t = t (i); убакыт белгилери = [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.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; %сиздин убактыңызды кайтарат time_rtn = (Dist-r_pref)./ ылдамдык; %үйдүн кондиционеринин жана аба массасынын өчүрүлүшүнүн негизинде керектүү термостат жөндөөсүн эсептейт. calcTmp_set = ((-1.*P_out.*time_rtn)./ (масс.*(1.005)))+T_pref; %тегерек (calcTmp_set) ~ = тегерек (t) timeACon = саат болсо, учурдагы термостаттын жөндөөсүн өзгөртүү керекпи же жокпу аныктайт; PwrCntr = P_out; timeACon = timeACon + clock-time_start; наркы = 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 буйрук терезесине төмөнкү буйрукту киргизген менин сүйүктүү ыкма менен ачуу керек:
appdesigner
Колдонмо дизайнери ачык болгондон кийин, жаңы колдонмо файлын ачыңыз (.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.container. 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. Label Gauge matlab.ui.control. Сактоо табчасы matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField
ыкмалар (Кирүү = купуя)
% Мааниси өзгөргөн функция: tempnow
милдети tempnowValueChanged (колдонмо, окуя) temp = app.tempnow. Value; temp = randi ([60, 90], 1, 50) app. Gauge. Value = 0 for i = length (temp) app. Gauge. Value = temp (i) pause (1) end end
% Мааниси өзгөргөн функция: TemperatureDirectionSwitch
функция TemperatureDirectionSwitchValueChanged (app, event) way = app. TemperatureDirectionSwitch. Value; way = uint8 (way) way = length (way) if way == 4 Chng_dir = -1; else Chng_dir = 1; end Chng_dir; аяктоо
% Мааниси өзгөргөн функция: DDFH
DDFHValueChanged функциясы (колдонмо, окуя) r_pref = app. DDFH. Value; аяктоо
% Мааниси өзгөргөн функция: AvgLocalSpeedEditField
милдети AvgLocalSpeedEditFieldValueChanged (app, event) speed = app. AvgLocalSpeedEditField. Value; аяктоо
% Мааниси өзгөргөн функция: PowerOutputRatingEditField
функция PowerOutputRatingEditFieldValueChanged (app, event) value = app. PowerOutputRatingEditField. Value; аяктоо
% Мааниси өзгөргөн функция: EnergyEfficiencyRatingEditField
милдети EnergyEfficiencyRatingEditFieldValueChanged (app, event) value = app. EnergyEfficiencyRatingEditField. Value; аяктоо
% Button басылган функция: RunDiagnosticButton
функция RunDiagnosticButtonPushed (app, event) way = app. TemperatureDirectionSwitch. Value; way = uint8 (way) way = length (way) if way == 4 Chng_dir = -1; else Chng_dir = 1; аягында T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)
аяктоо
% Мааниси өзгөргөн функция: Температура1Спиннер
функция Temperature1SpinnerValueChanged (app, event) value = app. Temperature1Spinner. Value; аяктоо
% Мааниси өзгөргөн функция: Temperature2Spinner
функция Temperature2SpinnerValueChanged (app, event) value = app. Temperature2Spinner. Value; аяктоо
% Мааниси өзгөргөн функция: Которуу
SwitchValueChanged функциясы (колдонмо, окуя) m = mobiledev; Lat_in = m. Latitude Lon_in = m. Longitude P_out = 0; r_pref = app. DDFH. Value; T_pref = app. Temperature1Spinner. Value; ылдамдык = m. Speed; массасы = 200; ылдамдык = app. AvgLocalSpeedEditField. Value; Auto_Stat = app. Switch. Value; dist_cntrl (Lat_in, Lon_in, P_out, r_pref, T_pref, ылдамдык, массалык) аягы
% Колдонмонун башталышы жана курулушу
ыкмалар (Кирүү = купуя)
% UIFigure жана компоненттерди түзүү
createComponents функциясы (колдонмо)
% UIFigure түзүү
app. UIFigure = uifigure; app. UIFigure. Position = [100 100 640 480]; app. UIFigure. Name = 'UI Figure';
% 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, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (app, @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 (app, @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 = 'Power Output Rating';
% PowerOutputRatingEditField түзүү
app. PowerOutputRatingEditField = uieditfield (app. SetupTab, 'сандык'); app. PowerOutputRatingEditField. Limits = [0 Inf]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (app, @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 (app, @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 = {'Каалаган аралык'; 'үйдөн'};
% DDFH түзүү
app. DDFH = uieditfield (app. SetupTab, 'сандык'); app. DDFH. Limits = [0 50]; app. DDFH. ValueChangedFcn = createCallbackFcn (app, @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 = 'Температуранын багыты';
% TemperatureDirectionSwitch түзүү
app. TemperatureDirectionSwitch = uiswitch (app. SetupTab, 'slider'); app. TemperatureDirectionSwitch. Items = {'Өйдө', 'Ылдый'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (app, @TemperatureDirectionSwitchValueChanged, true); app. TemperatureDirectionSwitch. Position = [449 380 45 20]; app. TemperatureDirectionSwitch. Value = 'Өйдө';
% TempSettingsTab түзүү
app. TempSettingsTab = uitab (app. TabGroup); app. TempSettingsTab. Title = 'Темп. Жөндөөлөр ';
Температураны түзүү1SpinnerLabel
app. Temperature1SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature1SpinnerLabel. HorizontalAlignment = 'борбор'; app. Temperature1SpinnerLabel. Position = [66 363 76 28]; app. Temperature1SpinnerLabel. Text = {'Температура'; '#1'};
% Температураны түзүү1Спиннер
app. Temperature1Spinner = uispinner (app. TempSettingsTab); app. Temperature1Spinner. Limits = [60 90]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (app, @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 = {'Температура'; '#2'};
% Temperature2Spinner түзүү
app. Temperature2Spinner = uispinner (app. TempSettingsTab); app. Temperature2Spinner. Limits = [60 90]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (app, @Temperature2SpinnerValueChanged, true); app. Temperature2Spinner. Position = [157 230 100 70]; app. Temperature2Spinner. Value = 60;
% Switch түзүү
app. Switch = uiswitch (app. TempSettingsTab, 'slider'); app. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (app, @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 = '';
% Temnow түзүү
app.tempnow = uieditfield (app. TempSettingsTab, 'сандык'); app.tempnow. Limits = [60 89]; app.tempnow. ValueChangedFcn = createCallbackFcn (app, @tempnowValueChanged, true); 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, 'circular'); 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); титул (app. UIAxes, 'Аманат') xlabel (app. UIAxes, 'Ай жана Жыл') ylabel (app. UIAxes, 'Акча') колдонмо. 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]; аягы аягы
ыкмалар (Кирүү = коомдук)
% Колдонмо куруу
app app = Control_1
% Компоненттерди түзүү жана конфигурациялоо
createComponents (колдонмо)
% Колдонмону App Designer менен каттаңыз
registerApp (app, app. UIFigure)
эгер nargout == 0
колдонмонун аягы ачык
% Колдонмо жок кылынардан мурун аткарылган код
функцияны жок кылуу (колдонмо)
Колдонмо жок кылынганда % UIFigure жок кылынат
жок кылуу (app. UIFigure) аягы аягы
Сиз, балким, ката аласыз, бул эч кандай көйгөй эмес. Сиз иштетүүнү баскандан кийин түзүлгөн GUIди жаап коюңуз, биз калган программаларды жана маалыматтарды бир заматта чогултабыз.
Matlab орнотулгандыктан, биз питонго өтө алабыз. Биринчиден, python программасын командалык кеңешиңизден (терезелерде) же python папкаңыздагы.exe файлын колдонуу менен иштетиңиз. Бардык тиешелүү китепканалар импорттук буйрукту колдонуу менен орнотулганын текшериңиз.
серияны импорттоо
импорттоо убактысы импорт csv
Бул сиз баштооңуз керек болгон үч китепкана, бирок биз жакында өзүбүздүн китепканабызды түзөбүз. Эгерде бул буйруктарда кандайдыр бир ката болсо, кайра барып, китепканалар орнотулгандыгын жана python папкасындагы Lib папкасында экенин текшериңиз. Кийинки, мен pythonlogger китепканасы деп аталган нерсени түзөбүз. Бул аталыштын кереги жок, аны каалаган нерсеңиз деп атасаңыз болот, бул сиз түзгөн питон файлынын аталышы (.py).
Текст редакторун ачыңыз, мен Sublime3 колдоном, бирок блокнот жакшы иштейт жана бул кодду киргизиңиз.
def pythonprint ():
pythonlogger импорттук сериялык импорттоо убактысын импорттоо csv ser = serial. Serial ('COM8') # COM8 - бул ардуино сериялык порту, бул ар бир колдонуучу үчүн башкача болот, б.а. serdu портуңузду arduino IDE ser.flushInput () ичинде текшериңиз Ырас: аракет кылыңыз: ser_bytes = ser.readline () print (ser_bytes) with open ("test_data.csv", "a") as f: жазуучу = csv.writer (f, delimiter = ",") # дайындарды орнотот үтүр менен ажыратылган жазуучу катары жазылат.writerow ([time.time (), ser_bytes]) #маалыматтарды test_data.csv жазат, башкасынан: print ("Error Occured") break
Тексти "каалаган китепкананын атын киргизиңиз".py деп Lib папкасына сактаңыз. Ошондой эле def pythonprint () линиясы сиз чакыра турган функциянын аталышын аныктай турганын эске алыңыз, андыктан сиз муну def "функцияңызга каалаган атын киргизүү" () үчүн өзгөртө аласыз. Китепкана сакталганда, биз arduino кодуна өтө алабыз.
Arduino IDEди ачыңыз жана эки жаңы эскиз терезесин ачыңыз. Бул эки эскиз файлды ыңгайлуу жерге сактаңыз, бул файлдардын аталышы маанилүү эмес. Андан кийин бардык демейки кодду жок кылып, аны төмөнкүлөр менен алмаштырыңыз.
Ардуино алуу үчүн:
#кошуу
#include #include #include // бул колдонулбайт, бирок RH_ASK драйверин түзүү үчүн керек; struct dataStruct {float temp; } 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); }}
P. S. //driver.printBuffer…. ж.б сыноо коду. Эгерде диагнозуңузду аткарбасаңыз жана чындыгында маалыматтарды алып жатканыңызды билгиңиз келбесе, бул жөнүндө тынчсыздануунун кажети жок.
Ардуино өткөргүч үчүн
#кошуу
#include #include #include // бул колдонулбайт, бирок компиляциялоо үчүн керек #кошуу #include int pin = 4; DHT11 dht11 (пин); RH_ASK айдоочу; struct dataStruct {float temp; } myData; байт tx_buf [sizeof (myData)] = {0}; // Ошентип, аргументтер бит ылдамдыгы, өткөргүч пин (tx), // алуу пин (rx), ppt пин, isInverse. Акыркы 2 колдонулбайт.void setup () {Serial.begin (9600); // Мүчүлүштүктөрдү оңдоо (! Driver.init ()) Serial.println ("init ишке ашпай калды"); } void loop () {int err; сүзүү темп, humi; uint8_t msg; if ((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 -кадам: Аны иштетүү
Эми бизде бардык коддор чогулуп, ардуино чогултулгандыктан, биз ардуинону сиздин компьютерге туташтырып, кодду жүктөй алабыз. Туура кодду кабыл алуучу жана жөнөтүүчү микроконтроллерлерге жөнөткөнүңүздү текшериңиз. Сиз иштеп турганда ардуиноңузду компьютериңизге туташтырсаңыз болот, бирок сиз алдыга жылып жаткан туура портуңуз бар экенине ынанууңуз керек, же кодду чыгаргандан кийин, берүүчү ардуинону ажыратып, башка булактан кубаттай аласыз. жүктөлдү.
Бул жөнүндө айта турган болсок, азыр IDE куралдар менюсунан кабыл алуучу arduinoңузга туташкан портту тандап, python иштетишиңиз керек.
Муну аткарып жатканда сериялык мониторду ачпаңыз, монитор ачык кезде python сериалды окуй албайт. Python ачык болгондон кийин pythonprint функциясын төмөнкүдөй чакырыңыз.
pythonlogger.pythonprint ()
Бул arduino сериялык портунан маалыматтарды чогултууну баштайт. Эгерде сиз азыр питон папкаңызды ачсаңыз, анда "test_data.csv" деп аталган жаңы.csv файлы түзүлгөнүн көрөсүз, ал бардык убакыт жана температура маалыматын камтыйт. Бул Matlab бардык эсептөөлөрүн жана көзөмөлдөрүн жүргүзүү үчүн кире турган файл болот.
Дагы бир эскертүү: маалыматтарга жетүү же жазуу учурунда test_data.csv ачпаңыз. Эгер андай кылсаңыз, python жана/же Matlab коду бузулуп, ката жиберет
Эгерде сиз.csv файлын кийинчерээк ачууну чечсеңиз, анда убакыт мамычасы сандардын абдан чоң сабы экенин байкайсыз. Себеби time.time () буйругу 1970 -жылдын 1 -январынан бери секунда санын жазат.
Бул учурда python сериялык порттон окуп жаткан температура маалыматын басып чыгарышы керек. Бул окшош болушу керек:
b'25.03 '/r/n
Кошумча белгилер жөнүндө кабатыр болбоңуз.csv файлынын экинчи тилкесиндеги Matlab коду орто беш баалуулуктун индекстери.
Эми бардык колдоочу программалар иштеп жатат жана маалыматтар чогултулуп жатат, биз мурда орнотулган Matlab мобилдик программасынан GPS маалыматын чогултууну баштай алабыз жана Matlab GUI кодун иштете алабыз. Matlab mobile'дын сенсордук өтмөгүндө болгондон кийин, GPSти тандап, баштоо баскычын басыңыз.
Эгерде сиз Matlab mobile үчүн жаңы болсоңуз, 4 -кадамга кайрылып, жогорудагы скриншотторду караңыз. Эгерде сизде дагы эле көйгөйлөр болсо, сиз мурда тандаган компьютериңизге (орнотуулар өтмөгүндө) туташып турганыңызды текшериңиз жана Matlab онлайнда экенин текшерүү үчүн "туташтыргыч" командасынын шилтемесин колдонуңуз.
6 -кадам: Программаны колдонуу
Бул системада фондо көптөгөн нерселер болуп жатат. Температура маалыматтары arduino жана pyton тарабынан чогултулуп жана катталып жатат, Matlab телефонуңуздан GPS маалыматын чогултуп, үйүңүздөн канчалык алыс экениңизди көрүү үчүн эсептөөлөрдү жүргүзүп жатат жана термостатты ошол маалыматтын негизинде орнотуп жатат. Кирген жериңиз сиздин каалоолоруңузду камсыз кылат.
Matlab GUI кодун иштетүү.. Mlapp файлын ачыңыз жана биринчи өтмөктү караңыз. Бул үчүн маалыматты өзүңүз чогултууңуз керек, жылытуу/муздатуучу агрегаттын эффективдүүлүгүн жана кубаттуулугун көбүнчө агрегаттын өзүнөн табууга болот, жана сиздин орточо ылдамдыгыңыз канчалык тез айдаганыңызды жакшы баалоо. Маанилер киргизилгенден кийин, "Диагностиканы иштетүү" баскычын басыңыз жана программа сиздин үй жөнүндө маалымат чогултуу үчүн термостатты көзөмөлдөйт.
Кийинки менюга өтүңүз.
7 -кадам: Температураны көзөмөлдөө
Бул меню сизге үйдө жана алыс жерде каалаган температураны тандоого мүмкүндүк берет. Температура #1ди өзүңүздүн ыңгайлуу температураңызга, ал эми Температураңызды #2 үйүңүз үчүн коопсуз болгон жогорку же төмөн баага коюңуз (үйдө иттер бар болгондо аны 100 градуска койбогула.).
8 -кадам: Тарыхый маалыматтар
Акыр -аягы, автоматтык башкарууну колдонуу менен канча акча үнөмдөп жатканыңызды көрө аласыз. Бул сиздин термостатыңыз 24/7 каалаган температурага коюлса, канча энергия керектелээрин болжолдойт, андан кийин чыныгы энергияңызды алып салат.
Ишинерге ийгилик.
Сунушталууда:
Мультиметр/Arduino/pfodAppты колдонуу менен жогорку тактыкта алыскы маалыматтарды каттоо: 10 кадам (сүрөттөр менен)
Мультиметр/Arduino/pfodAppты колдонуу менен жогорку тактыкта алыскы маалыматтарды каттоо: 26 -апрелде жаңыртылган 4000ZC USB эсептегичтери менен иштөө үчүн такталган схема жана Android коддоосу талап кылынбайт каттоо үчүн жана
Алыскы CNC токтоочу жана монитор: 11 кадам (сүрөттөр менен)
Remote CNC Stop and Monitor: Бул долбоор алыстан Mach3кө STOP (ALT+S) аткаруунун арзан каражатын берет. Бул USB кабели аркылуу ЖКга туташкан Raspberry Pi (RPi) + Камерасы менен ишке ашат. CNCдеги STOPту көзөмөлдөө жана жандандыруу видеонун жардамы менен ишке ашат
Эски телефонуңузду алыскы которгучка айлантыңыз: 7 кадам (сүрөттөр менен)
Эски телефонуңузду алыскы которгучка айландырыңыз: Эскирген негизги телефондоруңуз менен эмне кылуу керек экенин ойлонуп көрдүңүз беле? Акыркы он жылдыкта смартфондун пайда болушу бардык негизги телефондорду эскирди. Батарейкасы жакшы жана көрүнүшү жакшы болгонуна карабастан, алар чоң смартфондорго салыштырмалуу азыраак
Санарип термостат менен башкарылган космостук жылыткыч: 5 кадам (сүрөттөр менен)
Санарип термостат менен башкарылган космостук жылыткыч: Бул көрсөтмө арзан космостук жылыткычты башкаруу үчүн текчеден санарип программалоочу термостатты кантип колдонууну көрсөтөт. Көпчүлүк арзан космостук жылыткычтарда температураны орой коюу үчүн аналогдук баскычы бар; атүгүл эң кооз моделдер сизге уруксат берет
Өзүңүздүн алыскы электр которгучтарыңызды жасаңыз: 9 кадам (сүрөттөр менен)
Өзүңүздүн алыскы кубат өчүргүчтөрүңүздү жасаңыз: Көпчүлүк адамдар күтүү күчү жөнүндө билишет (б.а. көптөгөн электрондук аппараттар өчүрүлгөндө деле кээ бир кубатты керектей беришет). Күтүү режимин өчүрүүнүн бир жолу - контурду өчүрүү үчүн орнотулган өчүргүч менен күчөткүчтү же чыңалуудан коргоочу каражатты колдонуу