цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и MATLAB: последовательная связь

Автор: Mike(admin) от 30-11-2018, 03:55

Передача данных из MATLAB в Arduino


MATLAB – это универсальное программное обеспечение, которое может использоваться для самых разных приложений. Ardiono также можно использовать вместе с MATLAB, и в материале «Arduino и MATLAB: простой пример мигания светодиодом» мы показали простой пример этого взаимодействия.


Arduino и MATLAB: последовательная связь

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


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


Arduino и MATLAB: последовательная связь

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


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


Сначала загрузите приведенный в конце материала код в Arduino, а затем запустите кодирование в окне редактора MATLAB. Чтобы открыть новый скрипт редактора, нажмите «New Script», как показано ниже.


Arduino и MATLAB: последовательная связь

Затем скопируйте и вставьте ниже полный код MATLAB в окне редактора для последовательной связи между MATLAB и Arduino.



x=serial('COM18','BAUD', 9600);

fopen(x);
go = true;

while go
                 
a= input('Press 1 to turn ON LED & 0 to turn OFF:');
fprintf(x,a);  

if (a == 2)
  go=false;
end
end

Arduino и MATLAB: последовательная связь

В данном коде команда x=serial('COM18','BAUD', 9600) используется для определения последовательной связи в MATLAB. Убедитесь, что номер com-порта – это номер порта, к которому подключен Arduino, и скорость передачи данных должна быть одинаковой в обоих кодах Arduino и MATLAB. Чтобы открыть последовательный порт, используйте команду fopen(x). Команда fprintf(x,a) используется для отправки данных из MATLAB в Arduino поочередно, где параметр «x» нужен для вызова последовательного порта, а «a» – значение, введенное пользователем. В программе есть функция while для создания бесконечного цикла, и всякий раз, когда пользователь вводит число «2», цикл прерывается. После завершения написания программы сценария в редакторе MATLAB нажмите «RUN», чтобы запустить вашу программу, как показано ниже.


Arduino и MATLAB: последовательная связь

MATLAB займет несколько секунд для обработки кода и запустит последовательную связь, дождитесь, пока MATLAB покажет сообщение «BUSY» в левом нижнем углу экрана программного обеспечения, как показано на рисунке ниже.


Arduino и MATLAB: последовательная связь

Теперь вы увидите окно команд для отправки пользовательского ввода, мы установили сообщение по умолчанию «Press 1 to turn ON LED & 0 to turn OFF:» (Нажмите 1 для включения светодиода и 0 для отключения).


Arduino и MATLAB: последовательная связь

Вы можете установить любой номер для любой задачи, все, что вам нужно сделать, это просто изменить код Arduino. Полный код Arduino приводится в конце.


Arduino и MATLAB: последовательная связь

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


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


Чтобы запустить графический интерфейс, введите в окне команд слово «guide». Откроется всплывающее окно, затем выберите новый пустой графический интерфейс, как показано на рисунке ниже.


Arduino и MATLAB: последовательная связь

Теперь выберите две кнопки для включения и выключения светодиода, как показано ниже.


Arduino и MATLAB: последовательная связь

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


Arduino и MATLAB: последовательная связь

Arduino и MATLAB: последовательная связь

Вы можете настроить кнопки по вашему выбору. Теперь, когда вы сохраните это, в окне редактора MATLAB будет создан код. Отредактируйте этот код в соответствии с задачей, которую вы хотите выполнить с помощью Arduino, используя графический интерфейс MATLAB. Полный код MATLAB для установления последовательной связи между MATLAB и Arduino приведен в конце этого проекта. Далее мы включаем файл GUI (.fig) и файл кода (.m) для загрузки (щелкните правой кнопкой мыши по ссылке, затем выберите «Save link as...»), используя которую вы можете настроить кнопки в соответствии с вашими требованиями. Ниже приведены некоторые настройки, которые мы сделали для управления светодиодом, подключенным к Arduino.


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



clear all;
global x;
x=serial('COM18','BAUD', 9600);
fopen(x);

Arduino и MATLAB: последовательная связь

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


В функции кнопки LED-ON скопируйте и вставьте приведенный ниже код непосредственно перед завершением функции, чтобы включить светодиод. Как видно из приведенного ниже кода, fprintf (x, 1) используется для отправки последовательных данных из MATLAB в последовательный порт Arduino. Здесь мы отправляем «1» в порт Arduino, и если вы проверите код Arduino, вы обнаружите, что Arduino будет включать светодиод, переведя свой 13-й вывод в высокий логический уровень, когда он получит «1» в своем последовательном порту.


Arduino и MATLAB: последовательная связь

Аналогично будет и с кнопкой LED-OFF, только в этом случае будет отправлен «0», благодаря чему светодиод будет выключен.


Arduino и MATLAB: последовательная связь

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


Arduino и MATLAB: последовательная связь

MATLAB может потребовать несколько секунд времени на обработку, не нажимайте ни на какую кнопку, пока MATLAB не отобразит BUSY, что вы можете увидеть в левом нижнем углу экрана, как показано ниже.


Arduino и MATLAB: последовательная связь

Когда все будет готово, нажмите кнопку LED-ON или LED-OFF, чтобы включить или выключить светодиод. Полный код для Arduino и код для MATLAB представлены ниже.



// Код для Arduino
int value;

void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop()
{
  if(Serial.available()>0)
  {
    value=Serial.read();

    if  (value == 1)           
    { 
    digitalWrite(13, HIGH);
    }
    if(value == 0)         
    { 
    digitalWrite(13, LOW);
    }
  }
}




function varargout = final(varargin)

gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @final_OpeningFcn, ...
                   'gui_OutputFcn',  @final_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

handles.output = hObject;

guidata(hObject, handles);

function varargout = final_OutputFcn(hObject, eventdata, handles) 

varargout{1} = handles.output;
clear all;
global x;
x=serial('COM18','BAUD', 9600);

fopen(x);

function turnonled_Callback(hObject, eventdata, handles)

global x;
fprintf(x,1);

function turnoffled_Callback(hObject, eventdata, handles)

global x;
fprintf(x,0);



© digitrode.ru


Теги: Arduino, MATLAB



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий