====== @amperka/multiservo ======
Модуль для работы с [[amp>product/arduino-multiservo-shield|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);
func:: connect([i2c])
Возвращает новый объект ''MultiServo'' для работы с шилдом, взаимодействующим по шине ''i2c''.
Если параметр ''i2c'' не передан, используется ''PrimaryI2C''.
class:: MultiServo
Класс для работы с моторшилдом. Имеет один метод ''connect'' для инициализации.
meth:: connect(pin[, opts])
Возвращает экземпляр объекта''MultiServoDevice'' для взаимодействия с сервоприводом на разъеме ''pin''.
Параметр ''opts''задаёт характеристики сервопривода. Ожидается объект с полями:
* ''pulseMin'' — минимальная поддерживаемая приводом длина импульса в миллисекундах.
* ''pulseMax'' — максимальная поддерживаемая приводом длина импульса в миллисекундах.
* ''valueMin'' — значение для метода ''[[#write|write]]'', соответствующее минимальной длине импульса.
* ''valueMax'' — значение для метода ''[[#write|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);
class:: MultiservoDevice
Класс для работы с сервоприводом, создаваемый методом ''connect'' объекта ''Multiservo''.
meth:: 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');
meth:: 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);