Перевод поста Leonardo Laguna Ruiz и Johan Rhodin "Using Arduinos as SystemModeler Components".
Скачать файл с моделями, рассмотренными в посте, можно здесь здесь.
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.

С помощью новой бесплатной библиотеки ModelPlug library для Wolfram SystemModeler можно подключать Arduino для моделирования в SystemModeler. Arduino легко сопрягаются с компонентами входа и выхода, так что смело можно включать их в модели SystemModeler чтобы управлять, скажем, лампочками, датчиками, переключателями, запускать сервоприводы и тому подобное. С помощью библиотеки ModelPlug можно свободно совмещать программные и аппаратные компоненты в моделировании и использовать Arduino как плату для сбора данных.

Set of icons

После загрузки библиотеки из SystemModeler Library Store следует её установить; всё, что потребуется — дважды кликнуть по пакету и принять лицензионное соглашение. С этой библиотекой можно подключать любые Firmata-совместимые платы к SystemModeler. То есть любые платы Arduino.

В этом посте я использовал Arduino Uno. Простейший пример, который я смог придумать — мигание светодиода, который находится на плате.

Arduino board
Встроенный светодиод Arduino Uno выделен красным

Чтобы это сделать, я создал простую модель, в которой логический сигнал передаётся на 13-й контакт, который соответствует светодиоду. Частота мигания светодиода соответствует частоте сигнала.

Blinking an LED
Модель в SystemModeler, которая использует компоненты ModelPlug — цифровой контакт и Arduino

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

Placing LED on breadboard
Схема подключения внешнего светодиода к девятому контакту Arduino Uno

Если подсоединить синусоиду к аналоговому выходу платы, то сигнал из действительных значений конвертируется в напряжение, которое необходимо подавать на контакт светодиода.

Dimming LED
Синусоида в качестве входного сигнала светодиода

Можно увидеть, как светодиод то светит в полную яркость, то не светит вообще, изменяя яркость по синусоиде. И всё это не требует никакого «кодинга под Arduino».

На изображении ниже приведены четыре разных варианта: в первом мы подсоединяем смоделированный вход к смоделированному выходу, во втором сигнал от модели подсоединён к аппаратной части (как было показано в двух предыдущих примерах), в третьем сигнал от аппаратной части подсоединён к модели, в четвёртом — все составляющие — аппаратные.

Simulated vs. real

Ниже в таблице я привёл четыре варианта.

Grid
Для каждого варианта весьма полезной будет библиотека ModelPlug

Первый вариант, когда на входе и выходе — модели, применим сразу после установки SystemModeler, и в большинстве случаев — это всё, что нужно. Вот почему я не выделил его в таблице. Если на входе и выходе аппаратные компоненты, то ими можно управлять и обрабатывать/фильтровать сигналы через SystemModeler. На мой взгляд, самый интересный вариант — когда некоторые составляющие симулируются, а другие представлены в физическом воплощении. Рассмотрим несколько примеров, где компоненты симулируются, а данные поступают от физических устройств.

Input devices and simulated model

Тут я настроил свою плату Uno считывать данные с 14-го контакта. Я подключил светочувствительный резистор, который будет определять освещённость.

Light-dependent resistor
Плата Uno с фоторезистором, подключённым к аналоговому входу

В моей модели в SystemModeler я подключаю этот аналоговый сигнал с 14-го контакта к другому компоненту.

Connect analog signal to another component

Этот компонент будет получать значения от светочувствительного резистора и сравнивать их с пороговым значением. Если значение будет больше, чем 0.02 и время симуляции превысит 5 секунд, то симуляция завершится.

terminateSimulation
Сравнение значения освещенности с пороговым, результат — ответ на вопрос — завершится ли симуляция?

Если я ненадолго закрою рукой светочувствительный резистор, то он перестанет получать свет, значение станет меньше, чем 0.02 и симуляция закончится.

Вот пример, когда на входе и выходе представлены физические устройства: вместо того, чтобы использовать сигнал от светочувствительного резистора для завершения симуляции, я могу использовать фильтр низких частот из SystemModeler. Затем следует провести масштабирование, чтобы сервопривод мог проворачиваться в диапазоне от -90° до 90°. Когда я закрываю светочувствительный резистор рукой, то он поворачивается в одну сторону, а если нет — в другую.

Inputs and outputs are hardware
Аналоговый сигнал, который подаётся на сервопривод посредством программных компонентов



В предыдущем примере показано, что связь через ModelPlug можно реализовать не только между какими-то аппаратными системами — можно использовать компоненты, которые задаются в виде моделей. Вместо того, чтобы подключать резисторы и конденсаторы для фильтрации низких частот или вместо того, чтобы писать программу, которая будет фильтровать сигнал, я использую модель фильтра. Это сильно ускоряет прототипирование.

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

Inverted pendulum system with filters

На верхушке маятника разместим силовой компонент, который преобразует аналоговый сигнал в силу, которая приложена к верхушке маятника.

Mechanical system with force attached
Механическая система с приложенной силой

И, наконец, подсоединим акселерометр к аналоговому контакту.

Accelerometer connected to inverted pendulum
Акселерометр, подключённый к инвертированному маятнику

Вот, если быстро двигать туда-сюда акселерометр, то получатся помехи, а система управления маятником должна будет попытаться адаптироваться. Интересно, получится ли так быстро туда-сюда двигать маятник, чтобы перевернуть его?



Библиотека ModelPlug бесплатна и скачать её можно в SystemModeler Library Store. Она работает на Mac, Windows и Linux.

Вы можете попробовать пробную версию SystemModeler. Есть так же варианты с лицензией для студентов или для домашнего использования. Всё оборудование, представленное в этой статье, укладывается в бюджет в 50 долларов.

Комментарии (0)