В настоящее время Bluetooth является самым простым и наиболее популярным протоколом для беспроводной связи во встраиваемых системах небольшого радиуса действия. При этом его можно использовать не только для передачи данных, но и для беспроводного управления каким-либо устройством.
В этой статье мы рассмотрим как использовать протокол Bluetooth в математической системе MATLAB. Для беспроводной связи мы будем использовать компьютер со встроенным модулем Bluetooth и установленной системой MATLAB с одной стороны и плату Arduino с подключенным к ней модулем HC-05 с другой стороны. Существует два способа осуществления беспроводной связи между MATLAB и Arduino с помощью протокола Bluetooth: первый – с использованием окна команд, а второй – с использованием MATLAB GUI (графического интерфейса пользователя). Код программы для Arduino для обоих случаев будет одинаковый. Если вы начинающий в MATLAB, то вначале рекомендуем вам изучить статью про мигание светодиодом с помощью MATLAB и Arduino.
Вы также посмотреть следующие проекты на нашем сайте, в которых используется математическая система MATLAB:
- последовательная связь между MATLAB и Arduino;
- управление двигателем постоянного тока с помощью MATLAB и Arduino;
- управление серводвигателем с помощью MATLAB и Arduino;
- управление шаговым двигателем с помощью MATLAB и Arduino.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Установленная на компьютер математическая система MATLAB (предпочтительно версии R2016a или выше).
- Bluetooth модуль (HC-05) (купить на AliExpress).
- Светодиод (любого цвета) (купить на AliExpress).
- Резистор 330 Ом (купить на AliExpress).
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема проекта для беспроводной связи между MATLAB и Arduino с помощью Bluetooth представлена на следующем рисунке.
Связь по протоколу Bluetooth в MATLAB с помощью окна команд
В этом режиме MATLAB использует модуль Bluetooth компьютера для связи с модулем HC-05 подключенным к Arduino. Сначала рассмотрим код программы для Arduino чтобы принимать последовательные данные от MATLAB. Загрузите этот представленный код программы в плату Arduino и только после этого приступайте к программированию в окне команд MATLAB.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <SoftwareSerial.h> int TxD; int RxD; int data; SoftwareSerial bluetooth(TxD, RxD); void setup() { Serial.begin(9600); bluetooth.begin(9600); } void loop() { if(bluetooth.available() > 0) { data = bluetooth.read(); Serial.print(data); Serial.print("\n"); if(data == '1') { digitalWrite(11, HIGH); } else if(data == '0') { digitalWrite(11, LOW); } } } |
Затем скопируйте и вставьте в окно команд (Command window) следующий код для взаимодействия по протоколу Bluetooth между MATLAB и Arduino.
1 2 3 |
instrhwinfo('Bluetooth','HC-05'); bt = Bluetooth('HC-05', 1); fopen(bt); |
Далее мы будем использовать команду вида fprintf(bt,‘0’) чтобы включать и выключать светодиод подключенный к плате Arduino. Если вы хотите включить светодиод, то вам необходимо передать ‘1’, если вы хотите выключить светодиод, то вам необходимо передать ‘0’.
1 |
fprintf(bt,'1'); |
Если вы хотите получить информацию о доступном аппаратном обеспечении в компьютере, используйте следующую команду:
1 |
instrhwinfo('type','Name of device'); |
Чтобы открыть bluetooth порт используется команда:
1 |
fopen(bt); |
Более подробно все эти процессы показаны в следующем видео.
Связь по протоколу Bluetooth в MATLAB с помощью GUI
Для демонстрации возможностей MATLAB по связи с помощью протоколу Bluetooth мы в графическом интерфейсе пользователя MATLAB (MATLAB GUI) создадим три графические кнопки для включения, выключения и мигания светодиода подключенного к плате Arduino. При нажатии одной из этих кнопок данные будут передаваться с помощью Bluetooth от MATLAB к модулю HC-05. Код программы для Arduino содержит команды для приема этих передаваемых по Bluetooth данных и управления светодиодом на основе этих данных. Код для платы Arduino в этом случае будет такой же как и в предыдущем рассмотренном случае (управление из окна команд), но отличие будет заключаться в том, что в предыдущем случае мы передавали ‘1’ и ‘0’ из окна команд MATLAB, теперь же эти данные будут передаваться при нажатии на графические кнопки.
Чтобы в MATLAB запустить графический интерфейс пользователя (GUI - Graphical User Interface) напечатайте в окне команд:
1 |
guide |
Откроется новое всплывающее окно, в нем выберите новый blank GUI как показано на следующем рисунке.
После этого поместите на рабочее поле редактора три кнопки для включения, выключения и мигания светодиода как показано на рисунке ниже.
Чтобы изменить размер или форму кнопки нажмите на нее один раз. После двойного нажатия на кнопку вы сможете изменить ее цвет, подпись и метку.
Мы кастомизировали (придали им облик) эти три кнопки следующим образом:
Вы можете оформить (кастомизировать) их по своему выбору. Когда вы сохраните этот созданный в графическом интерфейсе пользователя проект в окне редактирования MATLAB автоматически сгенерируется соответствующий код. В дальнейшем мы будем вносить изменения в этот код чтобы управлять включением/выключением светодиода из системы MATLAB по Bluetooth.
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Вы можете скачать готовые файл GUI (.fig) и файл с кодом программы (.m) и изменить их по своему усмотрению.
Скопируйте следующие строки и вставьте их в программу начиная со строки №74 чтобы задействовать из MATLAB Bluetooth связь компьютера.
1 2 3 4 5 |
clear All; global bt; instrhwinfo('Bluetooth','HC-05'); bt = Bluetooth('HC-05', 1); fopen(bt); |
В представленном фрагменте кода функция fopen(bt) используется для открытия Bluetooth порта для передачи данных.
Далее в коде программы, созданном с помощью графического интерфейса, вы видите три функции, созданные для обработки нажатий на три созданные кнопки. Теперь вам в эти функции необходимо дописать необходимый код.
В функцию для включения светодиода (LED-ON button’s function) скопируйте следующий приведенный фрагмент кода. В этом фрагменте кода функция fprintf(bt,‘1’) используется для передачи ‘1’ из MATLAB в модуль HC-05 с помощью возможностей Bluetooth связи компьютера. Плата Arduino будет принимать эту ‘1’ при помощи модуля HC-05 и зажигать светодиод при помощи подачи на 11-й контакт напряжения высокого уровня (HIGH).
1 2 |
global bt; fprintf(bt,'1'); |
В функцию для выключения светодиода (LED OFF button’s function) скопируйте следующий приведенный фрагмент кода. В этом фрагменте кода функция fprintf(bt,‘0’) используется для передачи ‘0’ из MATLAB в модуль HC-05 с помощью возможностей Bluetooth связи компьютера. Плата Arduino будет принимать этот ‘0’ при помощи модуля HC-05 и выключать светодиод при помощи подачи на 11-й контакт напряжения низкого уровня (LOW).
1 2 |
global bt; fprintf(bt,'0'); |
В функцию для мигания светодиода (BLINK button’s function) скопируйте следующий приведенный фрагмент кода. В нем цикл типа for используется для мигания светодиодом 10 раз.
1 2 3 4 5 6 7 |
global bt; for i = 1:10 fprintf(bt,'1'); pause(0.5); fprintf(bt,'0'); pause(0.5); end |
После завершения внесения изменений в программу (в .m файл) нажмите кнопку для ее запуска.
Системе MATLAB может потребоваться несколько секунд на запуск этого файла, не нажимайте никакую кнопку на графическом интерфейсе до тех пор пока горит индикация BUSY (система занята) в левом нижнем углу экрана.
После успешного запуска программы вы можете нажимать на кнопки LED-ON, LED OFF и BLINK чтобы включать, выключать и мигать светодиодом соответственно. Все файлы программ для этого проекта мы можете скачать по этой ссылке или вы можете взять их непосредственно из этой статьи.
Более подробно все описанные процессы показаны на видео, приведенном в конце статьи.
Исходные коды программ
Код программы для Arduino
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <SoftwareSerial.h> int TxD; int RxD; int data; SoftwareSerial bluetooth(TxD, RxD); void setup() { Serial.begin(9600); bluetooth.begin(9600); } void loop() { if(bluetooth.available() > 0) { data = bluetooth.read(); if(data == '1') digitalWrite(11, HIGH); else if(data == '0') digitalWrite(11, LOW); } } |
Код программы для связи по протоколу Bluetooth в MATLAB с помощью окна команд
1 2 3 4 5 6 7 8 9 |
instrhwinfo('Bluetooth','HC-05'); bt = Bluetooth('HC-05', 1); fopen(bt); fprintf(bt,'1'); fprintf(bt,'0'); |
Код программы для связи по протоколу Bluetooth в MATLAB с помощью GUI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @bluetooth_with_MATLAB_OpeningFcn, ... 'gui_OutputFcn', @bluetooth_with_MATLAB_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 function bluetooth_with_MATLAB_OpeningFcn(hObject, eventdata, handles, varargin) function varargout = bluetooth_with_MATLAB_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; clear All; global bt; instrhwinfo('Bluetooth','HC-05'); bt = Bluetooth('HC-05', 1); fopen(bt); function led_on_Callback(hObject, eventdata, handles) global bt; fprintf(bt,'1'); function led_off_Callback(hObject, eventdata, handles) global bt; fprintf(bt,'0'); function blink_Callback(hObject, eventdata, handles) global bt; for i = 1:10 fprintf(bt,'1'); pause(0.5); fprintf(bt,'0'); pause(0.5); end |