Дима и Костя

ROB-34770

Робот для участия в соревновании ВРО 2021 года в средней категории. 

Робот состоит из:

блок EV3

3 средних мотора

3 датчика цвета

УЗ датчик

Описание набора Набора LEGO Mindsotms education EV3: Базовый набор 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