Mündəricat:
- Addım 1: Hamısını bir araya gətirmək
- Addım 2: Alıcı
- Addım 3: ötürücü
- Addım 4: Kod
- Addım 5: Çalışdırın
- Addım 6: Proqramdan istifadə
- Addım 7: Temperatura Nəzarət
- Addım 8: Tarixi məlumatlar
Video: Avtostat: Uzaqdan Termostat: 8 Addım (Şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Yəqin soruşduğunuz sual "niyə başqa bir uzaq termostat hazırlayırsınız?"
Bu sualın cavabı, məcbur oldum və bazarın ağıllı termostatları çox bahadır.
Ədalətli xəbərdarlıq, bu, termostatınızı idarə etmək üçün bir neçə əlavə çıxış tələb edəcək "konsepsiyanı sübut edən" bir quruluşdur, ancaq nüvə yerindədir və xüsusi vəziyyətinizə görə dəyişdirilə bilər. Ayrıca, bu hələ də davam edən bir işdir, buna görə bir neçə yeniləmə və dəyişiklik gözləyin (xüsusən Matlab kodunda)
Başlamaq üçün sizi xəbərdar etmək istəyirəm, bunun üçün üç proqram (onlardan biri olduqca bahalı), kifayət qədər kitabxana və proqramlar üçün dəstək paketləri tələb olunur və bunların hamısının bir -biri ilə danışmasını təmin etməlisiniz. Baş ağrısıdır. Bu xəbərdarlıqdan sonra materiallarla başlayaq.
Avadanlıq
- arduino nano
- arduino uno (və ya başqa bir nano, yalnız uno istifadə etdim, çünki ətrafımda yatırdım)
- müxtəlif keçid kabelləri, bəzi kişi/kişi və üç qoşulmuş kişi/qadın tullanan iki dəst
- 433MHz radio tezliyi (RF) qəbuledicisi, MX-05V istifadə etdim
- 433MHz RF ötürücü, MX-FS-03V istifadə etdim
- DHT11 yüksək dəqiqlikli termometr və rütubət sensoru (istifadə etdiyim üç zərbəli çipə quraşdırılmış tələb olunan rezistorlar artıq quraşdırılmışdır)
- çörək taxtası (hamısını birlikdə lehimləmək istəmirsinizsə)
- GPS ilə bir telefon (bu vəziyyətdə iPhone 8, amma mən də Galaxy S8 istifadə etmişəm)
- 3D çap konteyner (həqiqətən lazım deyil, hər hansı bir konteyner işləyəcək və ya heç biri yoxdur)
Proqram təminatı
- MathWorks-dən Matlab (2018a nəşrim var, amma 2017a-b nəşrlərindən də istifadə etmişəm)
- Matlab mobil telefonunuza quraşdırılıb
- Matlab üçün arduino dəstək paketi
- Matlab üçün iPhone sensor paketi
- arduino IDE
- RadioHead, arduino IDE paketlərini və kitabxanalarını dəstəkləyir
- Arduino IDE üçün DHT11 kitabxanası
- python 3.7 (3.4 və ya daha yeni versiya üçün olmalı olan kitabxana kitabxanasının və ya serial kitabxanasının quraşdırıldığından əmin olun)
Addım 1: Hamısını bir araya gətirmək
Əvvəlcə hissələrinizin işlədiyini və naqillərin düzgün olduğundan əmin olmaq üçün RF ötürücüləri ilə məşğul olan bir neçə arduino dərsləri etməyinizi təklif edərdim. Kod daxil olmaqla bir çox nümunə mövcuddur (C və C ++ haqqında çox az şey bilənlər üçün).
Arduino və sensorlar yığmaq üçün aşağıdakı kabel sxemlərinə əməl edin. Arduinoları bağlayarkən yadda saxlamaq lazım olan bir şey, istifadə etdiyim məlumat portlarının tələb olunmaması, lakin tövsiyə edilməsidir.
İstifadə etdiyiniz məlumat limanlarını dəyişdirmək qərarına gəlsəniz, kodunuzdakı pinləri təyin etməlisiniz. Şəxsən məncə, arduino kitabxanalarının tanıdığı standart limanlara yapışmaq daha asandır.
Və aydın olmaq üçün nano və uno bir -birini əvəz edir, amma temperatur monitorunun ölçüsünü azaltmaq üçün layihənin ötürücü tərəfi üçün nanodan istifadə etdim.
Yan qeyd: nanonu tutan yaşıl zolaq 3D çaplı konteynerdir.
Addım 2: Alıcı
Addım 3: ötürücü
Addım 4: Kod
Kablolama işləri başa çatdıqdan sonra bütün proqramları işə salmalı və kitabxanaları quraşdırmalısınız (əgər hələ də yoxsa), məncə, sizdə var, Matlab -ı işə salmalı və iPhone dəstək paketini işə salmalısınız. Bu anda həm telefonunuz, həm də Matlab eyni wifi şəbəkəsində olmalıdır.
Matlabın əmr pəncərəsinə yazın:
bağlayıcı aktivdir
Bu, iPhone -a qoşulmaq üçün istifadə edəcəyiniz beş rəqəmli bir parol daxil etməyinizi istəyəcək. Şifrəni xatırladığınızdan əmin olun. Şifrəni daxil etdiyiniz zaman Matlab, IP ünvanınız da daxil olmaqla bəzi məlumatları göstərəcək. Bunu Matlab mobile -dakı "Sensorlarla işə başlama" yardım menyusundakı təlimatlardan gələn növbəti addımda istifadə edin.
- Sensor məlumatlarını MathWorks Cloud və ya kompüterə göndərmək üçün aşağıdakı adımları yerinə yetirin:
- Sensor məlumatlarını kompüterə göndərirsinizsə və hələ quraşdırılmamışdırsa, MATLAB -da Apple iOS Sensorları üçün MATLAB Dəstək Paketini yükləyin və quraşdırın.
- Parametrlərdən istifadə edərək MATLAB Mobile -ı MathWorks Cloud -a və ya kompüterə qoşun.
- MATLAB -da (kompüterinizdə) mobiledev obyekti yaradın, məsələn: >> m = mobiledev
- Bir və ya daha çox sensoru seçin və Başla vurun.
Sensor məlumatlarını cihazınızda lokal olaraq qeyd etmək üçün bu addımları izləyin:
- Sensorlar ekranında məlumat toplamaq istədiyiniz sensorları seçin.
- Giriş seçin.
- Başlat düyməsini vurun.
- Məlumat toplamağı bitirdikdə, Stop düyməsinə vurun.
- Açılan pəncərədə sensor jurnalının adını daxil edin.
- Gerekirse 1-5 addımları təkrarlayın.
Bu hissəyə 4 -cü hissədə istinad ediləcək, buna görə hələ məlumat toplamağa başlamağa ehtiyac yoxdur. Telefonunuzu əlinizdə və Matlab mobilinizi hazır saxlayın.
İndi Matlab kod fayllarını yerləşdirmək üçün kompüterinizdə bir yerdə bir qovluq yaratmalısınız. Arxa fon funksiyaları üçün iki ayrı fayl (.m faylları) və GUI (.mlapp) üçün bir Matlab kod faylı olacaq.
Birincisi, evinizdəki havanın kütləvi hesablanmasıdır (bu, Matlaba evinizi qızdırmaq/soyutmaq üçün nə qədər vaxt lazım olduğunu bildirir)
funksiya [Kütlə] = CalcMass (T_ins, P_out, Chng_dir)
runCalc = 0; Tmp_start = T_ins; time_start = saat; time_end = 0 runCalc <= 1 olarkən T_ins == (Tmp_start+(7*Chng_dir)) time_end = clock; PwrCntr = 0; runCalc = 0; başqa PwrCntr = P_out; runCalc = runCalc+0.1 bitmə vaxtı_diag = vaxt_öç-vaxt_start Kütlə = (P_out*zaman_diaq) /7.035
Və ikincisi:
funksiya [zaman damgaları, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, sürət, T_pref, kütlə)
AutoStat = 1; i = 1; AutoStat == 1 time_start = saat; m = mobiledev; t = csvread ('dəyərlər.csv', 0, 1); t = t (i); vaxt damgaları = [0, 0, 0, 0, 0, 0]; pwr_usage = 0; i = i+1; uzunluq formatı; Enlem və %longintude a_hav = (sind ((Latın-Lat_in)./ 2)) əsasında məsafənin hesablanması üçün %haversine formulu.^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; %, vaxt_rtn = (Dist-r_pref)./ sürəti qaytarmaq üçün vaxtınızı təxmin edir; Evin kondisioneri və hava kütləsinin söndürülməsinə əsaslanaraq lazımi termostat parametrini hesablayır. calcTmp_set = ((-1.*P_out.*time_rtn)./ (kütlə.*(1.005)))+T_pref; %, yuvarlaq (calcTmp_set) ~ = yuvarlaq (t) timeACon = saat olduqda cari termostat parametrinin dəyişdirilməsinin lazım olub -olmadığını müəyyən edir; PwrCntr = P_out; timeACon = timeACon + clock-time_start; dəyəri = P_out*zamanACon*dərəcəsi; else PwrCntr = 0 son zaman damgaları (son+1, [1: 6]) = saat; pwr_usage (son+1, 1) = PwrCntr; fasilə (5) sonu son
Bu faylların hər ikisi də Matlab funksiyalarıdır. Onları GUI -dən çağıracağınız üçün xüsusi ehtiyaclar üçün dəyişdirməyi planlaşdırmadığınız təqdirdə onlara daxil olmaq lazım olmayacaq. Hər iki faylı ayrı -ayrılıqda saxlayın, birincisi CalcMass.m, ikincisi dist_cntrl.m olaraq, bunlar GUI kodunun funksiyaları çağırmaq üçün istifadə etdiyi adlar olacaq, buna görə də aşağıdakı kodun qalan hissəsini redaktə etmək istəməsəniz adlandırma konvensiyası.
GUI koduna girməzdən əvvəl Matlab menyu çubuğunda gedərək aça biləcəyiniz və ya Matlab əmr pəncərəsinə aşağıdakı əmri daxil edən ən sevdiyim metodla aça biləcəyiniz Matlab üçün proqram tərtibatçısını açmalısınız:
appdesigner
Tətbiq dizayneri açıldıqdan sonra yeni bir tətbiq faylını (.mlapp) açın və bütün standart kodu kod pəncərəsindən silin. Sonra hamısını aşağıdakılarla əvəz edin və qaç düyməsini vurun.
classdef Control_1 <matlab.apps. AppBase % Tətbiq komponentlərinin xüsusiyyətlərinə uyğun olan xüsusiyyətlər (Access = public) 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.control. Label DDFH matlab.ui.control. NumericEditField TemperaturDirectionSwitchLabel matlab.ui.control. Label TemperaturDirectionSwitch matlab.ui.container. Tab Temperatur1Spin ui.control. Spinner Temperatur2SpinnerLabel matlab.ui.cont rol. Label Temperatur2Spinner matlab.ui.control. Spinner Switch matlab.ui.control. Switch EditFieldLabel matlab.ui.control. Label tempnow matlab.ui.control. NumericEditField GaugeLabel matlab.ui.control. Label Ölçücü matlab.ui.control. Ölçü Əmanətləri Tab matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField. TabloField. FieldField
metodlar (Access = özəl)
Dəyişdirilən funksiya: tempnow
tempnowValueChanged funksiyası (tətbiq, hadisə) 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
Dəyişdirilən funksiya: TemperatureDirectionSwitch
funksiyası TemperatureDirectionSwitchValueChanged (app, event) way = app. TemperatureDirectionSwitch. Value; yol = uint8 (yol) yol = uzunluq (yol) əgər yol == 4 Chng_dir = -1; başqa Chng_dir = 1; son Chng_dir; bitmək
Dəyişdirilən funksiya: DDFH
funksiyası DDFHValueChanged (tətbiq, hadisə) r_pref = app. DDFH. Value; bitmək
Dəyişdirilən funksiya: AvgLocalSpeedEditField
funksiyası AvgLocalSpeedEditFieldValueChanged (tətbiq, hadisə) sürət = app. AvgLocalSpeedEditField. Value; bitmək
Dəyişdirilən funksiya: PowerOutputRatingEditField
funksiyası PowerOutputRatingEditFieldValueChanged (app, event) value = app. PowerOutputRatingEditField. Value; bitmək
Dəyər dəyişən funksiya: EnergyEfficiencyRatingEditField
funksiyası EnergyEfficiencyRatingEditFieldValueChanged (app, event) value = app. EnergyEfficiencyRatingEditField. Value; bitmək
Button funksiyası itələdi: RunDiagnosticButton
funksiyası RunDiagnosticButtonPushed (app, event) way = app. TemperatureDirectionSwitch. Value; yol = uint8 (yol) yol = uzunluq (yol) əgər yol == 4 Chng_dir = -1; başqa Chng_dir = 1; son T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)
bitmək
Dəyişdirilən funksiya: Temperatur1Spinner
funksiyası Temperature1SpinnerValueChanged (app, event) value = app. Temperature1Spinner. Value; bitmək
Dəyişdirilən funksiya: Temperature2Spinner
funksiyası Temperature2SpinnerValueChanged (tətbiq, hadisə) dəyəri = app. Temperature2Spinner. Value; bitmək
Dəyişdirilən funksiya: keçid
SwitchValueChanged funksiyası (tətbiq, hadisə) m = mobiledev; Lat_in = m. Latitude Lon_in = m. Longitude P_out = 0; r_pref = app. DDFH. Value; T_pref = app. Temperature1Spinner. Value; sürət = m Sürət; kütlə = 200; sürət = app. AvgLocalSpeedEditField. Value; Auto_Stat = app. Switch. Value; dist_cntrl (Lat_in, Lon_in, P_out, r_pref, T_pref, sürət, kütlə) son ucu
App başlatma və tikinti
metodlar (Access = özəl)
UIFigure və komponentləri yaradın
createComponents funksiyası (tətbiq)
UIFigure yaradın
app. UIFigure = uifigure; app. UIFigure. Mövqe = [100 100 640 480]; app. UIFigure. Name = 'UI Şəkil';
TabGroup yaradın
app. TabGroup = uitabgroup (app. UIFigure); app. TabGroup. Position = [1 1 640 480];
SetupTab yaradın
app. SetupTab = uitab (app. TabGroup); app. SetupTab. Title = 'Quraşdırma';
RunDiagnosticButton yaradın
app. RunDiagnosticButton = uibutton (app. SetupTab, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (app, @RunDiagnosticButtonPushed, doğru); app. RunDiagnosticButton. FontWeight = 'qalın'; app. RunDiagnosticButton. Mövqe = [465 78 103 23]; app. RunDiagnosticButton. Text = 'Diaqnostikanı Çalışdır';
EnergyEfficiencyRatingEditFieldLabel yaradın
app. EnergyEfficiencyRatingEditFieldLabel = uilabel (app. SetupTab); app. EnergyEfficiencyRatingEditFieldLabel. HorizontalAlignment = 'sağ'; app. EnergyEfficiencyRatingEditFieldLabel. Position = [8 425 135 22]; app. EnergyEfficiencyRatingEditFieldLabel. Text = 'Enerji səmərəliliyi reytinqi';
EnergyEfficiencyRatingEditField yaradın
app. EnergyEfficiencyRatingEditField = uieditfield (app. SetupTab, 'rəqəmsal'); app. EnergyEfficiencyRatingEditField. Limits = [0 100]; app. EnergyEfficiencyRatingEditField. ValueChangedFcn = createCallbackFcn (app, @EnergyEfficiencyRatingEditFieldValueChanged, doğru); app. EnergyEfficiencyRatingEditField. HorizontalAlignment = 'mərkəzi'; app. EnergyEfficiencyRatingEditField. Position = [158 425 100 22];
PowerOutputRatingEditFieldLabel yaradın
app. PowerOutputRatingEditFieldLabel = uilabel (app. SetupTab); app. PowerOutputRatingEditFieldLabel. HorizontalAlignment = 'sağ'; app. PowerOutputRatingEditFieldLabel. Position = [18 328 118 22]; app. PowerOutputRatingEditFieldLabel. Text = 'Güc Çıxış Reytinqi';
PowerOutputRatingEditField yaradın
app. PowerOutputRatingEditField = uieditfield (app. SetupTab, 'rəqəmsal'); app. PowerOutputRatingEditField. Limits = [0 Məlumat]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (app, @PowerOutputRatingEditFieldValueChanged, doğru); app. PowerOutputRatingEditField. HorizontalAlignment = 'mərkəzi'; app. PowerOutputRatingEditField. Position = [151 328 100 22];
AvgLocalSpeedEditFieldLabel yaradın
app. AvgLocalSpeedEditFieldLabel = uilabel (app. SetupTab); app. AvgLocalSpeedEditFieldLabel. HorizontalAlignment = 'sağ'; app. AvgLocalSpeedEditFieldLabel. Position = [27 231 100 22]; app. AvgLocalSpeedEditFieldLabel. Text = 'Ort. Yerli Sürət ';
AvgLocalSpeedEditField yaradın
app. AvgLocalSpeedEditField = uieditfield (app. SetupTab, 'rəqəmsal'); app. AvgLocalSpeedEditField. Limits = [0 70]; app. AvgLocalSpeedEditField. ValueChangedFcn = createCallbackFcn (app, @AvgLocalSpeedEditFieldValueChanged, doğru); app. AvgLocalSpeedEditField. HorizontalAlignment = 'mərkəzi'; app. AvgLocalSpeedEditField. Position = [142 231 100 22];
DesireDistancefromHouseEditFieldLabel yaradın
app. DesiredDistancefromHouseEditFieldLabel = uilabel (app. SetupTab); app. DesiredDistancefromHouseEditFieldLabel. HorizontalAlignment = 'sağ'; app. DesiredDistancefromHouseEditFieldLabel. Position = [24 129 100 28]; app. DesiredDistancefromHouseEditFieldLabel. Text = {'İstədiyiniz məsafə'; 'Evdən'};
DDFH yaradın
app. DDFH = uieditfield (app. SetupTab, 'rəqəmsal'); app. DDFH. Limits = [0 50]; app. DDFH. ValueChangedFcn = createCallbackFcn (tətbiq, @DDFHValueChanged, doğru); app. DDFH. HorizontalAlignment = 'mərkəzi'; app. DDFH. Mövqe = [139 135 100 22];
TemperatureDirectionSwitchLabel yaradın
app. TemperatureDirectionSwitchLabel = uilabel (app. SetupTab); app. TemperatureDirectionSwitchLabel. HorizontalAlignment = 'mərkəzi'; app. TemperatureDirectionSwitchLabel. Mövqe = [410 343 124 22]; app. TemperatureDirectionSwitchLabel. Text = 'Temperatur istiqaməti';
TemperatureDirectionSwitch yaradın
app. TemperatureDirectionSwitch = uiswitch (app. SetupTab, 'kaydırıcı'); app. TemperatureDirectionSwitch. Items = {'Yuxarı', 'Aşağı'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (app, @TemperatureDirectionSwitchValueChanged, doğru); app. TemperatureDirectionSwitch. Mövqe = [449 380 45 20]; app. TemperatureDirectionSwitch. Value = 'Yuxarıda';
TempSettingsTab yaradın
app. TempSettingsTab = uitab (app. TabGroup); app. TempSettingsTab. Title = 'Temp. Ayarlar ';
Temperatur1SpinnerLabel yaradın
app. Temperature1SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature1SpinnerLabel. HorizontalAlignment = 'mərkəzi'; app. Temperature1SpinnerLabel. Mövqe = [66 363 76 28]; app. Temperature1SpinnerLabel. Text = {'Temperatur'; '#1'};
Temperatur1Spinner yaradın
app. Temperature1Spinner = uispinner (app. TempSettingsTab); app. Temperature1Spinner. Limits = [60 90]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (tətbiq, @Temperature1SpinnerValueChanged, doğru); app. Temperature1Spinner. Pozisiya = [157 346 100 68]; app. Temperature1Spinner. Value = 60;
Temperature2SpinnerLabel yaradın
app. Temperature2SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature2SpinnerLabel. HorizontalAlignment = 'mərkəzi'; app. Temperature2SpinnerLabel. Mövqe = [66 248 76 28]; app. Temperature2SpinnerLabel. Text = {'Temperatur'; '#2'};
Temperature2Spinner yaradın
app. Temperature2Spinner = uispinner (app. TempSettingsTab); app. Temperature2Spinner. Limits = [60 90]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (tətbiq, @Temperature2SpinnerValueChanged, doğru); app. Temperature2Spinner. Pozisiya = [157 230 100 70]; app. Temperature2Spinner. Value = 60;
Keçid yaradın
app. Switch = uiswitch (app. TempSettingsTab, 'kaydırıcı'); app. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (app, @SwitchValueChanged, doğru); app. Switch. FontName = 'Nyala'; app. Switch. FontSize = 28; app. Switch. Position = [522 21 74 32]; app. Switch. Value = '0';
EditFieldLabel yaradın
app. EditFieldLabel = uilabel (app. TempSettingsTab); app. EditFieldLabel. HorizontalAlignment = 'sağ'; app. EditFieldLabel. Position = [374 291 25 22]; app. EditFieldLabel. Text = '';
Müvəqqəti məlumat yaradın
app.tempnow = uieditfield (app. TempSettingsTab, 'rəqəmsal'); app.tempnow. Limits = [60 89]; app.tempnow. ValueChangedFcn = createCallbackFcn (tətbiq, @tempnowValueChanged, doğru); app.tempnow. HorizontalAlignment = 'mərkəzi'; app.tempnow. FontSize = 26; app.tempnow. Mövqe = [409 230 133 117]; app.tempnow. Value = 60;
GaugeLabel yaradın
app. GaugeLabel = uilabel (app. TempSettingsTab); app. GaugeLabel. HorizontalAlignment = 'mərkəzi'; app. GaugeLabel. Mövqe = [225 32 42 22]; app. GaugeLabel. Text = 'Ölçer';
Göstərici yaradın
app. Gauge = uigauge (app. TempSettingsTab, 'dairəvi'); 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 yaradın
app. SavingsTab = uitab (app. TabGroup); app. SavingsTab. Title = 'Əmanət';
UIAxes yaradın
app. UIAxes = uiaxes (app. SavingsTab); başlıq (app. UIAxes, 'Əmanətlər') xlabel (app. UIAxes, 'Ay və İl') ylabel (app. UIAxes, 'Pul') app. UIAxes. PlotBoxAspectRatio = [1 0.606666666666667 0.6066666666666667] app. UIAxes. Color = [0.9412 0.9412 0.9412]; app. UIAxes. Mövqe = [146 219 348 237];
ThisMonthCostEditFieldLabel yaradın
app. ThisMonthCostEditFieldLabel = uilabel (app. SavingsTab); app. ThisMonthCostEditFieldLabel. HorizontalAlignment = 'mərkəzi'; app. ThisMonthCostEditFieldLabel. Position = [439 96 94 22]; app. ThisMonthCostEditFieldLabel. Text = 'Bu Ayın Xərcləri';
ThisMonthCostEditField yaradın
app. ThisMonthCostEditField = uieditfield (app. SavingsTab, 'rəqəmsal'); app. ThisMonthCostEditField. Limits = [0 Məlumat]; app. ThisMonthCostEditField. ValueDisplayFormat = '$%7.2f'; app. ThisMonthCostEditField. HorizontalAlignment = 'mərkəzi'; app. ThisMonthCostEditField. Position = [417 39 137 58];
TotalSavingsEditFieldLabel yaradın
app. TotalSavingsEditFieldLabel = uilabel (app. SavingsTab); app. TotalSavingsEditFieldLabel. HorizontalAlignment = 'sağ'; app. TotalSavingsEditFieldLabel. Position = [111 96 77 22]; app. TotalSavingsEditFieldLabel. Text = 'Ümumi qənaət';
TotalSavingsEditField yaradın
app. TotalSavingsEditField = uieditfield (app. SavingsTab, 'rəqəmsal'); app. TotalSavingsEditField. Limits = [0 Məlumat]; app. TotalSavingsEditField. ValueDisplayFormat = '$%9.2f'; app. TotalSavingsEditField. HorizontalAlignment = 'mərkəzi'; app. TotalSavingsEditField. Position = [88 39 137 58]; sonu son
metodlar (Access = public)
Tətbiq qurun
funksiya app = Control_1
Komponentləri yaradın və konfiqurasiya edin
createComponents (tətbiq)
App Designer ilə app Qeydiyyat
registerApp (app, app. UIFigure)
nargout varsa == 0
tətbiqin sonunu aydınlaşdırın
Tətbiq silmədən əvvəl icra olunan kod
funksiyanı silmək (tətbiq)
Tətbiq silindikdə UIFigure silin
silmək (app. UIFigure) sonu sonu
Çox güman ki, bir səhv alacaqsınız, bu da problem deyil. Qaçış düyməsini basdıqdan sonra yaradılan GUI -ni bağlayın, qalan proqramları və məlumatları bir anda toplayacağıq.
Matlab qurulduğundan pythona keçə bilərik. Birincisi, python proqramını ya əmr satırından (pəncərələrdə) və ya python qovluğunuzdakı.exe faylını istifadə edərək işlədin. İdxal əmrindən istifadə edərək bütün uyğun kitabxanaların quraşdırıldığından əmin olun.
idxal serialı
idxal vaxtı idxal csv
Başlamanız lazım olan üç kitabxana bunlardır, baxmayaraq ki, tezliklə öz kitabxanamızı hazırlayacağıq. Bu əmrlərdə bir növ səhv varsa, geri qayıdın və kitabxanaların python qovluğundakı Lib qovluğunda olduğuna əmin olun. Sonra pythonlogger kitabxanası adlandırdığım şeyi yaradacağıq. Bu ad lazım deyil, istədiyinizə zəng edə bilərsiniz, sadəcə yaratdığınız python faylının (.py) adıdır.
Bir mətn redaktoru açın, Sublime3 istifadə edirəm, lakin notepad yaxşı işləyir və bu kodu daxil edin.
def pythonprint ():
idxal pythonlogger serial idxal vaxtı idxal csv ser = serial. Serial ('COM8') # COM8, arduino serial portudur, bu hər bir istifadəçi üçün fərqli ola bilər, yəni arduino IDE ser.flushInput () -də serial portunuzu yoxlayın. Doğru: cəhd edin: ser_bytes = ser.readline () print (ser_bytes) with open ("test_data.csv", "a") as f: editor = csv.writer (f, delimiter = ",") # data ayarlar vergüllə ayrılmış yazar kimi yazılmalıdır.writerow ([time.time (), ser_bytes]) #data test_data.csv yazır, istisna olmaqla: print ("Error Occured") break
Mətni Lib qovluğunda "istədiyiniz kitabxananın adını daxil edin".py olaraq qeyd edin. Def pythonprint () xəttinin zəng edəcəyiniz funksiyanın adını təyin etdiyinə diqqət yetirin, buna görə onu "funksiyanız üçün istədiyiniz adı daxil edin" () olaraq dəyişə bilərsiniz. Kitabxana saxlanıldıqda arduino koduna keçə bilərik.
Arduino IDE -ni açın və iki yeni eskiz pəncərəsini açın. Bu iki eskiz sənədini əlverişli bir yerdə saxlayın, bu faylların adının heç bir əhəmiyyəti yoxdur. Sonra bütün standart kodu silin və aşağıdakılarla əvəz edin.
Qəbul edən arduino üçün:
#daxil edin
#include #include #include // bu istifadə edilmir, lakin RH_ASK sürücüsünü tərtib etmək üçün lazımdır; struktur dataStruct {float temp; } myData; void setup () {Serial.begin (9600); // Ayarlama yalnız (! Driver.init ()) Serial.println ("init uğursuz oldu"); } void loop () {uint8_t buf [RH_ASK_MAX_MESSAGE_LEN]; uint8_t buflen = sizeof (buf); if (driver.recv (buf, & buflen)) // Bloklanmayan {int i; // Yaxşı bir yoxlama məbləği olan bir mesaj alın, atın. //driver.printBuffer("Aldım: ", buf, buflen); memcpy (& myData, buf, sizeof (myData)); Serial.println (""); Serial.print (myData.temp); }}
P. S. //driver.printBuffer …. etc xətti test kodudur. Diaqnoz qoymadığınız və həqiqətən məlumat aldığınızı anlamaq istəməyincə bu barədə narahat olmağa ehtiyac yoxdur.
Arduino ötürücü üçün
#daxil edin
#include #include #include // bu istifadə edilmir, ancaq #daxil etmək #intlud int pin = 4; DHT11 dht11 (pin); RH_ASK sürücüsü; struktur dataStruct {float temp; } myData; bayt tx_buf [sizeof (myData)] = {0}; // Deməli, arqumentlər bit sürəti, ötürücü pin (tx), // qəbul pin (rx), ppt pin, isInverse. Son 2 istifadə edilmir. Void setup () {Serial.begin (9600); // Ayarlama yalnız (! Driver.init ()) Serial.println ("init uğursuz oldu"); } void loop () {int err; float temp, humi; uint8_t msg; if ((err = dht11.read (humi, temp)) == 0) myData.temp = temp; memcpy (tx_buf, & myData, sizeof (myData)); bayt zize = sizeof (myData); {Serial.println (myData.temp); driver.send ((uint8_t *) tx_buf, zize); sürücü.waitPacketSent (); // bütün məlumatlar gecikmə göndərilənə qədər icranı dayandırın (2000); // 2 saniyə gözləyin}}
Daxil etmək əmrləri kifayət qədər olmalıdır, ancaq sonradan məlumat ötürülməsi ilə bağlı hər hansı bir probleminiz varsa, RadioHead kitabxana qovluğuna baxmaq və fayl adlarının qalan hissəsini eyni formatda daxil etmək istəyə bilərsiniz.
Addım 5: Çalışdırın
İndi bütün kodları bir araya gətirdik və arduino yığdıqdan sonra arduinonu kompüterinizə bağlaya və kodu yükləyə bilərik. Doğru kodu qəbul edən və ötürən mikrokontrolörlərə göndərdiyinizə əmin olun. Bu işləyərkən hər iki arduino -nu kompüterinizə bağlaya bilərsiniz, ancaq doğru irəliləyən portu seçdiyinizə əmin olmalısınız, ya da ötürücü arduino -nu ayırıb başqa bir qaynaqdan istifadə edə bilərsiniz. yükləndi.
Bu barədə danışarkən, indi IDE alətlər menyusundan qəbuledici arduino ilə əlaqəli portu seçməlisiniz və python çalıştırmalısınız.
Bunu edərkən serial monitoru açmayın, monitor açıq ikən python serialı oxuya bilməz. Python açıldıqdan sonra pythonprint funksiyasını aşağıdakı kimi çağırın.
pythonlogger.pythonprint ()
Bu arduino serial portundan məlumat toplamağa başlayacaq. Python qovluğunuzu indi açarsanız, "test_data.csv" adlı yeni bir.csv faylının yaradıldığını görürsünüz ki, bu da bütün vaxt və temperatur məlumatlarını saxlayır. Bu, Matlabın bütün hesablamalarını və nəzarətlərini etmək üçün daxil olduğu fayl olacaq.
Başqa bir xəbərdarlıq: məlumatlara daxil olarkən və ya yazılarkən test_data.csv faylını açmayın. Bunu etsəniz, python və/və ya Matlab kodu çökəcək və səhv göndərəcək
. Csv faylını daha sonra açmağa qərar verərsəniz, zaman sütununun çox böyük bir rəqəmlər simli olduğunu görəcəksiniz. Bunun səbəbi, time.time () əmrinin 1 Yanvar 1970 -ci ildən bəri saniyə sayını yazmasıdır.
Bu nöqtədə python, serial portundan oxuduğu temperatur məlumatlarını çap etməlidir. Belə bir şeyə bənzəməlidir:
b'25.03 '/r/n
Əlavə simvollardan narahat olmayın,.csv faylının ikinci sütunundakı orta beş dəyər üçün Matlab kodu indeksləri.
İndi bütün dəstəkləyici proqramlar işləyir və məlumatlar toplanır, əvvəllər qurulmuş Matlab mobil proqramından GPS məlumatlarını toplamağa başlaya və Matlab GUI kodunu işlədə bilərik. Matlab mobil cihazının sensor sekmesine daxil olduqdan sonra GPS seçin və başlanğıc düyməsini vurun.
Matlab mobile -da yenisinizsə, 4 -cü addıma müraciət edin və yuxarıdakı ekran görüntülərinə baxın. Hələ də problemləriniz varsa, əvvəllər seçdiyiniz kompüterə qoşulduğunuzdan (parametrlər sekmesinde) əmin olun və Matlabın onlayn olduğunu yoxlamaq üçün "bağlayıcı aç" əmrindən istifadə edin.
Addım 6: Proqramdan istifadə
Bu sistemdə arxa planda bir çox şeylər gedir. Temperatur məlumatları arduino və pyton tərəfindən toplanır və daxil edilir, Matlab telefonunuzdan GPS məlumatları toplayır və evinizdən nə qədər uzaq olduğunuzu görmək üçün termostat quraraq bütün bu məlumatlara əsaslanaraq hesablamalar aparır. Girdiyiniz yer seçimlərinizi təmin edir.
Matlab GUI kodunu işə salın.. Mlapp faylını açın və ilk sekmeye baxın. Bunun üçün məlumatları özünüz toplamalısınız, qızdırıcı/soyuducu qurğunuzun səmərəliliyi və güc dərəcəsi ümumiyyətlə cihazın özündə tapıla bilər və orta sürətiniz nə qədər sürətli sürdüyünüzü yaxşı qiymətləndirir. Dəyərlər daxil edildikdən sonra "Diaqnostikanı Çalışdır" düyməsini basın və proqram eviniz haqqında məlumat toplamaq üçün termostatınızı idarə edir.
Növbəti menyuya keçin.
Addım 7: Temperatura Nəzarət
Bu menyu evdə və xaricdə istədiyiniz temperaturu seçməyə imkan verir. 1 nömrəli temperaturu rahat istiliyinizə və 2 nömrəli temperaturu eviniz üçün təhlükəsiz olan yüksək və ya aşağı bir dəyərə qoyun (evdə itləriniz olarkən 100 dərəcəyə qoymadığınızdan əmin olun).
Addım 8: Tarixi məlumatlar
Nəhayət, avtomatik idarəetmə vasitəsi ilə nə qədər qənaət etdiyinizi görə bilərsiniz. Bu, termostatınızın 24/7 istədiyiniz temperatura qurulduğu təqdirdə nə qədər enerjinin istifadə ediləcəyini təxmin edir, sonra istifadə etdiyiniz həqiqi enerjinizi çıxardır.
Bina uğurlar.
Tövsiyə:
TV Uzaqdan RF Uzaqdan Olur -- NRF24L01+ Təlimat: 5 addım (şəkillərlə)
TV Uzaqdan RF Uzaqdan Olur || NRF24L01+ Təlimat: Bu proyektdə, TV pultunun üç yararsız düyməsi vasitəsi ilə bir LED şeridin parlaqlığını simsiz olaraq tənzimləmək üçün məşhur nRF24L01+ RF IC -dən necə istifadə etdiyimi göstərəcəyəm. Gəlin başlayaq
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan sürüşdürün: 3 Addım (Şəkillərlə birlikdə)
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan Sürüşdürün: Oh Amazon, Fire TV'niz çox gözəldir, niyə bizə pultunuzda səs idarəetməsini vermədiniz? Yaxşı ki, Amazon -da 5 dollardan aşağı qiymətə bu sevimli kiçik uzaqdan, güc, səssiz satın ala bilərsiniz. , həcmi və hamısı kiçik bir paketdə. 3d printerə daxil edin
Adi Uzaqdan İdarəetmə Dəsti Dörd Kanallı RC Oyuncaq Uzaqdan İdarəetmə Sisteminə Çevrildi: 4 Addım
Adi Uzaqdan İdarəetmə Dəsti Dörd Kanallı RC Oyuncaq Uzaqdan İdarəetmə Sisteminə Çevrildi: 如何 通用 遥控 器 套件 转换 为 玩具 中 中 遥控 采用 采用 6 6 6 6 6 6 6 6 2262 和 2272 和 433 模块 构建 构建改造 方法 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照
IR Uzaqdan Uzaqdan Uzaqdan Çevirin: 9 Addım (Şəkillərlə birlikdə)
IR Uzaqdan Uzaqdan Uzaqdan RF -yə çevirin: Bugünkü Təlimat kitabında, ümumi bir RF modulunu mikro nəzarətçi olmadan necə istifadə edə biləcəyinizi sizə göstərəcəyəm ki, nəticədə hər hansı bir cihazın IR uzaqdan idarəetmə cihazını RF -yə çevirə biləcəyiniz bir layihə hazırlayaq. Uzaqdan. Çevirmənin əsas üstünlüyü
Olympus Evolt E510 Uzaqdan Kabel Sərbəst buraxılması (Uzaqdan Avtomatik Fokuslu Versiya 2): 6 Addım (Şəkillərlə)
Olympus Evolt E510 Uzaqdan Kabel Sərbəst buraxılması (Uzaqdan Avtomatik Fokuslu Versiya 2): Dünən Olympus E510 üçün sadə bir düyməli pult qurdum. Əksər kameralarda iki rejimi olan bir deklanşöre (şəkil çəkmək üçün basdığınız) malikdir. Düyməni yumşaq bir şəkildə basarsanız, kamera avtomatik fokuslanacaq və işığı ölçəcək