Съдържание:

Микроконтролер с контролиран MATLAB (Arduino MKR1000): 4 стъпки
Микроконтролер с контролиран MATLAB (Arduino MKR1000): 4 стъпки

Видео: Микроконтролер с контролиран MATLAB (Arduino MKR1000): 4 стъпки

Видео: Микроконтролер с контролиран MATLAB (Arduino MKR1000): 4 стъпки
Видео: Enciende y Apaga un Led con Arduino UNO 2024, Юли
Anonim
Микроконтролер с контролиран MATLAB (Arduino MKR1000)
Микроконтролер с контролиран MATLAB (Arduino MKR1000)

Целта на нашия проект беше да използваме MATLAB, както и Arduino MKR1000, доколкото е възможно. Нашата цел беше да създадем скрипт, който позволява на някои функции на arduino да изпълняват определен изход въз основа на конкретен вход. Използвахме много цикли и условни изрази, включени в MATLAB, които направиха това възможно. Използвахме и MATLAB mobile, като използвахме данни, получени от жироскопа на мобилно устройство, за да подобрим проекта максимално.

Стъпка 1: Части и материали

Части и материали
Части и материали
Части и материали
Части и материали
Части и материали
Части и материали

MATLAB 2018a

-Версията 2018 на MATLAB е най -предпочитаната версия, най -вече защото работи най -добре с кода, който се свързва с мобилното устройство. Повечето от нашия код обаче могат да бъдат интерпретирани от повечето версии на MATLAB.

Arduino MKR1000

-Това е специфично устройство, което ни позволява да свързваме вериги до цифрови и аналогови портове. От жизненоважно значение е да имате и макет, който да вървите заедно с него.

Аксесоари

-При използване на MKR1000 се нуждаехме от аксесоари, за да изпълняваме необходимите функции.

Това включва

  1. Серво
  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, трябва да изтеглите пакета за поддръжка на MATLAB за хардуера Arduino. Това изтегляне ви дава достъп до определени функции и команди директно към дъската arduino.

Можете да изтеглите пакета на връзката по -долу

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

Стъпка 3: Използване на сензори за данни, придобити от мобилно устройство

Използване на сензори за данни, придобити от мобилно устройство
Използване на сензори за данни, придобити от мобилно устройство

Мобилното приложение MATLAB ни позволява да използваме мобилно устройство за поточно предаване на данни чрез неговия жироскоп. За да получим данните чрез MATLAB, ние ги получаваме, като ги извличаме от ориентационната матрица от MATLAB mobile. Правим това, като създаваме променлива за всяка колона от ориентационната матрица (Azimuth, Pitch и Roll) и индексираме постоянния поток от стойности от мобилното устройство към компютъра. Това ни позволява да създаваме условни изявления, които ще представят изход, ако 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 в края power = "on"; m1 = msgbox ('Стартиране на ecoTECH …'); пауза (2); изтриване (m1); m1_wait = лента за изчакване (0, 'Моля, изчакайте …'); стъпки = 25; за i = 1: стъпки пауза (.1); лента за изчакване (i/стъпки); % Актуализира изтриването на края на лентата за изчакване (m1_wait); PASSCODE = [0 0 0 0]; % Инициализира парола ii = 0; % Инициализира променлива, използвана за излизане от цикли m2 = msgbox ('ecoTECH напълно работещ!'); пауза (2); изтриване (m2); elseif стартиране == "Не" || startup == "Отказ" % Ако е избрано "Не" или "Отказ", тогава последователността на активиране не стартира и не влиза в захранването на цикъла while = "изключено"; m3 = msgbox ('Добре! Сбогом!'); пауза (2); изтриване (m3); край

% ecoTECH в раздел Действие, докато е вярно, докато захранването == "включено" % Секция на мобилния ключ, докато е вярно % Събира данни за ориентацията на ролката на мобилното устройство KEY = m. Orientation (3); % Събира данни за бутоните b2 = readDigitalPin (a, 'D2'); % Бутон 2 (червен) b3 = readDigitalPin (a, 'D3'); % Бутон 3 (Бял), ако KEY> = 35 % в градуси m4 = msgbox ('Добре дошли у дома!'); writeDigitalPin (a, 'D8', 1); % Включва пауза в зелена светлина (.5); writePosition (s, 1); % Обръща серво за отключване на паузата на вратата (2); writeDigitalPin (a, 'D8', 0); % Изключва изтриването на зелена светлина (m4); elseif KEY <= -35 % в градуси m5 = msgbox ('Вратата е заключена!'); writeDigitalPin (a, 'D7', 1); % Включва паузата на червената светлина (.5); writePosition (s, 0); % Обръща серво, за да заключи паузата на вратата (2); writeDigitalPin (a, 'D7', 0); % Изключва изтриването на червената светлина (m5); ii = 1; break % Излиза, докато цикълът съдържа мобилен ключ, ако вратата е заключена с помощта на мобилното устройство elseif b2 == 0 && b3 == 0 % Излиза, докато цикълът съдържа мобилен ключ за въвеждане на крайния край на края на края

След това той може да влезе в друг цикъл while. Този цикъл while контролира резултатите въз основа на входовете от бутоните. Ако първият цикъл 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 ('Моля, натиснете и задръжте бутон A'); пауза (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); 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 % Излиза докато цикълът съдържа парола след въвеждане на правилната парола elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Включва червената светлина m8 = msgbox ('Неправилна парола! Опитайте отново!'); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Изключва червената светлина продължи % Позволява ви да въведете отново край на парола иначе b1 == 0 && b4 == 0 % Излиза, докато цикълът съдържа раздел с парола, ако не искате да въведете парола ii = 1; прекъсване край край

Ако е правилно, той веднага ще влезе в цикъл 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; % Преобразува напрежението в температура в ° C temp_F = (9/5).*Temp_C + 32; % Конвертира от ° C в ° F график (t, temp_C, 'b.') Задържане на заглавието ('Стайна температура'); xlabel ('Време в секунди'); ylabel ('Температура'); ос ([0, 180, 0, 100]); график (t, temp_F, 'r.') легенда ('Температура в ° C', 'Температура в ° F') пауза (1); t = t + 1; % Брояч на време в секунди % Имейл раздел b_temp = readDigitalPin (a, 'D0'); % Събира данните от (синия) температурен бутон в извод D0, ако b_temp == 0 setpref ('Интернет', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Интернет', 'E_mail', '[email protected]'); % Sender setpref ('Интернет', 'SMTP_Потребителско име', '[email protected]'); % Потребителско име на подателя setpref ('Интернет', 'SMTP_Password', 'Integral_ecoTECH'); % Реквизити на паролата на подателя = 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)); % Изпраща имейл до получателя, като дава данни за текущата стайна температура fprintf („Имейлът е изпратен успешно! / N“) край, ако temp_F> = 75 % Ако стайната температура се повиши до 75 ° F… temp_AC = 65; % Променя температурата на термостата на 65 ° F иначе temp_F <= 65 % Ако стайната температура се понижи до 60 ° F … temp_AC = 80; % Променя температурата на термостата на 80 ° F краен край % Край на "SWITCH == 0" while цикъл, ако захранването == "изключено" || ii == 1 % Излиза от "power == on", докато крайът на прекъсването на цикъла % End от "power == on" while loop, ако power == "off" || ii == 1 % Излиза от целия цикъл на прекъсване на цикъла

Това беше само кратък преглед на кода и неговата функционалност. Приложихме пълния код като pdf, ако е необходимо

Ето списъка към кой порт е свързано всяко устройство

1. RGB LED: Цифрови щифтове (7, 8, 9)

2. Серво: Цифров пин 6

3. Бутони: Цифрови щифтове (1, 2, 3, 4, 5)

4. Син бутон за имейл: Digital Pin 0

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

6. Превключвател: Цифров щифт 11

Препоръчано: