Агуулгын хүснэгт:

MATLAB хяналттай микроконтроллер (Arduino MKR1000): 4 алхам
MATLAB хяналттай микроконтроллер (Arduino MKR1000): 4 алхам

Видео: MATLAB хяналттай микроконтроллер (Arduino MKR1000): 4 алхам

Видео: MATLAB хяналттай микроконтроллер (Arduino MKR1000): 4 алхам
Видео: FPGA MOJO SUCCESS 2024, Долдугаар сарын
Anonim
MATLAB хяналттай микроконтроллер (Arduino MKR1000)
MATLAB хяналттай микроконтроллер (Arduino MKR1000)

Манай төслийн зорилго бол MATLAB болон Arduino MKR1000 -ийг хамгийн сайн ашиглах явдал байв. Бидний зорилго бол arduino -ийн зарим онцлог шинж чанарыг тодорхой оролт дээр үндэслэн тодорхой гаралт хийх боломжийг олгодог скриптийг бий болгох явдал байв. Бид үүнийг хийх боломжтой болсон олон гогцоо, нөхцөлт мэдэгдлийг MATLAB -д ашигласан. Төслийг аль болох сайжруулахын тулд бид гар утасны төхөөрөмжийн гироскопоос олж авсан өгөгдлийг ашиглан MATLAB гар утсыг ашигласан.

Алхам 1: эд анги, материал

Материал ба эд анги
Материал ба эд анги
Материал ба эд анги
Материал ба эд анги
Материал ба эд анги
Материал ба эд анги

MATLAB 2018a

-MATLAB -ийн 2018 оны хувилбар нь мобайл төхөөрөмжид холбогдох кодтой хамгийн сайн ажилладаг тул хамгийн их таалагддаг хувилбар юм. Гэсэн хэдий ч манай ихэнх кодыг MATLAB -ийн ихэнх хувилбарууд тайлбарлаж чаддаг.

Arduino MKR1000

-Энэ бол дижитал болон аналог портууд хүртэл хэлхээ залгах боломжийг олгодог тусгай төхөөрөмж юм. Үүнтэй хамт талхтай байх нь чухал юм.

Дагалдах хэрэгсэл

-MKR1000 -ийг ашиглах үед шаардлагатай функцийг гүйцэтгэхийн тулд бидэнд туслах эд анги хэрэгтэй байсан.

Үүнд орно

  1. Servo
  2. Товчлуур (6)
  3. Сольж болох RBG LED гэрэл
  4. Энгийн утаснууд
  5. талхны самбар
  6. мини цахилгаан унтраалга
  7. температур мэдрэгч
  8. 330 ом эсэргүүцэл
  9. 10K ом эсэргүүцэл
  10. USB-microUSB утас
  11. Зөөврийн компьютер/ширээний компьютер
  12. Гар утас

MKR1000 -тэй хамт ашиглах боломжтой олон нэмэлт хэрэгслүүд байдаг гэдгийг тэмдэглэх нь зүйтэй

Алхам 2: MATLAB Arduino дэмжих багц

Arduino MKR1000 -ийг MATLAB -ээр зөв ашиглахын тулд та Arduino техник хангамжийн MATLAB дэмжлэгийн багцыг татаж авах ёстой. Энэхүү татан авалт нь танд тодорхой функцууд болон тушаалуудад шууд arduino самбар дээр хандах боломжийг олгоно.

Та багцыг доорх линкээр татаж авах боломжтой

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

Алхам 3: Хөдөлгөөнт төхөөрөмжөөс олж авсан өгөгдлийн мэдрэгчийг ашиглах

Хөдөлгөөнт төхөөрөмжөөс олж авсан өгөгдлийн мэдрэгчийг ашиглах
Хөдөлгөөнт төхөөрөмжөөс олж авсан өгөгдлийн мэдрэгчийг ашиглах

MATLAB Mobile програм нь гароскоп ашиглан өгөгдөл дамжуулахын тулд гар утасны төхөөрөмж ашиглах боломжийг бидэнд олгодог. Мэдээллийг MATLAB -ээр дамжуулан олж авахын тулд бид MATLAB гар утаснаас чиг баримжааны матрицаас татаж авах замаар өгөгдлийг олж авдаг. Бид үүнийг чиглүүлэх матрицын багана бүрт хувьсагч үүсгэж (Azimuth, Pitch, and Roll) хийж, хөдөлгөөнт төхөөрөмжөөс компьютер руу тогтмол утгын урсгалыг индексжүүлэх замаар хийдэг. Энэ нь MATLAB гар утасны төхөөрөмжөөс тодорхой өгөгдлийн оролтыг авах тохиолдолд гарцыг гаргах урьдчилсан мэдэгдэл гаргах боломжийг бидэнд олгодог. Үүнийг хийхийн тулд танд гар утсан дээрээ MATLAB гар утас, компьютер дээрээ MATLAB -ийн гар утасны төхөөрөмжийг дэмжих багц хэрэгтэй болно.

