Оглавление:

Микроконтроллер, управляемый MATLAB (Arduino MKR1000): 4 шага
Микроконтроллер, управляемый MATLAB (Arduino MKR1000): 4 шага

Видео: Микроконтроллер, управляемый MATLAB (Arduino MKR1000): 4 шага

Видео: Микроконтроллер, управляемый MATLAB (Arduino MKR1000): 4 шага
Видео: Взаимодействие MATLAB с оборудованием: 02. Взаимодействие MATLAB и Arduino 2024, Июль
Anonim
Микроконтроллер, управляемый MATLAB (Arduino MKR1000)
Микроконтроллер, управляемый MATLAB (Arduino MKR1000)

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

Шаг 1: Детали и материалы

Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы
Детали и материалы

MATLAB 2018a

-The 2018 версия MATLAB является наиболее предпочтительной версией, в основном потому, что она лучше всего работает с кодом, который подключается к мобильному устройству. Однако большая часть нашего кода может быть интерпретирована большинством версий MATLAB.

Ардуино MKR1000

-Это специальное устройство, которое позволяет нам подключать цепи как к цифровым, так и к аналоговым портам. Очень важно, чтобы у вас также была макетная плата.

Аксессуары

-При использовании MKR1000 нам потребовались вспомогательные детали для выполнения необходимых функций.

Это включает

  1. Сервопривод
  2. Кнопка (6)
  3. Сменный светодиодный светильник RBG
  4. Простые провода
  5. макет (и)
  6. мини-выключатель питания
  7. Датчик температуры
  8. Резистор 330 ом
  9. Резистор 10 кОм
  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 Mobile позволяет нам использовать мобильное устройство для потоковой передачи данных с помощью его гироскопа. Чтобы получить данные через MATLAB, мы получаем данные, извлекая их из матрицы ориентации из MATLAB mobile. Мы делаем это, создавая переменную для каждого столбца матрицы ориентации (Азимут, Шаг и Крен) и индексируя постоянный поток значений с мобильного устройства на компьютер. Это позволяет нам создавать условные операторы, которые будут предварительно формировать выходные данные, если MATLAB выбирает определенные входные данные с мобильного устройства. Для этого вам понадобится MATLAB mobile на вашем мобильном устройстве и пакет поддержки мобильных устройств для MATLAB на вашем компьютере.

Вы можете скачать файл по ссылке ниже

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

Шаг 4: Код и порты подключения

Код начинается с сообщения о запуске, которое спрашивает, хотим ли мы запустить наше домашнее устройство безопасности. Если мы ответим «да» и дадим правильный код доступа, сценарий немедленно перейдет в цикл while. Оттуда он начинает сбор данных с мобильного устройства. Есть условные выражения, которые читают эти данные. Мы можем разблокировать и заблокировать систему с нашего мобильного устройства, и код будет включать сервопривод и мигать светодиодным индикатором в зависимости от данных с мобильного устройства

startup = questdlg («Хотите активировать систему энергоснабжения умного дома ecoTECH?»); % Начинает последовательность активации ecoTECHwaitfor (запуск); if startup == "Yes"% Если выбрано "Yes", последовательность активации начинается и входит в цикл while в конце power = "on"; m1 = msgbox («Запуск ecoTECH…»); пауза (2); удалить (m1); m1_wait = waitbar (0, «Подождите…»); шаги = 25; для i = 1: пауза между шагами (.1); панель ожидания (i / шаги); % Обновляет удаление конца панели ожидания (m1_wait); ПАРОЛЬ = [0 0 0 0]; % Инициализирует код доступа ii = 0; % Инициализирует переменную, используемую для выхода из цикла m2 = msgbox («ecoTECH полностью готов!»); пауза (2); удалить (m2); elseif startup == "Нет" || startup == "Отмена"% Если выбрано "Нет" или "Отмена", то последовательность активации не начинается и не входит в цикл while power = "off"; m3 = msgbox ('Хорошо! До свидания!'); пауза (2); удалить (м3); конец

% ecoTECH в разделе действий при истинном значении при включенном питании% Разделе мобильных ключей при истинном% Собирает данные об ориентации вращения мобильного устройства. KEY = m. Orientation (3); % Собирает данные о кнопках b2 = readDigitalPin (a, 'D2'); % Кнопка 2 (красный) b3 = readDigitalPin (a, 'D3'); % Button 3 (белый), если KEY> = 35% в градусах m4 = msgbox ('Добро пожаловать домой!'); writeDigitalPin (а, '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% Выходит из цикла while, содержащего мобильный ключ, если дверь заперта с помощью мобильного устройства elseif b2 == 0 && b3 == 0% Выходит из цикла while, содержащего мобильный ключ для ввода кода доступа break end end

После этого он может перейти в другой цикл while. Этот цикл while управляет результатами на основе входных данных с кнопок. Если первый цикл while незначителен или требуется ручная блокировка, он войдет в другой цикл while, где требуется конкретный пароль. Если пароль неверен, цикл перезапустится

while true, если ii == 1% Выходит из цикла while, содержащего код доступа, если дверь была открыта с помощью мобильного устройства break end% Собирает данные о кнопках 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 ПАРОЛЬ (0 + b) = 2; elseif b3 == 0 PASSCODE (0 + b) = 3; elseif b4 == 0 ПАРОЛЬ (0 + b) = 4; elseif b5 == 0 PASSCODE = sprintf ('%. 0f%.0f%.0f%.0f', PASSCODE (1), PASSCODE (2), PASSCODE (3), PASSCODE (4)); % Преобразует последовательность нажатых кнопок в числа, а затем преобразует ее в конец строки% Конец цикла for для ввода цифр для пароля, если PASSCODE == "2314"% Если введенный пароль совпадает, дверь открывается на несколько секунд, а затем блокируется m7 = msgbox («Добро пожаловать домой!»); writeDigitalPin (а, '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% Завершает цикл while, содержащий код доступа, после ввода правильного пароля elseif PASSCODE ~ = "2314" writeDigitalPin (a, 'D7', 1); % Включает красный свет m8 = msgbox («Неверный пароль! Попробуйте еще раз!»); waitfor (m8) writeDigitalPin (a, 'D7', 0); % Выключает красный свет. Continue% Позволяет повторно ввести код доступа end elseif b1 == 0 && b4 == 0% Выходит из цикла, содержащего раздел кода доступа, если вы не хотите вводить код доступа ii = 1; перерыв конец конец

Если это правильно, он немедленно войдет в цикл while, который контролирует датчик температуры. Если переключатель включен, цикл будет продолжен и построит график зависимости температуры от времени, что позволит увидеть тенденцию. Если нажать кнопку, подключенную к датчику температуры, он также отправит вам электронное письмо с информацией о температуре в вашем «доме». Если переключатель выключен, он немедленно завершит код

t = 0; % Начальное время = 0 секунд пауза (5)% Дает пользователю время для включения переключателя температуры SWITCH = readDigitalPin (a, 'D11'); % Собирает данные о переключателе на выводе D11, в то время как SWITCH == 0 SWITCH = readDigitalPin (a, 'D11'); % Собирает данные о переключателе на контакте D11 Voltage = 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.') legend ('Температура в ° C', 'Температура в ° F') пауза (1); т = т + 1; % Счетчик времени в секундах% Раздел электронной почты b_temp = readDigitalPin (a, 'D0'); % Собирает данные (синей) кнопки температуры на выводе D0, если b_temp == 0 setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Интернет', 'E_mail', '[email protected]'); % Sender setpref ('Интернет', 'SMTP_Username', '[email protected]'); % Sender's username setpref ('Internet', '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') end if temp_F> = 75% Если температура в помещении повышается до 75 ° F… temp_AC = 65; % Изменяет температуру на термостате на 65 ° F elseif temp_F <= 65% Если температура в помещении снижается до 60 ° F… temp_AC = 80; % Изменяет температуру на термостате на 80 ° F end end% Конец цикла «SWITCH == 0» while if power == «off» || ii == 1% Выход из «power == on» при остановке цикла end end% Конец «power == on» из while loop if power == «off» || ii == 1% Выходит из цикла, пока завершается разрыв цикла

Это был всего лишь краткий обзор кода и его функциональности. При необходимости мы приложили полный код в формате pdf

Вот список портов, к которым подключено каждое устройство

1. Светодиод RGB: цифровые контакты (7, 8, 9)

2. Сервопривод: цифровой контакт 6

3. Кнопки: цифровые контакты (1, 2, 3, 4, 5)

4. Синяя кнопка для электронной почты: цифровой контакт 0

5. Датчик температуры: аналоговый контакт 1

6. Переключатель: цифровой контакт 11

Рекомендуемые: