Мазмұны:

Автостат: қашықтағы термостат: 8 қадам (суреттермен)
Автостат: қашықтағы термостат: 8 қадам (суреттермен)

Бейне: Автостат: қашықтағы термостат: 8 қадам (суреттермен)

Бейне: Автостат: қашықтағы термостат: 8 қадам (суреттермен)
Бейне: Педагогикалық қызметтің ерекшеліктері мен қиыншылықтары 2024, Қараша
Anonim
Автостат: қашықтағы термостат
Автостат: қашықтағы термостат

Мүмкін сіз сұрайтын сұрақ: «неге сіз басқа қашықтағы термостатты жасайсыз?»

Бұл сұраққа жауап беру керек болды, және нарықтағы ақылды термостаттар тым қымбат.

Әділ ескерту, бұл термостатты басқару үшін бірнеше қосымша шығуды қажет ететін «тұжырымдаманың дәлелі» құрылымы, бірақ ядро орнында және оны сіздің нақты жағдайыңызға байланысты өзгертуге болады. Сонымен қатар, бұл әлі де жұмыс, сондықтан бірнеше жаңартулар мен өзгерістерді күтіңіз (әсіресе Matlab кодына)

Бастау үшін мен сізге ескерткім келеді, бұл үшін үш бағдарлама қажет (олардың біреуі өте қымбат), көптеген кітапханалар мен бағдарламаларға қолдау пакеттері қажет, және сіз олардың бір -бірімен сөйлесуін қамтамасыз етуіңіз керек. Ол бас ауруы. Бұл ескерту арқылы материалдарды бастауға рұқсат етіңіз.

Аппараттық құрал

  • arduino нано
  • arduino uno (немесе басқа нано, мен уноны қолдандым, себебі менде біреуі болды)
  • әр түрлі секіргіш кабельдер, кейбір еркек/еркек және ерлер мен әйелдердің үш біріктірілген екі жиынтығы
  • 433МГц радиожиілік (РЖ) қабылдағышы, мен MX-05V қолдандым
  • 433 МГц жиілікті RF таратқышы, мен MX-FS-03V қолдандым
  • DHT11 жоғары дәлдіктегі термометр мен ылғалдылық сенсоры (мен қолданған үш резеңке чипте орнатылған, қажетті резисторлар орнатылған)
  • нан тақтасы (егер сіз мұның бәрін дәнекерлегіңіз келмесе)
  • GPS бар телефон (бұл жағдайда iPhone 8, бірақ мен Galaxy S8 де қолдандым)
  • 3D басып шығарылған контейнер (қажет емес, кез келген контейнер жұмыс істейді немесе мүлде жоқ)

Бағдарламалық қамтамасыз ету

  • MathWorks-тен Matlab (менде 2018a шығарылымы бар, бірақ мен 2017a-b басылымдарын қолдандым)
  • Телефоныңызға Matlab ұялы телефоны орнатылған
  • Matlab үшін arduino қолдау пакеті
  • Matlab үшін iPhone сенсорлық пакеті
  • arduino IDE
  • RadioHead arduino IDE пакеттері мен кітапханаларын қолдайды
  • Arduino IDE үшін DHT11 кітапханасы
  • python 3.7 (pyserial кітапханасы немесе сериялық кітапхана орнатылғанына көз жеткізіңіз, ол 3.4 немесе одан кейінгі нұсқа үшін болуы керек)

1 -қадам: Барлығын біріктіру

Барлығын біріктіру
Барлығын біріктіру
Барлығын біріктіру
Барлығын біріктіру
Барлығын біріктіру
Барлығын біріктіру

Ең алдымен, мен сіздің бөлшектеріңіздің жұмыс істеп тұрғанына және сымдардың дұрыс екеніне көз жеткізу үшін РЖ таратқыштармен жұмыс жасайтын бірнеше arduino оқулықтарын жасауды ұсынар едім. Көптеген мысалдар бар, олардың ішінде код бар (C және C ++ туралы аз білетіндер үшін).

Ардуино мен сенсорларды жинау үшін төмендегі сымдар схемасын орындаңыз. Ардуиноларды қосу кезінде есте ұстайтын бір нәрсе - мен қолданатын деректер порттары қажет емес, бірақ ұсынылады.

Егер сіз пайдаланатын деректер портын өзгертуді шешсеңіз, кодтағы түйреуіштерді анықтау қажет. Менің ойымша, arduino кітапханалары танитын әдепкі порттарды ұстау оңайырақ.

Нано мен уно бір -бірін алмастырады, бірақ мен температура мониторының өлшемін азайту үшін жобаны таратушы жағынан нано қолдандым.

Ескерту: нано ұстайтын жасыл түс - бұл 3D басып шығарылған контейнер.

2 -қадам: қабылдағыш

Қабылдағыш
Қабылдағыш

3 -қадам: таратқыш

Таратқыш
Таратқыш

4 -қадам: Кодекс

Сымдар аяқталғаннан кейін сізге барлық бағдарламаларды іске қосу және кітапханаларды орнату қажет (егер сізде әлі жоқ болса), мен сізде бар деп ойлаймын, сіз Matlab -ты іске қосып, iPhone қолдау пакетін іске қосуыңыз керек. Бұл кезде сіздің телефоныңыз да, Matlab те бір Wi -Fi желісіне қосылуы керек.

Matlab командалық терезесінде мынаны жазыңыз:

қосқыш қосулы

Бұл сізге iPhone -ға қосылу үшін қолданылатын бес таңбалы құпия сөзді енгізуді ұсынады. Құпия сөзді есте сақтаңыз. Сіз құпия сөзді енгізген кезде Matlab кейбір ақпаратты көрсетеді, оның ішінде сіздің IP мекенжайыңыз. Мұны Matlab ұялы телефонындағы «Сенсорлармен жұмыс істеу» анықтама мәзірінің нұсқауларынан алынған келесі қадамда қолданыңыз.

  • Сенсорлық деректерді MathWorks Cloud немесе компьютерге жіберу үшін мына қадамдарды орындаңыз:
  • Егер сіз сенсорлық деректерді компьютерге жіберетін болсаңыз және ол әлі орнатылмаған болса, MATLAB -те Apple iOS датчиктеріне арналған MATLAB қолдау пакетін жүктеңіз және орнатыңыз.
  • MATLAB Mobile бағдарламасын MathWorks Cloud немесе компьютерге Параметрлер арқылы қосыңыз.
  • MATLAB -та mobiledev объектісін жасаңыз (компьютерде), мысалы: >> m = mobiledev
  • Бір немесе бірнеше сенсорды таңдап, Бастау түймесін түртіңіз.

Сенсорлық деректерді құрылғыда жергілікті түрде тіркеу үшін мына қадамдарды орындаңыз:

  • Сенсорлар экранында деректерді жинағыңыз келетін сенсорларды таңдаңыз.
  • Журналды таңдаңыз.
  • Бастау түймесін түртіңіз.
  • Деректерді жинауды аяқтағаннан кейін Тоқтату түймесін түртіңіз.
  • Қалқымалы терезеде сенсорлар журналының атын енгізіңіз.
  • Қажет болса, 1-5 қадамдарды қайталаңыз.

Бұл бөлім 4 -бөлімге қайта оралады, сондықтан деректерді жинауды әлі бастаудың қажеті жоқ. Телефонды қолыңызда ұстаңыз және Matlab ұялы телефонын дайын ұстаңыз.

Енді сізге компьютерде Matlab код файлдарын орналастыру үшін қалта жасау керек. Сізде төрт бөлек файл болады, екеуі фондық функциялар үшін (.m файлдары) және GUI (.mlapp) үшін бір Matlab кодтық файл,.

Біріншіден, сіздің үйіңіздегі ауаның массалық есебі (бұл 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; else PwrCntr = P_out; runCalc = runCalc+0.1 аяқталу уақыты_ diag = time_end-time_start Mass = (P_out*time_diag) /7.035

Ал екіншісі:

функция [уақыт белгілері, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, жылдамдық, T_pref, масса)

AutoStat = 1; i = 1; ал AutoStat == 1 time_start = сағат; m = ұялы телефон; 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.латлит).*(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 пәрмен терезесінде келесі пәрменді енгізетін менің сүйікті әдісіммен ашу керек:

қолданбалы дизайнер

Бағдарлама дизайнері ашық болғаннан кейін жаңа бағдарлама файлын ашыңыз (.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 температурасы2SpinnerLabel matlab.ui.cont rol. Label температурасы2Spinner matlab.ui.control. Spinner қосқышы matlab.ui.control. Switch EditFieldLabel matlab.ui.control. Label tempnow matlab.ui.control. NumericEditField GaugeLabel matlab.ui.control. Label Gauge matlab.ui.control. Matrix.ui.container. Tab UIAxes габаритті үнемдеу табақшасы matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField TotalSavingsField. FieldField

әдістер (Access = жеке)

% Мән өзгертілген функция: уақыт

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; басқа Chng_dir = 1; соңы Chng_dir; Соңы

% Мән өзгертілген функция: DDFH

функция DDFHValueChanged (қолданба, оқиға) r_pref = app. DDFH. Value; Соңы

% Мән өзгертілген функция: AvgLocalSpeedEditField

функция AvgLocalSpeedEditFieldValueChanged (қолданба, оқиға) жылдамдық = app. AvgLocalSpeedEditField. Value; Соңы

% Мән өзгертілген функция: PowerOutputRatingEditField

функция PowerOutputRatingEditFieldValueChanged (app, event) value = app. PowerOutputRatingEditField. Value; Соңы

% Мән өзгертілген функция: EnergyEfficiencyRatingEditField

EnergyEfficiencyRatingEditFieldValueChanged функциясы (қолданба, оқиға) = app. EnergyEfficiencyRatingEditField. Value; Соңы

% Батырмасы басылатын функция: RunDiagnosticButton

RunDiagnosticButtonPushed функциясы (қолданба, оқиға) жолы = app. TemperatureDirectionSwitch. Value; way = uint8 (way) way = length (way) if way == 4 Chng_dir = -1; басқа Chng_dir = 1; end T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)

Соңы

% Мән өзгертілген функция: Температура1Спиннер

функция Temperature1SpinnerValueChanged (қолданба, оқиға) мәні = app. Temperature1Spinner. Value; Соңы

% Мән өзгертілген функция: Temperature2Spinner

функция Temperature2SpinnerValueChanged (қолданба, оқиға) мәні = app. Temperature2Spinner. Value; Соңы

% Мән өзгертілген функция: ауысу

SwitchValueChanged функциясы (қолданба, оқиға) m = mobiledev; Lat_in = m. Latitude Lon_in = m. Ұзындық 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, жылдамдық, массалық) соңы

% Қолданбаның инициализациясы мен құрылысы

әдістер (Access = жеке)

% 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, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (қолданба, @RunDiagnosticButtonPushed, шын); 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, ақиқат); 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, ақиқат); 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, ақиқат); app. AvgLocalSpeedEditField. HorizontalAlignment = 'орталық'; app. AvgLocalSpeedEditField. Position = [142 231 100 22];

% DesireDistancefromHouseEditFieldLabel жасау

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 (қолданба, @DDFHValueChanged, ақиқат); 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, 'жүгірткі'); 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'};

% Температураны жасау 1Spinner

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 (қолданба, @Temperature2SpinnerValueChanged, ақиқат); app. Temperature2Spinner. Position = [157 230 100 70]; app. Temperature2Spinner. Value = 60;

% Коммутатор жасау

app. Switch = uiswitch (app. TempSettingsTab, 'жүгірткі'); app. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (қолданба, @SwitchValueChanged, ақиқат); 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 = '';

% Уақытша уақыт құру

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;

% Үнемдеу табын жасау

app. SavingsTab = uitab (app. TabGroup); app. SavingsTab. Title = 'Үнемдеу';

% UIAxes құрыңыз

app. UIAxes = uiaxes (app. SavingsTab); title (app. UIAxes, 'Жинақтар') xlabel (app. UIAxes, 'Ай мен жыл') ylabel (app. UIAxes, 'Ақша') қолданбасы. UIAxes. PlotBoxAspectRatio = [1 0.606666666666667 0.6066666666666667] 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]; соңы соңы

әдістер (Access = public)

% Қолданба құру

app app = Control_1

% Компоненттерді жасаңыз және теңшеңіз

createComponents (қолданба)

% Бағдарламаны App Designer -ге тіркеңіз

registerApp (app, app. UIFigure)

егер наргут == 0

қолданбаның соңын тазарту

% Қолданба жойылғанға дейін орындалатын код

функцияны жою (қолданба)

% Қолданба жойылған кезде UIFigure жойыңыз

жою (app. UIFigure) соңы соңы

Мүмкін сіз қате аласыз, бұл проблема емес. Жүгіруді басқаннан кейін жасалған GUI -ді жабыңыз, біз қалған бағдарламалар мен деректерді бір сәтте жинаймыз.

Matlab орнатылғаннан кейін біз питонға көшуге болады. Алдымен python бағдарламасын пәрмен жолынан (терезелерде) немесе python қалтасындағы.exe файлын пайдалану арқылы іске қосыңыз. Импорттау пәрменін қолдану арқылы барлық сәйкес кітапханалар орнатылғанын тексеріңіз.

сериялық импорт

импорт уақыты csv

Бұл сізге бастау керек үш кітапхана, бірақ біз жақын арада жеке кітапханамызды құрамыз. Егер бұл командаларда қате болса, қайтып оралыңыз және кітапханалар python қалтасындағы Lib қалтасында орнатылғанына көз жеткізіңіз. Содан кейін біз pythonlogger кітапханасы деп аталатын нәрсені жасаймыз. Бұл атау қажет емес, сіз оны қалағаныңызша шақыра аласыз, бұл сіз жасаған python файлының атауы (.py).

Мәтіндік редакторды ашыңыз, мен Sublime3 қолданамын, бірақ блокнот жақсы жұмыс істейді және осы кодты енгізіңіз.

def pythonprint ():

pythonlogger импорттық сериялық импорттық уақытты импорттау csv ser = serial. Serial ('COM8') # COM8 - arduino сериялық порты, бұл әр қолданушы үшін әр түрлі болуы мүмкін, яғни arduino IDE ser.flushInput () ішінде сериялық портыңызды тексеріңіз. Рас: көріңіз: ser_bytes = ser.readline () print (ser_bytes) with open («test_data.csv», «a») with f: жазушы = csv.writer (f, бөлгіш = «,») # деректерді орнатады үтірмен бөлінген жазушы ретінде жазылады.writerow ([time.time (), ser_bytes]) #деректерді test_data.csv файлына жазады, қоспағанда: басып шығару («Қате пайда болды») үзіліс

Мәтінді Lib қалтасына «қалаған кітапхана атауын енгізіңіз».py ретінде сақтаңыз. Сондай -ақ, def pythonprint () жолы сіз шақыратын функцияның атауын анықтайтынын ескеріңіз, сондықтан сіз оны «функцияға қажет атауды енгізу» () деп өзгертуге болады. Кітапхана сақталған кезде, біз arduino кодына көшуге болады.

Arduino IDE ашыңыз және екі жаңа эскиз терезесін ашыңыз. Бұл екі эскиз файлды ыңғайлы жерде сақтаңыз, бұл файлдардың атауы маңызды емес. Содан кейін барлық әдепкі кодты жойып, оны келесіге ауыстырыңыз.

Қабылдау arduino үшін:

#қосу

#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…. etc жолы - бұл тест коды. Егер сіз диагноз қоймасаңыз және деректерді шынымен қабылдайтындығыңызды білгіңіз келмесе, бұл туралы алаңдамаудың қажеті жоқ.

Ардуино таратқышы үшін

#қосу

#include #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; өзгермелі температура, ылғалдылық; uint8_t хабар; 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 ашпаңыз. Егер осылай жасасаңыз, питон және/немесе Matlab коды бұзылады және қатені жібереді

Егер сіз.csv файлын кейінірек ашуды шешсеңіз, уақыт бағанының өте үлкен сандар тізбегі екенін байқайсыз. Себебі time.time () пәрмені 1970 жылдың 1 қаңтарынан бастап секунд санын жазады.

Бұл кезде python сериялық порттан оқитын температура деректерін басып шығаруы керек. Ол келесідей болуы керек:

b'25.03 '/r/n

Қосымша таңбалар туралы алаңдамаңыз, Matlab коды.csv файлының екінші бағанындағы орташа бес мәнді көрсетеді.

Енді барлық қолдайтын бағдарламалар жұмыс істеп, деректер жиналып жатқанда, біз бұрын орнатылған Matlab мобильді бағдарламасынан GPS деректерін жинауды бастай аламыз және Matlab GUI кодын іске қосамыз. Matlab ұялы телефонының сенсорлық қойындысында болсаңыз, GPS таңдаңыз және бастау түймесін басыңыз.

Егер сіз Matlab ұялы телефонында жаңадан болсаңыз, 4 -қадамға оралыңыз және жоғарыдағы скриншоттарды қараңыз. Егер сізде әлі де проблемалар болса, бұрын таңдалған компьютерге қосылғаныңызға көз жеткізіңіз (параметрлер қойындысында) және Matlab желіде екенін тексеру үшін «қосқыш қосулы» пәрменінің сілтемесін пайдаланыңыз.

6 -қадам: Бағдарламаны пайдалану

Бағдарламаны қолдану
Бағдарламаны қолдану

Бұл жүйеде фонда көптеген нәрселер болып жатыр. Температура туралы мәліметтерді arduino мен pyton жинайды және тіркейді, Matlab телефоныңыздан GPS деректерін жинайды және сіздің үйден қаншалықты алыс екеніңізді білу үшін термостатты орнатады. Сіз қайда кіресіз - бұл сіздің қалауыңызды қамтамасыз етеді.

Matlab GUI кодын іске қосыңыз.. Mlapp файлын ашып, бірінші қойындыға қараңыз. Сіз бұл туралы ақпаратты өзіңіз жинауыңыз керек, әдетте жылыту/салқындату қондырғысының тиімділігі мен қуат көрсеткішін қондырғының өзінен табуға болады, ал сіздің орташа жылдамдығыңыз - сіздің жылдамдығыңыздың жақсы бағасы. Мәндер енгізілгеннен кейін «Диагностиканы іске қосу» түймесін басыңыз және бағдарлама сіздің үй туралы ақпарат жинау үшін термостатты басқарады.

Келесі мәзірге өтіңіз.

7 -қадам: Температураны бақылау

Температураны бақылау
Температураны бақылау

Бұл мәзір үйде және сыртта қалатын температураны таңдауға мүмкіндік береді. Температура №1 -ді өзіңіздің қолайлы температураңызға, ал №2 температураңызды үйіңізге қауіпсіз болатын жоғары немесе төмен мәнге қойыңыз (үйде ит бар кезде оны 100 градусқа қоймаңыз.).

8 -қадам: Тарихи деректер

Тарихи деректер
Тарихи деректер

Ақырында сіз автоматты басқару көмегімен қанша ақша үнемдейтіндігіңізді көре аласыз. Бұл сіздің термостатыңыз тәулік бойы қолайлы температураға қойылса, қанша энергия жұмсалатынын болжайды, содан кейін сіздің нақты энергияңызды азайтады.

Құрылысқа сәттілік.

Ұсынылған: