Используйте драйвер сервомоторов Multiservo Shield v2 для управления до 18 сервомашинками одновременно, на базе которых вы можете создавать гексаподов, роботов манипуляторов и других моторизованных устройств.
Multiservo Shield v1. Отличие v1 и v2:
В качестве мозга для работы с Multiservo Shield v2 рассмотрим платформы из семейства 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 v2 рассмотрим платформы из семейства Espruino, например Iskra JS.
Для старта необходимо подключить железо и выполнить программную настройку.
На низком уровне драйвер сервоприводов общается с управляющей электроникой по интерфейсу I²C.


На этом установка закончена, теперь смело переходите к экспериментам.
Рассмотрим базовый пример — подключим один сервопривод к пину 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 методом бутерброда без дополнительных проводов и пайки. В итоге вам остаются доступны все физические контакты вашего контроллера для дальнейшего использования.