Управление серводвигателем с Arduino через MATLAB
Воспользуемся MATLAB для написания программы для управления серводвигателем, подключенным к Arduino.
![Управление серводвигателем с Arduino через MATLAB](/uploads/media/articles/0001/02/a2787fc4b4712b529da1af27a89e13b354b4ae78.jpeg)
Пакеты поддержки Arduino в MATLAB позволяют вам исопльзовать MATLAB для написания программ для Arduino. Пакеты поддержки доступны для 32-х и 64-х разрядных версий Windows, 64-разрядной Mac OS и для 64-разрядного Linux.
Установка пакетов
Чтобы установить в MATLAB пакеты поддержки Arduino, запустите MATLAB и выберите Add-Ons → Get Hardware Support Packages. Выберите пакеты, которые хотите установить, и следуйте инструкциям в окне устновки.
![MATLAB. Установка пакетов поддержки Arduino](/uploads/media/articles/0001/02/4e7a66be026d2b49bff9a1b1a5ae44e32e4be7bf.png)
Когда пакеты будут установлены, подключите к компьютеру плату Arduino и напечатайте следующую команду в окне команд MATLAB:
>> a = arduino()
MATLAB попытается связаться с вашей платой. Если всё пройдет успешно, MATLAB отобразит свойства платы Arduino, подключенной к компьютеру, как показано ниже:
![MATLAB: проверка связи с Arduino](/uploads/media/articles/0001/02/5d51dadbfc6b418cda140c989bacc11573301229.png)
Эта информация показывает, что моя Arduino Uno подключена к порту COM3. Если MATLAB не смог подключиться к Arduino, будет показано сообщение об ошибке.
Схема
Схема для этого эксперимента довольно проста: выводы питания, земли и управления у серводвигателя соединены с выводами Arduino, как показано на рисунке ниже:
![Схема управления серводвигателем с Arduino через MATLAB](/uploads/media/articles/0001/02/507b1b9b3d497451827a15b65dc50731bd853c05.png)
![Макет для эксперимента по управлению серводвигателем с Arduino через MATLAB](/uploads/media/articles/0001/02/827e3ce8eddc26e48126ae52d09f7060eba5602d.jpeg)
Функции
Мы собираемся использовать следующие 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 градусов.
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!