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

Пакеты поддержки Arduino в MATLAB позволяют вам исопльзовать MATLAB для написания программ для Arduino. Пакеты поддержки доступны для 32-х и 64-х разрядных версий Windows, 64-разрядной Mac OS и для 64-разрядного Linux.
Установка пакетов
Чтобы установить в MATLAB пакеты поддержки Arduino, запустите MATLAB и выберите Add-Ons → Get Hardware Support Packages. Выберите пакеты, которые хотите установить, и следуйте инструкциям в окне устновки.

Когда пакеты будут установлены, подключите к компьютеру плату Arduino и напечатайте следующую команду в окне команд MATLAB:
>> a = arduino()
MATLAB попытается связаться с вашей платой. Если всё пройдет успешно, MATLAB отобразит свойства платы Arduino, подключенной к компьютеру, как показано ниже:

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


Функции
Мы собираемся использовать следующие 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 в файле скрипта, либо запустите очистку всего в окне команд перед запуском скрипта.
Этапы
- Запустите MATLAB и установите пакеты аппаратной поддержки Arduino (если они еще не установлены).
- Подключите свою плату к компьютеру и проверьте, работает ли она с MATLAB.
- Соберите схему, как показано на рисунке выше, и соедините вывод 11 с одним выводом светодиода через резистор.
- Подключите второй вывод светодиода к выводу земли на плате Arduino.
- Напишите m-файл и сохраните его. Запустите свой файл, и MATLAB загрузит его на вашу плату.
- Ваш двигатель начнет вращаться от 0 до 180 градусов, а затем вернется к 0 градусов.
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!