Та файлыг доорх линкээр татаж авах боломжтой

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

Алхам 4: Код ба утасны портууд

Код нь гэрийн хамгаалалтын төхөөрөмжөө асаахыг хүсч байгаа эсэхийг асаах мессежээр эхэлдэг. Хэрэв бид тийм гэж хариулаад нууц кодыг зөв өгвөл скрипт тэр даруй хэсэг хугацааны давталт руу орно. Тэндээс гар утасны төхөөрөмжөөс мэдээлэл цуглуулж эхэлдэг. Энэ өгөгдлийг уншдаг нөхцөлт нөхцөлүүд байдаг. Бид хөдөлгөөнт төхөөрөмжөөсөө системийн түгжээг онгойлгож, түгжих боломжтой бөгөөд код нь хөдөлгөөнт төхөөрөмжөөс өгсөн өгөгдлөөс хамааран servo -ийг эргүүлж, LED гэрлийг анивчих болно

startup = questdlg ('Та ecoTECH ухаалаг гэрийн эрчим хүчний системийг идэвхжүүлэхийг хүсч байна уу?'); % EcoTECHwaitfor (эхлүүлэх) идэвхжүүлэх дарааллыг эхлүүлнэ; if startup == "Yes" % Хэрэв "Yes" гэж сонгосон бол идэвхжүүлэх дараалал эхэлж, төгсгөлийн while давталтад орно = "on"; m1 = msgbox ('ecoTECH эхлүүлж байна …'); түр зогсоох (2); устгах (m1); m1_wait = waitbar (0, 'Түр хүлээнэ үү …'); алхам = 25; i = 1 хувьд: алхмуудыг түр зогсоох (.1); хүлээх мөр (i/алхам); % Хүлээх самбарын төгсгөлийг шинэчлэх (m1_wait); PASSCODE = [0 0 0 0]; % Нууц кодыг эхлүүлнэ ii = 0; % Гогцооноос гарахын тулд ашигладаг хувьсагчийг эхлүүлнэ m2 = msgbox ('ecoTECH бүрэн ажиллагаатай!'); түр зогсоох (2); устгах (м2); elseif эхлүүлэх == "Үгүй" || эхлүүлэх == "Цуцлах" % Хэрэв "Үгүй" эсвэл "Цуцлах" -ыг сонгосон бол идэвхжүүлэх дараалал эхлэхгүй бөгөөд while давталтын хүчийг оруулаагүй болно = "off"; m3 = msgbox ('За! Баяртай!'); түр зогсоох (2); устгах (м3); Төгсгөл

% ecoTECH in Action Section in true while power == "on" % Mobile Key Section байхад true % Хөдөлгөөнт төхөөрөмжийн Roll чиглэлийн талаарх мэдээллийг цуглуулдаг 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 % градус m5 = msgbox ('Хаалга түгжигдсэн!'); writeDigitalPin (a, 'D7', 1); % Улаан гэрлийн түр зогсолтыг асаана (.5); бичих байрлал (ууд, 0); % Хаалганы түр зогсолтыг түгжихийн тулд servo -ийг эргүүлнэ (2); writeDigitalPin (a, 'D7', 0); % Улаан гэрэл устгах унтраана (m5); ii = 1; break % гар утасны түлхүүр агуулсан гогцоо байх үед гарна, хэрэв өөр төхөөрөмж ашиглан хаалгыг түгжсэн бол b2 == 0 && b3 == 0 % гар утасны түлхүүр агуулсан гогцооноос гарсны дараа нууц кодын хэсэгт таслах төгсгөлийн төгсгөлд орно.

Үүний дараа энэ нь өөр while давталт оруулах боломжтой. Энэ while давталт нь товчлууруудын оролт дээр үндэслэн үр дүнг хянадаг. Хэрэв эхний while давталт нь ач холбогдолгүй эсвэл гараар түгжигдэх шаардлагатай бол тодорхой нууц үг шаардлагатай өөр давталтад орно. Хэрэв нууц үг буруу байвал давталтыг дахин эхлүүлэх болно

while true if ii == 1 % Хэрэв гар утасны төхөөрөмж хаалганы түгжээг тайлсан бол нууц код агуулсан давталтаас гарах % b5 = readDigitalPin (a, 'D5') товчлууруудын талаархи мэдээллийг цуглуулдаг; % Товч 5 (Цэнхэр) b1 = readDigitalPin (a, 'D1'); % Товч 1 (Хар) b4 = readDigitalPin (a, 'D4'); % Button 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 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); бичих байрлал (ууд, 1); % Хаалганы зогсолтыг онгойлгохын тулд servo -ийг эргүүлнэ (5); writeDigitalPin (a, 'D8', 0); % Ногоон гэрлийг түр зогсооно (.1); writeDigitalPin (a, 'D7', 1); % Улаан гэрлийн түр зогсолтыг асаана (.5); бичих байрлал (ууд, 0); % Хаалганы түр зогсолтыг түгжихийн тулд servo -ийг асаана (1); writeDigitalPin (a, 'D7', 0); % Улаан гэрэл устгах унтраана (m7); ii = 1; break % PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1) зөв оруулсны дараа нууц кодыг агуулсан давталтаас гарах болно. % Улаан гэрэл асдаг m8 = msgbox ('Буруу нууц код! Дахин оролдоно уу!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Улаан гэрлийг унтраана үргэлжлүүлнэ % Хэрэв танд нууц код оруулахыг хүсэхгүй байгаа бол нууц үгийн хэсгийг агуулсан давталтаас гарах тохиолдолд өөр кодын төгсгөлийг дахин оруулах боломжийг олгоно b1 == 0 && b4 == 0 %; төгсгөлийн төгсгөлийг таслах

Хэрэв зөв бол энэ нь температур мэдрэгчийг хянадаг хэсэг хугацааны гогцоонд шууд орно. Хэрэв унтраалга асаалттай байвал давталт үргэлжилж, температур ба цаг хугацааны графикийг зурах бөгөөд энэ нь чиг хандлагыг харах боломжийг олгодог. Хэрэв температур мэдрэгчтэй холбогдсон товчлуур дарагдсан бол энэ нь таны "гэрт" температур ямар байгааг имэйлээр илгээх болно. Хэрэв унтраалгыг унтраасан бол тэр даруй кодыг дуусгах болно

t = 0; % Эхний хугацаа = 0 секундын завсарлага (5) % Хэрэглэгчид температурын унтраалгыг асаах хугацааг өгдөг SWITCH = readDigitalPin (a, 'D11'); % D11 зүү дэх шилжүүлэгчийн талаархи мэдээллийг цуглуулдаг бол SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Д11 хүчдэл = readVoltage (a, 'A1') зүү дэх шилжүүлэгчийн талаархи мэдээллийг цуглуулдаг; % Температур мэдрэгчийн хүчдэлийг уншдаг temp_C = (хүчдэл.*1000 - 500)./ 10; % Хүчдэлийг ° C температурт хөрвүүлнэ temp_F = (9/5).*Temp_C + 32; % ° C -аас ° F график руу хөрвүүлнэ (t, temp_C, 'b.') Гарчиг дээр хадгална ('Өрөөний температур'); xlabel ('Цаг секундээр'); ylabel ('Температур'); тэнхлэг ([0, 180, 0, 100]); plot (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]'); % Илгээгчийн setpref ('Интернет', 'SMTP_Username', '[email protected]'); % Илгээгчийн хэрэглэгчийн нэр setpref ('Интернет', 'SMTP_Password', 'Integral_ecoTECH'); % Илгээгчийн нууц үг props = java.lang. System.getProperties; props.setProperty ('mail.smtp.auth', 'үнэн'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465'); sendmail ('[email protected] ',' ecoTECH Өрөөний температур ', sprintf (' Одоогийн өрөөний температур %.1f ° C буюу %.1f ° F байна. ', temp_C, temp_F)); % Temp_F> = 75 % Хэрэв өрөөний температур 75 ° F хүртэл нэмэгдвэл fprintf ('И-мэйл амжилттай илгээгдэв! / N') дууссан бол хүлээн авагчид имэйл илгээнэ… temp_AC = 65; % Термостат дээрх температурыг 65 ° F болгож өөрчилдөг өөр температур temp_F <= 65 % Хэрэв өрөөний температур 60 ° F хүртэл буурвал… temp_AC = 80; % Термостат дээрх температурыг 80 ° F төгсгөлийн төгсгөл болгон өөрчилдөг % "SWITCH == 0" -ийн төгсгөл, хэрэв цахилгаан == "унтраалттай" байвал давталт || ii == 1 % "power == on" -ээс гарч, давталтын завсар төгсгөл % end "power == on" while while while power == "off" || ii == 1 % Давталтын завсарлага дуусах үед бүхэлд нь гарна

Энэ бол код болон түүний ажиллах боломжийн талаар товч тойм байлаа. Шаардлагатай бол бид бүрэн кодыг pdf хэлбэрээр хавсаргасан болно

Төхөөрөмж бүр ямар порт уруу холбогдсоныг энд жагсаав

1. RGB LED: Дижитал тээглүүр (7, 8, 9)

2. Servo: Digital Pin 6

3. Товчнууд: Дижитал тээглүүр (1, 2, 3, 4, 5)

4. Имэйлийн цэнхэр товчлуур: Дижитал зүү 0

5. Температур мэдрэгч: Аналог Pin 1

6. Шилжүүлэгч: Дижитал зүү 11

Зөвлөмж болгож буй: