• Программирование — это не таблица умножения, которую можно просто вызубрить. Программирование требует глубокого понимания.

Простое управление двумя моторами Lego EV3

Пример простого управление двумя моторами Lego EV3. Буквой имени порта обозначается мотор, подключенный к порту с этим именем.

Простое управление двумя моторами, подключенными к портам B и С.

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

Вы можете скопировать указанный ниже код в IDE MS Small Basic с установленной библиотекой EV3 и подключенным блоком Lego EV3 и запустить:

Motor.Move ("B", 50, 360, "True") ' Робот поворачивает направо используя мотор B, включенный на 50% скорости на угол 360°, затем тормозит

Program.Delay(2000) ' Пауза 2 секунды (2000 миллисекунд)



Motor.Move ("BC", 30, 720, "True") ' Робот движется вперед на 30% скорости на два оборота моторов (720°), затем тормозит. Оба мотора вращаются одинаково.

Program.Delay(2000) ' Пауза 2 секунды



Motor.Schedule("BC", 60, 360, 720, 1080, "True") ' Разгоняем робота за один оборот моторов, затем поддерживаем скорость 60% в течении двух оборотов (720°), затем замедляемся за три оборота (1080°) до остановки и тормозим

Motor.Wait ("BC") ' Так как методы Schedule не ждут, пока моторы отработают команды, то для ожидания их выполнения в программе можно использовать Motor.Wait()

Program.Delay(2000) ' Пауза 2 секунды



Motor.MoveSync("BC", 50, -60, 215, "True") ' Мотор B вращается со скоростью 50%, а мотор C - со скоростью -60% (в обратном направлении). На 215 градусов повернётся мотор С, т.к. его скорость больше.

' Для разворота робота на месте скорости моторов должны быть равны по значению, но противоположны по знаку.

Program.Delay(2000)



' Проезжаем по квадрату с закруглёнными углами (так как поворот выполняется только одним мотором)

' Возможно, придется изменить угол вращения моторов (430°) в зависимости от конструкции робота так, чтобы робот поворачивал именно на 90°

For i=1 to 4

    Motor.Move ("BC", 40, 720, "True") ' едем вперёд

    Motor.Move ("B", 40, 430, "True") ' поворачиваем на 90°

EndFor

Program.Delay(2000)



' Проезжаем по квадрату с прямыми углами (робот разворачивается на месте - для этого оба мотора вращаются в противоположных направлениях)

For i=1 to 4

    Motor.Move ("BC", 40, 720, "True") ' едем вперёд

    Motor.MoveSync("BC", 40, -40, 215, "True") ' разворачиваемся на 90°

EndFor



' Проезжаем по правильному многоугольнику, число сторон которого вводит пользователь в текстовом окне на компьютере. Отключать блок EV3 от компьютера - нельзя (программа выполняется на компьютере, а не в блоке)!

Textwindow.Write ("Введите число сторон многоугольника (целое число): ")

sides = textwindow.ReadNumber() ' считали введённое число

' Воспользуемся результатами предыдущих экспериментов

degree = 430 / 2 * 4 / sides ' Если при повороте только одного колеса на 430° (у вас - может быть другое значение) робот поворачивал на 90°, то при развороте двумя колёсами это значение должно быть в 2 раза меньше, теперь считаем, на сколько должно повернуться каждое колесо для разворота на 360° (90 * 4 = 360). Получившееся значение делим на количество сторон (и углов) правильного многоугольника (после завершения фигуры робот должен оказаться в точке начала повёрнутым в первоначальном направлении)

For i=1 to sides

    Motor.Move("BC", 50, 720, "True") ' проезжаем вперёд

    Program.Delay(500)

    Motor.MoveSync("BC", 20, -20, degree, "True") ' разворачиваемся на вычисленный угол

    Program.Delay(500)

EndFor



Поделиться: