Управление серводвигателем с Arduino через MATLAB

Добавлено 30 июля 2017 в 14:00

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

Управление серводвигателем с Arduino через MATLAB

Пакеты поддержки Arduino в MATLAB позволяют вам исопльзовать MATLAB для написания программ для Arduino. Пакеты поддержки доступны для 32-х и 64-х разрядных версий Windows, 64-разрядной Mac OS и для 64-разрядного Linux.

Установка пакетов

Чтобы установить в MATLAB пакеты поддержки Arduino, запустите MATLAB и выберите Add-Ons → Get Hardware Support Packages. Выберите пакеты, которые хотите установить, и следуйте инструкциям в окне устновки.

MATLAB. Установка пакетов поддержки Arduino
MATLAB. Установка пакетов поддержки Arduino

Когда пакеты будут установлены, подключите к компьютеру плату Arduino и напечатайте следующую команду в окне команд MATLAB:

>> a = arduino()

MATLAB попытается связаться с вашей платой. Если всё пройдет успешно, MATLAB отобразит свойства платы Arduino, подключенной к компьютеру, как показано ниже:

MATLAB: проверка связи с Arduino
MATLAB: проверка связи с Arduino

Эта информация показывает, что моя Arduino Uno подключена к порту COM3. Если MATLAB не смог подключиться к Arduino, будет показано сообщение об ошибке.

Схема

Схема для этого эксперимента довольно проста: выводы питания, земли и управления у серводвигателя соединены с выводами Arduino, как показано на рисунке ниже:

Схема управления серводвигателем с Arduino через MATLAB
Схема управления серводвигателем с Arduino через MATLAB
Макет для эксперимента по управлению серводвигателем с Arduino через MATLAB
Макет для эксперимента по управлению серводвигателем с Arduino через MATLAB

Функции

Мы собираемся использовать следующие MATLAB функции:

  • writePosition(motorObject, angle)
  • readPosition(motorObject)

Как и предполагает название, команда writePosition() используется для поворота вала серводвигателя на заданный угол, а команда readPosition() используется для чтения текущего положения вала.

Мы создадим объект серводвигателя с помощью команды:

servo_motor = servo(arduinoObject, pinAtWhichServoIsAttached)

Код

% порт, к которому подключена плата arduino

port = 'COM3';

% модель платы arduino

board = 'Uno';

% создание объекта arduino с библиотекой серводвигателя

arduino_board = arduino(port, board, 'Libraries', 'Servo');

% создание объекта серводвигателя

servo_motor = servo(arduino_board, 'D8');

% цикл для поворота серводвигателя от 0 до 180 градусов

for angle = 0:0.2:1

   writePosition(servo_motor, angle);

   current_position = readPosition(servo_motor);

   current_position = current_position * 180;   

   % напечатать текущее положение серводвигателя

   fprintf('Current position is %d\n', current_position);   

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

   % которое было ему указано.

   pause(2);

end

% вернуть двигатель в положение 0 градусов

writePosition(servo_motor, 0);

Убедитесь, что в MATLAB нет сохраненного ранее объекта Arduino, иначе MATLAB отобразит сообщение об ошибке. Либо очистите объекты серводвигателя и Arduino в файле скрипта, либо запустите очистку всего в окне команд перед запуском скрипта.

Этапы

  1. Запустите MATLAB и установите пакеты аппаратной поддержки Arduino (если они еще не установлены).
  2. Подключите свою плату к компьютеру и проверьте, работает ли она с MATLAB.
  3. Соберите схему, как показано на рисунке выше, и соедините вывод 11 с одним выводом светодиода через резистор.
  4. Подключите второй вывод светодиода к выводу земли на плате Arduino.
  5. Напишите m-файл и сохраните его. Запустите свой файл, и MATLAB загрузит его на вашу плату.
  6. Ваш двигатель начнет вращаться от 0 до 180 градусов, а затем вернется к 0 градусов.

Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!

Теги

ArduinoMATLABСерводвигательСервопривод

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.