Mundarija:

MATLAB boshqariladigan mikrokontroller (Arduino MKR1000): 4 qadam
MATLAB boshqariladigan mikrokontroller (Arduino MKR1000): 4 qadam

Video: MATLAB boshqariladigan mikrokontroller (Arduino MKR1000): 4 qadam

Video: MATLAB boshqariladigan mikrokontroller (Arduino MKR1000): 4 qadam
Video: TJABTST: Ochiq va yopiq boshqarish tizimlari 2024, Noyabr
Anonim
MATLAB tomonidan boshqariladigan mikrokontroller (Arduino MKR1000)
MATLAB tomonidan boshqariladigan mikrokontroller (Arduino MKR1000)

Loyihamizning maqsadi MATLAB va Arduino MKR1000 -ni imkon qadar ishlatish edi. Bizning maqsadimiz - arduino -ning ba'zi xususiyatlariga ma'lum bir kirishga asoslangan holda ma'lum bir chiqishni amalga oshirishga imkon beradigan skript yaratish edi. Biz buni amalga oshirishga imkon beradigan MATLAB -da ko'rsatilgan ko'plab ko'chadan va shartli bayonlardan foydalanganmiz. Loyihani iloji boricha yaxshilash uchun mobil qurilmaning giroskopidan olingan ma'lumotlarni ishlatib, MATLAB mobile -dan ham foydalanganmiz.

1 -qadam: ehtiyot qismlar va materiallar

Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar

MATLAB 2018a

-MATLAB -ning 2018 -yilgi versiyasi eng ko'p afzal qilingan versiya, chunki u mobil qurilmaga ulanadigan kod bilan yaxshi ishlaydi. Biroq, bizning kodimizning ko'p qismini MATLAB versiyalarining ko'pchiligi talqin qilishi mumkin.

Arduino MKR 1000

-Bu bizga raqamli va o'xshash portlarga zanjirlarni ulash imkonini beradigan maxsus qurilma. Siz bilan birga non paneli bo'lishi juda muhimdir.

Aksessuarlar

-MKR1000 -dan foydalanilganda, kerakli funktsiyalarni bajarish uchun bizga qo'shimcha qismlar kerak edi.

Bu o'z ichiga oladi

  1. Servo
  2. Tugma (6)
  3. O'zaro almashtiriladigan RBG LED chirog'i
  4. Oddiy simlar
  5. non taxtasi
  6. mini quvvat kaliti
  7. harorat sensori
  8. 330 ohmli qarshilik
  9. 10K ohmli qarshilik
  10. USB-microUSB kabeli
  11. Laptop/ish stoli
  12. Mobil qurilma

Shuni ham ta'kidlash joizki, MKR1000 bilan ishlatilishi mumkin bo'lgan ko'plab qo'shimcha aksessuarlar mavjud

2 -qadam: MATLAB Arduino qo'llab -quvvatlash to'plami

Arduino MKR1000 -ni MATLAB orqali to'g'ri ishlatish uchun siz Arduino uskunalari uchun MATLAB qo'llab -quvvatlash paketini yuklab olishingiz kerak. Ushbu yuklab olish sizga ba'zi funktsiyalar va buyruqlarga to'g'ridan -to'g'ri arduino kartasiga kirish imkonini beradi.

Paketni quyidagi havola orqali yuklab olishingiz mumkin

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

3 -qadam: Mobil qurilmadan olingan ma'lumotlar sensorlaridan foydalanish

Mobil qurilmadan olingan ma'lumotlar sensorlaridan foydalanish
Mobil qurilmadan olingan ma'lumotlar sensorlaridan foydalanish

MATLAB Mobile ilovasi bizga gyroskop yordamida ma'lumotlarni uzatish uchun mobil qurilmadan foydalanish imkonini beradi. Ma'lumotni MATLAB orqali olish uchun biz uni MATLAB mobile -dan yo'nalish matritsasidan olish orqali olamiz. Biz buni yo'nalish matritsasining har bir ustuni uchun o'zgaruvchini yaratish (Azimut, Pitch va Roll) va mobil qurilmadan kompyuterga doimiy qiymatlar oqimini indekslash orqali amalga oshiramiz. Bu, agar MATLAB mobil qurilmadan ma'lum ma'lumotlarni kiritsa, chiqishni oldindan tuzadigan shartli bayonotlar tuzishga imkon beradi. Buning uchun sizga mobil qurilmangizda MATLAB mobil va kompyuteringizda MATLAB uchun mobil qurilmalarni qo'llab -quvvatlash to'plami kerak bo'ladi.

Faylni quyidagi havola orqali yuklab olishingiz mumkin

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

4 -qadam: Kod va kabel portlari

Kod uy xavfsizlik qurilmasini ishga tushirishni xohlayotganimizni so'raydigan ishga tushirish xabari bilan boshlanadi. Agar biz "ha" deb javob bersak va to'g'ri parolni bersak, skript darhol vaqt oralig'iga o'tadi. U erdan u mobil qurilmadan ma'lumotlarni yig'ishni boshlaydi. Bu ma'lumotlarni o'qiydigan shartli shartlar mavjud. Biz tizimni mobil qurilmamizdan qulfdan chiqarishimiz va qulflashimiz mumkin, va kod mobil qurilmadan berilgan ma'lumotlarga bog'liq holda servoni aylantiradi va LED chiroqni yonadi

startup = questdlg ('ecoTECH aqlli uy energiya tizimini yoqmoqchimisiz?'); % EcoTECHwaitfor (ishga tushirish) faollashtirish ketma -ketligini boshlaydi; agar ishga tushirish == "Ha" % Agar "Ha" tanlansa, faollashtirish ketma -ketligi boshlanadi va oxiridagi vaqt tsikliga kiradi = "on"; m1 = msgbox ('ecoTECH ishga tushirilmoqda…'); pauza (2); o'chirish (m1); m1_wait = kutish paneli (0, 'Iltimos, kuting…'); qadamlar = 25; i = 1 uchun: pauza pauza (.1); kutish paneli (i/qadamlar); % Kutish paneli o'chirilishini o'chirib tashlaydi (m1_wait); PASCODE = [0 0 0 0]; % Ii = 0 parolini ishga tushiradi; % Ko'chadan chiqib ketish uchun ishlatiladigan o'zgaruvchini ishga tushiradi m2 = msgbox ('ecoTECH to'liq ishlayapti!'); pauza (2); o'chirish (m2); elseif ishga tushirish == "Yo'q" || ishga tushirish == "Bekor qilish" % Agar "Yo'q" yoki "Bekor qilish" tanlansa, faollashtirish ketma -ketligi boshlanmaydi va vaqt kuchiga kirmaydi = "o'chirilgan"; m3 = msgbox ('Yaxshi! Xayr!'); pauza (2); o'chirish (m3); oxiri

Harakatlar bo'limida % ecoTECH haqiqiy bo'lsa, kuch == "yoqilgan" % Mobil kalit bo'limi haqiqiy % mobil qurilmaning Roll yo'nalishi haqida ma'lumot to'playdi KEY = m. Orientation (3); % Tugmalar haqida ma'lumot to'playdi b2 = readDigitalPin (a, 'D2'); % 2 tugmasi (qizil) b3 = readDigitalPin (a, 'D3'); % Tugma 3 (Oq) agar KEY> = 35 % m4 = msgbox ('Uyga xush kelibsiz!'); writeDigitalPin (a, 'D8', 1); % Yashil chiroq pauzasini yoqadi (.5); yozish pozitsiyasi (lar, 1); % Eshik pauzasini ochish uchun servoni aylantiradi (2); writeDigitalPin (a, 'D8', 0); % Yashil chiroq o'chirilishini o'chiradi (m4); elseif KEY <= -35 % gradusda m5 = msgbox ('Eshik qulflangan!'); writeDigitalPin (a, 'D7', 1); % Qizil chiroq pauzasini yoqadi (.5); yozish pozitsiyasi (lar, 0); % Servo eshikni qulflash uchun buradi (2); writeDigitalPin (a, 'D7', 0); % Qizil chiroq o'chirilishini o'chiradi (m5); ii = 1; break %, agar mobil qurilma yordamida eshik qulflangan bo'lsa, mobil kalitni o'z ichiga olgan pastadirdan chiqsa, b2 == 0 && b3 == 0 % agar parol tugmachasini kesib o'tish tugmachasini kiritish uchun mobil kalitli tsikldan chiqsa.

Shundan so'ng, u boshqa while tsiklini kiritishi mumkin. Bu loop esa tugmalarni kiritishiga qarab natijalarni nazorat qiladi. Agar birinchi tsikl ahamiyatsiz bo'lsa yoki qo'lda blokirovka qilish zarur bo'lsa, u ma'lum bir parol kerak bo'lgan boshqa vaqt tsiklini kiritadi. Agar parol noto'g'ri bo'lsa, u qaytadan boshlanadi

while true if ii == 1 % Eshik mobil qurilmaning qulfi bilan qulfdan chiqarilgan bo'lsa, parolni o'z ichiga olgan pastadirdan chiqadi % b5 = readDigitalPin (a, 'D5') tugmalari haqida ma'lumot to'playdi; % 5 tugmasi (Moviy) b1 = readDigitalPin (a, 'D1'); % Tugma 1 (qora) b4 = readDigitalPin (a, 'D4'); % Button 4 (Oq) agar b5 == 0 % b = 1: 5 uchun parolni kiritish bo'limini boshlaydi m6 = msgbox ('Iltimos, tugmani bosib ushlab turing'); pauza (2); o'chirish (m6); % Tugmalar haqida ma'lumot to'playdi b1 = readDigitalPin (a, 'D1'); % Tugma 1 (qora) b2 = readDigitalPin (a, 'D2'); % 2 tugmasi (qizil) b3 = readDigitalPin (a, 'D3'); % 3 tugmasi (oq) b4 = readDigitalPin (a, 'D4'); % 4 tugmasi (sariq) b5 = readDigitalPin (a, 'D5'); % 5 tugmasi (Moviy) % b1 == 0 PASSCODE (0+b) = 1 bo'lsa, boshlang'ich koddagi qiymatlarni birma -bir almashtiradi; elseif b2 == 0 PASKOD (0+b) = 2; elseif b3 == 0 PASKOD (0+b) = 3; elseif b4 == 0 PASKOD (0+b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Tugmalar ketma -ketligini raqamlarga aylantiradi va keyin uni mag'lubiyat oxirigacha o'zgartiradi % PASSCODE == "2314" % bo'lsa parolni kiritish uchun tsiklning oxiri % Agar kirilgan kod mos bo'lsa, eshik bir necha soniya davomida qulflanadi va qulflanadi. m7 = msgbox ('Uyga xush kelibsiz!'); writeDigitalPin (a, 'D8', 1); % Yashil chiroq pauzasini yoqadi (.5); yozish pozitsiyasi (lar, 1); % Eshik pauzasini ochish uchun servoni aylantiradi (5); writeDigitalPin (a, 'D8', 0); % Yashil chiroq pauzasini o'chiradi (.1); writeDigitalPin (a, 'D7', 1); % Qizil chiroq pauzasini yoqadi (.5); yozish pozitsiyasi (lar, 0); % Servo eshikni pauzani qulflash uchun aylantiradi (1); writeDigitalPin (a, 'D7', 0); % Qizil chiroq o'chirilishini o'chiradi (m7); ii = 1; break % PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1), to'g'ri parolni kiritgandan so'ng, parolni o'z ichiga olgan ko'chadan chiqadi; % Qizil chiroq yonadi m8 = msgbox ('Noto'g'ri parol! Yana urinib ko'ring!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Qizil chiroqni o'chiradi davom etish % Agar parolni kirgizishni xohlamasangiz, parolni oxirigacha qayta kiritish imkonini beradi, agar b1 == 0 && b4 == 0 % Parolni o'z ichiga olgan tsikldan chiqib ketadi; oxiri oxirini sindirish

Agar to'g'ri bo'lsa, u darhol harorat sensori boshqaradigan vaqt oralig'iga kiradi. Agar kalit yoqilgan bo'lsa, tsikl davom etadi va harorat va vaqtni taqqoslab, tendentsiyani ko'rish imkonini beradi. Agar harorat sensori bilan bog'langan tugma bosilsa, u sizga "uyingizda" harorat nima ekanligini elektron pochta orqali yuboradi. Agar kalit o'chirilgan bo'lsa, u darhol kodni tugatadi

t = 0; % Dastlabki vaqt = 0 soniya pauza (5) % Foydalanuvchiga SWITCH = readDigitalPin (a, 'D11') harorat tugmachasini yoqish uchun vaqt beradi; % D11 pinidagi kalit haqida ma'lumot to'playdi, SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % D11 pinli kuchlanish = readVoltage (a, 'A1') pinidagi kalit haqida ma'lumot to'playdi; % Harorat sezgichidan kuchlanishni o'qiydi temp_C = (kuchlanish.*1000 - 500)./ 10; % Voltani haroratga aylantiradi ° C temp_F = (9/5).*Temp_C + 32; % ° C dan ° F ga o'zgaradi (t, temp_C, 'b.') Sarlavhada ushlab turish ('Xona harorati'); xlabel ('Vaqt soniyalarda'); ylabel ("Harorat"); o'q ([0, 180, 0, 100]); syujet (t, temp_F, 'r.') afsonasi ('Harorat ° C', 'Harorat ° F') pauza (1); t = t + 1; % Vaqt hisoblagichi soniyada % Elektron pochta bo'limi b_temp = readDigitalPin (a, 'D0'); % B_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com') bo'lsa, D0 pinidagi (ko'k) harorat tugmasi ma'lumotlarini yig'adi; setpref ('Internet', 'E_mail', '[email protected]'); % Yuboruvchi setpref ('Internet', 'SMTP_Username', '[email protected]'); % Yuboruvchining foydalanuvchi nomi setpref ('Internet', 'SMTP_Password', 'Integral_ecoTECH'); % Yuboruvchining paroli rekvizitlari = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'rost'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' ecoTECH xona harorati ', sprintf (' Hozirgi xona harorati %.1f ° C yoki %.1f ° F. ', temp_C, temp_F)); % Qabul qiluvchiga xona harorati haqida ma'lumot beradigan elektron pochta yuboradi fprintf ('E-mail muvaffaqiyatli yuborildi! / N') end if temp_F> = 75 % Agar xona harorati 75 ° F ga ko'tarilsa… temp_AC = 65; % Termostatdagi haroratni 65 ° F ga o'zgartiradi, agar temp_F <= 65 % Agar xona harorati 60 ° F ga tushsa… temp_AC = 80; % Termostatdagi haroratni 80 ° F oxirigacha o'zgartiradi % "SWITCH == 0" ning oxiri, agar quvvat == "o'chirilgan" bo'lsa || ii == 1 % "kuch == yoqilgan" dan chiqadi, halqa uzilishining oxiri % "quvvat == yoqilgan" ning oxiri, agar quvvat == "o'chirilgan" bo'lsa || ii == 1 % halqa uzilishining oxirigacha to'liq chiqadi

Bu kod va uning funksionalligi haqida qisqacha ma'lumot. Agar kerak bo'lsa, biz to'liq kodni pdf sifatida biriktirdik

Bu erda har bir qurilma qaysi portga ulanganligi ko'rsatilgan

1. RGB LED: raqamli pinlar (7, 8, 9)

2. Servo: raqamli pin 6

3. Tugmalar: Raqamli pinlar (1, 2, 3, 4, 5)

4. Elektron pochta uchun ko'k tugma: Raqamli pin 0

5. Harorat sensori: analog pin 1

6. Kalit: raqamli pin 11

Tavsiya: