Используйте драйвер сервомоторов Multiservo Shield v1 для управления до 18 сервомашинками одновременно, на базе которых вы можете создавать гексаподов, роботов манипуляторов и других моторизованных устройств.
Multiservo Shield v2. Отличие v1 и v2:
В качестве мозга для работы с Multiservo Shield v1 рассмотрим платформы из семейства Arduino, например Uno.
Для старта необходимо подключить железо и выполнить программную настройку.
На низком уровне драйвер сервоприводов общается с управляющей электроникой по интерфейсу I²C.
Подробнее про I²C в Arduino
На этом установка закончена, теперь смело переходите к экспериментам.
Рассмотрим базовый пример — подключим один сервопривод к
пину Multiservo Shield и заставим его плавно вращаться от 0 до 180 градусов.
// Библиотека для работы с Multiservo Shield // https://github.com/amperka/Multiservo #include <Multiservo.h> // Создаём объект для работы с сервомоторами Multiservo multiservo; // Задаём имя пина к которому подключён сервопривод constexpr uint8_t MULTI_SERVO_PIN = 7; // Переменная для хранения текущей позиции сервомотора int pos = 0; void setup() { // Подключаем сервомотор multiservo.attach(MULTI_SERVO_PIN); } void loop() { // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } }
После прошивки устройства вал мотора будет плавно перемещаться от 0 до 180 градусов и так по кругу.
Выжмем максимум из драйвера — подключим 18 сервоприводов к пинам 0–17
Multiservo Shield и заставим их плавно по очереди вращаться от 0 до 180 градусов.
// Библиотека для работы с Multiservo Shield // https://github.com/amperka/Multiservo #include <Multiservo.h> // Задаём количество сервоприводов constexpr uint8_t MULTI_SERVO_COUNT = 18; // Создаём массив объектов для работы с сервомоторами Multiservo multiservo[MULTI_SERVO_COUNT]; // Переменная для хранения текущей позиции сервомотора int pos = 0; void setup() { // Перебираем значения моторов от 0 до 17 for (int count = 0; count < MULTI_SERVO_COUNT; count++) { // Подключаем сервомотор multiservo[count].attach(count); } } void loop() { // Перебираем значения моторов от 0 до 17 for (int count = 0; count < MULTI_SERVO_COUNT; count++) { // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво multiservo[count].write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво multiservo[count].write(pos); // Ждём 15 мс delay(15); } } }
После прошивки устройства вал каждого мотора будет плавно по очереди перемещаться от 0 до 180 градусов и так по кругу.
А теперь рассмотрим симбиоз — подключим один сервопривод к 7
пину Multiservo Shield, а второй к 7
пину платформы Aeduino Uno. А затем заставим их плавно вращаться от 0 до 180 градусов.
Если запутались в подключении, смотрите подробности в распиновке платы.
// Библиотека для работы с Servo #include <Servo.h> // Библиотека для работы с Multiservo Shield // https://github.com/amperka/Multiservo #include <Multiservo.h> // Создаём объект для работы с сервомоторами на Arduino Servo servo; // Создаём объект для работы с сервомоторами на Multiservo Shield Multiservo multiservo; // Задаём имена пинов к которым подключены сервоприводы constexpr uint8_t SERVO_PIN = 7; constexpr uint8_t MULTI_SERVO_PIN = 7; // Переменная для хранения текущей позиции сервомотора int pos = 0; void setup() { // Подключаем сервомотор на Arduino servo.attach(SERVO_PIN); // Подключаем сервомотор на Multiservo Shield multiservo.attach(MULTI_SERVO_PIN); } void loop() { // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво servo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво servo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 0 до 180 for (pos = 0; pos <= 180; pos++) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } // Перебираем значения счётчика от 180 до 0 for (pos = 180; pos >= 0; pos--) { // Отправляем текущий угол на серво multiservo.write(pos); // Ждём 15 мс delay(15); } }
После прошивки устройства сначала вал одного мотора будет плавно перемещаться от 0 до 180 градусов, а затем вал другого мотора от 0 до 180 градусов и так по кругу.
В качестве мозга для работы с Multiservo Shield v1 рассмотрим платформы из семейства Espruino, например Iskra JS.
Для старта необходимо подключить железо и выполнить программную настройку.
На низком уровне драйвер сервоприводов общается с управляющей электроникой по интерфейсу I²C.
Подробнее про I²C в Espruino
На этом установка закончена, теперь смело переходите к экспериментам.
Рассмотрим базовый пример — подключим один сервопривод к
пину Multiservo Shield и заставим его плавно вращаться от 0 до 180 градусов.
// Настраиваем шину I2C PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000}); // Создаем новый объект Multiservo var multiservo = require('@amperka/multiservo').connect(PrimaryI2C); // Создаем новый объект сервопривода // подключенны к контакту 7 var servo = multiservo.connect(7); // Создаём объект анимация // для плавного изменения параметров вращения мотора var animServo = require('@amperka/animation').create({ // Начальное значение в градусах from: 0, // Конечное значение в градусах to: 180, // Продолжительность полного перехода // за 5 секунд мотор пройдёт диапазон значений от 0 до 180 duration: 5, // Шаг обновления: каждые 20 мс updateInterval: 0.02 }).queue({ // Начальное значение в градусах from: 180, // Конечное значение в градусах to: 0, // продолжительность полного перехода // за 5 секунд мотор пройдёт диапазон значений от 180 до 0 duration: 5 }); // Обработчик анимации animServo.on('update', function(val) { servo.write(val); }); // Запускаем анимацию setInterval(() => { animServo.play(); }, 1000);
После прошивки устройства вал мотора будет плавно перемещаться от 0 до 180 градусов и так по кругу.
Плата Multiservo Shield выполнена на микроконтроллере ATmega48PA с прошивкой управления сервоприводами от Амперки. Чип принимает команды по интерфейсу I²C от внешней управляющей платы, например Arduino Uno или Iskra JS, и рулит до 18 сервоприводами в одно время.
Для питания сервомоторов используйте клеммник под винт
.Силовой клеммник | Подключение |
---|---|
PWR + | Силовое питание |
PWR − | Земля |
Диапазон входного напряжение должен соответствовать рабочему напряжению подключаемых сервоприводов, т.е. сколько приложили на силовой клеммник, столько и поступит на линию питания моторов. Номинальное напряжения большинства хобби сервоприводов не выходит за рамки диапазона от 5 до 12 вольт.
В качестве источника питания рекомендуем взять:
На плате расширения MultiServo Shield присутствует два контура питания.
Если отсутствует хотя бы один из контуров питания Vs или Vss — Multiservo Shield работать не будет. Для информации о текущем состоянии каждого контура используйте светодиодную индикацию.
На плате расширения MultiServo Shield присутствует два контура напряжения, т.е. для работы схемы необходимо два источника напряжения.
При установки джампера в положение
, происходит объединение положительного контакта силового клеммника с пином управляющей платформы. Режим объединённого питания позволяет запитывать всё устройство от одного источника напряжения.При объединённом режиме
, напряжение на устройство может быть подано двумя способами:При объединённом режиме
, важно знать:Имя светодиода | Назначение |
---|---|
Vs / PON | Индикатор подачи силового питания. Горит — напряжение есть, не горит — напряжение нет. |
Vss / ųON | Индикатор подачи цифрового питания. Горит — напряжение есть, не горит — напряжение нет. |
Сервоприводы подключаются к плата Multiservo Shield через контактные штыри
, где:На линии силовому клеммнику.
будет присутствовать не логическое питание платформы 3,3 / 5 В, а напряжение Vs приложенное кНа плате доступны шесть Troyka-контактов ввода-вывода внешнего контролера, которые можно задействовать в дополнение к основным. Контакты пронумерована
, где:На линии силовому клеммнику.
будет присутствовать не логическое питание платформы 3,3 / 5 В, а напряжение Vs приложенное кНа плате расположен ICSP-разъём, который предназначен для загрузки прошивки в микроконтроллер ATmega48PA через внешний программатор. В нашем случае — это мост, который получает команды по I²C и рулит 18 сервоприводами.
Плата Multiservo Shield выполнена в форм-факторе Arduino Shield R3. а это значит расширение просто одевается сверху на управляющую платформу форм-фактора Arduino R3 методом бутерброда без дополнительных проводов и пайки. В итоге вам остаются доступны все физические контакты вашего контроллера для дальнейшего использования.