Последовательная связь между MATLAB и Arduino

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

Внешний вид проекта для осуществления последовательной связи между MATLAB и Arduino

Существует два основных способа использования последовательной связи в MATLAB – с помощью окна команд (этот способ мы использовали в проекте управления сервомотором с помощью MATLAB) и с помощью MATLAB GUI (Graphical User Interface — графический интерфейс пользователя). Код программы для платы Arduino в обоих случаях будет одинаков. Если вы начинающий в этой тематике, то сначала рекомендуем прочитать статью о мигании светодиодом с помощью MATLAB и Arduino.

Необходимые компоненты

  1. Плата Arduino Uno.
  2. Установленная на компьютер математическая система MATLAB (предпочтительно версии R2016a или выше).
  3. Светодиод (любого цвета).
  4. Резистор 330 Ом.

Схема проекта

Схема проекта для последовательной связи между MATLAB и Arduino представлена на следующем рисунке.

Схема проекта для последовательной связи между MATLAB и ArduinoВнешний вид собранной на макетной плате конструкции проекта показан на следующем рисунке.

Внешний вид собранной на макетной плате конструкции проекта

Последовательная связь в MATLAB с помощью окна команд

Это самый простой способ установления последовательной связи между MATLAB и Arduino. В нем мы просто передаем данные из MATLAB в Arduino последовательно используя окно команд (command window), а затем плата Arduino считывает поступающие последовательные данные. Затем эти последовательно передаваемые данные можно использовать можно использовать для управления каким либо устройством, подключенным к Arduino – в этом проекте мы использовали для этой цели светодиод, который мы будем включать и выключать в зависимости от поступающих последовательных данных.

В этом случае загрузите в плату Arduino код программы, приведенный в конце статьи и можете начинать программирование в окне редактирования (Editor Window) в MATLAB. Чтобы открыть окно для нового скрипта нажмите на ‘New Script’ как показано на следующем рисунке.

Создание нового скрипта в MATLAB

Затем вставьте в окно редактирования следующий код программы (он служит для осуществления последовательной связи между MATLAB и Arduino):

Код программы для осуществления последовательной связи между MATLAB и Arduino

В представленном коде программы команда

используется для установления последовательной связи в MATLAB. Убедитесь в том, что в ней записан именно тот номер COM порта компьютера, к которому подключена плата Arduino. Скорость передачи необходимо установить такую же как и в плате Arduino.

Чтобы открыть последовательный код используется команда

Следующая команда используется для передачи данных от MATLAB в плату Arduino последовательно, где x – это вызов последовательного порта, а a – это значение, которое вводит пользователь.

Мы будем использовать функцию while для создания бесконечного цикла, выход из него будет осуществляться если пользователь введет цифру ‘2’.

После того как вы запишите весь текст этого скрипта нажмите на кнопку ‘RUN’ чтобы запустить его на выполнение.

Запуск на выполнение .m файла в Matlab

Системе MATLAB может потребоваться несколько секунд на запуск этого скрипта, не предпринимайте в это время никаких действий — до тех пор пока горит индикация BUSY (система занята) в левом нижнем углу экрана.

Ждем пока Matlab выполняет код файла

После запуска скрипта вы увидите окно команд, где пользователь может осуществлять ввод информации – вы увидите там приветственное сообщение, запрограммированное в рассмотренном нами скрипте.

Приветственное сообщение по умолчанию в нашем скрипте

Введите ‘1’ чтобы включить светодиод, ‘0’ – чтобы выключить светодиод и ‘2’ чтобы завершить работу программы (скрипта). Вы можете использовать и любые другие символы для этого – но в этом случае необходимо будет изменить и код программы для платы Arduino (приведен в конце статьи).

Вид сообщений в окне команд для нашего проекта

Более подробно все эти процессы показаны на следующем видео.

Последовательная связь в MATLAB с использованием графического интерфейса

Для демонстрации возможностей последовательной связи в MATLAB с использованием графического интерфейса пользователя (MATLAB GUI) мы создадим в системе MATLAB две графические кнопки для включения и выключения светодиода, подключенного к плате Arduino. При нажатии этих кнопок данные будут передаваться последовательно от MATLAB к Arduino. Плата Arduino в зависимости от принятых данных будет включать или выключать светодиод. Код программы для платы Arduino будет такой же как и в предыдущем случае. Отличие будет состоять лишь в том, что в предыдущем случае мы вводили символы ‘1’ и ‘0’ в окне команд, а в этом случае они будут передаваться по последовательному каналу связи при нажатии графических кнопок.

Чтобы в MATLAB запустить графический интерфейс пользователя (GUI — Graphical User Interface) напечатайте в окне команд:

Откроется новое всплывающее окно, в нем выберите новый blank GUI как показано на следующем рисунке.

Запуск редактора графического интерфейса в MATLAB

После этого поместите на рабочее поле редактора две кнопки для включения и выключения светодиода как показано на рисунке ниже.

Создание двух кнопок в редакторе графического интерфейса MATLAB

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

Окно для изменения настроек кнопки

Мы кастомизировали (придали им облик) эти две кнопки следующим образом:

Внешний вид наших кнопок для рассматриваемого проекта

Вы можете оформить (кастомизировать) их по своему выбору. Когда вы сохраните этот созданный в графическом интерфейсе пользователя проект для него в окне редактирования MATLAB автоматически сгенерируется соответствующий код. В дальнейшем мы будем вносить изменения в этот код чтобы управлять включением/выключением светодиода из системы MATLAB.

Объяснение кода программы в MATLAB для осуществления последовательной связи

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Для данного проекта вы можете скачать готовые файл GUI (.fig) и файл с кодом программы (.m) (правый клик мышкой и выбирайте «сохранить объект как») и изменить их по своему усмотрению.

Скопируйте следующие строки и вставьте их в программу начиная со строки №74 чтобы установить последовательную связь с заданной скоростью.

Код программы для инициализации последовательной связи в MATLAB

Функция fopen(x) в представленном фрагменте кода используется для открытия последовательного порта связи.

Далее в коде программы, созданном с помощью графического интерфейса, вы увидите две функции, созданные для обработки нажатий на две созданные кнопки. Теперь вам в эти функции необходимо дописать необходимый код.

В функцию для включения светодиода (LED-ON button’s function) скопируйте следующий приведенный фрагмент кода. В этом фрагменте кода функция fprintf(x,1) используется для передачи символа ‘1’ по последовательному каналу связи в плату Arduino. Если вы посмотрите код программы для платы Arduino, то вы увидите что при приеме ‘1’ по последовательному каналу связи она подает напряжение высокого уровня (HIGH) на свой 13-й контакт, то есть включает встроенный в плату светодиод.

Код программы Matlab для передачи символа ‘1’ по последовательному каналу связи

В функцию для выключения светодиода (LED-OFF button’s function) скопируйте следующий приведенный фрагмент кода. В этом фрагменте кода функция fprintf(x,0) используется для передачи символа ‘0’ по последовательному каналу связи в плату Arduino. Если вы посмотрите код программы для платы Arduino, то вы увидите что при приеме ‘0’ по последовательному каналу связи она подает напряжение низкого уровня (LOW) на свой 13-й контакт, то есть выключает встроенный в плату светодиод.

Код программы Matlab для передачи символа ‘0’ по последовательному каналу связи

После завершения внесения изменений в программу (в .m файл) нажмите кнопку для ее запуска.

Запуск на выполнение .m файла в Matlab

Системе MATLAB может потребоваться несколько секунд на запуск этого файла, не нажимайте никакую кнопку на графическом интерфейсе до тех пор пока горит индикация BUSY (система занята) в левом нижнем углу экрана.

Ждем пока Matlab выполняет код файла

После успешного запуска программы вы можете нажимать созданные кнопки чтобы включать и выключать светодиод на плате Arduino (он подключен к ее 13-му контакту).

Исходный код программ

Код программы для Arduino

Код программы для MATLAB

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
25 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *