Инструменты пользователя

Инструменты сайта


@amperka/multiservo

Модуль для работы с Multiservo Shield. Библиотека позволяет управлять привычными сервомоторами с интерфейсом PDM (Pulse Duration Modulation) двух видов:

  • Сервоприводы с удержанием угла
  • Сервоприводы постоянного вращения
// Настраиваем шину I2C
PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000});
 
// Создаем новый объект MultiServo
var mServo = require('@amperka/multiservo').connect(PrimaryI2C);
 
// Создаем новый объект сервопривода, подключенны к пину 0 шилда
var s0 = mServo.connect(0);
 
// Устанавливаем привод на угол 0
s0.write(0);
setTimeout(function(){
  // Устанавливаем привод на угол 90
  s0.write(90);
  setTimeout(function(){
    // Устанавливаем привод на угол 180
    s0.write(180);
  }, 2000);
}, 2000);

connect([i2c])

Возвращает новый объект MultiServo для работы с шилдом, взаимодействующим по шине i2c.

Если параметр i2c не передан, используется PrimaryI2C.

MultiServo

Класс для работы с моторшилдом. Имеет один метод connect для инициализации.

connect(pin[, opts])

Возвращает экземпляр объектаMultiServoDevice для взаимодействия с сервоприводом на разъеме pin.

Параметр optsзадаёт характеристики сервопривода. Ожидается объект с полями:

  • pulseMin — минимальная поддерживаемая приводом длина импульса в миллисекундах.
  • pulseMax — максимальная поддерживаемая приводом длина импульса в миллисекундах.
  • valueMin — значение для метода write, соответствующее минимальной длине импульса.
  • valueMax — значение для метода write, соответствующее максимальной длине импульса.

Если какие-либо поля не определены или объект opts вовсе не передан, используются значения по умолчанию. Будьте аккуратны с заданием длины импульсов. Выход за пределы длины, поддерживаемой сервоприводом может привести к его выгоранию.

  • Для сервоприводов, которые удерживают угол, используйте valueMin и valueMax для определения граничных значений поворота вала в градусах.
  • Для сервомоторов постоянного вращения в valueMin и valueMax удобно задавать условные величины -1 и 1 или известную из характеристик привода угловую скорость.
// Настраиваем шину I2C
PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000});
// Создаем новый объект MultiServo
var mServo = require('@amperka/multiservo').connect(PrimaryI2C);
 
// Создаем новый объект сервопривода, подключенны к
// разъему 0 шилда
var s0 = mServo.connect(0,
//добавим изменения в пределы 
{pulseMin: 0.500,
pulseMax: 2.500});
 
// Устанавливаем привод на угол 0
s0.write(0);
 
setTimeout(function(){
  // Устанавливаем привод на угол 90
  s0.write(180);
  setTimeout(function(){
    // Устанавливаем привод на угол 180
    s0.write(0);
  }, 2000);
}, 2000);

MultiservoDevice

Класс для работы с сервоприводом, создаваемый методом connect объекта Multiservo.

Servo.write(value[, units])

Устанавливает угол сервопривода в значение value, заданное в единицах units. В качестве units принимаются значения:

  • "ms" — длина пульса в миллисекундах.
  • "us" — длина пульса в микросекундах.
  • не задано — значение в условных единицах в диапазоне [valueMin; valueMax].
// Настраиваем шину I2C
PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000});
// Создаем новый объект MultiServo
var mServo = require('@amperka/multiservo').connect(PrimaryI2C);
// Создаем новый объект сервопривода, подключенны к разъему 0 шилда
var s0 = mServo.connect(0);
 
s0.write(120);
s0.write(900, 'us');
s0.write(1.15, 'ms');

Servo.release()

Отпускает сервопривод. После отключения вал сервопривода вращается свободно под действием внешних сил.

// Настраиваем шину I2C
PrimaryI2C.setup({sda: SDA, scl: SCL, bitrate: 400000});
// Создаем новый объект MultiServo
var mServo = require('@amperka/multiservo').connect(PrimaryI2C);
// Создаем новый объект MultiServoDevice, подключенный к разъему 0 шилда
var s0 = mServo.connect(0);
 
// Устанавливаем привод на угол 90
s0.write(90);
 
setTimeout(function() {
  // Отпускаем сервопривод через 5 секунд
  s0.release();
  setTimeout(function() {
    // Еще через 5 секунд устанавливаем привод на угол 180
    s0.write(180);
  }, 5000);
}, 5000);