Агуулгын хүснэгт:
- Алхам 1: Бүгдийг нэгтгэх
- Алхам 2: Хүлээн авагч
- Алхам 3: дамжуулагч
- Алхам 4: Код
- Алхам 5: Үүнийг ажиллуулах
- Алхам 6: Хөтөлбөрийг ашиглах
- Алхам 7: Температурын хяналт
- Алхам 8: Түүхэн мэдээлэл
Видео: Автостат: алсын термостат: 8 алхам (зурагтай)
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Таны асууж буй асуулт бол "та яагаад өөр алсын термостат хийж байгаа юм бэ?"
Энэ асуултын хариулт бол би хийх ёстой байсан бөгөөд захын ухаалаг термостатууд хэтэрхий үнэтэй байдаг.
Шударга анхааруулга, энэ бол "үзэл баримтлалын нотолгоо" бөгөөд таны термостатыг хянахад хэд хэдэн нэмэлт гаралт шаардагдах боловч цөм нь бэлэн байгаа бөгөөд таны нөхцөл байдлаас шалтгаалан өөрчилж болно. Түүнчлэн, энэ ажил хийгдэж байгаа тул цөөн хэдэн шинэчлэлт, өөрчлөлтийг хүлээж байгаарай (ялангуяа Matlab кодын хувьд)
Эхлэхийн тулд би танд анхааруулахыг хүсч байна, үүнд гурван програм (тэдгээрийн нэг нь нэлээд үнэтэй), цөөн тооны номын сан, програмын дэмжлэгийн багц шаардлагатай бөгөөд та бүгдийг өөр хоорондоо ярилцах хэрэгтэй. Энэ бол толгойны өвчин юм. Ийм анхааруулга байхгүй бол материалаас эхэлье.
Техник хангамж
- arduino нано
- arduino uno (эсвэл өөр нано, би зүгээр л uno -г ашиглаж байсан, учир нь би нэг хэвтэж байсан)
- төрөл бүрийн холбогч кабель, зарим эрэгтэй/эрэгтэй, гурван нийлсэн эрэгтэй/эмэгтэй холбогчоос бүрдсэн хоёр багц
- 433MHz радио давтамж (RF) хүлээн авагч, би MX-05V ашигладаг байсан
- 433MHz RF дамжуулагч, би MX-FS-03V ашигладаг байсан
- DHT11 өндөр нарийвчлалтай термометр ба чийгшлийн мэдрэгч (миний ашигладаг төхөөрөмжийг гурван резинэн чип дээр суулгасан бөгөөд шаардлагатай резисторыг аль хэдийн суулгасан болно)
- талхны самбар (хэрэв та энэ бүгдийг хамтдаа гагнахыг хүсэхгүй байвал)
- GPS -тэй утас (энэ тохиолдолд iPhone 8, гэхдээ би бас Galaxy S8 ашигласан)
- 3D хэвлэсэн контейнер (үнэхээр шаардлагагүй, ямар ч контейнер ажиллах болно эсвэл огт байхгүй)
Програм хангамж
- MathWorks-ийн Матлаб (надад 2018a хувилбар байгаа, гэхдээ би 2017a-b хэвлэлийг бас ашигласан)
- Matlab гар утас таны утсан дээр суулгасан болно
- Matlab -д зориулсан arduino дэмжих багц
- Matlab -д зориулсан iPhone мэдрэгчийн багц
- arduino IDE
- RadioHead нь arduino IDE -ийн багц, номын санг дэмждэг
- Arduino IDE -ийн DHT11 номын сан
- python 3.7 (3.4 ба түүнээс дээш хувилбартай байх ёстой pyserial номын сан эсвэл цуваа номын сан суулгасан эсэхийг шалгаарай)
Алхам 1: Бүгдийг нэгтгэх
Юуны өмнө би танай эд анги ажиллаж, утас зөв байгаа эсэхийг шалгахын тулд RF дамжуулагчтай холбоотой хэд хэдэн ардуино хичээл хийхийг санал болгож байна. Кодыг багтаасан олон жишээ бий (C ба C ++ - ийн талаар бараг мэддэггүй бидний хувьд).
Ардуино ба мэдрэгчийг угсрахын тулд доорх утас диаграмыг дагана уу. Arduino -г холбохдоо санаж байх ёстой нэг зүйл бол миний ашигласан өгөгдлийн портууд шаардлагагүй боловч санал болгодог.
Хэрэв та ашиглаж буй өгөгдлийн портуудаа өөрчлөх шийдвэр гаргасан бол кодынхоо зүүг тодорхойлох хэрэгтэй. Би хувьдаа arduino номын сангуудын хүлээн зөвшөөрдөг анхдагч портуудыг дагаж мөрдөх нь илүү хялбар гэж бодож байна.
Нано ба уно нь хоорондоо солигддог, гэхдээ би температур хянагчийн хэмжээг багасгахын тулд төслийн дамжуулагч талд нано ашигласан.
Нэмэлт тэмдэглэл: нано барьсан ногоон өнгийн хийц нь 3D хэвлэсэн сав юм.
Алхам 2: Хүлээн авагч
Алхам 3: дамжуулагч
Алхам 4: Код
Утас холболт дууссаны дараа та бүх програмыг ажиллуулж, номын санг суулгах хэрэгтэй (хэрэв та хараахан суулгаагүй байгаа бол), та үүнийг хийсэн гэж бодож байна, та Matlab -ийг эхлүүлж, iPhone -ийн дэмжлэгийн багцыг ажиллуулах хэрэгтэй. Энэ үед таны утас болон Matlab хоёулаа нэг wifi сүлжээнд холбогдсон байх шаардлагатай.
Matlab -ийн командын цонхонд бичнэ үү.
холбогч асаалттай байна
Энэ нь таныг iPhone дээрээ холбогдохын тулд ашигладаг таван оронтой нууц үгээ оруулахыг шаардах болно. Нууц үгээ санаж байгаа эсэхээ шалгаарай. Та нууц үгээ оруулсны дараа Matlab нь таны IP хаягийг оруулаад зарим мэдээллийг харуулах болно. Үүнийг Matlab гар утасны "Мэдрэгчийг ашиглаж эхлэх" тусламжийн цэснээс авсан заавраас авсан дараагийн алхамд ашиглана уу.
- Мэдрэгчийн өгөгдлийг MathWorks Cloud эсвэл компьютер руу илгээхийн тулд дараах алхмуудыг дагана уу.
- Хэрэв та мэдрэгчийн өгөгдлийг компьютерт илгээж байгаа бөгөөд хэрэв суулгаагүй байгаа бол MATLAB дээр Apple iOS мэдрэгчийн MATLAB дэмжлэгийн багцыг татаж суулгаарай.
- MATLAB Mobile -ийг MathWorks Cloud эсвэл компьютерт Тохиргоо ашиглан холбоно уу.
- MATLAB дээр (өөрийн компьютер дээр) mobiledev объектыг үүсгэх, жишээлбэл: >> m = mobiledev
- Нэг буюу хэд хэдэн мэдрэгчийг сонгоод Эхлүүлэх дээр дарна уу.
Мэдрэгчдийн өгөгдлийг төхөөрөмж дээрээ бүртгэхийн тулд дараах алхмуудыг дагана уу.
- Мэдрэгчийн дэлгэц дээр өгөгдөл цуглуулахыг хүсч буй мэдрэгчийг сонгоно уу.
- Бүртгэлийг сонгоно уу.
- Эхлэх товчийг дарна уу.
- Мэдээлэл цуглуулж дуусаад Stop товчлуурыг дарна уу.
- Попап цонхонд мэдрэгчийн бүртгэлийн нэрийг оруулна уу.
- Шаардлагатай бол 1-5 алхамыг давтана уу.
Энэ хэсгийг 4 -р хэсэгт дахин дурдах тул өгөгдөл цуглуулж эхлэх шаардлагагүй болно. Утсаа гартаа байлгаж, Matlab гар утсаа бэлэн байлгаарай.
Одоо та компьютерийнхээ хаа нэгтээ Matlab код файлуудыг хадгалах хавтас үүсгэх хэрэгтэй. Танд дөрвөн тусдаа файл байх болно, хоёр нь арын функцэд (.m файлууд) болон GUI (.mlapp) нэг Matlab код файлд байх болно.
Нэгдүгээрт, танай байшингийн агаарын массын тооцоо (энэ нь Матлабыг байшингаа халаах/хөргөхөд хэр их хугацаа шаардагдахыг мэдэх боломжийг олгодог).
функц [Масс] = CalcMass (T_ins, P_out, Chng_dir)
runCalc = 0; Tmp_start = T_ins; time_start = цаг; time_end = 0 байхад runCalc <= 1 бол T_ins == (Tmp_start+(7*Chng_dir)) time_end = цаг; PwrCntr = 0; runCalc = 0; өөр PwrCntr = P_out; runCalc = runCalc+0.1 дуусах хугацаа_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; би = 1; байхад AutoStat == 1 time_start = цаг; м = хөдөлгөөнт төхөөрөмж; t = csvread ('values.csv', 0, 1); t = t (i); цагийн тэмдэг = [0, 0, 0, 0, 0, 0]; pwr_usage = 0; i = i+1; урт формат; Өргөрөг ба %longintude a_hav = (sind ((m. Latitude-Lat_in)./ 2)) дээр үндэслэн зайг тооцоолох %haversine томъёо.^2+cosd (Lat_in).*cosd (m.latitude).*(sind (m. Уртраг-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. Tab 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. Хэмнэлт хэмжигдэхүүн Tab matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField. TabelField. TelFieldEndroidField
аргууд (Хандалт = хувийн)
% Утга өөрчлөгдсөн функц: 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; өөр 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, event) value = app. EnergyEfficiencyRatingEditField. Value; Төгсгөл
% Button дарагдсан функц: RunDiagnosticButton
RunDiagnosticButtonPushed функц (апп, үйл явдал) арга = app. TemperatureDirectionSwitch. Value; way = uint8 (way) way = length (way) if way == 4 Chng_dir = -1; өөр Chng_dir = 1; төгсгөл T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)
Төгсгөл
% Утга өөрчлөгдсөн функц: Температур1Спиннер
функц Temperature1SpinnerValueChanged (app, event) утга = app. Temperature1Spinner. Value; Төгсгөл
% Утга өөрчлөгдсөн функц: Температур2Спиннер
функц Temperature2SpinnerValueChanged (app, event) утга = 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; хурд = м Хурд; масс = 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 зураг';
% 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 (апп, @TemperatureDirectionSwitchValueChanged, үнэн); 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 (апп, @Temperature1SpinnerValueChanged, үнэн); app. Temperature1Spinner. Position = [157 346 100 68]; app. Temperature1Spinner. Value = 60;
Температур2SpinnerLabel үүсгэх
app. Temperature2SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature2SpinnerLabel. HorizontalAlignment = 'төв'; app. Temperature2SpinnerLabel. Position = [66 248 76 28]; app. Temperature2SpinnerLabel. Text = {'Температур'; '#2'};
Температур2Spinner үүсгэх %
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, '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;
Хадгаламж таб үүсгэх
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]; төгсгөл төгсгөл
аргууд (Хандалт = нийтийн)
% Апп бүтээх
функц апп = Control_1
% Бүрэлдэхүүн хэсгүүдийг үүсгэх, тохируулах
createComponents (апп)
% Апп дизайнер дээр програмыг бүртгүүлнэ үү
registerApp (апп, апп. UIFigure)
хэрэв nargout == 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 () хэвлэх (ser_bytes) нээлттэй ("test_data.csv", "a") гэж f: зохиолч = csv.writer (f, тусгаарлагч = ",") # гэж өгөгдлийг тохируулдаг. таслалаар тусгаарлагдсан зохиолчоор бичих.writerow ([time.time (), ser_bytes]) #өгөгдлийг test_data.csv руу бичихээс бусад тохиолдолд бичдэг: хэвлэх ("Алдаа гарсан") завсарлага
Текстийг "хүссэн номын сангийнхаа нэрийг оруулна уу".py хэлбэрээр Lib фолдерт хадгална уу. 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 pin, isInverse юм. Сүүлийн 2 ашиглагдахгүй байна. Void setup () {Serial.begin (9600); // Зөвхөн дибаг хийх (! Driver.init ()) Serial.println ("init амжилтгүй болсон"); } void loop () {int err; хөвөх температур, humi; 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: Үүнийг ажиллуулах
Одоо бид бүх кодыг цуглуулж, ардуино цуглуулсны дараа бид arduino -г компьютерт холбож, кодыг ачаалж болно. Зөв кодыг хүлээн авах, дамжуулах микроконтроллер руу илгээсэн эсэхээ шалгаарай. Та ажиллаж байхдаа arduino -г хоёуланг нь компьютерт холбож болно, гэхдээ та зөв порт урагшаа явж байгаа эсэхийг шалгах хэрэгтэй, эсвэл дамжуулагч arduino -г салгаж, код гарсны дараа өөр эх үүсвэрээс асааж болно. байршуулсан.
Үүний талаар та IDE хэрэгслийн цэснээс хүлээн авагч arduino -тойгоо холбогдсон портыг сонгоод python ажиллуулах хэрэгтэй.
Үүнийг хийж байхдаа цуваа дэлгэцийг бүү нээ, монитор нээлттэй байхад python цувралыг уншиж чадахгүй байна. Python нээгдсэний дараа pythonprint функцийг дараах байдлаар дуудна уу.
pythonlogger.pythonprint ()
Энэ нь arduino цуваа портоос мэдээлэл цуглуулах ажлыг эхлүүлэх болно. Хэрэв та одоо питон фолдероо нээвэл "test_data.csv" нэртэй шинэ.csv файл үүсгэгдсэн бөгөөд энэ нь цаг, температурын бүх мэдээллийг агуулдаг болохыг харах болно. Энэ бол Matlab өөрийн бүх тооцоо, хяналтыг хийхийн тулд ханддаг файл байх болно.
Өөр нэг анхааруулга: өгөгдөлд хандах эсвэл бичих явцад test_data.csv -ийг бүү нээ. Хэрэв ингэвэл питон ба/эсвэл Matlab код эвдэрч, алдаа буцааж илгээх болно
Хэрэв та дараа нь.csv -ийг нээхээр шийдсэн бол цагийн багана нь маш том тооны мөр болохыг та анзаарах болно. Time.time () тушаал нь 1970 оны 1 -р сарын 1 -ээс хойшхи секундын тоог бичдэгтэй холбоотой юм.
Энэ үед python нь цуваа портоос уншиж буй температурын өгөгдлийг хэвлэх ёстой. Энэ нь иймэрхүү харагдах ёстой:
b'25.03 '/r/n
Нэмэлт тэмдэгтүүдийн талаар санаа зовох хэрэггүй. Matv код нь.csv файлын хоёр дахь баганын дунд таван утгыг индексжүүлдэг.
Одоо бүх дэмжигч програмууд ажиллаж, мэдээлэл цуглуулж байгаа тул бид өмнө нь тохируулсан Matlab гар утасны програмаас GPS өгөгдөл цуглуулж, Matlab GUI кодыг ажиллуулж болно. Matlab гар утасны мэдрэгчийн таб дээр орсны дараа GPS -ийг сонгоод эхлэх товчийг дарна уу.
Хэрэв та Matlab мобайлд шинээр орж байгаа бол 4 -р алхам руу буцаж ороод дээрх дэлгэцийн агшинг үзээрэй. Хэрэв та асуудалтай хэвээр байгаа бол өмнө нь сонгосон компьютертайгаа холбогдсон эсэхээ шалгаарай (тохиргооны таб дээр), "холбогч асаах" командын холбоосыг ашиглан Matlab онлайн байгаа эсэхийг шалгаарай.
Алхам 6: Хөтөлбөрийг ашиглах
Энэ системд цаана нь олон зүйл болж байна. Температурын өгөгдлийг arduino болон pyton ашиглан цуглуулж, бүртгэдэг бол Matlab таны утаснаас GPS -ийн өгөгдлийг цуглуулж, байшингаас хэр хол байгааг харахын тулд тооцоолол хийж, энэ бүх мэдээлэлд үндэслэн термостатаа тохируулж өгдөг. Таны орж ирж буй газар бол таны сонголтыг өгөх явдал юм.
Matlab GUI кодыг ажиллуулна уу.. Mlapp файлыг нээгээд эхний табыг үзнэ үү. Та энэ талаархи мэдээллийг өөрөө цуглуулах хэрэгтэй болно, таны халаалт/хөргөлтийн нэгжийн үр ашиг, эрчим хүчний түвшинг ихэвчлэн тухайн төхөөрөмж дээрээс олж болох бөгөөд таны дундаж хурд нь хэр хурдан жолоодож байгааг сайн тооцоолох болно. Утга оруулсны дараа "Оношилгоог ажиллуулах" товчийг дарж, програм нь таны байшингийн талаар мэдээлэл цуглуулахын тулд термостатаа хянадаг.
Дараагийн цэс рүү очно уу.
Алхам 7: Температурын хяналт
Энэхүү цэс нь гэртээ болон гэртээ байх хугацаандаа хүссэн температураа сонгох боломжийг танд олгоно. Температур #1 -ийг өөрийн тав тухтай температурт тохируулж, 2 -р температурыг гэртээ аюулгүй өндөр эсвэл бага утгаар тохируулаарай (гэртээ нохой байхад 100 градусаар бүү тохируулаарай.).
Алхам 8: Түүхэн мэдээлэл
Эцэст нь та автомат удирдлагыг ашиглан хичнээн их мөнгө хэмнэж байгааг харах боломжтой. Энэ нь үндсэндээ хэрэв таны термостатыг 24/7 цагийн турш хүссэн температурт тохируулсан бол хэр их энерги зарцуулахыг тооцоолж, хэрэглэсэн бодит энергийг хасна.
Барилгад амжилт хүсье.
Зөвлөмж болгож буй:
ТВ -ийн алсын удирдлага нь RF -ийн алсын удирдлага болжээ -- NRF24L01+ заавар: 5 алхам (зурагтай)
ТВ -ийн алсын удирдлага нь RF -ийн алсын удирдлага болжээ || NRF24L01+ заавар: Энэхүү төсөл дээр би алдартай nRF24L01+ RF IC ашиглан LED зурвасын гэрэлтүүлгийг телевизийн алсын удирдлагын ашиггүй гурван товчлуураар утасгүйгээр тохируулах аргыг танд үзүүлэх болно. Эхэлцгээе
IRduino: Arduino алсын удирдлага - Алдагдсан алсын зайн дууриамал: 6 алхам
IRduino: Arduino Remote Control - Алдагдсан алсын удирдлагыг дуурайгаарай: Хэрэв та ТВ эсвэл DVD тоглуулагчийнхаа алсын удирдлагыг алдаж байсан бол төхөөрөмж дээрх товчлуур руу алхаж, хайж олох, ашиглах нь ямар их урам хугарахыг та мэднэ. Заримдаа эдгээр товчлуурууд нь алсын удирдлагатай ижил функцийг санал болгодоггүй. Хүлээн авах
Энгийн алсын удирдлагатай иж бүрдэл нь дөрвөн сувгийн RC тоглоомын алсын удирдлага болж хувирсан: 4 алхам
Ердийн алсын удирдлагатай иж бүрдэл нь дөрвөн сувагтай RC тоглоомын алсын удирдлага болж хувирав: 如何 将 通用 器 套件 转换 为 模型 中 遥控 的改造 方法 简单。 只需
IR алсын удирдлагаа RF алсын удирдлага руу хөрвүүлэх: 9 алхам (зурагтай)
IR алсын удирдлагаа RF -ийн удирдлага руу хөрвүүлэх: Өнөөдрийн зааварчилгаанд би ерөнхий хянагчийн модулийг микроконтроллергүйгээр хэрхэн ашиглахыг танд харуулах болно. Алсын удирдлага. Хөрвүүлэх гол давуу тал нь
Olympus Evolt E510 алсын кабелийн хувилбар (Алсын удирдлага дээр автомат фокус бүхий 2 -р хувилбар): 6 алхам (зурагтай)
Olympus Evolt E510 алсын кабелийн хувилбар (Алсын удирдлага дээр автомат фокус бүхий 2 -р хувилбар): Өчигдөр би Olympus E510 -ийнхээ нэг товчлууртай энгийн алсын удирдлагыг бүтээсэн. Ихэнх камерууд хоёр горимтой Хөшиг суллах товчлууртай (зураг дарах гэж дардаг). Хэрэв товчлуурыг дарвал камер автоматаар фокуслаж, гэрлийг хэмжих болно