جدول المحتويات:

متحكم MATLAB الدقيق (Arduino MKR1000): 4 خطوات
متحكم MATLAB الدقيق (Arduino MKR1000): 4 خطوات

فيديو: متحكم MATLAB الدقيق (Arduino MKR1000): 4 خطوات

فيديو: متحكم MATLAB الدقيق (Arduino MKR1000): 4 خطوات
فيديو: A9G Low Power GPRS/GSM + GPS Module for Cellular IoT Applications | SMS, GPS Tracker & Internet 2024, يوليو
Anonim
متحكم MATLAB (Arduino MKR1000)
متحكم MATLAB (Arduino MKR1000)

كان الهدف من مشروعنا هو استخدام MATLAB وكذلك Arduino MKR1000 بأفضل ما لدينا. كان هدفنا هو إنشاء برنامج نصي يسمح لميزات معينة من اردوينو بأداء مخرجات معينة بناءً على مدخلات محددة. استخدمنا العديد من الحلقات والعبارات الشرطية الواردة في MATLAB والتي جعلت هذا ممكنًا. استخدمنا أيضًا MATLAB mobile باستخدام البيانات التي تم الحصول عليها من جيروسكوب الجهاز المحمول لتعزيز المشروع قدر الإمكان.

الخطوة 1: الأجزاء والمواد

الأجزاء والمواد
الأجزاء والمواد
الأجزاء والمواد
الأجزاء والمواد
الأجزاء والمواد
الأجزاء والمواد

ماتلاب 2018a

-إصدار 2018 من MATLAB هو الإصدار الأكثر تفضيلاً ، لأنه يعمل بشكل أفضل مع الكود الذي يتصل بالجهاز المحمول. ومع ذلك ، يمكن تفسير معظم التعليمات البرمجية الخاصة بنا من خلال غالبية إصدارات MATLAB.

اردوينو MKR1000

-هذا جهاز محدد يسمح لنا بتوصيل الدوائر حتى المنافذ الرقمية والمماثلة. من الضروري أن يكون لديك أيضًا لوح تجارب لتتماشى معه.

مستلزمات

- عند استخدام MKR1000 ، كنا بحاجة إلى أجزاء ملحقة لأداء الوظائف الضرورية.

هذا يشمل

  1. المؤازرة
  2. زر (6)
  3. ضوء RBG LED قابل للتبديل
  4. أسلاك بسيطة
  5. لوح (ألواح)
  6. مفتاح طاقة صغير
  7. جهاز استشعار درجة الحرارة
  8. 330 أوم المقاوم
  9. 10 كيلو أوم المقاوم
  10. سلك USB-microUSB
  11. كمبيوتر محمول / سطح المكتب
  12. جهاز محمول

وتجدر الإشارة أيضًا إلى أن هناك العديد والعديد من الملحقات التي يمكن استخدامها مع MKR1000

الخطوة 2: حزمة دعم MATLAB Arduino

من أجل استخدام Arduino MKR1000 بشكل صحيح من خلال MATLAB ، يجب عليك تنزيل حزمة دعم MATLAB لأجهزة Arduino. يمنحك هذا التنزيل الوصول إلى وظائف وأوامر معينة مباشرة إلى لوحة اردوينو.

يمكنك تنزيل الحزمة على الرابط أدناه

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

الخطوة 3: استخدام مستشعرات البيانات المكتسبة من الجهاز المحمول

استخدام مستشعرات البيانات التي تم الحصول عليها من الجهاز المحمول
استخدام مستشعرات البيانات التي تم الحصول عليها من الجهاز المحمول

يتيح لنا تطبيق MATLAB Mobile استخدام جهاز محمول لدفق البيانات باستخدام الجيروسكوب الخاص به. للحصول على البيانات من خلال MATLAB ، نحصل على البيانات عن طريق استرجاعها من مصفوفة التوجيه من MATLAB mobile. نقوم بذلك عن طريق إنشاء متغير لكل عمود في مصفوفة الاتجاه (السمت ، والخطوة ، واللف) ، وفهرسة التدفق الثابت للقيم من الجهاز المحمول إلى الكمبيوتر. يسمح لنا هذا بإنشاء عبارات شرطية من شأنها تشكيل مخرجات إذا التقطت MATLAB إدخال بيانات معين من الجهاز المحمول. للقيام بذلك ، ستحتاج إلى MATLAB mobile على جهازك المحمول ، وحزمة دعم الجهاز المحمول لـ MATLAB على جهاز الكمبيوتر الخاص بك.

يمكنك تنزيل الملف على الرابط أدناه

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

الخطوة 4: الكود ومنافذ الأسلاك

يبدأ الرمز برسالة بدء التشغيل تسأل عما إذا كنا نريد بدء تشغيل جهاز الأمن المنزلي الخاص بنا. إذا أجبنا بنعم ، وأعطينا رمز المرور الصحيح ، ينتقل البرنامج النصي فورًا إلى حلقة while. من هناك ، يبدأ في جمع البيانات من الجهاز المحمول. هناك الشروط التي تقرأ هذه البيانات. يمكننا فتح وإغلاق النظام من أجهزتنا المحمولة ، وسوف يقوم الرمز بتشغيل المؤازرة ووميض ضوء LED اعتمادًا على البيانات المقدمة من الجهاز المحمول

startup = Questdlg ('هل ترغب في تنشيط ecoTECH Smart Home Energy System؟') ؛ يبدأ تسلسل تنشيط ecoTECHwaitfor (بدء التشغيل) ؛ إذا كان بدء التشغيل == "نعم"٪ إذا تم تحديد "نعم" ، يبدأ تسلسل التنشيط ويدخل حلقة while في نهاية الطاقة = "on" ؛ m1 = msgbox ('بدء تشغيل ecoTECH …') ؛ وقفة (2) ؛ حذف (م 1) ؛ m1_wait = شريط الانتظار (0، "الرجاء الانتظار …")؛ الخطوات = 25 ؛ بالنسبة إلى i = 1: توقف الخطوات مؤقتًا (.1) ؛ شريط الانتظار (ط / خطوات) ؛ ٪ يحدّث حذف نهاية شريط الانتظار (m1_wait) ؛ PASSCODE = [0 0 0 0] ، ٪ تهيئة رمز المرور الثاني = 0 ؛ ٪ تهيئة متغير يستخدم لكسر الحلقات m2 = msgbox ('ecoTECH تعمل بكامل طاقتها!') ؛ وقفة (2) ؛ حذف (م 2) ؛ elseif بدء التشغيل == "لا" || بدء التشغيل == "إلغاء"٪ إذا تم تحديد "لا" أو "إلغاء" ، فلن يبدأ تسلسل التنشيط ولا يدخل أثناء حلقة الطاقة = "إيقاف" ؛ m3 = msgbox ("حسنًا! وداعًا!") ؛ وقفة (2) ؛ حذف (م 3) ؛ نهاية

قسم٪ ecoTECH في العمل بينما يكون صحيحًا بينما power == "على"٪ Mobile Key Section بينما صحيح٪ يجمع بيانات حول اتجاه لفة الجهاز المحمول KEY = m. Orientation (3) ؛ ٪ يجمع بيانات حول الأزرار b2 = readDigitalPin (a، 'D2') ؛ ٪ الزر 2 (أحمر) b3 = readDigitalPin (أ ، "D3") ؛ ٪ الزر 3 (أبيض) إذا كان KEY> = 35٪ بالدرجات m4 = msgbox ('Welcome Home!') ؛ writeDigitalPin (a، 'D8'، 1) ؛ ٪ يقوم بتشغيل وقفة الضوء الأخضر (.5) ؛ الكتابة الوظيفة (الوظائف ، 1) ؛ ٪ يدير المؤازرة لفتح الباب وقفة (2) ؛ writeDigitalPin (a، 'D8'، 0) ؛ ٪ يطفئ حذف الضوء الأخضر (m4) ؛ elseif KEY <= -35٪ بالدرجات m5 = msgbox ('Door Locked!') ؛ writeDigitalPin (a، 'D7'، 1) ؛ ٪ يقوم بتشغيل وقفة الضوء الأحمر (.5) ؛ الكتابة الوظيفة (الوظائف ، 0) ؛ ٪ يدير المؤازرة لقفل الباب وقفة (2) ؛ writeDigitalPin (a، 'D7'، 0) ؛ ٪ يطفئ حذف الضوء الأحمر (m5) ؛ الثاني = 1 ؛ كسر٪ يخرج أثناء الحلقة التي تحتوي على مفتاح الهاتف المحمول إذا كان الباب مغلقًا باستخدام الجهاز المحمول elseif b2 == 0 && b3 == 0٪ يخرج أثناء الحلقة التي تحتوي على مفتاح الهاتف المحمول لإدخال نهاية نهاية قسم رمز المرور

بعد ذلك ، يمكنه إدخال حلقة while أخرى. تتحكم حلقة while loop في النتائج بناءً على المدخلات من الأزرار. إذا كانت حلقة while الأولى لا تذكر ، أو كان الإغلاق اليدوي مطلوبًا ، فسوف تدخل حلقة while الأخرى حيث يلزم وجود كلمة مرور معينة. إذا كانت كلمة المرور غير صحيحة ، فسيتم إعادة تشغيل الحلقة

بينما يكون صحيحًا إذا كان 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) ؛ حذف (م 6) ؛ ٪ يجمع بيانات حول الأزرار b1 = readDigitalPin (a، 'D1') ؛ ٪ الزر 1 (أسود) b2 = readDigitalPin (a، 'D2') ؛ ٪ زر 2 (أحمر) b3 = readDigitalPin (a، 'D3') ؛ ٪ الزر 3 (أبيض) b4 = readDigitalPin (a، 'D4') ؛ ٪ الزر 4 (أصفر) b5 = readDigitalPin (a، 'D5') ؛ ٪ Button 5 (Blue)٪ يستبدل القيم الموجودة في رمز المرور الأولي واحدًا تلو الآخر إذا كان 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)) ؛ ٪ يحول تسلسل الأزرار المضغوطة إلى أرقام ثم يحولها إلى نهاية سلسلة نهاية٪ End of for loop لإدخال أرقام لرمز المرور إذا كان PASSCODE == "2314"٪ إذا تم إدخال رمز المرور متطابقًا ، فسيتم فتح الباب لبضع ثوان ثم يقفل m7 = msgbox ('مرحبًا بك في الصفحة الرئيسية!') ؛ writeDigitalPin (a، 'D8'، 1) ؛ ٪ يقوم بتشغيل وقفة الضوء الأخضر (.5) ؛ الكتابة الوظيفة (الوظائف ، 1) ؛ ٪ يدير المؤازرة لفتح الباب وقفة (5) ؛ writeDigitalPin (a، 'D8'، 0) ؛ ٪ إيقاف تشغيل الضوء الأخضر وقفة (.1) ؛ writeDigitalPin (a، 'D7'، 1) ؛ ٪ يقوم بتشغيل وقفة الضوء الأحمر (.5) ؛ الكتابة الوظيفة (الوظائف ، 0) ؛ ٪ يدير المؤازرة لقفل الباب وقفة (1) ؛ writeDigitalPin (a، 'D7'، 0) ؛ ٪ يطفئ حذف الضوء الأحمر (m7) ؛ الثاني = 1 ؛ كسر٪ يخرج أثناء حلقة تحتوي على رمز مرور بعد إدخال رمز المرور الصحيح elseif PASSCODE ~ = "2314" writeDigitalPin (a، 'D7'، 1) ؛ ٪ يقوم بتشغيل الضوء الأحمر m8 = msgbox ("رمز المرور غير صحيح! حاول مرة أخرى!") ؛ waitfor (m8) writeDigitalPin (a، 'D7'، 0) ؛ ٪ لإيقاف تشغيل الضوء الأحمر ، متابعة٪ ، يسمح لك بإعادة إدخال رمز مرور end elseif b1 == 0 && b4 == 0٪ يخرج أثناء الحلقة التي تحتوي على قسم رمز المرور إذا كنت لا تريد إدخال رمز مرور ii = 1 ؛ نهاية الكسر

إذا كان هذا صحيحًا ، فسوف يدخل على الفور حلقة الوقت التي تتحكم في مستشعر درجة الحرارة. إذا كان المفتاح قيد التشغيل ، ستستمر الحلقة خلال الرسم البياني لدرجة الحرارة مقابل الوقت ، مما يسمح للشخص بمشاهدة الاتجاه. إذا تم الضغط على الزر المتصل بجهاز استشعار درجة الحرارة ، فسيتم أيضًا إرسال بريد إلكتروني يخبرك بدرجة الحرارة في "منزلك". إذا تم إيقاف تشغيل المفتاح ، فسينهي الرمز على الفور

ر = 0 ؛ ٪ الوقت المبدئي = 0 ثانية وقفة (5) ٪ يعطي الوقت للمستخدم لتشغيل مفتاح درجة الحرارة SWITCH = readDigitalPin (a، 'D11') ؛ يقوم٪ بجمع بيانات حول المحول في الطرف D11 أثناء التبديل == 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.') ('Temperature in ° C'، 'temperature in ° F') pause (1)؛ ر = ر + 1 ؛ عداد الوقت٪ بالثواني٪ قسم البريد الإلكتروني b_temp = readDigitalPin (a، 'D0') ؛ ٪ يجمع بيانات زر درجة الحرارة (الأزرق) في رقم التعريف الشخصي D0 إذا كان b_temp == 0 setpref ("الإنترنت" ، "SMTP_Server" ، "smtp.gmail.com") ؛ setpref ("الإنترنت" ، "البريد الإلكتروني" ، "[email protected]") ؛ ٪ Sender 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 Room Temperature '، sprintf (' درجة حرارة الغرفة الحالية هي٪.1f ° C أو٪.1f ° F. '، temp_C، temp_F)) ؛ ٪ يرسل بريدًا إلكترونيًا إلى المستلم لإعطاء بيانات عن درجة حرارة الغرفة الحالية fprintf ('تم إرسال البريد الإلكتروني بنجاح! / n') تنتهي إذا كانت temp_F> = 75٪ إذا زادت درجة حرارة الغرفة إلى 75 درجة فهرنهايت … temp_AC = 65 ؛ ٪ يغير درجة الحرارة على منظم الحرارة إلى 65 درجة فهرنهايت elseif temp_F <= 65٪ إذا انخفضت درجة حرارة الغرفة إلى 60 درجة فهرنهايت … temp_AC = 80 ؛ ٪ يغير درجة الحرارة في الترموستات إلى 80 درجة فهرنهايت نهاية٪ نهاية "SWITCH == 0" أثناء التكرار إذا كانت الطاقة == "إيقاف" || ii == 1٪ يخرج "power == on" أثناء نهاية كسر الحلقة٪ نهاية "power == on" أثناء الحلقة إذا كانت الطاقة == "off" || ii == 1٪ يخرج بالكامل أثناء نهاية كسر الحلقة

كانت هذه مجرد نظرة عامة موجزة عن الكود وإمكانية تشغيله. لقد أرفقنا الكود الكامل كملف pdf إذا لزم الأمر

فيما يلي قائمة بالمنفذ الذي تم توصيل كل جهاز به

1. RGB LED: دبابيس رقمية (7 ، 8 ، 9)

2. المؤازرة: رقم التعريف الشخصي 6

3. الأزرار: دبابيس رقمية (1 ، 2 ، 3 ، 4 ، 5)

4. الزر الأزرق للبريد الإلكتروني: رقم التعريف الشخصي 0

5. مستشعر درجة الحرارة: دبوس تناظري 1

6. التبديل: رقم التعريف الشخصي 11

موصى به: