সুচিপত্র:

MATLAB নিয়ন্ত্রিত মাইক্রোকন্ট্রোলার (Arduino MKR1000): 4 টি ধাপ
MATLAB নিয়ন্ত্রিত মাইক্রোকন্ট্রোলার (Arduino MKR1000): 4 টি ধাপ

ভিডিও: MATLAB নিয়ন্ত্রিত মাইক্রোকন্ট্রোলার (Arduino MKR1000): 4 টি ধাপ

ভিডিও: MATLAB নিয়ন্ত্রিত মাইক্রোকন্ট্রোলার (Arduino MKR1000): 4 টি ধাপ
ভিডিও: B.Sc Engineering Project || Street Light Control System || Simple Project || Engineer's Butty || 2024, জুলাই
Anonim
MATLAB নিয়ন্ত্রিত মাইক্রোকন্ট্রোলার (Arduino MKR1000)
MATLAB নিয়ন্ত্রিত মাইক্রোকন্ট্রোলার (Arduino MKR1000)

আমাদের প্রকল্পের লক্ষ্য ছিল MATLAB এবং Arduino MKR1000 কে আমাদের সামর্থ্য অনুযায়ী ব্যবহার করা। আমাদের লক্ষ্য ছিল একটি স্ক্রিপ্ট তৈরি করা যা একটি নির্দিষ্ট ইনপুটের উপর ভিত্তি করে একটি নির্দিষ্ট আউটপুটকে পারফর্ম করার জন্য arduino এর নির্দিষ্ট বৈশিষ্ট্যগুলিকে অনুমতি দেয়। আমরা MATLAB এ বৈশিষ্ট্যযুক্ত অনেকগুলি লুপ এবং শর্তাধীন বিবৃতি ব্যবহার করেছি যা এটি সম্ভব করেছে। প্রকল্পটিকে যতটা সম্ভব উন্নত করার জন্য আমরা একটি মোবাইল ডিভাইসের জাইরোস্কোপ থেকে অর্জিত ডেটা ব্যবহার করে MATLAB মোবাইল ব্যবহার করেছি।

ধাপ 1: যন্ত্রাংশ এবং উপকরণ

যন্ত্রাংশ এবং উপকরণ
যন্ত্রাংশ এবং উপকরণ
যন্ত্রাংশ এবং উপকরণ
যন্ত্রাংশ এবং উপকরণ
যন্ত্রাংশ এবং উপকরণ
যন্ত্রাংশ এবং উপকরণ

MATLAB 2018a

-ম্যাটল্যাবের 2018 সংস্করণটি সবচেয়ে পছন্দের সংস্করণ, বেশিরভাগ কারণ এটি মোবাইল ডিভাইসের সাথে সংযুক্ত কোডের সাথে সবচেয়ে ভাল কাজ করে। যাইহোক, আমাদের বেশিরভাগ কোড MATLAB সংস্করণের সংখ্যাগরিষ্ঠ দ্বারা ব্যাখ্যা করা যেতে পারে।

Arduino MKR1000

-এটি একটি সুনির্দিষ্ট ডিভাইস যা আমাদেরকে ডিজিটাল এবং সাদৃশ্যপূর্ণ উভয় পোর্ট পর্যন্ত সার্কিটগুলিকে ওয়্যার করতে দেয়। আপনার সাথে একটি ব্রেডবোর্ড থাকাও গুরুত্বপূর্ণ।

আনুষাঙ্গিক

-MKR1000 ব্যবহার করার সময়, প্রয়োজনীয় ফাংশন সম্পাদনের জন্য আমাদের আনুষঙ্গিক যন্ত্রাংশের প্রয়োজন ছিল।

এটা অন্তর্ভুক্ত

  1. সার্ভো
  2. বোতাম (6)
  3. বিনিময়যোগ্য RBG LED আলো
  4. সহজ তারের
  5. রুটিবোর্ড
  6. মিনি পাওয়ার সুইচ
  7. তাপমাত্রা সেন্সর
  8. 330 ওহম প্রতিরোধক
  9. 10K ওহম প্রতিরোধক
  10. ইউএসবি-মাইক্রো ইউএসবি কর্ড
  11. ল্যাপটপ/ডেস্কটপ
  12. মোবাইল ডিভাইস

এটাও লক্ষণীয় যে MKR1000 এর সাথে ব্যবহার করা যেতে পারে এমন আরো অনেক আনুষাঙ্গিক রয়েছে

ধাপ 2: MATLAB Arduino সাপোর্ট প্যাকেজ

MATLAB এর মাধ্যমে Arduino MKR1000 সঠিকভাবে ব্যবহার করার জন্য, আপনাকে অবশ্যই Arduino হার্ডওয়্যারের জন্য MATLAB সাপোর্ট প্যাকেজ ডাউনলোড করতে হবে। এই ডাউনলোডটি আপনাকে নির্দিষ্ট ফাংশন এবং কমান্ডগুলিতে সরাসরি arduino বোর্ডে অ্যাক্সেস দেয়।

আপনি নীচের লিঙ্কে প্যাকেজটি ডাউনলোড করতে পারেন

www.mathworks.com/matlabcentral/fileexchange/47522-matlab-support-package-for-arduino-hardware

ধাপ 3: মোবাইল ডিভাইস থেকে অর্জিত ডেটা সেন্সর ব্যবহার করা

মোবাইল ডিভাইস থেকে অর্জিত ডেটা সেন্সর ব্যবহার করা
মোবাইল ডিভাইস থেকে অর্জিত ডেটা সেন্সর ব্যবহার করা

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

আপনি নীচের লিঙ্কে ফাইলটি ডাউনলোড করতে পারেন

www.mathworks.com/matlabcentral/fileexchange/51235-matlab-support-package-for-apple-ios-sensors

ধাপ 4: কোড এবং ওয়্যারিং পোর্ট

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

startup = questdlg ('আপনি কি ইকোটেক স্মার্ট হোম এনার্জি সিস্টেম সক্রিয় করতে চান?'); % শুরু হয় ecoTECHwaitfor (startup) এর অ্যাক্টিভেশন ক্রম; যদি স্টার্টআপ == "হ্যাঁ" % যদি "হ্যাঁ" নির্বাচন করা হয় একটি অ্যাক্টিভেশন ক্রম শুরু হয় এবং শেষ শক্তি = "চালু" এ যখন লুপ প্রবেশ করে; m1 = msgbox ('শুরু হচ্ছে ইকোটেক …'); বিরতি (2); মুছে ফেলুন (এম 1); m1_wait = waitbar (0, 'অনুগ্রহ করে অপেক্ষা করুন …'); পদক্ষেপ = 25; i = 1 এর জন্য: ধাপ বিরতি (.1); ওয়েটবার (i/ধাপ); % আপডেট ওয়েটবার শেষ ডিলিট (m1_wait); পাসকোড = [0 0 0 0]; % পাসকোড শুরু করে ii = 0; % একটি ভেরিয়েবল শুরু করে যা লুপগুলি থেকে বেরিয়ে যেতে ব্যবহৃত হয় m2 = msgbox ('ecoTECH সম্পূর্ণরূপে চালু!'); বিরতি (2); মুছে ফেলুন (m2); elseif startup == "না" || startup == "Cancel" % যদি "No" বা "Cancel" নির্বাচন করা হয় তাহলে অ্যাক্টিভেশন ক্রম শুরু হয় না এবং while loop power = "off" এ প্রবেশ করে না; m3 = msgbox ('ঠিক আছে! বিদায়!'); বিরতি (2); মুছে ফেলুন (এম 3); শেষ

% ecoTECH in action section true যখন পাওয়ার == "on" % মোবাইল কী সেকশন যখন সত্য % মোবাইল ডিভাইস KEY = m. Orientation (3) এর রোল ওরিয়েন্টেশনের তথ্য সংগ্রহ করে; % বোতাম b2 = readDigitalPin (a, 'D2') সম্পর্কে তথ্য সংগ্রহ করে; % বোতাম 2 (লাল) b3 = readDigitalPin (a, 'D3'); % বোতাম 3 (সাদা) যদি KEY> = 35 % ডিগ্রী m4 = msgbox ('স্বাগতম বাড়িতে!'); writeDigitalPin (a, 'D8', 1); % সবুজ আলো বিরতি চালু (.5); লেখার অবস্থান (গুলি, 1); % দরজা বিরতি আনলক করতে servo চালু (2); writeDigitalPin (a, 'D8', 0); % সবুজ আলো মুছে ফেলা বন্ধ করে (m4); elseif KEY <= -35 % in m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % লাল আলো বিরতি চালু (.5); লেখার অবস্থান (গুলি, 0); % দরজা থামাতে servo চালু করে (2); writeDigitalPin (a, 'D7', 0); % লাল বাতি মুছে ফেলা বন্ধ করে (m5); ii = 1; যদি মোবাইল ডিভাইস ব্যবহার করে দরজা লক করা থাকে তবে মোবাইল কী ব্যবহার করে লুপ লক করার সময় % প্রস্থান করুন

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

সত্য যখন ii == 1 % প্রস্থান করে যখন পাসকোড ধারণকারী লুপ যদি মোবাইল ডিভাইসের ব্রেক এন্ডের সাথে দরজা আনলক করা থাকে % বোতাম b5 = readDigitalPin (a, 'D5') সম্পর্কে তথ্য সংগ্রহ করে; % বোতাম 5 (নীল) b1 = readDigitalPin (a, 'D1'); % বোতাম 1 (কালো) b4 = readDigitalPin (a, 'D4'); % বোতাম 4 (সাদা) যদি b5 == 0 % পাসকোড প্রবেশ করানো শুরু করে b = 1: 5 m6 = msgbox ('দয়া করে একটি বোতাম টিপুন এবং ধরে রাখুন'); বিরতি (2); মুছে দিন (m6); % বোতাম b1 = readDigitalPin (a, 'D1') সম্পর্কে তথ্য সংগ্রহ করে; % বোতাম 1 (কালো) b2 = readDigitalPin (a, 'D2'); % বোতাম 2 (লাল) b3 = readDigitalPin (a, 'D3'); % বোতাম 3 (সাদা) b4 = readDigitalPin (a, 'D4'); % বোতাম 4 (হলুদ) b5 = readDigitalPin (a, 'D5'); % বোতাম 5 (নীল) % প্রাথমিক পাসকোডের মানগুলিকে একবারে প্রতিস্থাপন করে যদি b1 == 0 পাসকোড (0+b) = 1; elseif b2 == 0 PASSCODE (0+b) = 2; elseif b3 == 0 PASSCODE (0+b) = 3; elseif b4 == 0 PASSCODE (0+b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%। 0f%.0f%.0f%.0f', পাসকোড (1), পাসকোড (2), পাসকোড (3), পাসকোড (4)); % সংখ্যায় চাপানো বোতামের ক্রমকে পরিণত করে তারপর এটিকে একটি স্ট্রিং এন্ড এন্ডে রূপান্তর করে পাসকোডের জন্য অঙ্কের প্রবেশের জন্য লুপের শেষ শেষ যদি পাসকোড == "2314" % যদি পাসকোড মিলিত হয় তবে দরজা কয়েক সেকেন্ডের জন্য লক করে তারপর লক করে m7 = msgbox ('স্বাগতম বাড়িতে!'); writeDigitalPin (a, 'D8', 1); % সবুজ আলো বিরতি চালু (.5); লেখার অবস্থান (গুলি, 1); % দরজা বিরতি আনলক করতে servo চালু (5); writeDigitalPin (a, 'D8', 0); % সবুজ আলো বিরতি বন্ধ করে (.1); writeDigitalPin (a, 'D7', 1); % লাল আলো বিরতি চালু (.5); লেখার অবস্থান (গুলি, 0); % দরজা বিরতি (1) লক করতে servo চালু; writeDigitalPin (a, 'D7', 0); % লাল বাতি মুছে ফেলা বন্ধ করে (m7); ii = 1; বিরতি % প্রস্থান করার সময় পাসকোড ধারণকারী লুপ সঠিক পাসকোড প্রবেশ করানোর পরে অন্যথায় PASSCODE "=" 2314 "writeDigitalPin (a, 'D7', 1); % লাল বাতি চালু করে m8 = msgbox ('ভুল পাসকোড! আবার চেষ্টা করুন!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % বন্ধ করে দেয় লাল আলো অব্যাহত % আপনাকে একটি পাসকোড শেষ করতে আবার অনুমতি দেয় বিরতি শেষ শেষ

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

t = 0; % প্রাথমিক সময় = 0 সেকেন্ড বিরতি (5) % ব্যবহারকারীকে তাপমাত্রা সুইচ চালু করার সময় দেয় সুইচ = readDigitalPin (a, 'D11'); % D11 পিনে সুইচ সম্পর্কে তথ্য সংগ্রহ করে যখন SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % পিন D11 ভোল্টেজের সুইচ সম্পর্কে তথ্য সংগ্রহ করে = readVoltage (a, 'A1'); % তাপমাত্রা সেন্সর temp_C = (ভোল্টেজ।*1000 - 500) থেকে ভোল্টেজ পড়ে।/10; % The C temp_F = (9/5) তাপমাত্রায় ভোল্টেজকে রূপান্তর করে।*temp_C + 32; % ° C থেকে ° F প্লটে রূপান্তরিত হয় (t, temp_C, 'b।') শিরোনাম ধরে রাখুন ('রুম তাপমাত্রা'); xlabel ('সেকেন্ডে সময়'); ylabel ('তাপমাত্রা'); অক্ষ ([0, 180, 0, 100]); চক্রান্ত (t, temp_F, 'r।') কিংবদন্তি ('তাপমাত্রা ° C', 'তাপমাত্রা ° F') বিরতি (1); t = t + 1; % সেকেন্ডে সময় কাউন্টার % ই-মেইল বিভাগ b_temp = readDigitalPin (a, 'D0'); % B_temp == 0 setpref ('ইন্টারনেট', 'SMTP_Server', 'smtp.gmail.com') পিন D0 তে (নীল) তাপমাত্রা বোতামের তথ্য সংগ্রহ করে; setpref ('ইন্টারনেট', 'E_mail', '[email protected]'); % প্রেরক সেটপ্রেফ ('ইন্টারনেট', 'SMTP_Username', '[email protected]'); % প্রেরকের ব্যবহারকারীর নাম setpref ('ইন্টারনেট', 'SMTP_Password', 'Integral_ecoTECH'); % প্রেরকের পাসওয়ার্ড প্রপস = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'true'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); সেন্ডমেইল ('[email protected] ',' ecoTECH রুম তাপমাত্রা ', sprintf (' বর্তমান রুমের তাপমাত্রা %.1f ° C বা %.1f ° F। ', temp_C, temp_F)); % প্রাপকের কাছে একটি ই-মেইল পাঠায় যা বর্তমান ঘরের তাপমাত্রার তথ্য দেয় % তাপস্থাপকের তাপমাত্রা 65 ডিগ্রি ফারেনহাইট পরিবর্তন করে অন্যথায় temp_F <= 65 % যদি ঘরের তাপমাত্রা 60 ডিগ্রি ফারেনহাইট কমে যায়… temp_AC = 80; % তাপস্থাপকের তাপমাত্রা পরিবর্তন করে 80 ° F শেষ প্রান্তে "SWITCH == 0" এর শেষ প্রান্তে ii == 1 % প্রস্থান করে "power == on" while loop break end end % end of "power == on" while loop if power == "off" || ii == 1 % লুপ ব্রেক শেষ হওয়ার সময় সম্পূর্ণ প্রস্থান করে

এটি ছিল কোড এবং এর কার্যকারিতার একটি সংক্ষিপ্ত ওভারভিউ। প্রয়োজনে আমরা সম্পূর্ণ কোডটি পিডিএফ হিসেবে সংযুক্ত করেছি।

এখানে প্রতিটি ডিভাইসে কোন পোর্টের তারের তালিকা রয়েছে।

1. RGB LED: ডিজিটাল পিন (7, 8, 9)

2. Servo: ডিজিটাল পিন 6

3. বাটন: ডিজিটাল পিন (1, 2, 3, 4, 5)

4. ইমেইলের জন্য নীল বোতাম: ডিজিটাল পিন 0

5. তাপমাত্রা সেন্সর: অ্যানালগ পিন 1

6. সুইচ: ডিজিটাল পিন 11

প্রস্তাবিত: