সুচিপত্র:

অটোস্ট্যাট: একটি দূরবর্তী থার্মোস্ট্যাট: 8 টি ধাপ (ছবি সহ)
অটোস্ট্যাট: একটি দূরবর্তী থার্মোস্ট্যাট: 8 টি ধাপ (ছবি সহ)

ভিডিও: অটোস্ট্যাট: একটি দূরবর্তী থার্মোস্ট্যাট: 8 টি ধাপ (ছবি সহ)

ভিডিও: অটোস্ট্যাট: একটি দূরবর্তী থার্মোস্ট্যাট: 8 টি ধাপ (ছবি সহ)
ভিডিও: How to Share a Printer with Multiple Computers - একটি প্রিন্টারে সবগুলো কম্পিউটার থেকে প্রিন্ট !! 2024, জুলাই
Anonim
অটোস্ট্যাট: একটি দূরবর্তী থার্মোস্ট্যাট
অটোস্ট্যাট: একটি দূরবর্তী থার্মোস্ট্যাট

আপনি সম্ভবত যে প্রশ্নটি জিজ্ঞাসা করছেন তা হ'ল "আপনি অন্য একটি দূরবর্তী থার্মোস্ট্যাট তৈরি করছেন কেন?"

সেই প্রশ্নের উত্তর হল, আমাকে করতে হয়েছিল, এবং বাজারের স্মার্ট থার্মোস্ট্যাটগুলি খুব ব্যয়বহুল।

ন্যায্য সতর্কতা, এটি "ধারণার প্রমাণ" নির্মাণ যা আসলে আপনার থার্মোস্ট্যাট নিয়ন্ত্রণ করার জন্য কিছু অতিরিক্ত আউটপুট প্রয়োজন হবে, কিন্তু কোরটি ঠিক আছে এবং আপনার নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে এটি পরিবর্তন করা যেতে পারে। এছাড়াও, এটি এখনও একটি কাজ চলছে, তাই কিছু আপডেট এবং পরিবর্তন আশা করুন (বিশেষ করে ম্যাটল্যাব কোডে)

শুরু করার জন্য আমি আপনাকে সতর্ক করতে চাই, এর জন্য তিনটি প্রোগ্রাম প্রয়োজন (তাদের মধ্যে একটি বেশ ব্যয়বহুল), বেশ কয়েকটি লাইব্রেরি এবং প্রোগ্রামগুলির জন্য সমর্থন প্যাকেজ, এবং আপনাকে তাদের সবাইকে একে অপরের সাথে কথা বলতে হবে। এটা মাথা ব্যাথা। সেই সতর্কতার সাথেই উপকরণ দিয়ে শুরু করা যাক।

হার্ডওয়্যার

  • arduino ন্যানো
  • arduino uno (বা অন্য ন্যানো, আমি শুধু ইউএনও ব্যবহার করেছি কারণ আমার চারপাশে একটি ছিল)
  • বিভিন্ন জাম্পার তার, কিছু পুরুষ/পুরুষ এবং তিন সেট দুটি পুরুষ/মহিলা জাম্পার যোগদান
  • 433MHz রেডিও ফ্রিকোয়েন্সি (RF) রিসিভার, আমি MX-05V ব্যবহার করেছি
  • 433MHz RF ট্রান্সমিটার, আমি MX-FS-03V ব্যবহার করেছি
  • ডিএইচটি 11 উচ্চ নির্ভুলতা থার্মোমিটার এবং আর্দ্রতা সেন্সর (আমি যেটি ব্যবহার করেছি তা তিনটি প্রং চিপে ইনস্টল করা আছে যা প্রয়োজনীয় প্রতিরোধক ইতিমধ্যে ইনস্টল করা আছে)
  • রুটিবোর্ড (যদি আপনি এই সব একসঙ্গে ঝালাই করতে না চান)
  • জিপিএস সহ একটি ফোন (এই ক্ষেত্রে আইফোন 8, কিন্তু আমি একটি গ্যালাক্সি এস 8 ব্যবহার করেছি)
  • থ্রিডি প্রিন্টেড কন্টেইনার (সত্যিই প্রয়োজনীয় নয়, যে কোনো কন্টেইনার কাজ করবে বা একেবারেই নয়)

সফটওয়্যার

  • ম্যাথওয়ার্কস থেকে ম্যাটল্যাব (আমার 2018a সংস্করণ আছে, কিন্তু আমি 2017a-b সংস্করণও ব্যবহার করেছি)
  • আপনার ফোনে ম্যাটল্যাব মোবাইল ইনস্টল করা আছে
  • ম্যাটল্যাবের জন্য আরডুইনো সাপোর্ট প্যাকেজ
  • ম্যাটল্যাবের জন্য আইফোন সেন্সর প্যাকেজ
  • arduino IDE
  • Arduino IDE এর RadioHead সাপোর্ট প্যাকেজ এবং লাইব্রেরি
  • Arduino IDE এর জন্য DHT11 লাইব্রেরি
  • পাইথন 3.7 (নিশ্চিত করুন যে পিসেরিয়াল লাইব্রেরি বা সিরিয়াল লাইব্রেরি ইনস্টল করা আছে, যা এটি সংস্করণ 3.4 বা নতুনের জন্য হওয়া উচিত)

ধাপ 1: সবকিছু একত্রিত করা

সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ
সবগুলোকে একত্রে রাখ

প্রথমত আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি আরএফ ট্রান্সমিটারগুলির সাথে কাজ করার জন্য কয়েকটি আরডুইনো টিউটোরিয়াল করুন যাতে নিশ্চিত করা যায় যে আপনার যন্ত্রাংশগুলি কাজ করছে এবং তারগুলি সঠিক। কোড অন্তর্ভুক্ত সহ প্রচুর উদাহরণ পাওয়া যায় (আমাদের মধ্যে যারা C এবং C ++ সম্পর্কে কিছুই জানেন না তাদের জন্য)।

Arduino এবং সেন্সর একত্রিত পেতে নীচের তারের চিত্রগুলি অনুসরণ করুন। Arduinos এর ওয়্যারিং করার সময় একটি জিনিস মনে রাখতে হবে যে আমি যে ডেটা পোর্ট ব্যবহার করেছি তা প্রয়োজন হয় না কিন্তু সুপারিশ করা হয়।

যদি আপনি আপনার ব্যবহার করা ডেটা পোর্টগুলি পরিবর্তন করার সিদ্ধান্ত নেন, তাহলে আপনাকে কেবল আপনার কোডের পিনগুলি সংজ্ঞায়িত করতে হবে। ব্যক্তিগতভাবে, আমি মনে করি ডিফল্ট পোর্টগুলির সাথে থাকা সহজ যা আরডুইনো লাইব্রেরিগুলি স্বীকৃতি দেয়।

এবং শুধু পরিষ্কার হতে, ন্যানো এবং ইউএনও বিনিময়যোগ্য, কিন্তু আমি তাপমাত্রার মনিটরের আকার কমাতে প্রকল্পের ট্রান্সমিটার সাইডের জন্য ন্যানো ব্যবহার করেছি।

সাইড নোট: ন্যানো ধারণকারী সবুজ গর্ভনিরোধক হল 3D মুদ্রিত ধারক।

ধাপ 2: রিসিভার

রিসিভার
রিসিভার

ধাপ 3: ট্রান্সমিটার

ট্রান্সমিটার
ট্রান্সমিটার

ধাপ 4: কোড

ওয়্যারিং শেষ হয়ে গেলে আপনাকে সমস্ত প্রোগ্রাম চালু করতে হবে এবং লাইব্রেরিগুলি ইনস্টল করতে হবে (যদি আপনি ইতিমধ্যে না করে থাকেন), আমি ধরে নেব আপনার কাছে আছে, আপনাকে ম্যাটল্যাব শুরু করতে হবে এবং আইফোন সাপোর্ট প্যাকেজ চালাতে হবে। এই মুহুর্তে আপনার ফোন এবং ম্যাটল্যাব উভয়ই একই ওয়াইফাই নেটওয়ার্কে থাকা প্রয়োজন।

ম্যাটল্যাবের কমান্ড উইন্ডোতে লিখুন:

সংযোগকারী চালু

এটি আপনাকে পাঁচ অঙ্কের পাসওয়ার্ড লিখতে বলবে যা আপনি আপনার আইফোনে সংযোগ করতে ব্যবহার করবেন। আপনি পাসওয়ার্ড মনে রাখবেন তা নিশ্চিত করুন। যখন আপনি পাসওয়ার্ডটি প্রবেশ করেছেন ম্যাটল্যাব আপনার আইপি ঠিকানা সহ কিছু তথ্য প্রদর্শন করবে। পরবর্তী ধাপে এটি ব্যবহার করুন, যা ম্যাটল্যাব মোবাইলে "সেন্সর দিয়ে শুরু করা" সহায়তা মেনু থেকে নির্দেশাবলী থেকে আসে।

  • ম্যাথওয়ার্কস ক্লাউড বা কম্পিউটারে সেন্সর ডেটা পাঠানোর জন্য এই পদক্ষেপগুলি অনুসরণ করুন:
  • যদি আপনি একটি কম্পিউটারে সেন্সর ডেটা পাঠাচ্ছেন এবং যদি এটি ইতিমধ্যে ইনস্টল করা না থাকে, তাহলে MATLAB এ অ্যাপল আইওএস সেন্সরের জন্য MATLAB সাপোর্ট প্যাকেজ ডাউনলোড এবং ইনস্টল করুন।
  • ম্যাটল্যাব মোবাইলকে ম্যাথওয়ার্কস ক্লাউড বা সেটিংস ব্যবহার করে কম্পিউটারের সাথে সংযুক্ত করুন।
  • MATLAB (আপনার কম্পিউটারে) এ mobiledev অবজেক্ট তৈরি করুন, উদাহরণস্বরূপ: >> m = mobiledev
  • এক বা একাধিক সেন্সর নির্বাচন করুন এবং স্টার্ট ট্যাপ করুন।

আপনার ডিভাইসে স্থানীয়ভাবে সেন্সর ডেটা লগ করতে এই ধাপগুলি অনুসরণ করুন:

  • সেন্সর স্ক্রিনে, আপনি যে সেন্সর থেকে ডেটা সংগ্রহ করতে চান তা নির্বাচন করুন।
  • লগ নির্বাচন করুন।
  • স্টার্ট বোতামটি আলতো চাপুন।
  • ডেটা সংগ্রহ করা শেষ হলে, স্টপ বাটনে আলতো চাপুন।
  • পপ-আপে, সেন্সর লগের নাম লিখুন।
  • প্রয়োজনে 1-5 ধাপ পুনরাবৃত্তি করুন।

এই বিভাগটি 4 য় অংশে উল্লেখ করা হবে, তাই প্রকৃতপক্ষে এখনও তথ্য সংগ্রহ শুরু করার প্রয়োজন নেই। শুধু আপনার ফোন হাতে রাখুন এবং ম্যাটল্যাব মোবাইল প্রস্তুত রাখুন।

ম্যাটল্যাব কোড ফাইলগুলি রাখার জন্য এখন আপনার কম্পিউটারে কোথাও একটি ফোল্ডার তৈরি করতে হবে। আপনার চারটি পৃথক ফাইল থাকবে, দুটি ব্যাকগ্রাউন্ড ফাংশন (.m ফাইল) এবং GUI (.mlapp) এর জন্য একটি ম্যাটল্যাব কোড ফাইল।

প্রথমে আপনার বাড়িতে বাতাসের জন্য গণনা করা হয় (এটি ম্যাটল্যাবকে জানতে দেয় যে আপনার ঘর গরম/ঠান্ডা করতে কত সময় লাগে)

ফাংশন [ভর] = ক্যালকমাস (T_ins, P_out, Chng_dir)

runCalc = 0; Tmp_start = T_ins; সময়_ শুরু = ঘড়ি; time_end = 0 যখন রানক্যালক <= 1 যদি T_ins == (Tmp_start+(7*Chng_dir)) time_end = clock; PwrCntr = 0; runCalc = 0; অন্যথায় PwrCntr = P_out; runCalc = runCalc+0.1 শেষ শেষ সময়_ডিয়াগ = time_end-time_start ভর = (P_out*time_diag)/7.035

এবং দ্বিতীয়টি:

ফাংশন [টাইমস্ট্যাম্প, pwr_usage] = dist_cntrl (Lat_in, Lon_in, P_out, r_pref, speed, T_pref, mass)

অটো স্ট্যাট = 1; আমি = 1; যখন AutoStat == 1 time_start = clock; 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))।^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; %টাইম_আরটিএন = (Dist-r_pref)./ গতি ফেরাতে আপনার সময় অনুমান করে; %ঘরের এয়ার কন্ডিশনার এবং এয়ারম্যাসের পাওয়ার আউট এর উপর ভিত্তি করে প্রয়োজনীয় থার্মোস্ট্যাট সেটিং গণনা করে। calcTmp_set = ((-1.*P_out।*time_rtn)./ (ভর।*(1.005)))+T_pref; %নির্ধারণ করে যে বর্তমান থার্মোস্ট্যাট সেটিং পরিবর্তন করতে হবে কিনা যদি রাউন্ড (calcTmp_set) ~ = round (t) timeACon = clock; PwrCntr = P_out; timeACon = timeACon + clock-time_start; খরচ = P_out*timeACon*হার; অন্যথায় PwrCntr = 0 শেষ টাইমস্ট্যাম্প (শেষ+1, [1: 6]) = ঘড়ি; pwr_usage (শেষ+1, 1) = PwrCntr; বিরতি (5) শেষ শেষ

এই দুটি ফাইলই ম্যাটল্যাব ফাংশন। আপনি যদি তাদের নির্দিষ্ট প্রয়োজনের জন্য সংশোধন করার পরিকল্পনা না করেন তবে আপনি তাদের অ্যাক্সেস করতে পারবেন না, যেহেতু আপনি তাদের GUI থেকে কল করবেন। উভয় ফাইল আলাদাভাবে সংরক্ষণ করুন, প্রথমটি CalcMass.m হিসেবে এবং দ্বিতীয়টি dist_cntrl.m হিসাবে, সেগুলিই নাম হবে যা GUI কোড ফাংশনগুলিকে কল করার জন্য ব্যবহার করে, তাই যতক্ষণ না আপনি নীচের বাকী কোডটি সম্পাদনা করতে চান, সাথে থাকুন নামকরণ কনভেনশন।

জিইউআই কোডে প্রবেশ করার আগে, আপনাকে ম্যাটল্যাবের জন্য অ্যাপ ডিজাইনার খুলতে হবে, যা আপনি ম্যাটল্যাব মেনু বারে নেভিগেট করে খুলতে পারেন, অথবা আমার প্রিয় পদ্ধতি যা ম্যাটল্যাব কমান্ড উইন্ডোতে নিম্নলিখিত কমান্ডটি প্রবেশ করছে:

অ্যাপ ডিজাইনার

একবার অ্যাপ ডিজাইনার খুললে একটি নতুন অ্যাপ ফাইল (.mlapp) খুলুন এবং কোড উইন্ডো থেকে সমস্ত ডিফল্ট কোড মুছে দিন। তারপরে নিচের সমস্তটি প্রতিস্থাপন করুন এবং রান বোতামটি টিপুন।

classdef Control_1 <matlab.apps. AppBase % প্রপার্টি যা অ্যাপ কম্পোনেন্ট প্রোপার্টি (অ্যাক্সেস = পাবলিক) UIFigure matlab.ui. চিত্র ট্যাবগ্রুপ matlab.ui.container. TabGroup সেটআপ ট্যাব 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 তাপমাত্রা DirectionSwitch matlab.ui.control. Switch TempSettingsTab matlab.ui.container. TabelTabelTab তাপমাত্রা ui.control. Spinner temperature2SpinnerLabel matlab.ui.cont রোল লেবেল তাপমাত্রা 2 স্পিনার 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.container. Tab UIAxes matlab.ui.control. UIAxes ThisMonthCostEditFieldLabel matlab.ui.control. Label ThisMonthCostEditField matlab.ui.control. NumericEditFieldField MatlabSendEd. Field MatlabSend. Edd. Field. TendLoad. End. Lend. Store. Lead. State. Lead. State. Lead. State. Lead. State. Lead

পদ্ধতি (অ্যাক্সেস = ব্যক্তিগত)

% মান পরিবর্তন ফাংশন: tempnow

ফাংশন tempnowValueChanged (app, event) 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

% মান পরিবর্তিত ফাংশন: তাপমাত্রা নির্দেশনা সুইচ

ফাংশন তাপমাত্রা নির্দেশ স্যুইচ ভ্যালু পরিবর্তিত (অ্যাপ, ইভেন্ট) উপায় = অ্যাপ। way = uint8 (way) way = length (way) যদি way == 4 Chng_dir = -1; অন্যথায় Chng_dir = 1; শেষ Chng_dir; শেষ

% মান পরিবর্তিত ফাংশন: DDFH

ফাংশন DDFHValueChanged (app, event) r_pref = app. DDFH. Value; শেষ

% মান পরিবর্তিত ফাংশন: AvgLocalSpeedEditField

ফাংশন AvgLocalSpeedEditFieldValueChanged (app, event) speed = app। শেষ

% মান পরিবর্তিত ফাংশন: PowerOutputRatingEditField

ফাংশন PowerOutputRatingEditFieldValueChanged (app, event) value = app. PowerOutputRatingEditField. Value; শেষ

% মান পরিবর্তিত ফাংশন: EnergyEfficiencyRatingEditField

ফাংশন EnergyEfficiencyRatingEditFieldValueChanged (app, event) value = app. EnergyEfficiencyRatingEditField. Value; শেষ

% বাটন পুশ ফাংশন: RunDiagnosticButton

ফাংশন RunDiagnosticButtonPushed (app, event) way = app. TemperatureDirectionSwitch. Value; উপায় = uint8 (উপায়) উপায় = দৈর্ঘ্য (পথ) যদি উপায় == 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 স্পিনার

ফাংশন তাপমাত্রা 1 স্পিনার ভ্যালু পরিবর্তিত (অ্যাপ, ইভেন্ট) মান = অ্যাপ। তাপমাত্রা 1 স্পিনার। শেষ

% মান পরিবর্তিত ফাংশন: তাপমাত্রা 2 স্পিনার

ফাংশন তাপমাত্রা 2 স্পিনার ভ্যালু পরিবর্তিত (অ্যাপ, ইভেন্ট) মান = অ্যাপ। তাপমাত্রা 2 স্পিনার শেষ

% মান পরিবর্তিত ফাংশন: সুইচ

ফাংশন SwitchValueChanged (app, event) m = mobiledev; Lat_in = m অক্ষাংশ Lon_in = m. Longitude P_out = 0; r_pref = app. DDFH. Value; T_pref = app. Temperature1Spinner. Value; গতি = m. Speed; ভর = 200; গতি = app. AvgLocalSpeedEditField. Value; Auto_Stat = app. Switch. Value; dist_cntrl (Lat_in, Lon_in, P_out, r_pref, T_pref, speed, mass) শেষ শেষ

% অ্যাপ আরম্ভ এবং নির্মাণ

পদ্ধতি (অ্যাক্সেস = ব্যক্তিগত)

% UIFigure এবং উপাদান তৈরি করুন

ফাংশন createComponents (অ্যাপ)

% UIFigure তৈরি করুন

app. UIFigure = uifigure; app. UIFigure. Position = [100 100 640 480]; app. UIFigure. Name = 'UI চিত্র';

ট্যাবগ্রুপ তৈরি করুন

app. TabGroup = uitabgroup (app. UIFigure); app. TabGroup. Position = [1 1 640 480];

% SetupTab তৈরি করুন

app. SetupTab = uitab (app. TabGroup); app. SetupTab. Title = 'সেটআপ';

RunDiagnosticButton তৈরি করুন

app. RunDiagnosticButton = uibutton (app. SetupTab, 'push'); app. RunDiagnosticButton. ButtonPushedFcn = createCallbackFcn (app, unRunDiagnosticButtonPushed, true); app. RunDiagnosticButton. FontWeight = 'সাহসী'; app. RunDiagnosticButton. Position = [465 78 103 23]; app. RunDiagnosticButton. Text = 'Run Diagnostic';

% EnergyEfficiencyRatingEditFieldLabel তৈরি করুন

app. EnergyEfficiencyRatingEditFieldLabel = uilabel (app. SetupTab); app. EnergyEfficiencyRatingEditFieldLabel. HorizontalAlignment = 'right'; app. EnergyEfficiencyRatingEditFieldLabel. Position = [8 425 135 22]; app. EnergyEfficiencyRatingEditFieldLabel. Text = 'শক্তি দক্ষতা রেটিং';

% EnergyEfficiencyRatingEditField তৈরি করুন

app. EnergyEfficiencyRatingEditField = uieditfield (app. SetupTab, 'numeric'); app. EnergyEfficiencyRatingEditField. Limits = [0 100]; অ্যাপ্লিকেশন। app. EnergyEfficiencyRatingEditField. HorizontalAlignment = 'center'; app. EnergyEfficiencyRatingEditField. Position = [158 425 100 22];

% PowerOutputRatingEditFieldLabel তৈরি করুন

app. PowerOutputRatingEditFieldLabel = uilabel (app. SetupTab); app. PowerOutputRatingEditFieldLabel. HorizontalAlignment = 'right'; app. PowerOutputRatingEditFieldLabel. Position = [18 328 118 22]; app. PowerOutputRatingEditFieldLabel. Text = 'পাওয়ার আউটপুট রেটিং';

% PowerOutputRatingEditField তৈরি করুন

app. PowerOutputRatingEditField = uieditfield (app. SetupTab, 'numeric'); app. PowerOutputRatingEditField. Limits = [0 Inf]; app. PowerOutputRatingEditField. ValueChangedFcn = createCallbackFcn (app, owerPowerOutputRatingEditFieldValueChanged, true); app. PowerOutputRatingEditField. HorizontalAlignment = 'center'; app. PowerOutputRatingEditField. Position = [151 328 100 22];

% AvgLocalSpeedEditFieldLabel তৈরি করুন

app. AvgLocalSpeedEditFieldLabel = uilabel (app. SetupTab); app. AvgLocalSpeedEditFieldLabel. HorizontalAlignment = 'right'; app. AvgLocalSpeedEditFieldLabel. Position = [27 231 100 22]; app. AvgLocalSpeedEditFieldLabel. Text = 'গড়। স্থানীয় গতি ';

% AvgLocalSpeedEditField তৈরি করুন

app. AvgLocalSpeedEditField = uieditfield (app. SetupTab, 'numeric'); app. AvgLocalSpeedEditField. Limits = [0 70]; app. AvgLocalSpeedEditField. ValueChangedFcn = createCallbackFcn (app, vAvgLocalSpeedEditFieldValueChanged, true); app. AvgLocalSpeedEditField. HorizontalAlignment = 'center'; app. AvgLocalSpeedEditField. Position = [142 231 100 22];

% DesiredDistancefromHouseEditFieldLabel তৈরি করুন

app. DesiredDistancefromHouseEditFieldLabel = uilabel (app. SetupTab); app. DesiredDistancefromHouseEditFieldLabel. HorizontalAlignment = 'right'; app. DesiredDistancefromHouseEditFieldLabel. Position = [24 129 100 28]; app. DesiredDistancefromHouseEditFieldLabel. Text = {'কাঙ্ক্ষিত দূরত্ব'; 'বাড়ি থেকে'};

% DDFH তৈরি করুন

app. DDFH = uieditfield (app. SetupTab, 'numeric'); app. DDFH. Limits = [0 50]; app. DDFH. ValueChangedFcn = createCallbackFcn (app, DDDFHValueChanged, true); app. DDFH. HorizontalAlignment = 'center'; app. DDFH. Position = [139 135 100 22];

% তাপমাত্রা নির্দেশিকা সুইচ লেবেল তৈরি করুন

app. TemperatureDirectionSwitchLabel = uilabel (app. SetupTab); app. TemperatureDirectionSwitchLabel. HorizontalAlignment = 'center'; app. TemperatureDirectionSwitchLabel. Position = [410 343 124 22]; app. TemperatureDirectionSwitchLabel. Text = 'তাপমাত্রা নির্দেশ';

% তাপমাত্রা নির্দেশিকা সুইচ তৈরি করুন

app. TemperatureDirectionSwitch = uiswitch (app. SetupTab, 'slider'); app. TemperatureDirectionSwitch. Items = {'Up', 'Down'}; app. TemperatureDirectionSwitch. ValueChangedFcn = createCallbackFcn (app, emTemperatureDirectionSwitchValueChanged, true); app. TemperatureDirectionSwitch. Position = [449 380 45 20]; app. TemperatureDirectionSwitch. Value = 'Up';

TempSettingsTab তৈরি করুন

app. TempSettingsTab = uitab (app. TabGroup); app. TempSettingsTab. Title = 'Temp। সেটিংস';

% তাপমাত্রা 1 স্পিনার লেবেল তৈরি করুন

app. Temperature1SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature1SpinnerLabel. HorizontalAlignment = 'center'; app. Temperature1SpinnerLabel. Position = [66 363 76 28]; app. Temperature1SpinnerLabel. Text = {'তাপমাত্রা'; '#1'};

% তাপমাত্রা 1 স্পিনার তৈরি করুন

app. Temperature1Spinner = uispinner (app. TempSettingsTab); app. Temperature1Spinner. Limits = [60 90]; app. Temperature1Spinner. ValueChangedFcn = createCallbackFcn (app, @temperature1SpinnerValueChanged, true); app. Temperature1Spinner. Position = [157 346 100 68]; app. Temperature1Spinner. Value = 60;

% তাপমাত্রা 2 স্পিনার লেবেল তৈরি করুন

app. Temperature2SpinnerLabel = uilabel (app. TempSettingsTab); app. Temperature2SpinnerLabel. HorizontalAlignment = 'center'; app. Temperature2SpinnerLabel. Position = [66 248 76 28]; app. Temperature2SpinnerLabel. Text = {'তাপমাত্রা'; '#2'};

% তাপমাত্রা 2 স্পিনার তৈরি করুন

app. Temperature2Spinner = uispinner (app. TempSettingsTab); app. Temperature2Spinner. Limits = [60 90]; app. Temperature2Spinner. ValueChangedFcn = createCallbackFcn (app, @temperature2SpinnerValueChanged, true); app. Temperature2Spinner. Position = [157 230 100 70]; app. Temperature2Spinner. Value = 60;

সুইচ তৈরি করুন

app. Switch = uiswitch (app. TempSettingsTab, 'স্লাইডার'); app. Switch. Items = {'1', '0'}; app. Switch. ValueChangedFcn = createCallbackFcn (app, wSwitchValueChanged, true); app. Switch. FontName = 'Nyala'; app. Switch. FontSize = 28; app. Switch. Position = [522 21 74 32]; app. Switch. Value = '0';

EditFieldLabel তৈরি করুন

app. EditFieldLabel = uilabel (app. TempSettingsTab); app. EditFieldLabel. HorizontalAlignment = 'right'; app. EditFieldLabel. Position = [374 291 25 22]; app. EditFieldLabel. Text = '';

Tempnow তৈরি করুন

app.tempnow = uieditfield (app. TempSettingsTab, 'numeric'); app.tempnow. Limits = [60 89]; app.tempnow. ValueChangedFcn = createCallbackFcn (app, mptempnowValueChanged, true); app.tempnow. HorizontalAlignment = 'center'; app.tempnow. FontSize = 26; app.tempnow. Position = [409 230 133 117]; app.tempnow. Value = 60;

% গেজ লেবেল তৈরি করুন

app. GaugeLabel = uilabel (app. TempSettingsTab); app. GaugeLabel. HorizontalAlignment = 'center'; 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 80 85 90]; app. Gauge. Position = [185 69 120 120]; app. Gauge. Value = 60;

% SavingsTab তৈরি করুন

app. SavingsTab = uitab (app. TabGroup); app. SavingsTab. Title = 'সঞ্চয়';

UIAxes তৈরি করুন

app. UIAxes = uiaxes (app. SavingsTab); শিরোনাম (app. UIAxes, 'Savings') xlabel (app. UIAxes, 'Month and Year') ylabel (app. UIAxes, 'Money') app. UIAxes. PlotBoxAspectRatio = [1 0.60666666666667 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 = 'center'; app. ThisMonthCostEditFieldLabel. Position = [439 96 94 22]; app. ThisMonthCostEditFieldLabel. Text = 'এই মাসের খরচ';

% ThisMonthCostEditField তৈরি করুন

app. ThisMonthCostEditField = uieditfield (app. SavingsTab, 'numeric'); app. ThisMonthCostEditField. Limits = [0 Inf]; app. ThisMonthCostEditField. ValueDisplayFormat = '$%7.2f'; app. ThisMonthCostEditField. HorizontalAlignment = 'center'; app. ThisMonthCostEditField. Position = [417 39 137 58];

% TotalSavingsEditFieldLabel তৈরি করুন

app. TotalSavingsEditFieldLabel = uilabel (app. SavingsTab); app. TotalSavingsEditFieldLabel. HorizontalAlignment = 'right'; app. TotalSavingsEditFieldLabel. Position = [111 96 77 22]; app. TotalSavingsEditFieldLabel. Text = 'মোট সঞ্চয়';

% TotalSavingsEditField তৈরি করুন

app. TotalSavingsEditField = uieditfield (app. SavingsTab, 'numeric'); app. TotalSavingsEditField. Limits = [0 Inf]; app. TotalSavingsEditField. ValueDisplayFormat = '$%9.2f'; app. TotalSavingsEditField. HorizontalAlignment = 'center'; app. TotalSavingsEditField. Position = [88 39 137 58]; শেষ শেষ

পদ্ধতি (অ্যাক্সেস = পাবলিক)

% কনস্ট্রাক্ট অ্যাপ

ফাংশন অ্যাপ = কন্ট্রোল_1

% উপাদান তৈরি এবং কনফিগার করুন

createComponents (অ্যাপ)

অ্যাপ ডিজাইনারের সাথে অ্যাপটি নিবন্ধন করুন

RegisterApp (app, app. UIFigure)

যদি nargout == 0

পরিষ্কার অ্যাপ্লিকেশন শেষ শেষ

% কোড যা অ্যাপ মুছে ফেলার আগে কার্যকর হয়

ফাংশন মুছে ফেলা (অ্যাপ)

অ্যাপ মুছে গেলে UIFigure % মুছে দিন

মুছে দিন (app. UIFigure) শেষ শেষ শেষ

আপনি সম্ভবত একটি ত্রুটি পাবেন, কোন সমস্যা নেই। আপনার রান চাপার পরে তৈরি হওয়া GUI বন্ধ করুন, আমরা কিছুক্ষণের মধ্যে বাকি প্রয়োজনীয় প্রোগ্রাম এবং ডেটা সংগ্রহ করব।

যেহেতু ম্যাটল্যাব সেট করা আছে তাই আমরা পাইথনে যেতে পারি। প্রথমে, আপনার কমান্ড প্রম্পট থেকে (উইন্ডোতে) অথবা আপনার পাইথন ফোল্ডারে.exe ফাইল ব্যবহার করে পাইথন প্রোগ্রামটি চালান। নিশ্চিত করুন যে সমস্ত উপযুক্ত লাইব্রেরি ইম্পোর্ট কমান্ড ব্যবহার করে ইনস্টল করা আছে।

সিরিয়াল আমদানি করুন

আমদানি সময় আমদানি csv

এই তিনটি লাইব্রেরি যা আপনাকে শুরু করতে হবে, যদিও আমরা শীঘ্রই আমাদের নিজস্ব লাইব্রেরি তৈরি করব। যদি এই কমান্ডগুলির সাথে কোন ধরণের ত্রুটি থাকে, তাহলে ফিরে যান এবং নিশ্চিত করুন যে লাইব্রেরিগুলি ইনস্টল করা আছে এবং পাইথন ফোল্ডারে Lib ফোল্ডারে রয়েছে। পরবর্তীতে আমরা যা পাইথনলগার লাইব্রেরি নামে পরিচিত তা তৈরি করব। এই নামটি আবশ্যক নয়, আপনি যা খুশি কল করতে পারেন, এটি আপনার তৈরি করা পাইথন ফাইলের (.py) নাম।

একটি টেক্সট এডিটর খুলুন, আমি Sublime3 ব্যবহার করি কিন্তু নোটপ্যাড ঠিক কাজ করে, এবং এই কোডটি লিখুন।

ডিফ পাইথনপ্রিন্ট ():

আমদানি পাইথনলগার আমদানি সিরিয়াল আমদানি সময় আমদানি csv ser = serial. Serial ('COM8') # COM8 হল arduino সিরিয়াল পোর্ট, এটি সম্ভবত প্রতিটি ব্যবহারকারীর জন্য আলাদা হবে, অর্থাৎ arduino IDE ser.flushInput () এর সময় আপনার সিরিয়াল পোর্টটি পরীক্ষা করুন সত্য: চেষ্টা করুন: ser_bytes = ser.readline () মুদ্রণ (ser_bytes) খোলা ("test_data.csv", "a") হিসাবে f: writer = csv.writer (f, delimiter = ",") # ডাটা সেট করে কমা-বিচ্ছিন্ন রাইটার হিসেবে প্রবেশ করান। লেখক

Lib ফোল্ডারে "আপনি যে লাইব্রেরি চান তার নাম সন্নিবেশ করান" লেখাটি সংরক্ষণ করুন। এছাড়াও লক্ষ্য করুন যে ডিফ পাইথনপ্রিন্ট () লাইনটি আপনি যে ফাংশনটি কল করতে যাচ্ছেন তার নাম সংজ্ঞায়িত করে, তাই আপনি এটি পরিবর্তন করতে পারেন ডিফ "আপনার ফাংশনের জন্য আপনার প্রয়োজনীয় নাম সন্নিবেশ করান" ()। যখন লাইব্রেরি সংরক্ষিত হয় তখন আমরা আরডুইনো কোডে যেতে পারি।

Arduino IDE খুলুন এবং দুটি নতুন স্কেচ উইন্ডো খুলুন। সেই দুটি স্কেচ ফাইল সুবিধাজনক কোথাও সংরক্ষণ করুন, এই ফাইলগুলির নাম কোন ব্যাপার না। তারপরে সমস্ত ডিফল্ট কোড মুছে ফেলুন এবং এটিকে নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন।

প্রাপ্ত arduino জন্য:

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #এটি ব্যবহার করা হয় না কিন্তু RH_ASK ড্রাইভার কম্পাইল করার জন্য প্রয়োজন; struct dataStruct {float temp; }আমার তথ্য; অকার্যকর সেটআপ () {Serial.begin (9600); // ডিবাগিং শুধুমাত্র যদি (! Driver.init ()) Serial.println ("init ব্যর্থ"); } অকার্যকর লুপ () {uint8_t buf [RH_ASK_MAX_MESSAGE_LEN]; uint8_t buflen = sizeof (buf); যদি (driver.recv (buf, & buflen)) // নন-ব্লকিং {int i; // একটি ভাল চেকসাম সহ বার্তা প্রাপ্ত, এটি ডাম্প। //driver.printBuffer("Got: ", buf, buflen); memcpy (& myData, buf, sizeof (myData)); Serial.println (""); সিরিয়াল.প্রিন্ট (myData.temp); }}

পুনশ্চ. //driver.printBuffer ……… ইত্যাদি লাইন হল পরীক্ষার কোড। আপনার ডায়াগনোসিসগুলি না করা এবং আপনি আসলে ডেটা পাচ্ছেন কিনা তা বের করতে না চাইলে এটি সম্পর্কে চিন্তা করার দরকার নেই।

ট্রান্সমিটার arduino জন্য

#অন্তর্ভুক্ত

#অন্তর্ভুক্ত #অন্তর্ভুক্ত #অন্তর্ভুক্ত #এটি ব্যবহার করা হয় না কিন্তু কম্পাইল করার জন্য প্রয়োজন #অন্তর্ভুক্ত #অন্তর্ভুক্ত int পিন = 4; DHT11 dht11 (পিন); RH_ASK ড্রাইভার; struct dataStruct {float temp; }আমার তথ্য; বাইট tx_buf [sizeof (myData)] = {0}; // সুতরাং আর্গুমেন্ট বিটরেট, ট্রান্সমিট পিন (টিএক্স), // রিসিভ পিন (আরএক্স), পিপিটি পিন, ইন্সভার্স। শেষ 2 ব্যবহার করা হয় না। সেটআপ () {Serial.begin (9600) বাদ দিন; // ডিবাগিং শুধুমাত্র যদি (! Driver.init ()) Serial.println ("init ব্যর্থ"); } অকার্যকর লুপ () {int err; float temp, humi; uint8_t বার্তা; যদি ((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 সেকেন্ড অপেক্ষা করুন}}

অন্তর্ভুক্ত কমান্ডগুলি যথেষ্ট হওয়া উচিত, কিন্তু যদি ডেটা ট্রান্সফারের সাথে আপনার পরে কোন সমস্যা হয় তবে আপনি রেডিওহেড লাইব্রেরি ফোল্ডারে দেখতে চাইতে পারেন এবং ফাইলের বাকি অংশগুলি একই বিন্যাসে অন্তর্ভুক্ত করতে পারেন।

পদক্ষেপ 5: এটি কাজ করা

এটা কাজ করা
এটা কাজ করা
এটা কাজ করা
এটা কাজ করা
এটা কাজ করা
এটা কাজ করা

এখন যেহেতু আমাদের সব কোড একসাথে আছে এবং arduino এর একত্রিত হয়েছে, আমরা আপনার কম্পিউটারে arduino হুক আপ এবং কোড লোড করতে পারেন। নিশ্চিত করুন যে আপনি মাইক্রোকন্ট্রোলার গ্রহণ এবং প্রেরণ করার জন্য সঠিক কোড পাঠিয়েছেন। এই চলমান অবস্থায় আপনি আপনার কম্পিউটারের সাথে উভয় arduinos সংযুক্ত থাকতে পারেন কিন্তু আপনাকে নিশ্চিত করতে হবে যে আপনার সামনে সঠিক পোর্ট নির্বাচন করা আছে, অথবা আপনি ট্রান্সমিটিং arduino সংযোগ বিচ্ছিন্ন করতে পারেন এবং কোডটি হয়ে গেলে এটি অন্য কোন উৎস থেকে পাওয়ার করতে পারেন। আপলোড করা হয়েছে

যার কথা বললে, আপনার এখনই IDE টুলস মেনু থেকে আপনার প্রাপ্ত arduino এর সাথে সংযুক্ত পোর্টটি নির্বাচন করুন এবং পাইথন চালান।

আপনি যখন এটি করছেন তখন সিরিয়াল মনিটরটি খুলবেন না, মনিটর খোলা অবস্থায় অজগর সিরিয়ালটি পড়তে পারে না। একবার পাইথন খোলা হলে পাইথনপ্রিন্ট ফাংশনটি নিম্নরূপ কল করুন।

pythonlogger.pythonprint ()

এটি আরডুইনো সিরিয়াল পোর্ট থেকে ডেটা সংগ্রহ শুরু করবে। যদি আপনি এখন আপনার পাইথন ফোল্ডারটি খুলেন, আপনি দেখতে পাবেন যে "test_data.csv" নামে একটি নতুন.csv ফাইল তৈরি করা হয়েছে, যা সমস্ত সময় এবং তাপমাত্রার তথ্য ধারণ করে। এটি এমন ফাইল হবে যা ম্যাটল্যাব তার সমস্ত গণনা এবং নিয়ন্ত্রণ করতে অ্যাক্সেস করে।

আরেকটি সতর্কতা: যখন ডাটা অ্যাক্সেস করা বা লেখা হচ্ছে তখন test_data.csv খুলবেন না। যদি আপনি করেন, পাইথন এবং/অথবা ম্যাটল্যাব কোড ক্র্যাশ হয়ে যাবে এবং একটি ত্রুটি ফেরত পাঠাবে।

যদি আপনি পরে.csv খোলার সিদ্ধান্ত নেন, আপনি লক্ষ্য করবেন যে সময় কলামটি সংখ্যার একটি খুব বড় স্ট্রিং। কারণ, time.time () কমান্ড ১ লা জানুয়ারি, ১ since০ থেকে সেকেন্ডের সংখ্যা লিখে।

এই মুহুর্তে অজগরটি সিরিয়াল পোর্ট থেকে পড়ার তাপমাত্রার ডেটা মুদ্রণ করা উচিত। এটি এমন কিছু হওয়া উচিত:

b'25.03 '/r/n

অতিরিক্ত অক্ষর সম্পর্কে চিন্তা করবেন না,.csv ফাইলের দ্বিতীয় কলামে মধ্য পাঁচটি মানগুলির জন্য ম্যাটল্যাব কোড সূচী।

এখন যেহেতু সমস্ত সহায়ক প্রোগ্রাম কাজ করছে এবং ডেটা সংগ্রহ করা হচ্ছে আমরা ম্যাটল্যাব মোবাইল প্রোগ্রাম থেকে জিপিএস ডেটা সংগ্রহ করা শুরু করতে পারি যা আগে সেটআপ করা হয়েছিল এবং ম্যাটল্যাব জিইউআই কোড চালাতে পারে। একবার আপনি ম্যাটল্যাব মোবাইলের সেন্সর ট্যাবে থাকলে, জিপিএস নির্বাচন করুন এবং স্টার্ট বোতামটি টিপুন।

আপনি যদি ম্যাটল্যাব মোবাইলে নতুন হন তাহলে ধাপ 4 এ ফিরে যান এবং উপরের স্ক্রিন শটগুলি দেখুন। যদি আপনার এখনও সমস্যা হয়, তাহলে নিশ্চিত করুন যে আপনি আপনার আগে নির্বাচিত কম্পিউটারের সাথে সংযুক্ত (সেটিংস ট্যাবে) এবং ম্যাটল্যাব অনলাইনে আছে কিনা তা পরীক্ষা করতে "সংযোগকারী চালু" কমান্ডের লিঙ্কটি ব্যবহার করুন।

ধাপ 6: প্রোগ্রাম ব্যবহার করে

প্রোগ্রাম ব্যবহার করে
প্রোগ্রাম ব্যবহার করে

এই সিস্টেমে পটভূমিতে একাধিক জিনিস চলছে। আরডুইনো এবং পাইটন দ্বারা তাপমাত্রার তথ্য সংগ্রহ এবং লগ করা হচ্ছে, ম্যাটল্যাব আপনার ফোন থেকে জিপিএস ডেটা সংগ্রহ করছে এবং হিসাব চালাচ্ছে যে আপনি আপনার বাড়ি থেকে কতটা দূরে আছেন এবং সেই সমস্ত তথ্যের ভিত্তিতে আপনার থার্মোস্ট্যাট সেট করছেন। আপনি যেখানে আসেন সেখানে আপনার পছন্দগুলি প্রদান করে।

ম্যাটল্যাব জিইউআই কোড চালান।. Mlapp ফাইলটি খুলুন এবং প্রথম ট্যাবটি দেখুন। আপনার নিজের জন্য তথ্য সংগ্রহ করতে হবে, আপনার হিটিং/কুলিং ইউনিটের দক্ষতা এবং পাওয়ার রেটিং সাধারণত ইউনিটেই পাওয়া যায় এবং আপনার গড় গতি আপনি কত দ্রুত গাড়ি চালান তার একটি ভাল অনুমান। একবার মানগুলি প্রবেশ করা হলে, "ডায়াগনস্টিক চালান" বোতামটি টিপুন এবং প্রোগ্রামটি আপনার ঘর সম্পর্কে তথ্য সংগ্রহ করতে আপনার থার্মোস্ট্যাট নিয়ন্ত্রণ করে।

পরবর্তী মেনুতে যান।

ধাপ 7: তাপমাত্রা নিয়ন্ত্রণ

যথোপযুক্ত সৃষ্টিকর্তা
যথোপযুক্ত সৃষ্টিকর্তা

এই মেনু আপনাকে বাড়িতে এবং বাইরে থাকার সময় আপনার পছন্দসই তাপমাত্রা নির্বাচন করতে দেয়। আপনার আরামদায়ক তাপমাত্রায় তাপমাত্রা #1 এবং তাপমাত্রা #2 একটি উচ্চ বা নিম্ন মানের যা আপনার বাড়ির জন্য নিরাপদ তা নিশ্চিত করুন (নিশ্চিত করুন যে আপনার ঘরে কুকুর থাকা অবস্থায় এটি 100 ডিগ্রীতে সেট করবেন না ইত্যাদি)।

ধাপ 8: তিহাসিক তথ্য

ঐতিহাসিক তথ্য
ঐতিহাসিক তথ্য

অবশেষে আপনি স্বয়ংক্রিয় নিয়ন্ত্রণ ব্যবহার করে আপনার সঞ্চয় কত টাকা তা দেখতে পারেন। এটি মূলত অনুমান করে যে যদি আপনার তাপস্থাপকটি আপনার পছন্দের তাপমাত্রা 24/7 এ সেট করা হয় তবে কতটা শক্তি ব্যবহার করা হবে, তারপরে আপনার ব্যবহৃত প্রকৃত শক্তিটি বিয়োগ করে।

সৌভাগ্য ভবন।

প্রস্তাবিত: