فهرست مطالب:

میکروکنترلر کنترل شده MATLAB (Arduino MKR1000): 4 مرحله
میکروکنترلر کنترل شده MATLAB (Arduino MKR1000): 4 مرحله

تصویری: میکروکنترلر کنترل شده MATLAB (Arduino MKR1000): 4 مرحله

تصویری: میکروکنترلر کنترل شده MATLAB (Arduino MKR1000): 4 مرحله
تصویری: تنظیم پارامترهای کنترل کننده PID در Matlab 2024, جولای
Anonim
میکروکنترلر کنترل شده MATLAB (Arduino MKR1000)
میکروکنترلر کنترل شده MATLAB (Arduino MKR1000)

هدف پروژه ما استفاده از MATLAB و Arduino MKR1000 به بهترین نحو بود. هدف ما ایجاد اسکریپتی بود که به برخی از ویژگی های آردوینو اجازه دهد خروجی خاصی را بر اساس یک ورودی خاص انجام دهد. ما از حلقه ها و جملات شرطی برجسته در MATLAB استفاده کردیم که این امکان را فراهم کرد. ما همچنین از MATLAB mobile با استفاده از داده های به دست آمده از ژیروسکوپ دستگاه تلفن همراه برای افزایش هرچه بیشتر پروژه استفاده کردیم.

مرحله 1: قطعات و مواد

قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد

MATLAB 2018a

نسخه 2018 MATLAB بیشترین نسخه را ترجیح می دهد ، بیشتر به این دلیل که با کدی که به دستگاه تلفن همراه متصل می شود بهتر کار می کند. با این حال ، اکثر کدهای ما را می توان توسط اکثر نسخه های MATLAB تفسیر کرد.

آردوینو MKR1000

-این یک دستگاه خاص است که به ما اجازه می دهد مدارها را تا هر دو پورت دیجیتال و آنالوگ سیم کشی کنیم. داشتن یک تخته نان برای همراهی با آن بسیار مهم است.

تجهیزات جانبی

هنگام استفاده از MKR1000 ، ما به قطعات جانبی نیاز داریم تا عملکردهای لازم را انجام دهیم.

این شامل

  1. سروو
  2. دکمه (6)
  3. چراغ LED RBG قابل تعویض
  4. سیمهای ساده
  5. تخته نان (ها)
  6. مینی سوئیچ برق
  7. حسگر دما
  8. مقاومت 330 اهم
  9. مقاومت 10 کیلو اهم
  10. کابل USB-microUSB
  11. لپ تاپ/رومیزی
  12. دستگاه موبایل

همچنین لازم به ذکر است که لوازم جانبی بسیار زیادی وجود دارد که می توان با MKR1000 از آنها استفاده کرد

مرحله 2: بسته پشتیبانی MATLAB Arduino

برای استفاده صحیح از Arduino MKR1000 از طریق MATLAB ، باید بسته پشتیبانی MATLAB برای سخت افزار Arduino را بارگیری کنید. این بارگیری به شما امکان می دهد به عملکردها و دستورات خاصی مستقیماً در برد arduino دسترسی پیدا کنید.

می توانید بسته را در لینک زیر بارگیری کنید

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

مرحله 3: استفاده از حسگرهای داده به دست آمده از دستگاه تلفن همراه

استفاده از حسگرهای داده ای که از دستگاه تلفن همراه به دست آمده است
استفاده از حسگرهای داده ای که از دستگاه تلفن همراه به دست آمده است

برنامه MATLAB Mobile به ما اجازه می دهد تا با استفاده از ژیروسکوپ از یک دستگاه تلفن همراه برای پخش اطلاعات استفاده کنیم. برای به دست آوردن داده ها از طریق متلب ، داده ها را با بازیابی آنها از ماتریس جهت گیری از تلفن همراه متلب به دست می آوریم. ما این کار را با ایجاد یک متغیر برای هر ستون ماتریس جهت گیری (Azimuth ، Pitch و Roll) و نمایه سازی جریان ثابت مقادیر از دستگاه تلفن همراه به رایانه انجام می دهیم. این امر به ما اجازه می دهد تا دستورات شرطی ایجاد کنیم که در صورت خروجی MATLAB از دستگاه تلفن همراه ، خروجی را ایجاد می کند. برای انجام این کار ، شما نیاز به تلفن همراه متلب در دستگاه تلفن همراه خود و بسته پشتیبانی دستگاه تلفن همراه برای متلب در رایانه خود دارید.

می توانید فایل را در لینک زیر بارگیری کنید

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

مرحله 4: کد و پورت های سیم کشی

کد با یک پیام راه اندازی شروع می شود که می پرسد آیا می خواهیم دستگاه امنیتی خانه خود را راه اندازی کنیم یا خیر. اگر بله را پاسخ دهیم و رمز عبور صحیح را وارد کنیم ، اسکریپت بلافاصله به یک حلقه while می رود. از آنجا ، شروع به جمع آوری داده ها از دستگاه تلفن همراه می کند. شرایطی وجود دارد که این داده ها را می خواند. ما می توانیم قفل و قفل سیستم را از دستگاه تلفن همراه خود داشته باشیم و کد بسته به داده های داده شده از دستگاه تلفن همراه ، سروو را روشن کرده و چراغ LED را چشمک می زند

startup = questdlg ("آیا می خواهید سیستم انرژی خانه هوشمند ecoTECH را فعال کنید؟")؛ ٪ شروع دنباله فعال سازی ecoTECHwaitfor (راه اندازی) ؛ در صورت راه اندازی == "بله"٪ در صورت انتخاب "بله" ، یک دنباله فعال سازی آغاز می شود و در پایان = "روشن" به حلقه while وارد می شود. m1 = msgbox ('راه اندازی ecoTECH …')؛ مکث (2) ؛ حذف (m1) ؛ m1_wait = waitbar (0 ، 'لطفا صبر کنید …')؛ مراحل = 25 ؛ برای i = 1: مراحل مکث (.1) ؛ نوار انتظار (i/مراحل) ؛ end حذف پایان نوار انتظار (m1_wait) ؛ رمز عبور = [0 0 0 0] ؛ ٪ رمزگذاری اولیه را آغاز می کند ii = 0؛ ٪ متغیری را برای خروج از حلقه ها استفاده می کند m2 = msgbox ('ecoTECH کاملاً عملیاتی است!')؛ مکث (2) ؛ حذف (m2) ؛ elseif startup == "No" || راه اندازی == "لغو"٪ اگر "نه" یا "لغو" انتخاب شود ، دنباله فعال سازی شروع نمی شود و وارد حلقه while نمی شود = "خاموش" ؛ m3 = msgbox ('خوب! خداحافظ!')؛ مکث (2) ؛ حذف (m3) ؛ پایان

٪ ecoTECH در بخش Action در حالی که درست است در حالی که قدرت == "" در "٪ Mobile Key Section while true٪ اطلاعات مربوط به جهت رول دستگاه تلفن همراه را جمع آوری می کند KEY = m. جهت (3)؛ ٪ اطلاعات مربوط به دکمه ها را جمع آوری می کند b2 = readDigitalPin (a، 'D2')؛ ٪ Button 2 (قرمز) b3 = readDigitalPin (a ، 'D3') ؛ ٪ Button 3 (سفید) اگر KEY> = 35٪ در درجه m4 = msgbox ('Welcome Home!')؛ writeDigitalPin (a، 'D8'، 1)؛ ٪ روشن شدن توقف چراغ سبز (.5) ؛ writePosition (s، 1)؛ ٪ سروو می چرخاند تا قفل درب باز شود (2). writeDigitalPin (a، 'D8'، 0)؛ ٪ خاموش کردن چراغ سبز (m4) ؛ elseif KEY <= -35٪ در درجه m5 = msgbox ('Door Locked!')؛ writeDigitalPin (a، 'D7'، 1)؛ ٪ روشن شدن توقف چراغ قرمز (.5) ؛ writePosition (s، 0)؛ the سروو را می چرخاند تا مکث درب قفل شود (2). writeDigitalPin (a، 'D7'، 0)؛ ٪ حذف چراغ قرمز را خاموش می کند (m5) ؛ ii = 1 ؛ شکست٪ خروج از حلقه حاوی کلید تلفن همراه اگر درب با استفاده از دستگاه تلفن همراه قفل شده باشد

پس از این ، می تواند حلقه while دیگری را وارد کند. این در حالی است که حلقه بر اساس ورودی های دکمه ها ، نتایج را کنترل می کند. اگر اولین حلقه while ناچیز باشد یا یک قفل دستی لازم باشد ، حلقه while دیگری را وارد کنید که در آن رمز عبور خاصی مورد نیاز است. اگر رمز عبور نادرست باشد ، حلقه را دوباره راه اندازی می کند

درصورت صحت اگر ii == 1٪ خارج می شود در حالی که حلقه حاوی رمز عبور در صورت باز بودن درب با دستگاه موبایل پایان٪ جمع آوری اطلاعات در مورد دکمه ها b5 = readDigitalPin (a ، 'D5') ؛ ٪ Button 5 (آبی) b1 = readDigitalPin (a ، 'D1') ؛ ٪ دکمه 1 (سیاه) b4 = readDigitalPin (a ، 'D4') ؛ ٪ Button 4 (سفید) در صورت b5 == 0٪ شروع به ورود کد عبور برای b = 1: 5 m6 = msgbox ('Please Press And Hold A Button')؛ مکث (2) ؛ حذف (m6) ؛ ٪ اطلاعات مربوط به دکمه ها را جمع آوری می کند b1 = readDigitalPin (a، 'D1')؛ ٪ دکمه 1 (سیاه) b2 = readDigitalPin (a ، 'D2') ؛ ٪ Button 2 (قرمز) b3 = readDigitalPin (a ، 'D3') ؛ ٪ Button 3 (سفید) b4 = readDigitalPin (a، 'D4')؛ ٪ دکمه 4 (زرد) b5 = readDigitalPin (a ، 'D5') ؛ ٪ Button 5 (آبی)٪ اگر کد b1 == 0 PASSCODE (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' ، PASSCODE (1) ، PASSCODE (2) ، PASSCODE (3) ، PASSCODE (4)) ؛ ٪ توالی دکمه های فشرده شده را به اعداد تبدیل می کند و سپس آن را به انتهای یک رشته تبدیل می کند٪ انتهای حلقه برای وارد کردن ارقام برای رمز عبور در صورت PASSCODE == "2314"٪ اگر رمز عبور وارد شده مطابقت داشته باشد ، درب برای چند ثانیه باز می شود و قفل می شود m7 = msgbox ('به خانه خوش آمدید!')؛ writeDigitalPin (a، 'D8'، 1)؛ ٪ روشن شدن توقف چراغ سبز (.5) ؛ writePosition (s، 1)؛ ٪ سروو را می چرخاند تا قفل درب باز شود (5). writeDigitalPin (a، 'D8'، 0)؛ ٪ توقف چراغ سبز را خاموش می کند (.1) ؛ writeDigitalPin (a، 'D7'، 1)؛ ٪ روشن شدن توقف چراغ قرمز (.5) ؛ writePosition (s، 0)؛ the سروو را می چرخاند تا مکث درب قفل شود (1). writeDigitalPin (a، 'D7'، 0)؛ ٪ حذف چراغ قرمز را خاموش می کند (m7) ؛ ii = 1 ؛ break٪ خروج از حلقه حاوی رمز عبور پس از وارد کردن رمز عبور صحیح elseif PASSCODE = "2314" writeDigitalPin (a، 'D7'، 1)؛ ٪ چراغ قرمز را روشن می کند m8 = msgbox ('رمز عبور اشتباه! دوباره امتحان کنید!')؛ waitfor (m8) writeDigitalPin (a، 'D7'، 0)؛ ٪ چراغ قرمز را خاموش می کند ادامه می دهد٪ به شما این امکان را می دهد که یک رمز عبور را دوباره وارد کنید پایان پایان پایان

اگر درست باشد ، بلافاصله وارد حلقه while می شود که سنسور دما را کنترل می کند. اگر سوئیچ روشن باشد ، حلقه ادامه می یابد و دما را در مقابل نمودار زمان رسم می کند و به فرد اجازه می دهد روند را مشاهده کند. اگر دکمه متصل به سنسور دما فشار داده شود ، همچنین یک ایمیل ارسال می کند که به شما می گوید دما در "خانه" شما چقدر است. اگر سوئیچ خاموش باشد ، بلافاصله کد را تمام می کند

t = 0 ؛ ٪ زمان اولیه = 0 ثانیه مکث (5)٪ به کاربر زمان می دهد تا کلید دما را روشن کند SWITCH = readDigitalPin (a ، 'D11') ؛ ٪ اطلاعات مربوط به سوئیچ در پین D11 را جمع آوری می کند در حالی که SWITCH == 0 SWITCH = readDigitalPin (a ، 'D11') ؛ ٪ اطلاعات مربوط به سوئیچ در پین ولتاژ D11 = readVoltage (a ، 'A1') را جمع آوری می کند. ٪ ولتاژ را از سنسور دما temp_C = (ولتاژ*1000 - 500) می خواند./10؛ ٪ ولتاژ را به دما در درجه سانتیگراد temp_F = (9/5) تبدیل می کند.*temp_C + 32؛ ٪ از ° C به ° F نمودار (t، temp_C، 'b.') را در عنوان ('دمای اتاق') نگه می دارد. xlabel ("زمان در ثانیه") ؛ ylabel ("دما") ؛ محور ([0 ، 180 ، 0 ، 100]) ؛ طرح (t، temp_F، 'r.') legend ('دما در ° 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]") ؛ ٪ فرستنده setpref ("اینترنت" ، "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') ؛ sendmail ('[email protected] '،' ecoTECH دمای اتاق '، sprintf (' دمای فعلی اتاق٪.1f درجه سانتیگراد یا٪.1f درجه فارنهایت '، temp_C ، temp_F)) ؛ ٪ یک ایمیل به گیرنده ارسال می کند که اطلاعات مربوط به دمای فعلی اتاق fprintf ('ایمیل با موفقیت ارسال شد! / n') پایان می یابد اگر temp_F> = 75٪ اگر دمای اتاق به 75 درجه فارنهایت افزایش یابد … temp_AC = 65؛ ٪ دمای ترموستات را تا 65 درجه فارنهایت درجه حرارت دیگر تغییر می دهد <= 65٪ اگر دمای اتاق به 60 درجه فارنهایت کاهش یابد … temp_AC = 80؛ ٪ دما را در ترموستات به 80 درجه فارنهایت پایان می دهد٪ پایان "SWITCH == 0" در حالی که حلقه در صورت قطع برق == "خاموش" || ii == 1٪ خروج "power == on" while loop end end end٪ پایان "power == on" while حلقه if power == "off" || ii == 1٪ از کل خارج می شود در حالی که حلقه پایان می یابد

این فقط یک مرور کوتاه از کد و عملکرد آن بود. در صورت نیاز کد کامل را بصورت pdf پیوست کرده ایم

در اینجا لیستی وجود دارد که هر دستگاه به کدام پورت وصل شده است

1. LED RGB: پین های دیجیتال (7 ، 8 ، 9)

2. سروو: پین دیجیتال 6

3. دکمه ها: پین های دیجیتال (1 ، 2 ، 3 ، 4 ، 5)

4. دکمه آبی برای ایمیل: پین دیجیتال 0

5. سنسور دما: پین آنالوگ 1

6. سوئیچ: پین دیجیتال 11

توصیه شده: