Мазмуну:

MATLAB башкарылуучу микроконтроллер (Arduino MKR1000): 4 кадам
MATLAB башкарылуучу микроконтроллер (Arduino MKR1000): 4 кадам

Video: MATLAB башкарылуучу микроконтроллер (Arduino MKR1000): 4 кадам

Video: MATLAB башкарылуучу микроконтроллер (Arduino MKR1000): 4 кадам
Video: Arduino Interface With MATLAB | Dept of ECE, AITS, Hyderabad | Pantech eLearning 2024, Июль
Anonim
MATLAB башкарылуучу микроконтроллер (Arduino MKR1000)
MATLAB башкарылуучу микроконтроллер (Arduino MKR1000)

Биздин долбоордун максаты MATLAB, ошондой эле Arduino MKR1000ди колдон келишинче колдонуу болчу. Биздин максатыбыз ардуинонун айрым өзгөчөлүктөрүнө белгилүү бир киргизүүнүн негизинде белгилүү бир өндүрүштү аткарууга мүмкүндүк берген сценарий түзүү болчу. Биз буга мүмкүндүк берген MATLABта көрсөтүлгөн көптөгөн циклдерди жана шарттуу билдирүүлөрдү колдондук. Биз дагы долбоорду мүмкүн болушунча жакшыртуу үчүн мобилдик түзүлүштүн гироскопунан алынган маалыматтарды колдонуу менен MATLAB mobile колдондук.

1 -кадам: Бөлүктөр жана материалдар

Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар
Бөлүктөр жана материалдар

MATLAB 2018a

-MATLABнын 2018 версиясы эң жактырылган версия болуп саналат, негизинен ал мобилдик түзмөккө туташкан код менен эң жакшы иштейт. Бирок, биздин коддун көпчүлүгүн MATLAB версияларынын көпчүлүгү чечмелей алат.

Arduino MKR1000

-Бул бизге санариптик жана аналогдук портторго чейин зымдарды өткөрүүгө мүмкүндүк берген белгилүү бир аппарат. Аны менен бирге баруу үчүн нан табакчаңыздын болушу өтө маанилүү.

Аксессуарлар

-МКР1000ди колдонууда бизге керектүү функцияларды аткаруу үчүн кошумча бөлүктөр керек болчу.

Бул кирет

  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 жана Roll) өзгөрмөнү түзүү жана мобилдик түзмөктөн компьютерге туруктуу баалуулуктардын агымын индекстөө аркылуу жасайбыз. Бул, эгерде MATLAB мобилдик түзмөктөн белгилүү бир маалыматтарды киргизип алса, өндүрүштү түзө турган шарттуу билдирүүлөрдү түзүүгө мүмкүндүк берет. Бул үчүн сизге мобилдик түзмөгүңүздө MATLAB mobile жана компьютериңизде MATLAB үчүн мобилдик түзмөктү колдоо пакети керек болот.

Файлды төмөнкү шилтемеден жүктөп алсаңыз болот

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

4 -кадам: Код жана зым порттору

Код үйдүн коопсуздук түзмөгүн иштетүүнү каалайбызбы деген суроону берүү менен башталат. Эгер биз "ооба" деп жооп берсек жана туура кодду берсек, сценарий дароо бир аз убакытка айланат. Ал жерден мобилдик түзмөктөн маалыматтарды чогулта баштайт. Бул маалыматтарды окуган шарттар бар. Биз тутумдун кулпусун ачып, кулпулай алабыз жана код мобилдик түзмөктөн берилген маалыматка жараша сервону буруп, LED жарыгын өчүрөт

startup = questdlg ('ecoTECH Smart Home Energy System иштетүүнү каалайсызбы?'); % EcoTECHwaitfor (баштоо) жандандыруу тизмегин баштайт; if startup == "Ооба" % Эгерде "Ооба" тандалса, активдештирүү ырааттуулугу башталат жана аяктагы 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); жок кылуу (m2); elseif баштоо == "Жок" || баштоо == "Жокко чыгаруу" % Эгерде "Жок" же "Жокко чыгаруу" тандалса, анда активдештирүү ырааты башталбайт жана while циклинин күчүнө кирбейт = "off"; m3 = msgbox ('Макул! Кош бол!'); тыным (2); жок кылуу (м3); аяктоо

% ecoTECH Иш -аракеттер бөлүмүндө, ал эми кубат == "күйгүзүлгөн" % Мобилдик ачкыч бөлүмү чыныгы % мобилдик түзмөктүн Roll ориентациясы жөнүндө маалыматтарды чогултат KEY = m. Orientation (3); % B2 = readDigitalPin (a, 'D2') баскычтары жөнүндө маалыматтарды чогултат; % 2 баскычы (Кызыл) b3 = readDigitalPin (a, 'D3'); % Button 3 (White) if KEY> = 35 % градус m4 = msgbox ('Welcome Home!'); writeDigitalPin (a, 'D8', 1); % Жашыл жарык тыныгуусун күйгүзөт (.5); writePosition (s, 1); % Сервону эшиктин тыныгуусун ачуу үчүн бурат (2); writeDigitalPin (a, 'D8', 0); % Жашыл жарык өчүрүүнү өчүрөт (m4); elseif АЧкыч <= -35 % даражада m5 = msgbox ('Door Locked!'); writeDigitalPin (a, 'D7', 1); % Кызыл жарык тыныгуусун күйгүзөт (.5); writePosition (s, 0); % Эшикти токтотуу үчүн сервону айландырат (2); writeDigitalPin (a, 'D7', 0); % Кызыл жарык өчүрүүнү өчүрөт (m5); ii = 1; break % Мобилдик ачкычты камтыган укуруктан чыгып кетет, эгер эшик башка мобилдик түзмөктүн жардамы менен кулпуланса b2 == 0 && b3 == 0 % Мобилдик ачкычты камтыган циклден өтүп, сырсөздүн үзүлүшүнүн аягына кирет

Андан кийин, ал башка циклди киргизе алат. Бул цикл натыйжаларды баскычтардын киришине негиздеп көзөмөлдөйт. Эгерде биринчи цикл анча маанилүү болбосо же кол менен кулпулоо талап кылынса, ал белгилүү бир сырсөз керек болгон башка циклге кирет. Эгерде сырсөз туура эмес болсо, ал циклди кайра баштайт

чын болсо, эгерде ii == 1 % Эшик мобилдик түзмөктүн кулпусу менен ачылган болсо, анда кодду камтыган циклдан чыгат % b5 = readDigitalPin (a, 'D5') баскычтары жөнүндө маалыматтарды чогултат; % 5 баскычы (Көк) b1 = readDigitalPin (a, 'D1'); % 1 баскычы (Кара) b4 = readDigitalPin (a, 'D4'); % Button 4 (White) if 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'); % 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)); % Санга басылган баскычтардын ырааттуулугун бурат, андан соң аны саптын аягына айландырат % 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); % Эшикти токтотуу үчүн сервону айландырат (1); writeDigitalPin (a, 'D7', 0); % Кызыл жарык өчүрүүнү өчүрөт (m7); ii = 1; break % PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1) туура кодду киргизгенден кийин, сырсөздү камтыган циклден чыгат. % Кызыл жарык күйөт m8 = msgbox ('Туура эмес код! Дагы аракет кылыңыз!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Кызыл жарыкты өчүрөт % улантуу % Өткөрүүчү коддун аягына кайра кирүүгө мүмкүндүк берет elseif b1 == 0 && b4 == 0 % Өткөрүүчү кодду киргизүүнү каалабасаңыз, анда пароль бөлүмүн камтыган циклден чыгып кетет; үзгүлтүк аягы

Туура болсо, ал дароо температура сенсорун башкарган бир аз убакытка кирет. Эгерде которгуч күйгүзүлгөн болсо, цикл уланат жана трендди көрүүгө мүмкүнчүлүк берүү менен температура менен убакыт участогуна чегерилет. Эгерде температура сенсоруна туташкан баскыч басылса, анда ал сиздин "үйүңүздө" температура кандай экенин айтып, электрондук кат жөнөтөт. Эгерде өчүрүүчү өчүрүлсө, ал кодду дароо токтотот

t = 0; % Баштапкы убакыт = 0 секунд тыныгуу (5) % Колдонуучуга SWITCH = readDigitalPin (a, 'D11') температура которгучун күйгүзүү үчүн убакыт берет; % D11 пиндеги которуштуруу жөнүндө маалыматтарды чогултат, ал эми SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % D11 чыңалуусунда которуу тууралуу маалыматтарды чогултат = readVoltage (a, 'A1'); % Температура сенсорунан чыңалууну окуйт temp_C = (чыңалуу.*1000 - 500)./ 10; % Чыңалууну температурага айландырат ° C temp_F = (9/5).*Temp_C + 32; % ° Cдан ° F участкасына айландырат (t, temp_C, 'b.') Аталышын кармоо ('Бөлмө температурасы'); xlabel ('Time in Seconds'); ylabel ('Температура'); огу ([0, 180, 0, 100]); сюжет (t, temp_F, 'r.') легенда ('Температура ° С', 'Температура ° F') пауза (1); t = t + 1; % Убакыт эсептегич секундада % E-mail бөлүмү 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 Room температурасы ', sprintf (' Учурдагы бөлмө температурасы %.1f ° C же %.1f ° F. ', temp_C, temp_F)); % Алуучуга учурдагы бөлмө температурасы боюнча маалыматтарды берген электрондук кат жөнөтөт fprintf ('E-mail ийгиликтүү жөнөтүлдү! / N') end if temp_F> = 75 % Эгерде бөлмө температурасы 75 ° F чейин жогоруласа… temp_AC = 65; % Термостаттагы температураны 65 ° Fке өзгөртөт, эгер temp_F <= 65 % Эгерде бөлмө температурасы 60 ° F чейин төмөндөсө… temp_AC = 80; % Термостаттагы температураны 80 ° F аягына чейин өзгөртөт % end "SWITCH == 0" while loop if power == "off" || ii == 1 % "power == on" чыкса, loop үзүлүшүнүн аягы % end "power == on" while while loop = = "off" || ii == 1 % Цикл үзүлүшүнүн аягында толугу менен чыгат

Бул коддун жана анын иштөө жөндөмдүүлүгүнүн кыскача сереби эле. Биз керек болсо толук кодду pdf катары тиркеп койдук

Бул жерде ар бир түзмөк кайсы портко туташтырылганын тизмеси

1. RGB LED: Digital Pins (7, 8, 9)

2. Servo: Digital Pin 6

3. Баскычтар: Digital Pins (1, 2, 3, 4, 5)

4. Электрондук почта үчүн көк баскыч: Digital Pin 0

5. Температура сенсору: Аналогдук пин 1

6. Switch: Digital Pin 11

Сунушталууда: