Класс Motor (Мотор) обеспечивает управление моторами, подключенными к блоку EV3. Моторы могут использоваться не только как исполнительные устройства, но и как датчики вращения или угла поворота. Методы класса Motor совместимы со средними и большими типами моторов набора EV3, а также с моторами набора NXT и не делает различий при работе с ними.
Для методов класса Motor необходимо указывать имена одного или нескольких портов, к которым подключены моторы, с которыми планируется работа например: «A», «BC», «ABD», имена нескольких портов должны указываться в алфавитном порядке. Для дополнительных блоков EV3, подключенных к главному блоку по USB кабелю порты моторов указываются так: «3BC», «2A», в этом случае в одной команде можно указывать только порты моторов одного блока.
Угол поворота мотора должен иметь всегда только положительное значение, в случае отрицательного – знак игнорируется. Если мотор должен вращаться в обратном направлении – необходимо изменять знак у значения параметра speed (скорость).
Скорость и Мощность — разные понятия. При вызове команды для вращения мотора с постоянной скоростью, электрическая мощность, подаваемая на него будет автоматически регулироваться в зависимости от нагрузки на валу, чтобы поддерживать заданную скорость вращения. При вызове команды для вращения мотора с постоянной мощностью, скорость его вращения не будет постоянной и будет зависеть от сопротивления, которое он испытывает во время работы.
Методы класса Motor:
Stop
Motor.Stop(ports, brake)
Остановить один или несколько моторов. Команда завершает так же все запланированные или незавершенные команды управления этими моторами.
ports — Имена портов моторов
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
Start
Motor.Start(ports, speed)
Запустить один или несколько моторов с указанной скоростью или изменить скорость уже запущенных моторов на указанную. Если мотор уже вращается с какой-то скоростью, то метод просто изменит его скорость на новую заданную.
ports — Имена портов моторов
speed — Скорость вращения мотора: от -100 (полный назад) до 100 (полный вперед).
StartPower
Motor.StartPower(ports, power)
Запустить один или несколько моторов с указанной мощностью или изменить мощность уже запущенных моторов на указанную.
ports — Имена портов моторов
power — Мощность от -100 (максимум при вращении назад) до 100 (максимум при вращении вперед).
StartSync
Motor.StartSync(ports, speed1, speed2)
Синхронно запускает два мотора с указанными скоростями в режиме контроля за их вращением. Если один мотор будет испытывать перегрузку, которая замедлит его скорость, второй мотор пропорционально замедлится, чтобы сохранить пропорциональную синхронность вращения (если угловая скорость одного мотора уменьшится в полтора раза относительно заданной ему, то угловая скорость второго — тоже уменьшится в полтора раза). Может использоваться для того, чтобы робот мог двигаться по изогнутой линии или разворачиваться на месте используя два мотора с разными скоростями вращения.
ports — Имена двух портов для моторов (например «AB» или «BD»).
speed1 — Скорость вращения первого мотора (мотора с первым по алфавиту номером порта): от -100 (полный назад) до 100 (полный вперед)
speed2 — Скорость вращения второго мотора (мотора со следующим за первым по алфавиту номером порта): от -100 (полный назад) до 100 (полный вперед)
GetSpeed
Motor.GetSpeed(port)
Получаеть текущую скорость мотора.
port — Имя порта мотора
Возвращает: Текущая скорость вращения мотора в диапазоне от -100 до 100.
IsBusy
Motor.IsBusy(ports)
Проверяет, свободны или нет один или несколько моторов. Если контроллеры моторов ещё не завершили выполнение команд, значит, моторы заняты.
ports — Имена портов моторов
Возвращает: «True» если хотя бы один из моторов не освободился, «False» — в противном случае.
Запускает один или несколько моторов с указанной скоростью и с возможностью плавного разгона до заданной скорости, а затем — плавного замедления перед остановкой. Скорость вращения моторов регулируется в пределах суммарного угла поворота моторов таким образом: в пределах угла angle1 моторы разгоняются до указанной скорости, затем, в пределах угла angle2 — поддерживают заданную скорость, и наконец, в пределах угла angle3 — замедляются до полной остановки. Полный угол, на который повернётся каждый мотор — это сумма углов angle1 + angle2 + angle3. Метод возвращает управление в программу сразу и не ждет, пока моторы выполнят команду до конца. Для проверки окончания отработки команды, используйте метод IsBusy(). Чтобы дождаться момента, когда моторы закончат выполнение команды — используйте метод Wait().
ports — Имена портов моторов
speed — Скорость вращения моторов: от -100 (полный назад) до 100 (полный вперед)
angle1 — часть общего угла поворота моторов (в градусах), в пределах которой моторы разгоняются
angle2 — часть общего угла поворота моторов (в градусах), в пределах которой моторы поддерживают указанную скорость
angle3 — часть общего угла поворота моторов (в градусах), в пределах которой моторы плавно замедляются до полной остановки
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
Запускает один или несколько моторов с указанной мощностью и с возможностью плавного наращивания мощности до заданной, а затем — плавного уменьшения мощности перед остановкой. Мощность моторов регулируется в пределах суммарного угла поворота моторов таким образом: в пределах угла angle1 моторы плавно наращивают мощность до указанной, затем, в пределах угла angle2 — поддерживают заданную мощность, и наконец, в пределах угла angle3 — плавно уменьшают мощность до полной остановки. Полный угол, на который повернётся каждый мотор — это сумма углов angle1 + angle2 + angle3. Метод возвращает управление в программу сразу и не ждет, пока моторы выполнят команду до конца. Для проверки окончания отработки команды, используйте метод IsBusy(). Чтобы дождаться момента, когда моторы закончат выполнение команды — используйте метод Wait().
ports — Имена портов моторов
power — Мощность моторов: от -100 (максимум при вращении назад) до 100 (максимум при вращении вперед)
angle1 — часть общего угла поворота моторов (в градусах), в пределах которой моторы разгоняются
angle2 — часть общего угла поворота моторов (в градусах), в пределах которой моторы поддерживают указанную скорость
angle3 — часть общего угла поворота моторов (в градусах), в пределах которой моторы плавно замедляются до полной остановки
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
Поворачивает два мотора синхронно на определенное количество градусов. Если один из двигателей нагружен или что-то препятствует его вращению, второй двигатель пропорционально замедлится или вообще остановится. Это команда особенно полезна для колесных или гусеничных роботов с независимым приводом на каждое колесо или гусеницу — для обеспечения возможности сохранить траекторию движения. Угол, на который будет повернут более медленный мотор зависит от его скорости: он будет меньше заданного значения угла пропорционально отношению заданной для этого мотора скорости к скорости более быстрого мотора. Метод возвращает управление в программу сразу и не ждет, пока моторы выполнят команду до конца. Для проверки окончания отработки команды, используйте метод IsBusy(). Чтобы дождаться момента, когда моторы закончат выполнение команды — используйте метод Wait().
ports — Имена двух портов моторов (например «AB» или «BD»).
speed1 — Скорость вращения первого мотора (мотора с первым по алфавиту номером порта): от -100 (полный назад) до 100 (полный вперед)
speed2 — Скорость вращения второго мотора (мотора со следующим за первым по алфавиту номером порта): от -100 (полный назад) до 100 (полный вперед)
angle — Угол поворота мотора (в градусах), для которого задана наибольшая скорость вращения (для другого мотора угол будут меньше — пропорционально отношению его скорости к скорости более быстрого мотора).
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
ResetCount
Motor.ResetCount(ports)
Сбрасывает счетчик оборотов одного или нескольких моторов в значение 0.
ports — Имена портов для моторов (например «A» или «BD»).
GetCount
Motor.GetCount(port)
Получает текущие данные счетчика оборотов указанного мотора. Счетчик оборотов работает даже если мотор вращается не по команде блока EV3, а в результате воздействия внешней силы. Таким образом, мотор может быть использован как датчик вращения или угла поворота.
port — Имя порта мотора
Возвращает: Текущее значение счетчика оборотов мотора в градусах.
Move
Motor.Move(ports, speed, angle, brake)
Поворачивает один или несколько моторов с заданной скоростью на указанный угол (в градусах). Программа не будет переходить к выполнению следующих команд и будет ждать до тех пор, пока моторы не завершат выполнение команды и не повернутся на заданный угол.
ports — Имена портов моторов (например «A» или «BD»).
speed — Скорость вращения моторов: от -100 (полный назад) до 100 (полный вперед)
angle — Угол поворота моторов (в градусах)
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
MovePower
Motor.MovePower(ports, power, angle, brake)
Поворачивает один или несколько моторов с заданной мощностью на указанный угол (в градусах). Программа не будет переходить к выполнению следующих команд и будет ждать до тех пор, пока моторы не завершат выполнение команды и не повернутся на заданный угол.
ports — Имена портов моторов (например «A» или «BD»).
power — Мощность моторов: от -100 (максимум при вращении назад) до 100 (максимум при вращении вперед)
angle — Угол поворота моторов (в градусах)
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
Поворачивает два мотора синхронно на определенное количество градусов. Если один из двигателей нагружен или что-то препятствует его вращению, второй двигатель пропорционально замедлится или вообще остановится. Это команда особенно полезна для колесных или гусеничных роботов с независимым приводом на каждое колесо или гусеницу — для обеспечения возможности сохранить сложную криволинейную траекторию движения или разворачиваться на месте, используя два мотора с разными скоростями вращения. Угол, на который будет повернут более медленный мотор зависит от его скорости: он будет меньше заданного значения угла пропорционально отношению заданной для этого мотора скорости к скорости более быстрого мотора. Программа не будет переходить к выполнению следующих команд и будет ждать до тех пор, пока моторы не завершат выполнение команды и не повернутся на заданный угол.
ports — Имена двух портов моторов (например «AB» или «BD»).
speed1 — Скорость вращения первого мотора (мотора с первым по алфавиту номером порта): от -100 (полный назад) до 100 (полный вперед)
speed2 — Скорость вращения второго мотора (мотора со следующим за первым по алфавиту номером порта): от -100 (полный назад) до 100 (полный вперед)
angle — Угол поворота мотора (в градусах), для которого задана наибольшая скорость вращения (для другого мотора угол будут меньше — пропорционально отношению его скорости к скорости более быстрого мотора).
brake — Режим торможения моторов: «True», если необходимо удерживать положение осей моторов после остановки, иначе — «False».
Wait
Motor.Wait(ports)
Ожидает, пока моторы не закончат выполнять команды Schedule или Move. Использование этой команды, как правило, лучше, чем вызов IsBusy() в цикле.
ports — Порты подключения моторов.
Дополнение (таблица выбора команд)
В следующей таблице приведены рекомендации по выбору команд для управления моторами:
Повернуться на x градусов (программа ждет завершения)
Включиться на постоянное вращение
Повернуться на x градусов (без ожидания завершения)