Гриша и Игорь
ROB-34774Робот для участия в ВРО в младшей категории 2021 года. Робот состоит из:
Блок EV3
2 больших мотора
1 средний мотор
3 датчика цвета
Базовый набор LEGO® MINDSTORMS® Education EV3 — идеальное решение для изучения предметов STEM и робототехники в основной школе (в 9–11 классах). Работая с этим набором, включающим программируемый микрокомпьютер EV3, различные моторы, датчики и конструктивные элементы LEGO, ученики освоят навыки текстового программирования на языке MicroPython, который является упрощенной версией одного из самых популярных в мире языков программирования. Они также смогут учиться программировать с помощью бесплатного приложение EV3 Classroom, в котором используется язык программирования, созданный на основе языка Scratch. Благодаря эффективному сочетанию удобного в использовании аппаратного и программного обеспечения ученики смогут развить навыки, необходимые для конструирования и программирования роботов и решения комплексных задач из реальной жизни. Данное решение также включает в себя полный спектр образовательных материалов для занятий по предметам STEM и программированию, а также методических материалов, доступных онлайн и призванных помочь педагогам в организации учебного процесса. Базовый набор EV3 поставляется в прочном контейнере с сортировочным лотком и включает в себя 541 элемент, в том числе микрокомпьютер EV3, 3 сервомотора, 5 датчиков (гироскопический, ультразвуковой, датчик цвета и 2 датчика касания), перезаряжаемый аккумулятор и соединительные кабели. Дополнительно вы также можете приобрести зарядное устройство 10 В постоянного тока (45517) (продается отдельно).
Робот умеет:
перемещать по линии
определять левые, правый и х-образный перекрестки
робот развозит по одной лампочке
Для движения по линии используются подпрограммы:
'ЯОТ - яркость отраженного света
Sensor.SetMode(2,0) 'установка датчика 2 в режим работы номер 0
Sensor.SetMode(3,0) 'установка датчика 3 в режим работы номер 0
kp = 0.4 'пропорциоанльный коэффициент
kd = 5 'дифференциальный коэффициент
v = 50 'скорость
errold = 0 'старая ошибка
Sub line_x 'подпрограмма для движения по линии по Х перекрёстка
while Sensor.ReadRawValue(2,0) > 20 or Sensor.ReadRawValue(3,0) > 20
'пока на обоих датчиках ЯОТ больше 20 робот будет ехать по линии
s2 = Sensor.ReadRawValue(2,0) 'запись ЯОТ со второго датчика в переменную s2
s3 = Sensor.ReadRawValue(3,0) 'запись ЯОТ со второго датчика в переменную s2
err = s2 - s3 'нахождение разницы (ошибки) между датчиками
u = err * kp + (errold - err) * kd
'вычисление управляющего воздействия как суммы двух произведений
'разница между датчиками умножается на пропорциональный коэффициент
'разница между старой и новой ошибками умножается на дифференциальный коэффициент
errold = err 'запись новой ошибки в старую
Motor.StartSync("BC", v + u, v - u)
'движение робота по линии, скорость на каждый моторо высчитывается индвивидуально
EndWhile 'окончание цикла while
Motor.Stop("BC", "True")'остановка моторов
EndSub ' конец подпрограммы
Sub line_right 'подпрограмма для движения по линии до правого перекрётска
while Sensor.ReadRawValue(2,0) > 20
'пока на втором датчике ЯОТ больше 20 робот будет ехать по линии
s2 = Sensor.ReadRawValue(2,0)
s3 = Sensor.ReadRawValue(3,0)
err = s2 - s3
u = err * kp + (errold - err) * kd
errold = err
Motor.StartSync("BC", v + u, v - u)
EndWhile
Motor.Stop("BC", "True")
EndSub
Sub line_left 'подпрограмма для движения по линии до левого перекрётска
while Sensor.ReadRawValue(3,0) > 20
'пока на третьем датчике ЯОТ больше 20 робот будет ехать по линии
s2 = Sensor.ReadRawValue(2,0)
s3 = Sensor.ReadRawValue(3,0)
err = s2 - s3
u = err * kp + (errold - err) * kd
errold = err
Motor.StartSync("BC", v + u, v - u)
EndWhile
Motor.Stop("BC", "True")
EndSub
distance = 500 'расстояние в градсуах, которое должен проехать робот
Sub line_distance 'подпрограмма для движения по линии и по градусам
Motor.ResetCount("B") 'сброс покаказний энкодера на моторе В
while Motor.GetCount("B") <= distance
s2 = Sensor.ReadRawValue(2,0)
s3 = Sensor.ReadRawValue(3,0)
err = s2 - s3
u = err * kp + (errold - err) * kd
errold = err
Motor.StartSync("BC", v + u, v - u)
EndWhile
Motor.Stop("BC", "True")
EndSub
Файлы
Добавлен 02.07.2024