Подключаем Arduino к MATLAB


Сегодня мы поговорим о том, как подключить пакет MATLAB к плате Arduino.

MATLAB — это очень мощный пакет символьных вычислений. С его помощью можно производить математическое моделирование, производить различные математические вычисления и прочее и прочее и прочее.

В обычной практике, MATLAB используется в двух вариантах:

* Программирование на интерпретированном языке программирования MATLAB. Пишутся программы, выполняются, получается результат;
* Использование графического пакета моделирования MATLAB SIMULINK — составляются блок-схемы, моделируются, получается результат.

И все это выполняется исключительно на компьютере, без привлечения внешних модулей. При этом, MATLAB поддерживает как возможность связи со внешними устройствами через комминукационные порты, так и трансляцию в высокоуровневые языки программирования (C и C++) с их последующей компиляцией под любую возможную архитектуру, будь то ARM, AVR, процессоры цифровой обработки сигналов и прочее, лишь бы в системе был установлен требуемый компилятор/кросс-компилятор.

Суть заключается в следующем — в продаже имеются специальные платы, которые позволяют подключить в MATLAB какое-то реально устройство и управлять/следить за ним. Платы эти весьма дороги, так почему бы это не отдать под контроль плате Arduino? Она проста как валенок, к ней просто подключить всякие разности, да и список возможных разностей внушителен. Поставим две задачи:

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

Часть 1. Подключение Arduino к MATLAB

Официальная страница: http://www.mathworks.com/academia/arduino-software/arduino-matlab.html

требуются:
MATLAB (R2008a) or later

Для этого скачиваем пакет ArduinoIO с официального сайта MathWorks:
http://www.mathworks.com/matlabcentral/fileexchange/32374

Распаковываем пакет в укромное местечко на компьютере, например в
c:\arduinoIO
переходим в эту папку:
>>cd c:\arduinoIO
и выполняем команды:
>>install_arduino
>>savepath

первая произведет установку путей, вторая их сохранит.
Далее, необходимо подготовить саму плату — необходимо залить в нее прошивку-ретранслятор. Ее задача принимать команды из порта и выполнять их в железе. Вариантов такого сервера несколько. Один вариант поддерживает только функции работы с аналоговыми и цифровыми портами, другой — еще и шаговые двигатели. Для последнего требуется специальная библиотека, которую можно взять здесь:
https://github.com/adafruit/Adafruit-Motor-Shield-library/zipball/master
Ее требуется распаковать в папку Arduino-XXX/libraries/
Открываем файл adiosrv.pde или srv.pde из среды Arduino и прошиваем.
Подготовка завершена!

Возвращаемся в консоль MATLAB и создаем новый объект:
>> a=arduino(‘COM4’)

Attempting connection ……..
Basic I/O Script detected !
Arduino successfully connected !

a =

arduino object connected to COM4 port
IO Server running on the arduino board
Digital Pin 02 is currently UNASSIGNED
Digital Pin 03 is currently UNASSIGNED
Digital Pin 04 is currently UNASSIGNED
Digital Pin 05 is currently UNASSIGNED
Digital Pin 06 is currently UNASSIGNED
Digital Pin 07 is currently UNASSIGNED
Digital Pin 08 is currently UNASSIGNED
Digital Pin 09 is currently UNASSIGNED
Digital Pin 10 is currently UNASSIGNED
Digital Pin 11 is currently UNASSIGNED
Digital Pin 12 is currently UNASSIGNED
Digital Pin 13 is currently UNASSIGNED
Digital Pin 14 is currently UNASSIGNED
Digital Pin 15 is currently UNASSIGNED
Digital Pin 16 is currently UNASSIGNED
Digital Pin 17 is currently UNASSIGNED
Digital Pin 18 is currently UNASSIGNED
Digital Pin 19 is currently UNASSIGNED
Pin IO Methods: pinMode digitalRead digitalWrite analogRead analogWrite

Подключились!
Теперь нам доступны выделенные команды.
Пробуем:
>>a.pinMode(13,’OUTPUT’)
>>a.digitalWrite(13,HIGH)

И на плате загорается светодиод. Дело сделано. Пробуем прочитать данные с аналогового входа:
>> foo=a.analogRead(1)
foo =
204

Разумеется, что одновременно могут работать несколько плат, ведь для каждой из них создается свой, уникальный объект. Для нашего случая этот объект называется ‘a’

Часть 2. Подключение Arduino к SIMULINK

официальная страница: http://www.mathworks.com/academia/arduino-software/arduino-simulink.html
Требуются:
MATLAB (R2010a or later)
Simulink
Simulink Coder
Embedded Coder

Здесь все чуток посложнее, поскольку требуется сделать гораздо большее количество движений
Скачиваем пакет Simulink Support Package for Arduino
http://www.mathworks.com/matlabcentral/fileexchange/30277
и распаковываем его в тихое место, например в
c:\arduino_simulink
также скачиваем среду Arduino IDE и распаковываем ее, к примеру, в
c:\ArduinoTarget
Выполняем следующие команды для добавления путей:
>> cd c:\arduino_simulink
>> addpath(fullfile(pwd,’arduino’),fullfile(pwd,’blocks’),fullfile(pwd,’demos’))
>> savepath

Далее, обновляем кастомизации:
>> sl_refresh_customizations
Подключаем плату Arduino к компьютеру. Прошивать ее чем-либо не требуется.
Указываем путь к среде arduino
>>arduino.Prefs.setArduinoPath(‘c:\ArduinoTarget’)
И определяем текущую платформу командой
>> arduino.Prefs.setBoard(‘mega’)
Список всех доступных платформ выводится командой
>> arduino.Prefs.setBoard
Specify one of the following board labels:
‘uno’ (Arduino Uno)
‘atmega328’ (Arduino Duemilanove or Nano w/ ATmega328)
‘diecimila’ (Arduino Diecimila, Duemilanove, or Nano w/ ATmega168)
‘mega2560’ (Arduino Mega 2560)
‘mega’ (Arduino Mega (ATmega1280))
‘mini’ (Arduino Mini)
‘fio’ (Arduino Fio)
‘bt328’ (Arduino BT w/ ATmega328)
‘bt’ (Arduino BT w/ ATmega168)
‘lilypad328’ (LilyPad Arduino w/ ATmega328)
‘lilypad’ (LilyPad Arduino w/ ATmega168)
‘pro5v328’ (Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328)
‘pro5v’ (Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168)
‘pro328’ (Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328)
‘pro’ (Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168)
‘atmega168’ (Arduino NG or older w/ ATmega168)
‘atmega8’ (Arduino NG or older w/ Atmega8)

Проверяем доступные порты:
>> comPorts=arduino.Prefs.searchForComPort

comPorts =
‘COM4’

И подключаемся к нему:
>> arduino.Prefs.setComPort(‘COM4’);
Готово!
Теперь можно запустить имеющиеся в комплекте примеры:

>> demo_arduino_blink

Кнопка запуска не даст абсолютно ничего, а вот комбинация Ctrl+B либо меню Tools>>Code generation>>Build Model запустят кросс-компилятор и программирование платы.
Весь процесс будет отображаться в консоли MATLAB. При успешном завершении, там должны появиться строки
avrdude: successfully opened stk500v1 device — please use -c stk500v1
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.02s
avrdude: Device signature = 0x1e9703
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file «demo_arduino_blink.hex»
avrdude: input file demo_arduino_blink.hex auto detected as Intel Hex
avrdude: writing flash (16856 bytes):
Writing | ################################################## | 100% 5.26s
avrdude: 16856 bytes of flash written
avrdude done. Thank you.
### Successful completion of build procedure for model: demo_arduino_blink

И светодиод начинает радостно моргать.
Далее, попробуем зашить интерактивную прошивку.

>>demo_arduino_serial_communication


Здесь мы видим два основных потока — передачи данных из последовательного порта на ножку и приема данных с аналогового порта в последовательный порт. Зашиваем в контроллер командой Ctrl+B

Открываем двойным щелчком субмодуль Launch host side

И запускаем его комбинацией Ctrl+T

http://www.youtube.com/watch?v=CzO5rq8sEUU

По параметрам этих блоков можно сказать, что simulink поддерживает до 4 плат arduino одновременно

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

Артем Кашканов
http://rln.nnov.ru/index.php?ind=reviews&op=entry_view&iden=246


0 комментариев на «“Подключаем Arduino к MATLAB”»

  1. Вот здесь вылетает ошибка:
    arduino.Prefs.setBoard(‘mega’)
    ??? Reference to non-existent element of a cell array.

    Error in ==> Prefs>Prefs.parseBoardsFile at 227
    lhs = parsedLines{i}{1}{1}; % can be of the form xx.yy.zz

    Error in ==> Prefs>Prefs.setBoard at 66
    boards = arduino.Prefs.parseBoardsFile(boardsFile);

    Матлаб R2011a, плата uno с мегой 328

    • Так и устанавливайте Uno! А ваша строка выбирает плату Arduino Mega

    • Uno ставил, результат тот же. arduino.Prefs.setBoard — эта команда не работает, выдает ту же ошибку.

    • согласен… у меня аналогично. мне кажется тут дело в имени файла, отвечающего за драйвер уно… если нет — поправьте меня…

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

    • О, мерси за оценку моих трудов! Статья не копипаст а перевод!

  3. ну а для денилсона я нашел решение… оно кроится в оригинальной версии этого мануала… все дело в том, что это писалось для проги версии Arduino 0022 (офф сайт ардуино.сс)…(когда еще в моде был Дьюмилановэ)… установив это старье — все заработает!

    • Эту ошибку я уже устранил по совету с mathworks.at/matlabcentral/fileexchange/30277, т.е. удалил строки в boards.txt с 145 по 181. Правда последний этап (Ctrl+B) пока не работает, выдает ошибку. Там же, кстати, один из пользователей говорил, что проблемы устранены с установлением версии Arduino 1.0.2. Попробую поставить. Ну, и старье за одно)

  4. Ну за оценку я, конечно, погорячился… просто вчера шаманил над матлабом и ардуинами… немного нервы сдавали)) ну а за идеи — огромное спасибо!

  5. Добрый день. подскажите пожалуйста
    при >>arduino.Prefs.setArduinoPath(‘c:\путь к среде’) выходит следующая ошибка на матлабе
    The class arduino has no property or method named ‘Prefs’.
    что это значит и как решить?

  6. Всем доброго времени сток!!!
    Есть проблема — помогите справиться.
    Нужно срочно подключить датчик вибрации через плату ардуино к ноутбуку так, чтобы можно было записывать данные.
    Скачали с сайта архив с m-файлами для подключения платы. Вроде плата определилась, но далее не понятно что нужно сделать, чтобы сигнал с датчика воспринимался в матлаб. Пишет используйте COM5, но при подключении датчика в этот разъём ничего не происходит.
    Датчик рабочий, т.к. через программку ардуино сигнал виден, но не понятно как его записать и синхронизировать поток данных со временем.
    Подскажите, пожалуйста, самый простой, ламерский способ записи данных!!!

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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение