विषयसूची:

ऑटोस्टेट: एक रिमोट थर्मोस्टेट: 8 कदम (चित्रों के साथ)
ऑटोस्टेट: एक रिमोट थर्मोस्टेट: 8 कदम (चित्रों के साथ)

वीडियो: ऑटोस्टेट: एक रिमोट थर्मोस्टेट: 8 कदम (चित्रों के साथ)

वीडियो: ऑटोस्टेट: एक रिमोट थर्मोस्टेट: 8 कदम (चित्रों के साथ)
वीडियो: खराब Remote फेंकों मत | Remote ठीक करने की सीक्रेट ट्रिक सीख लो | Remote repair | Remote not working 2024, जुलाई
Anonim
ऑटोस्टेट: एक रिमोट थर्मोस्टेट
ऑटोस्टेट: एक रिमोट थर्मोस्टेट

आप शायद जो सवाल पूछ रहे हैं वह यह है कि "आप एक और रिमोट थर्मोस्टेट क्यों बना रहे हैं?"

उस सवाल का जवाब है, मुझे करना था, और बाजार के स्मार्ट थर्मोस्टैट्स बहुत महंगे हैं।

उचित चेतावनी, यह "प्रूफ-ऑफ-कॉन्सेप्ट" बिल्ड है जिसके लिए वास्तव में आपके थर्मोस्टेट को नियंत्रित करने के लिए कुछ अतिरिक्त आउटपुट की आवश्यकता होगी, लेकिन कोर जगह पर है और आपकी विशिष्ट परिस्थिति के आधार पर संशोधित किया जा सकता है। साथ ही, यह अभी भी एक कार्य प्रगति पर है, इसलिए कुछ अपडेट और परिवर्तनों की अपेक्षा करें (विशेषकर मैटलैब कोड के लिए)

आरंभ करने के लिए मैं आपको चेतावनी देना चाहता हूं, इसके लिए तीन कार्यक्रमों (उनमें से एक बहुत महंगा है), कुछ पुस्तकालयों और कार्यक्रमों के लिए समर्थन पैकेज की आवश्यकता है, और आपको उन सभी को एक दूसरे से बात करने की आवश्यकता है। इसका सिरदर्द है। उस चेतावनी के साथ, आइए सामग्री के साथ आरंभ करें।

हार्डवेयर

  • आर्डिनो नैनो
  • arduino uno (या कोई अन्य नैनो, मैंने सिर्फ uno का उपयोग किया था क्योंकि मेरे पास एक बिछा हुआ था)
  • मिश्रित जम्पर केबल, कुछ पुरुष/पुरुष और तीन के दो सेट पुरुष/महिला जंपर्स में शामिल हुए
  • 433 मेगाहर्ट्ज रेडियो फ्रीक्वेंसी (आरएफ) रिसीवर, मैंने एमएक्स -05 वी. का इस्तेमाल किया
  • 433 मेगाहर्ट्ज आरएफ ट्रांसमीटर, मैंने एमएक्स-एफएस-03 वी. का इस्तेमाल किया
  • DHT11 उच्च सटीकता थर्मामीटर और आर्द्रता सेंसर (जिसका मैंने उपयोग किया है वह पहले से स्थापित आवश्यक प्रतिरोधकों के साथ तीन शूल चिप पर स्थापित है)
  • ब्रेडबोर्ड (यदि आप यह सब एक साथ मिलाप नहीं करना चाहते हैं)
  • GPS वाला फ़ोन (इस मामले में iPhone 8, लेकिन मैंने गैलेक्सी S8 का भी उपयोग किया है)
  • 3 डी प्रिंटेड कंटेनर (वास्तव में आवश्यक नहीं है, कोई भी कंटेनर काम करेगा या कोई भी नहीं)

सॉफ्टवेयर

  • MathWorks से Matlab (मेरे पास 2018a संस्करण है, लेकिन मैंने 2017a-b संस्करणों का भी उपयोग किया है)
  • आपके फोन में मैटलैब मोबाइल इंस्टाल हो गया है
  • Matlab के लिए arduino सपोर्ट पैकेज
  • मैटलैब के लिए आईफोन सेंसर पैकेज
  • आर्डिनो आईडीई
  • RadioHead arduino IDE के पैकेज और लाइब्रेरी का समर्थन करता है
  • Arduino IDE के लिए DHT11 लाइब्रेरी
  • पायथन 3.7 (सुनिश्चित करें कि पाइसेरियल लाइब्रेरी या सीरियल लाइब्रेरी स्थापित है, जो इसे संस्करण 3.4 या नए के लिए होना चाहिए)

चरण 1: यह सब एक साथ रखना

यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें
यह सब एक साथ डालें

सबसे पहले मैं आपको सुझाव दूंगा कि आप RF ट्रांसमीटरों से निपटने के लिए कुछ arduino ट्यूटोरियल करें ताकि यह सुनिश्चित हो सके कि आपके हिस्से काम कर रहे हैं और वायरिंग सही है। कोड के साथ बहुत सारे उदाहरण उपलब्ध हैं (हममें से उन लोगों के लिए जो सी और सी ++ के बारे में कुछ भी नहीं जानते हैं)।

Arduino और सेंसर को असेंबल करने के लिए नीचे दिए गए वायरिंग आरेखों का पालन करें। Arduino को वायर करते समय एक बात का ध्यान रखें कि मेरे द्वारा उपयोग किए जाने वाले डेटा पोर्ट की आवश्यकता नहीं है, लेकिन अनुशंसित है।

यदि आप अपने द्वारा उपयोग किए जाने वाले डेटा पोर्ट को बदलने का निर्णय लेते हैं, तो आपको बस अपने कोड में पिन को परिभाषित करने की आवश्यकता है। व्यक्तिगत रूप से, मुझे लगता है कि डिफ़ॉल्ट पोर्ट के साथ रहना आसान है जिसे आर्डिनो पुस्तकालय पहचानते हैं।

और स्पष्ट होने के लिए, नैनो और यूनो विनिमेय हैं, लेकिन मैंने तापमान मॉनिटर के आकार को कम करने के लिए परियोजना के ट्रांसमीटर पक्ष के लिए नैनो का उपयोग किया।

साइड नोट: नैनो को पकड़े हुए हरे रंग का कोंटरापशन 3डी प्रिंटेड कंटेनर है।

चरण 2: रिसीवर

रिसीवर
रिसीवर

चरण 3: ट्रांसमीटर

ट्रांसमीटर
ट्रांसमीटर

चरण 4: कोड

एक बार वायरिंग समाप्त हो जाने के बाद आपको सभी प्रोग्राम चलाने और पुस्तकालयों को स्थापित करने की आवश्यकता होती है (यदि आपने पहले से नहीं किया है), तो मैं मान लूंगा कि आपके पास है, आपको मैटलैब शुरू करने और आईफोन समर्थन पैकेज चलाने की आवश्यकता है। इस समय आपका फोन और मैटलैब दोनों एक ही वाईफाई नेटवर्क पर होने चाहिए।

मैटलैब की कमांड विंडो में लिखें:

कनेक्टर ऑन

यह आपको पांच अंकों का पासवर्ड दर्ज करने के लिए प्रेरित करेगा जिसका उपयोग आप अपने iPhone पर कनेक्ट करने के लिए करेंगे। सुनिश्चित करें कि आपको पासवर्ड याद है। जब आप पासवर्ड दर्ज करते हैं तो मैटलैब आपके आईपी पते सहित कुछ जानकारी प्रदर्शित करेगा। अगले चरण में इसका उपयोग करें, जो मैटलैब मोबाइल में "सेंसर के साथ आरंभ करना" सहायता मेनू के निर्देशों से आता है।

  • MathWorks Cloud या कंप्यूटर पर सेंसर डेटा भेजने के लिए इन चरणों का पालन करें:
  • यदि आप किसी कंप्यूटर पर सेंसर डेटा भेज रहे हैं और यदि यह पहले से इंस्टॉल नहीं है, तो MATLAB में Apple iOS सेंसर के लिए MATLAB सपोर्ट पैकेज डाउनलोड और इंस्टॉल करें।
  • सेटिंग्स का उपयोग करके MATLAB मोबाइल को MathWorks क्लाउड या कंप्यूटर से कनेक्ट करें।
  • MATLAB (अपने कंप्यूटर पर) में mobiledev ऑब्जेक्ट बनाएं, उदाहरण के लिए: >> m = mobiledev
  • एक या अधिक सेंसर चुनें और स्टार्ट पर टैप करें।

अपने डिवाइस पर स्थानीय रूप से सेंसर डेटा लॉग करने के लिए इन चरणों का पालन करें:

  • सेंसर स्क्रीन पर, उन सेंसर का चयन करें जिनसे आप डेटा एकत्र करना चाहते हैं।
  • लॉग का चयन करें।
  • स्टार्ट बटन पर टैप करें।
  • जब आप डेटा एकत्र कर लें, तो स्टॉप बटन पर टैप करें।
  • पॉप-अप में, सेंसर लॉग का नाम दर्ज करें।
  • यदि आवश्यक हो तो चरण 1-5 दोहराएं।

इस खंड को भाग 4 में वापस संदर्भित किया जाएगा, इसलिए वास्तव में अभी तक डेटा एकत्र करना शुरू करने की कोई आवश्यकता नहीं है। बस अपने फोन को संभाल कर रखें और मैटलैब मोबाइल तैयार रखें।

मैटलैब कोड फाइलों को रखने के लिए अब आपको अपने कंप्यूटर में कहीं एक फ़ोल्डर बनाने की जरूरत है। आपके पास चार अलग-अलग फाइलें होंगी, दो बैकग्राउंड फंक्शंस (.m फाइल्स) के लिए और एक मैटलैब कोड फाइल GUI (.mlapp) के लिए,.

सबसे पहले आपके घर में हवा के लिए द्रव्यमान गणना है (इससे मैटलैब को पता चलता है कि आपके घर को गर्म/ठंडा करने में कितना समय लगता है)

समारोह [मास] = CalcMass (T_ins, P_out, Chng_dir)

रनकैल्क = 0; Tmp_start=T_ins; टाइम_स्टार्ट = घड़ी; time_end = ० जबकि रनकैल्क <= १ अगर T_ins==(Tmp_start+(7*Chng_dir)) time_end=घड़ी; PwrCntr = 0; रनकैल्क = 0; अन्य PwrCntr = P_out; रनकैल्क=रनकैल्क+0.1 एंड एंड टाइम_डायग= टाइम_एंड-टाइम_स्टार्ट मास=(P_out*time_diag)/7.035

और दूसरा वाला:

फ़ंक्शन [टाइमस्टैम्प, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, गति, T_pref, द्रव्यमान)

ऑटोस्टैट = 1; मैं = 1; जबकि ऑटोस्टैट == 1 टाइम_स्टार्ट = घड़ी; एम = मोबाइलदेव; t = csvread ('values.csv', 0, 1); टी = टी (आई); टाइमस्टैम्प = [0, 0, 0, 0, 0, 0]; pwr_usage = 0; मैं = मैं+1; प्रारूप लंबा; अक्षांश तथा (एम.देशांतर-लोन_इन)।/2))।^2; c_hav= 2.*atan2d(sqrt(a_hav), sqrt(1-a_hav)); d_hav= ६३७१.*c_hav; जिला=d_hav.*1000; % आपके लौटने के समय का अनुमान लगाता है time_rtn=(Dist-r_pref)./गति; % एयर कंडीशनर और घर के एयरमास के बिजली उत्पादन के आधार पर आवश्यक थर्मोस्टेट सेटिंग की गणना करता है। calcTmp_set=((-1.*P_out.*time_rtn)./(mass.*(1.005)))+T_pref; % निर्धारित करता है कि क्या वर्तमान थर्मोस्टेट सेटिंग को बदलने की आवश्यकता है यदि राउंड (calcTmp_set) ~ = राउंड (टी) टाइमएकॉन = घड़ी; PwrCntr = P_out; टाइमएकॉन = टाइमएकॉन + क्लॉक-टाइम_स्टार्ट; लागत=P_out*timeACon*दर; अन्य PwrCntr = 0 अंत टाइमस्टैम्प (अंत + 1, [1: 6]) = घड़ी; pwr_usage(end+1, 1)= PwrCntr; विराम(5) अंत अंत

ये दोनों फाइलें मैटलैब फंक्शन हैं। जब तक आप उन्हें विशिष्ट आवश्यकताओं के लिए संशोधित करने की योजना नहीं बनाते हैं, तब तक आपको उन तक पहुँचने की आवश्यकता नहीं होगी, क्योंकि आप उन्हें GUI से कॉल करेंगे। दोनों फाइलों को अलग-अलग सेव करें, पहला CalcMass.m के रूप में और दूसरा dist_cntrl.m के रूप में, वे नाम होंगे जो GUI कोड फ़ंक्शन को कॉल करने के लिए उपयोग करते हैं, इसलिए जब तक आप नीचे दिए गए शेष कोड को संपादित नहीं करना चाहते हैं, तब तक साथ रहें नामकरण सम्मेलन।

इससे पहले कि आप जीयूआई कोड में प्रवेश करें, आपको मैटलैब के लिए ऐप डिज़ाइनर खोलना होगा, जिसे आप मैटलैब मेनू बार में नेविगेट करके या मेरी पसंदीदा विधि द्वारा खोल सकते हैं जो मैटलैब कमांड विंडो में निम्न कमांड दर्ज कर रहा है:

ऐप डिज़ाइनर

ऐप डिज़ाइनर के खुलने के बाद एक नई ऐप फ़ाइल (.mlapp) खोलें और कोड विंडो से सभी डिफ़ॉल्ट कोड को हटा दें। फिर इसे निम्नलिखित के साथ बदलें और रन बटन दबाएं।

classdef Control_1 < matlab.apps. AppBase% गुण जो ऐप घटकों के गुणों से मेल खाते हैं (एक्सेस = सार्वजनिक) 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 AvgLocalSpeedEditFieldN. matlab.ui.control. Label DDFH matlab.ui.control. NumericEditField तापमान दिशा स्विच लेबल matlab.ui.control.लेबल तापमान दिशा स्विच matlab.ui.control. Switch TempSettingsTab matlab.ui.container. Tab तापमान1स्पिनरलेबल matlab.ui.control.लेबल तापमान1स्पिनर matlab। ui.control.स्पिनर तापमान2स्पिनरलेबल matlab.ui.cont rol.लेबल तापमान2स्पिनर matlab.ui.control. Spinner स्विच matlab.ui.control. Switch EditFieldLabel matlab.ui.control. Label tempnow matlab.ui.control. NumericEditField GaugeLabel matlab.ui.control. Label Gage matlab.ui.control. गेज सेविंग्सटैब matlab.ui.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditField TotalSavingsEditFieldLabel matlab.ui.control. Label TotalSavingsEditField matlab.ui.control. Numeric

तरीके (पहुंच = निजी)

% मान परिवर्तित फ़ंक्शन: tempnow

फ़ंक्शन tempnowValueChanged (ऐप, इवेंट) temp = app.tempnow. Value; अस्थायी = रैंडी ([६०, ९०], १, ५०) ऐप। गेज। मूल्य = ० i = लंबाई (अस्थायी) ऐप के लिए। गेज। मान = अस्थायी (i) विराम (१) अंत अंत

% मान परिवर्तित फ़ंक्शन: तापमान डायरेक्शन स्विच

फ़ंक्शन तापमान डायरेक्शनस्विचवैल्यू चेंज (ऐप, इवेंट) तरीका = ऐप। तापमान डायरेक्शनस्विच। वैल्यू; रास्ता = uint8 (रास्ता) रास्ता = लंबाई (रास्ता) अगर रास्ता == 4 Chng_dir = -1; और चंग_दिर = 1; अंत Chng_dir; समाप्त

% मान परिवर्तित फ़ंक्शन: DDFH

फ़ंक्शन DDFHValueChanged (ऐप, इवेंट) r_pref = ऐप. DDFH. Value; समाप्त

% मान परिवर्तित फ़ंक्शन: AvgLocalSpeedEditField

फ़ंक्शन AvgLocalSpeedEditFieldValueChanged(app, event) speed = app. AvgLocalSpeedEditField. Value; समाप्त

% मान परिवर्तित फ़ंक्शन: PowerOutputRatingEditField

फ़ंक्शन PowerOutputRatingEditFieldValueChanged (ऐप, ईवेंट) मान = ऐप। PowerOutputRatingEditField. Value; समाप्त

% मान परिवर्तित फ़ंक्शन: EnergyEfficiencyRatingEditField

समारोह EnergyEfficiencyRatingEditFieldValueChanged(app, event) value = app. EnergyEfficiencyRatingEditField. Value; समाप्त

% बटन पुश फ़ंक्शन: रनडायग्नोस्टिकबटन

फ़ंक्शन रनडायग्नोस्टिकबटन पुश (ऐप, इवेंट) तरीका = ऐप। तापमान डायरेक्शनस्विच। वैल्यू; रास्ता = uint8 (रास्ता) रास्ता = लंबाई (रास्ता) अगर रास्ता == 4 Chng_dir = -1; और चंग_दिर = 1; अंत T_ins = app.tempnow. Value P_out = app. PowerOutputRatingEditField. Value CalcMass1 (T_ins, P_out, Chng_dir)

समाप्त

% मान परिवर्तित फ़ंक्शन: तापमान1स्पिनर

फ़ंक्शन तापमान1स्पिनरवैल्यू चेंज (ऐप, इवेंट) मान = ऐप। तापमान1स्पिनर।वैल्यू; समाप्त

% मान परिवर्तित फ़ंक्शन: तापमान2स्पिनर

फ़ंक्शन तापमान 2 स्पिनर वैल्यू चेंज (ऐप, इवेंट) मान = ऐप। तापमान 2 स्पिनर। वैल्यू; समाप्त

% मान परिवर्तित फ़ंक्शन: स्विच

फ़ंक्शन स्विचवैल्यू चेंज (ऐप, इवेंट) एम = मोबाइलदेव; Lat_in = m.अक्षांश Lon_in = m. देशांतर P_out = 0; r_pref = app. DDFH. Value; T_pref = app. Temperature1Spinner. Value; गति = एम.गति; द्रव्यमान = २००; गति = ऐप. AvgLocalSpeedEditField. Value; Auto_Stat = ऐप। स्विच। वैल्यू; dist_cntrl(Lat_in, Lon_in, P_out, r_pref, T_pref, गति, द्रव्यमान) अंत अंत

% ऐप आरंभीकरण और निर्माण

तरीके (पहुंच = निजी)

% UI चित्र और घटक बनाएं

फंक्शन क्रिएट कॉम्पोनेंट्स (ऐप)

% यूआईफिगर बनाएं

app. UIfigure = uifigure; app. UIfigure. Position = [१०० १०० ६४० ४८०]; ऐप.यूआईफिगर.नाम = 'यूआई फिगर';

% TabGroup बनाएं

ऐप.टैबग्रुप = यूटैबग्रुप (ऐप.यूआईफिगर); एप.टैबग्रुप.पोजिशन = [१ १ ६४० ४८०];

% सेटअपटैब बनाएं

ऐप.सेटअपटैब = यूआईटैब (ऐप.टैबग्रुप); ऐप.सेटअपटैब.टाइटल = 'सेटअप';

% रनडायग्नोस्टिकबटन बनाएं

app. RunDiagnosticButton = uibutton(app. SetupTab, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (ऐप, @RunDiagnosticButtonPushed, true); app. RunDiagnosticButton. FontWeight = 'बोल्ड'; app. RunDiagnosticButton. Position = [४६५ ७८ १०३ २३]; app. RunDiagnosticButton. Text = 'रन डायग्नोस्टिक';

% EnergyEfficiencyRatingEditFieldLabel. बनाएं

app. EnergyEfficiencyRatingEditFieldLabel = uilabel(app. SetupTab); app. EnergyEfficiencyRatingEditFieldLabel. HorizontalAlignment = 'दाएं'; app. EnergyEfficiencyRatingEditFieldLabel. Position = [८ ४२५ १३५ २२]; app. EnergyEfficiencyRatingEditFieldLabel. Text = 'ऊर्जा दक्षता रेटिंग';

% ऊर्जा दक्षता रेटिंग संपादित करें फ़ील्ड बनाएं

app. EnergyEfficiencyRatingEditField = uieditfield (ऐप.सेटअपटैब, 'न्यूमेरिक'); app. EnergyEfficiencyRatingEditField. Limits = [0 १००]; app. EnergyEfficiencyRatingEditField. ValueChangedFcn = createCallbackFcn (ऐप, @EnergyEfficiencyRatingEditFieldValueChanged, true); app. EnergyEfficiencyRatingEditField. HorizontalAlignment = 'center'; app. EnergyEfficiencyRatingEditField. Position = [१५८ ४२५ १०० २२];

% PowerOutputRatingEditFieldLabel बनाएं

app. PowerOutputRatingEditFieldLabel = uilabel(app. SetupTab); app. PowerOutputRatingEditFieldLabel. HorizontalAlignment = 'दाएं'; app. PowerOutputRatingEditFieldLabel. Position = [१८ ३२८ ११८ २२]; app. PowerOutputRatingEditFieldLabel. Text = 'पावर आउटपुट रेटिंग';

% PowerOutputRatingEditField बनाएं

app. PowerOutputRatingEditField = uieditfield (app. SetupTab, 'संख्यात्मक'); app. PowerOutputRatingEditField. Limits = [0 Inf]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (ऐप, @PowerOutputRatingEditFieldValueChanged, true); app. PowerOutputRatingEditField. HorizontalAlignment = 'center'; app. PowerOutputRatingEditField. Position = [१५१ ३२८ १०० २२];

% AvgLocalSpeedEditFieldLabel बनाएं

app. AvgLocalSpeedEditFieldLabel = uilabel(app. SetupTab); app. AvgLocalSpeedEditFieldLabel. HorizontalAlignment = 'दाएं'; app. AvgLocalSpeedEditFieldLabel. Position = [२७ २३१ १०० २२]; app. AvgLocalSpeedEditFieldLabel. Text = 'औसत। स्थानीय गति';

% AvgLocalSpeedEditField बनाएँ

app. AvgLocalSpeedEditField = uieditfield(app. SetupTab, 'संख्यात्मक'); app. AvgLocalSpeedEditField. Limits = [0 70]; app. AvgLocalSpeedEditField. ValueChangedFcn = createCallbackFcn (ऐप, @AvgLocalSpeedEditFieldValueChanged, true); app. AvgLocalSpeedEditField. HorizontalAlignment = 'center'; app. AvgLocalSpeedEditField. Position = [१४२ २३१ १०० २२];

% घर संपादित करेंफिल्ड लेबल से वांछित दूरी बनाएं

app. DesiredDistancefromHouseEditFieldLabel = uilabel(app. SetupTab); app. DesiredDistancefromHouseEditFieldLabel. HorizontalAlignment = 'दाएं'; app. DesiredDistancefromHouseEditFieldLabel. Position = [२४ १२९ १०० २८]; app. DesiredDistancefromHouseEditFieldLabel. Text = {'वांछित दूरी'; 'हाउस से'};

% डीडीएफएच बनाएं

app. DDFH = uieditfield(app. SetupTab, 'संख्यात्मक'); ऐप.डीडीएफएच.लिमिट्स = [० ५०]; app. DDFH. ValueChangedFcn = createCallbackFcn (ऐप, @DDFHValueChanged, true); app. DDFH. HorizontalAlignment = 'center'; app. DDFH. Position = [१३९ १३५ १०० २२];

% तापमान डायरेक्शनस्विचलेबल बनाएं

app. TemperatureDirectionSwitchLabel = uilabel(app. SetupTab); app. TemperatureDirectionSwitchLabel. HorizontalAlignment = 'center'; app. TemperatureDirectionSwitchLabel. Position = [४१० ३४३ १२४ २२]; app. TemperatureDirectionSwitchLabel. Text = 'तापमान दिशा';

% तापमान दिशा स्विच बनाएं

app. TemperatureDirectionSwitch = uiswitch (app. SetupTab, 'स्लाइडर'); app. TemperatureDirectionSwitch. Items = {'ऊपर', 'नीचे'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (ऐप, @TemperatureDirectionSwitchValueChanged, true); app. TemperatureDirectionSwitch. Position = [४४९ ३८० ४५ २०]; app. TemperatureDirectionSwitch. Value = 'ऊपर';

% TempSettingsTab बनाएं

app. TempSettingsTab = uitab(app. TabGroup); app. TempSettingsTab. Title = 'Temp. समायोजन';

% तापमान1स्पिनरलेबल बनाएं

app. Temperature1SpinnerLabel = uilabel(app. TempSettingsTab); app. Temperature1SpinnerLabel. HorizontalAlignment = 'center'; app. Temperature1SpinnerLabel. Position = [६६ ३६३ ७६ २८]; app. Temperature1SpinnerLabel. Text = {'तापमान'; '#1'};

% तापमान1स्पिनर बनाएं

app. Temperature1Spinner = uispinner(app. TempSettingsTab); app. Temperature1Spinner. Limits = [६० ९०]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (ऐप, @Temperature1SpinnerValueChanged, true); ऐप.तापमान1स्पिनर.स्थिति = [१५७ ३४६ १०० ६८]; app. Temperature1Spinner. Value = ६०;

% तापमान2स्पिनरलेबल बनाएं

app. Temperature2SpinnerLabel = uilabel(app. TempSettingsTab); app. Temperature2SpinnerLabel. HorizontalAlignment = 'center'; app. Temperature2SpinnerLabel. Position = [६६ २४८ ७६ २८]; app. Temperature2SpinnerLabel. Text = {'तापमान'; '#2'};

% तापमान2स्पिनर बनाएं

app. Temperature2Spinner = uispinner(app. TempSettingsTab); app. Temperature2Spinner. Limits = [६० ९०]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (ऐप, @Temperature2SpinnerValueChanged, true); app. Temperature2Spinner. Position = [१५७ २३० १०० ७०]; app. Temperature2Spinner. Value = ६०;

% स्विच बनाएं

app. Switch = uiswitch(app. TempSettingsTab, 'स्लाइडर'); ऐप.स्विच.आइटम = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (ऐप, @SwitchValueChanged, true); app. Switch. FontName = 'न्याला'; app. Switch. FontSize = 28; ऐप। स्विच। स्थिति = [५२२ २१ ७४ ३२]; ऐप.स्विच.वैल्यू = '0';

% एडिटफिल्डलेबल बनाएं

app. EditFieldLabel = uilabel(app. TempSettingsTab); app. EditFieldLabel. HorizontalAlignment = 'दाएं'; app. EditFieldLabel. Position = [३७४ २९१ २५ २२]; app. EditFieldLabel. Text = '';

% अस्थायी बनाएं

app.tempnow = uieditfield (app. TempSettingsTab, 'संख्यात्मक'); app.tempnow. Limits = [६० ८९]; app.tempnow. ValueChangedFcn = createCallbackFcn (ऐप, @tempnowValueChanged, true); app.tempnow. HorizontalAlignment = 'center'; app.tempnow. FontSize = 26; app.tempnow. Position = [409 230 133 117]; app.tempnow. Value = ६०;

% गेजलेबल बनाएं

app. GaugeLabel = uilabel(app. TempSettingsTab); app. GaugeLabel. HorizontalAlignment = 'center'; app. GaugeLabel. Position = [२२५ ३२ ४२ २२]; app. GaugeLabel. Text = 'गेज';

% गेज बनाएं

ऐप.गेज = यूगेज (ऐप.टेम्पसेटिंग्सटैब, 'सर्कुलर'); ऐप.गेज.लिमिट्स = [६० ९०]; ऐप.गेज.मेजरटिक्स = [६० ६५ ७० ७५ ८० ८५ ९०]; एप.गेज.स्थिति = [१८५ ६९ १२० १२०]; ऐप.गेज.वैल्यू = 60;

% बचत टैब बनाएं

ऐप। सेविंग्सटैब = यूआईटैब (ऐप। टैब ग्रुप); app. SavingsTab. Title = 'बचत';

% UIAxes बनाएं

app. UIAxes = uiaxes(app. SavingsTab); title(app. UIAxes, 'Savings') xlabel(app. UIAxes, 'महीना और वर्ष') ylabel(app. UIAxes, 'Money') app. UIAxes. PlotBoxAspectRatio = [१ ०.६०६६६६६६६६६६६६६६७ ०.६०६६६६६६६६६६६६६६६७]; app. UIAxes. Color = [०.९४१२ ०.९४१२ ०.९४१२]; app. UIAxes. Position = [१४६ २१९ ३४८ २३७];

% ThisMonthCostEditFieldLabel बनाएं

app. ThisMonthCostEditFieldLabel = uilabel(app. SavingsTab); app. ThisMonthCostEditFieldLabel. HorizontalAlignment = 'center'; app. ThisMonthCostEditFieldLabel. Position = [४३९ ९६ ९४ २२]; app. ThisMonthCostEditFieldLabel. Text = 'इस महीने की लागत';

% ThisMonthCostEditField बनाएं

app. ThisMonthCostEditField = uieditfield(app. SavingsTab, 'संख्यात्मक'); app. ThisMonthCostEditField. Limits = [0 Inf]; app. ThisMonthCostEditField. ValueDisplayFormat = '$%7.2f'; app. ThisMonthCostEditField. HorizontalAlignment = 'center'; app. ThisMonthCostEditField. Position = [४१७ ३९ १३७ ५८];

% कुल बचत बनाएंसंपादित करेंफ़ील्ड लेबल

app. TotalSavingsEditFieldLabel = uilabel(app. SavingsTab); app. TotalSavingsEditFieldLabel. HorizontalAlignment = 'दाएं'; app. TotalSavingsEditFieldLabel. Position = [१११ ९६ ७७ २२]; app. TotalSavingsEditFieldLabel. Text = 'कुल बचत';

% कुल बचत बनाएं संपादित फ़ील्ड

app. TotalSavingsEditField = uieditfield(app. SavingsTab, 'संख्यात्मक'); app. TotalSavingsEditField. Limits = [0 Inf]; app. TotalSavingsEditField. ValueDisplayFormat = '$%9.2f'; app. TotalSavingsEditField. HorizontalAlignment = 'center'; app. TotalSavingsEditField. Position = [८८ ३९ १३७ ५८]; अंत अंत

तरीके (पहुँच = सार्वजनिक)

% निर्माण ऐप

फंक्शन ऐप = कंट्रोल_1

% घटक बनाएं और कॉन्फ़िगर करें

क्रिएट कॉम्पोनेंट्स (ऐप)

% ऐप डिज़ाइनर के साथ ऐप को पंजीकृत करें

रजिस्टर ऐप (ऐप, ऐप। यूआईफिगर)

अगर नर्गआउट == 0

क्लियर ऐप एंड एंड

% कोड जो ऐप हटाने से पहले निष्पादित होता है

फ़ंक्शन हटाएं (ऐप)

जब ऐप डिलीट हो जाए तो यूआइफिगर को% डिलीट कर दें

हटाएं (ऐप। यूआईफिगर) अंत अंत अंत

आपको शायद एक त्रुटि मिलेगी, जो कोई समस्या नहीं है। बस उस GUI को बंद करें जो आपके रन दबाने के बाद उत्पन्न हुआ था, हम एक पल में बाकी आवश्यक प्रोग्राम और डेटा एकत्र कर लेंगे।

चूंकि मैटलैब की स्थापना की गई है, हम अजगर पर आगे बढ़ सकते हैं। सबसे पहले, अपने कमांड प्रॉम्प्ट (विंडोज़ पर) से या अपने पायथन फ़ोल्डर में.exe फ़ाइल का उपयोग करके पायथन प्रोग्राम चलाएं। सुनिश्चित करें कि आयात आदेश का उपयोग करके सभी उपयुक्त पुस्तकालय स्थापित हैं।

आयात धारावाहिक

आयात समय आयात सीएसवी

ये तीन पुस्तकालय हैं जिन्हें आपको शुरू करने की आवश्यकता होगी, हालांकि हम जल्द ही अपनी खुद की लाइब्रेरी बनाने वाले हैं। यदि इन आदेशों में किसी प्रकार की त्रुटि थी, तो वापस जाएं और सुनिश्चित करें कि पुस्तकालय स्थापित हैं और पाइथन फ़ोल्डर में लिब फ़ोल्डर में हैं। आगे हम वह उत्पन्न करेंगे जिसे मैंने पाइथोलॉगर लाइब्रेरी कहा है। यह नाम आवश्यक नहीं है, आप इसे जो चाहें कॉल कर सकते हैं, यह सिर्फ आपके द्वारा बनाई गई पायथन फ़ाइल (.py) का नाम है।

एक टेक्स्ट एडिटर खोलें, मैं Sublime3 का उपयोग करता हूं लेकिन नोटपैड ठीक काम करता है, और इस कोड को दर्ज करें।

डीईएफ़ पायथनप्रिंट ():

आयात पायथनलॉगर आयात सीरियल आयात समय आयात सीएसवी सेर = सीरियल। सीरियल ('COM8') # COM8 arduino सीरियल पोर्ट है, यह संभवतः प्रत्येक उपयोगकर्ता के लिए अलग होगा, यानी arduino IDE ser.flushInput() में अपने सीरियल पोर्ट की जांच करें जबकि सत्य: कोशिश करें: ser_bytes = ser.readline() प्रिंट (ser_bytes) ओपन ("test_data.csv", "a") के साथ f: लेखक = csv.writer (f, delimiter = ",") # डेटा को सेट करता है अल्पविराम से अलग किए गए लेखक के रूप में दर्ज किया जाना चाहिए। लेखक ([time.time (), ser_bytes]) # test_data.csv को डेटा लिखता है सिवाय: प्रिंट ("त्रुटि उत्पन्न हुई") विराम

लिब फ़ोल्डर में टेक्स्ट को "अपनी इच्छित लाइब्रेरी का नाम डालें" के रूप में सहेजें। यह भी ध्यान दें कि def pythonprint() लाइन उस फ़ंक्शन के नाम को परिभाषित करती है जिसे आप कॉल करने जा रहे हैं, ताकि आप इसे "अपने फ़ंक्शन के लिए इच्छित नाम डालें"() को def में बदल सकें। जब पुस्तकालय सहेजा जाता है तो हम arduino कोड पर आगे बढ़ सकते हैं।

Arduino IDE खोलें और दो नई स्केच विंडो खोलें। उन दो स्केच फ़ाइलों को कहीं सुविधाजनक स्थान पर सहेजें, इन फ़ाइलों का नाम मायने नहीं रखता। फिर सभी डिफ़ॉल्ट कोड हटाएं और इसे निम्न के साथ बदलें।

Arduino प्राप्त करने के लिए:

#शामिल

#include #include #include // इसका उपयोग नहीं किया जाता है लेकिन RH_ASK ड्राइवर को संकलित करने के लिए आवश्यक है; संरचना डेटा संरचना {फ्लोट अस्थायी; }मेरी जानकारी; शून्य सेटअप () {Serial.begin (९६००); // डिबगिंग केवल अगर (!driver.init ()) Serial.println ("init विफल"); } शून्य लूप () { uint8_t buf [RH_ASK_MAX_MESSAGE_LEN]; uint8_t बुफ्लेन = आकार (buf); अगर (driver.recv(buf, &buflen)) // नॉन-ब्लॉकिंग { int i; // एक अच्छे चेकसम के साथ संदेश प्राप्त करें, इसे डंप करें। //driver.printBuffer ("गॉट:", बफ, बफलेन); memcpy (& myData, buf, sizeof (myData)); सीरियल.प्रिंट्लन (""); सीरियल.प्रिंट (myData.temp); } }

पी.एस. //driver.printBuffer…. आदि लाइन टेस्ट कोड है। इसके बारे में चिंता करने की कोई आवश्यकता नहीं है जब तक कि आप निदान नहीं कर रहे हैं और यह पता लगाना चाहते हैं कि क्या आप वास्तव में डेटा प्राप्त कर रहे हैं।

ट्रांसमीटर arduino. के लिए

#शामिल

#शामिल करें #शामिल करें #शामिल करें // इसका उपयोग नहीं किया जाता है लेकिन संकलन के लिए आवश्यक है#शामिल करें #include int pin=4; DHT11 dht11 (पिन); RH_ASK चालक; संरचना डेटा संरचना {फ्लोट अस्थायी; }मेरी जानकारी; बाइट tx_buf[sizeof(myData)] = {0}; // तो तर्क बिटरेट हैं, ट्रांसमिट पिन (टीएक्स), // पिन (आरएक्स), पीपीटी पिन प्राप्त करें, उलटा है। अंतिम 2 का उपयोग नहीं किया जाता है। शून्य सेटअप () {Serial.begin (९६००); // डिबगिंग केवल अगर (!driver.init ()) Serial.println ("init विफल"); } शून्य लूप () {int एरर; फ्लोट अस्थायी, हमी; uint8_t संदेश; अगर ((गलती = dht11.read (humi, अस्थायी)) == 0) myData.temp = अस्थायी; memcpy (tx_buf, और myData, sizeof (myData)); बाइट zize = sizeof (myData); { सीरियल.प्रिंट्लन (myData.temp); Driver.send((uint8_t *)tx_buf, zize); ड्राइवर.वेटपैकेटसेंट (); // निष्पादन को तब तक रोकें जब तक कि सभी डेटा देरी से नहीं भेजे गए (2000); // 2 सेकंड प्रतीक्षा करें}}

शामिल आदेश पर्याप्त होना चाहिए, लेकिन यदि आपको बाद में डेटा स्थानांतरण के साथ कोई समस्या है तो आप रेडियोहेड लाइब्रेरी फ़ोल्डर में देखना चाहेंगे और शेष फ़ाइल नामों को उसी प्रारूप में शामिल कर सकते हैं।

चरण 5: इसे काम करना

इसे काम करना
इसे काम करना
इसे काम करना
इसे काम करना
इसे काम करना
इसे काम करना

अब जब हमारे पास सभी कोड एक साथ हैं और arduino का असेंबल है, तो हम arduino को आपके कंप्यूटर से जोड़ सकते हैं और कोड लोड कर सकते हैं। सुनिश्चित करें कि आप माइक्रोकंट्रोलर प्राप्त करने और प्रसारित करने के लिए सही कोड भेजते हैं। जब यह चल रहा हो, तो आपके पास दोनों arduino आपके कंप्यूटर से जुड़े हो सकते हैं, लेकिन आपको यह सुनिश्चित करना होगा कि आपके पास आगे बढ़ने के लिए सही पोर्ट चुना गया है, या आप ट्रांसमिटिंग arduino को डिस्कनेक्ट कर सकते हैं और कोड होने के बाद इसे किसी अन्य स्रोत से पावर कर सकते हैं। अपलोड किया गया।

जिसके बारे में बोलते हुए, आपको उस पोर्ट का चयन करना चाहिए जो अब IDE टूल मेनू से आपके प्राप्त करने वाले arduino से जुड़ा है और अजगर को चलाएं।

जब आप ऐसा कर रहे हों तो सीरियल मॉनिटर को न खोलें, मॉनिटर के खुले रहने पर अजगर सीरियल को नहीं पढ़ सकता है। एक बार जब अजगर खुला होता है तो पायथनप्रिंट फ़ंक्शन को निम्नानुसार कॉल करें।

pythonlogger.pythonprint()

यह arduino सीरियल पोर्ट से डेटा संग्रह शुरू करेगा। यदि आप अभी अपना पायथन फ़ोल्डर खोलते हैं, तो आप देखेंगे कि "test_data.csv" नामक एक नई.csv फ़ाइल बनाई गई है, जिसमें सभी समय और तापमान की जानकारी होती है। यह वह फ़ाइल होगी जिसे मैटलैब अपनी सभी गणनाओं और नियंत्रणों को करने के लिए एक्सेस करता है।

एक और चेतावनी: जब डेटा एक्सेस या लिखा जा रहा हो, तो test_data.csv न खोलें। यदि आप करते हैं, तो अजगर और/या मैटलैब कोड क्रैश हो जाएगा और एक त्रुटि वापस भेज देगा।

यदि आप.csv को बाद में खोलने का निर्णय लेते हैं, तो आप देखेंगे कि समय स्तंभ संख्याओं की एक बहुत बड़ी स्ट्रिंग है। ऐसा इसलिए है क्योंकि टाइम.टाइम () कमांड 1 जनवरी, 1970 के बाद से सेकंड की संख्या लिखता है।

इस बिंदु पर अजगर को उस तापमान डेटा को प्रिंट करना चाहिए जो वह सीरियल पोर्ट से पढ़ रहा है। यह कुछ इस तरह दिखना चाहिए:

बी'25.03'/आर/एन

अतिरिक्त वर्णों के बारे में चिंता न करें,.csv फ़ाइल के दूसरे कॉलम में मध्य पांच मानों के लिए मैटलैब कोड अनुक्रमणिका।

अब जब सभी सहायक प्रोग्राम काम कर रहे हैं और डेटा एकत्र किया जा रहा है तो हम पहले से सेटअप किए गए मैटलैब मोबाइल प्रोग्राम से जीपीएस डेटा एकत्र करना शुरू कर सकते हैं और मैटलैब जीयूआई कोड चला सकते हैं। एक बार जब आप मैटलैब मोबाइल के सेंसर टैब में हों, तो जीपीएस चुनें और स्टार्ट बटन दबाएं।

यदि आप मैटलैब मोबाइल में नए हैं तो चरण 4 को देखें और ऊपर दिए गए स्क्रीन शॉट्स को देखें। यदि आपको अभी भी समस्या हो रही है, तो सुनिश्चित करें कि आप उस कंप्यूटर से जुड़े हैं जिसे आपने पहले चुना था (सेटिंग टैब में) और "कनेक्टर ऑन" कमांड से लिंक का उपयोग करके जांच करें कि मैटलैब ऑनलाइन है।

चरण 6: कार्यक्रम का उपयोग करना

कार्यक्रम का उपयोग करना
कार्यक्रम का उपयोग करना

इस प्रणाली में पृष्ठभूमि में कई चीजें चल रही हैं। तापमान डेटा एकत्र किया जा रहा है और arduino और pyton द्वारा लॉग किया जा रहा है, मैटलैब आपके फोन से जीपीएस डेटा एकत्र कर रहा है और यह देखने के लिए गणना चला रहा है कि आप अपने घर से कितनी दूर हैं और उस सारी जानकारी के आधार पर अपना थर्मोस्टेट सेट कर रहे हैं। आप जहां आते हैं वह आपकी प्राथमिकताएं प्रदान कर रहा है।

मैटलैब जीयूआई कोड चलाएँ।.mlapp फ़ाइल खोलें और पहले टैब को देखें। आपको इसके लिए स्वयं जानकारी एकत्र करने की आवश्यकता होगी, आपकी हीटिंग/कूलिंग यूनिट की दक्षता और पावर रेटिंग आमतौर पर यूनिट पर ही पाई जा सकती है, और आपकी औसत गति केवल एक अच्छा अनुमान है कि आप कितनी तेजी से ड्राइव करते हैं। एक बार मान दर्ज हो जाने के बाद, "रन डायग्नोस्टिक" बटन दबाएं और प्रोग्राम आपके थर्मोस्टैट को आपके घर के बारे में जानकारी इकट्ठा करने के लिए नियंत्रित करता है।

अगले मेनू पर जाएं।

चरण 7: तापमान नियंत्रण

तापमान नियंत्रण
तापमान नियंत्रण

यह मेनू आपको घर और बाहर अपने पसंदीदा तापमान का चयन करने की अनुमति देता है। तापमान # 1 को अपने आरामदायक तापमान पर सेट करें, और तापमान # 2 को उच्च या निम्न मान पर सेट करें जो आपके घर के लिए सुरक्षित हो (सुनिश्चित करें कि जब आपके पास घर पर कुत्ते हों, तो आप इसे 100 डिग्री पर सेट न करें)।

चरण 8: ऐतिहासिक डेटा

ऐतिहासिक डेटा
ऐतिहासिक डेटा

अंत में आप देख सकते हैं कि स्वचालित नियंत्रण का उपयोग करके आप कितना पैसा बचा रहे हैं। यह अनिवार्य रूप से अनुमान लगाता है कि यदि आपका थर्मोस्टैट आपके पसंदीदा तापमान 24/7 पर सेट किया गया था, तो कितनी ऊर्जा का उपयोग किया जाएगा, फिर आपकी वास्तविक ऊर्जा का उपयोग किया जाता है।

सौभाग्य निर्माण।

सिफारिश की: