Hi-Tech Arduino Компьютеры Интернет
HV-Lab Reference Linux Форум
Справочники Libraries Windows Галерея
Электроника Hardware Hardware Загрузки
Печатные платы Forum Программирование Мини-чат
[ Февр 26, 07:42 ] admin: Форум перешел в разряд архивного.
[ Февр 24, 19:02 ] admin: переехали на новый сервер. Грядут перемены.
[ Фев 20, 08:38 ] кулибин: Переход на SSL был непрост (особенно с абсолютными путями на изображения, но мы его осуществили)
RSS статьи
 
Статьи

Статьи->Arduino-> Arduino и MATLAB [ Поиск ]

Arduino и MATLAB - сопряжение математического пакета со внешним устройством
Отправил: кулибин, Понедельник, 30 Января 2012 17:17

 

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

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

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

  1. Программирование на интерпретированном языке программирования MATLAB. Пишутся программы, выполняются, получается результат;

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

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

В обычной практике Arduino как только не используется :) А вот совместно с MATLAB, несмотря даже на официальную поддержку MathWorks, не применяется. Исправим данную ситуацию.

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

  1. Подключить Arduino к MATLAB и получить возможность из командной строки управлять платой

  2. Подключить 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,'b-- LOCKs'),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

arduino serial host work

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

Вуаля! Задача решена.

В файле b-- LOCKs\arduino_lib.mdl есть все возможные блоки для работы.

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

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

Артем Кашканов

 

 

Голосов Голосов: 6 - В среднем: 5

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

Статистика
Всего 205 статей в базе
Наиболее просматриваемые: Arduino и сеть RS485.
Лучшие по оценкам: РЦВМ1 - Релейная Цифровая Вычислительная Машина

Пользователи в разделе статьи: 2 (0 Пользователи 2 Гости и 0 Скрытые пользователи)
Видимые пользователи:


 
 

MKPortal©2003-2008 mkportal.it
MultiBoard ©2007-2009 RusMKPortal
Страница сгенерированна за 0.03172 секунд с 24 обращениями в базу данных

Intel Core i5-3450 2Gb RAM 100Gb HDD 100Mbps Ethernet

© Artem Kashkanov 2005-2016