Влад и Егор

ROB-34763

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

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

блок EV3

2 больших мотора

1 средний мотор

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