Как сделать программу для робота сумо. Robo(Mini) sumo, что это и с чем его едят? Конструкция робота для соревнования "Сумо"

Сумо - одно из самых увлекательных соревнований роботов Лего Ev3 . В данном соревновании робот должен вытолкнуть робота противника за круг при этом самому не выехать за границу круга.

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

Опишем алгоритм и программу Сумо для робота EV3

1 Действие.

Робот ждёт 3 секунды, отъезжаем от центра круга до границы, едем вперёд, крутимся, ищем врага, едем до врага, если едем от границы то отъезжаем назад.

Ставим ожидание на 3 секунды.

2 Действие. Отъезжаем назад, до границы.


3 действие. После того как робот отъехал до границы он должен выдвинуться вперед. Движение вперёд.

4 Действие. Ставим бесконечный цикл. Робот будет атаковать врага, пока его не вытолкнет или пока не закончится время соревнования.

В него ставим цикл вращение c ультразвуковым датчиком. (можно использовать и инфракрасный датчик)


5 Действие. Едем вперёд до тех пор, пока датчик цвета не увидит чёрную линию, границу круга.

6 . Действие После того как увидели границу мы отъезжаем назад.

Задание.

Напишите отъезд назад сами, используя урок 1.

В этом состязании участникам необходимо подготовить автономного робота, способного наиболее эффективно выталкивать робота-противника за пределы черной линии ринга.

1. Условия состязания

1.1. Состязание проходит между двумя роботами. Цель состязания - вытолкнуть робота-противника за черную линию ринга.

1.2. Если любая часть робота касается поля за пределами черной линии, роботу засчитывается проигрыш в раунде (если используется поле в виде подиума, то проигрыш засчитывается, если любая часть робота касается поверхности вне подиума).

1.3. Если по окончании раунда ни один робот не будет вытолкнут за пределы круга, то выигравшим раунд считается робот, находящийся ближе всего к центру круга.

1.4. Если победитель не может быть определен способами, описанными выше, решение о победе или переигровке принимает судья состязания.

1.5. Во время раунда участники команд не должны касаться роботов.

2. Поле

2.1. Белый круг диаметром 1 м с чёрной каёмкой толщиной в 5 см.

2.2. В круге красными полосками отмечены стартовые зоны роботов.

2.3. Красной точкой отмечен центр круга.

2.4. Поле может быть в виде подиума высотой 10 -20 мм.

3. Робот

3.1. На роботов не накладывается ограничений на использование каких либо комплектующих, кроме тех, которые запрещены существующими правилами.*

3.2.1. Во всё время состязаний:

  • Размер робота не должен превышать 250х250х250 мм.
  • Вес робота не должен превышать 1 кг.

3.2.2. Перед началом раунда робот должен удовлетворять условию: Треугольная пластина с углом 45 градусов, прижатая к поверхности поля, и подведённая с любой стороны робота, должна касаться робота в точке выше 3см от поля. Точка касания фиксируется с любой частью робота, в том числе: колёса, гусеницы, резинки, провода...

3.2.3. Спор между участником и судьёй по пунктам правил 3.2. во время проверки робота, всегда решается не в пользу участника.

3.3. Робот должен быть автономным.

3.4. Робот, по мнению судей, намеренно повреждающий или пачкающий других роботов, или как либо повреждающий или загрязняющий покрытие поля, будет дисквалифицирован на всё время состязаний.

3.5. Перед матчем роботы проверяются на габариты, вес, и расстояние деталей до поля.

3.6. Конструктивные запреты:

  • Запрещено использование каких-либо клейких приспособлений на колесах и корпусе робота.
  • Запрещено использование каких-либо смазок на открытых поверхностях робота.
  • Запрещено использование каких-либо приспособлений, дающих роботу повышенную устойчивость, например, создающих вакуумную среду.
  • Запрещено создание помех для ИК и других датчиков робота-соперника, а также помех для электронного оборудования.
  • Запрещено использовать приспособления, бросающие что-либо в робота-соперника.
  • Запрещено использовать жидкие, порошковые и газовые вещества в качестве оружия против робота-соперника.
  • Запрещено использовать легковоспламеняющиеся вещества.
  • Запрещено использовать конструкции, которые могут причинить физический ущерб рингу или роботу-сопернику.

Роботы, нарушающие вышеперечисленные запреты снимаются с соревнований.

3.8. Участники имеют право на оперативное конструктивное изменение робота между раундами (в т.ч. - ремонт, замена элементов питания, выбор программы и проч.), если внесенные изменения не противоречат требованиям, предъявляемых к конструкции робота и не нарушают регламентов соревнований. Время на оперативное конструктивное изменение робота контролируется судьёй, но не может превышать 1 минуту.

3.9. Между матчами разрешено изменять конструкцию и программы роботов.*

4. Проведение соревнований.

4.1. Соревнования состоят из серии матчей. Матч определяет из двух участвующих в нём роботов наиболее сильного. Матч состоит из 3 раундов по 30 секунд. Раунды проводятся подряд.*

4.2. Соревнования состоят не менее чем из двух попыток (точное число определяется оргкомитетом). Попытка - это совокупность всех матчей в которых участвует каждый робот минимум 1 раз.*

4.3. Перед первой попыткой и между попытками команды могут настраивать своего робота.

4.4. До начала попытки команды должны поместить своих роботов в область «карантина». После подтверждения судьи, что роботы соответствуют всем требованиям, соревнования могут быть начаты.*

4.5. Если при осмотре будет найдено нарушение в конструкции робота, то судья дает 3 минуты на устранение нарушения. Однако, если нарушение не будет устранено в течение этого времени, команда не сможет участвовать в состязании.

4.6. После помещения робота в «карантин» нельзя модифицировать (например: загрузить программу, поменять батарейки) или менять роботов, до конца попытки.*

4.7. Непосредственно в поединке участвуют судьи и операторы роботов – по одному из каждой команды.

4.8. После запуска роботов операторы должны отойти от поля более чем на 1 метр в течении 5 секунд.

4.9. Каждый оператор один раз во время всего матча может остановить старт раунда без штрафных санкций, но не позднее, чем за 1 секунду до окончания обратного 5-секундного отсчета. Задержка старта разрешена не более чем на 30 секунд. Задержка на большее время может быть осуществлена лишь по специальному разрешению судьи. После устранения неполадки роботы вновь устанавливаются на старт.*

4.10. Если во время раунда любая электрическая часть робота не закреплена жёстко (оторвалась или висит на проводах), то этот робот считается проигравшим в раунде.

4.11. Если во время матча, конструкция какого либо робота была ненамеренно повреждёна, и требует больше 50 секунд на починку, то матч может прерваться и команде разрешается исправить конструкцию робота, в это время могут проходить матчи с другими командами, после починки робота и завершения текущего матча, прерванный матч продолжается.*

4.12. Матч выигрывает робот, выигравший наибольшее количество раундов. Судья может использовать дополнительный раунд для разъяснения спорных ситуаций.

4.13. Раунд проигрывается роботом если:

  • Одна из частей робота коснулась зоны за чёрной границей ринга.
  • Если робот находится дальше от центра ринга чем робот противника. В случае если время раунда истекло и не один из роботов не вышел за границы ринга.

5. Варианты проведения соревнований

5.1. Правила предусматривают три уровня сложности. Организатор соревнований обязан заранее предупредить участников о выбранном уровне сложности.

5.2. Уровень №1: Без манёвров. Для начинающих. Решается в основном механически.

5.2.1. После объявления судьи о начале раунда, роботы выставляются операторами перед красными линиями.

5.2.2. Когда роботы установлены на стартовые позиции, судья спрашивает о готовности операторов, если оба операторы готовы запустить робота, то судья дёт сигнал на запуск роботов.

5.2.2. После сигнала на запуск роботов операторы запускают программу.

5.2.3. Роботы должны проехать по прямой и столкнуться друг с другом.

5.2.4. Роботам запрещено намерено маневрировать по рингу.

5.3. Уровень №2: Ограниченная маневренность. Требует опыта. Предусматривает возможность маневрирования по полю.

5.3.1. После объявления судьи о начале раунда, роботы выставляются операторами перед красными линиями.

5.3.2. Когда роботы установлены на стартовые позиции, судья спрашивает о готовности операторов, если оба операторы готовы запустить робота, то судья даёт сигнал на запуск роботов.

5.3.3. После сигнала на запуск роботов операторы запускают программу.

5.3.4. Роботы должны проехать прямо и столкнуться друг с другом, после столкновения роботы могут маневрировать по рингу как угодно. Время от начала раунда до столкновения роботов не должно превышать 5 сек.

5.3.5. Если роботы не сталкиваются в течение 5 секунд после начала раунда, то робот из за которого, по мнению судьи, не происходит столкновения считается проигравшим в раунде.

5.3.6. Если роботы едут прямо и не успевают столкнуться за 5 секунд, то робот находящийся дальше от центра поля считается проигравшим в раунде.

5.4. Уровень №3: Повышенная манёвренность. Требует хороших умений. Вынуждает робота ориентироваться в пространстве.

5.4.1. Робот, в своей конструкции, обязан иметь хоршо видимую стартовую кнопку, которая выполняет функцию включения и выключения робота.

5.4.2. После объявления судьи о начале раунда, роботы подготавливаются операторами, после подготовки оператор должен сообщить судье о том что робот готов, после этого, до конца раунда, оператор не может вводить никакие данные в робота, а программа робота должна запускаться по нажатию стартовой кнопки.

5.4.3. После готовности роботов, судья методом жеребьёвки определяет расстановку роботов в начале раунда.

Примеры расстановки роботов:

5.4.4. Судья выставляет роботов на стартовые позиции.*

5.4.5. По команде судьи, нажатием на стартовую кнопку, операторы запускают роботов.

6. Судейство

6.1. Оргкомитет оставляют за собой право вносить в правила состязаний любые изменения, если эти изменения не дают преимуществ одной из команд.

6.2. Контроль и подведение итогов осуществляется судейской коллегией в соответствии с приведенными правилами.

6.3. Судьи обладают всеми полномочиями на протяжении всех состязаний; все участники должны подчиняться их решениям.

6.4. Судья может использовать дополнительные раунды для разъяснения спорных ситуаций.

6.5. Если появляются какие-то возражения относительно судейства, команда имеет право в устном порядке обжаловать решение судей в Оргкомитете не позднее окончания текущего матча.

6.6. Переигровка раунда может быть проведена по решению судей в случае, если в работу робота было постороннее вмешательство, либо когда неисправность возникла по причине плохого состояния игрового поля, либо из-за ошибки, допущенной судейской коллегией.

6.7. Члены команды и руководитель не должны вмешиваться в действия робота своей команды или робота соперника ни физически, ни на расстоянии. Вмешательство ведет к немедленной дисквалификации.

7. Правила отбора победителя

7.1. По решению оргкомитета, ранжирование роботов может проходить по разным системам в зависимости от количества участников и регламента мероприятия, в рамках которого проводится соревнование. Рекомендуемая система:

o Первая попытка, в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5 (количество финалистов объявляется заранее) финалистов. Участники группируются в пары по очереди: первый со вторым, третий с четвёртым и т.д.

o Вторая попытка, в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5 (количество финалистов объявляется заранее) финалистов. Участники группируются в пары через одного: первый с третьим, второй с четвёртым и т.д.

o В финале участвуют все финалисты предыдущих попыток и соревнуются по системе каждый с каждым. Ранжирование проводится по количеству выигранных матчей. В спорных ситуациях проводятся дополнительные матчи.

* отмеченные пункты регламента могут быть отменены или изменены оргкомитетом конкретного этапа соревнований.

Советы оргкомитету:

  1. Для проведения соревнований необходимо как минимум 2 судьи: Первый судья проводит матчи, Второй проверяет роботов перед матчами.
  2. Если ринг будет выполнен в виде круглой платформы, то соревнования пройдут зрелищнее и судьям будет проще определить выпавшего за ринг робота.

Порядок проведения.

    Соревнования состоят из серии матчей. Матч определяет, из двух участвующий в нём роботов, наиболее сильного. В зависимости от количества участников, матч состоит из 3 или 5 раундов по 30 секунд. Матч выигрывает робот выигравший большее количество раундов. Судья может использовать дополнительный раунд для разъяснения спорных ситуаций.

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

  • 6-26 участников - 5 раундов в матче, 20-40 участников - 3 раунда в матче.
  • Первая попытка в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5(количество финалистов объявляется заранее) финалистов. Участники группируются в пары по очереди: первый со вторым, третий с четвёртым и т.д.
  • Вторая попытка в которой участвуют все участники по олимпийской системе (на выбывание) до определения 3-5(количество финалистов объявляется заранее) финалистов. Участники группируются в пары через одного: первый с третьим, второй с четвёртым и т.д.
  • В финале участвуют все финалисты предыдущих попыток и соревнуются по системе каждый с каждым. Ранжирование проводится по количеству выигранных матчей, но в начале финала считается, что все финалисты равны. В спорных ситуациях проводятся дополнительные матчи.
  • 3 раунда в матче. Перерывы между попытками 30 мин.
  • Сначала участники делятся на 4 равные группы. В первой попытке на первом поле участвуют 1 и 2 группа, а на втором поле участвует 3 и 4 группа. Каждый участник отыгрывает на своём поле по системе "каждый с каждым". При этом обеспечивается 50% встреч каждой команды с оппонентами.
  • Во второй попытке на первом поле участвуют 1 и 3 группа, а на втором поле участвует 2 и 4 группа. Каждый участник отыгрывает на своём поле по системе "каждый с каждым", без повторных встреч, проведённых в прошлой попытке. При этом обеспечивается 75% встреч каждой команды с оппонентами.
  • Третья попытка проводится при достаточном количестве времени и не является обязательной. В тртей попытке на первом поле участвуют 1 и 4 группа, а на втором поле участвует 2 и 3 группа. Каждый участник отыгрывает на своём поле по системе "каждый с каждым", без повторных встреч, проведённых в прошлых попытках. При этом обеспечивается 100% встреч каждой команды с оппонентами.
  • В финале участвуют 5-7 команд выигравших наибольшее количество матчей. Финалисты соревнуются по системе каждый с каждым. Ранжирование проводится по количеству выигранных матчей, но в начале финала считается, что все финалисты равны. В спорных ситуациях проводятся дополнительные матчи.

Примечание: учитывайте, что олимпийская система ранжирования может несправедливо оценивать участников если в парах встречаются равносильные соперники. В связи с этим, советуем проводить ранжирование «каждый с каждым» среди, как можно большего числа участников. 1

  1. Операторы могут настраивать робота в любое время кроме своего матча и за 5 минут до него.
  2. Если при осмотре будет найдено нарушение в конструкции робота, то судья даст 3 минуты на устранение нарушения. Однако если нарушение не будет устранено в течение этого времени, команда не сможет участвовать в состязании.
  3. Команды не могут просить дополнительного времени перед матчем.
  4. Перед началом раунда операторы могут выбрать программу и должны расположить роботов в зоне страта (за красной линией). Далее судья подтверждает готовность участников и дает сигнал на начало раунда, при этом операторы роботов должны запустить программу на роботах и отойти от поля более чем на 1 метр в течении 5 секунд. За эти же 5 секунд роботы должны проехать по прямой и столкнуться друг с другом. После столкновения роботы могут маневрировать по рингу как угодно.
  5. Во время матча, один из судий вызывает пару участников выступающих в следующем раунде и проверяет их роботов.
  6. Перед стартом робот должен полностью находиться в зоне страта (за линией).

Расчёт времени состязаний:

Примерное время матча в 5 раундов:

~ вызов команды и проверка роботов (3 мин) + 5 * (выставление роботов (10 сек) + раунд (30 сек) = 3-4 мин.

Время состязаний T при игре каждый с каждым при N команд:

T=((N*N-1)/2)*4 мин

Пример с 10 командами:

((10*9)/2)*4 мин = 3 часа.

Пример с 10 командами по смешанной (каждый с каждым + олимпийская) системе:

((5)+(5*4)/2)*4 мин = 1 час.

Примерное Расписание для соревнований с двумя попытками, в которых участвует 20 команд:

  • 9:00 – 9:30 Регистрация команд.
  • 9:30 – 9:45 Собрание с участниками (Разъяснение правил).
  • 9:45 – 10:30 Подготовка роботов.
  • 10:30 – 11:30 Проведение 1 попытки соревнований по олимпийской системе ((10+5)*4мин=1час)
  • 11:30 – 12:00 Перерыв.
  • 12:00 – 13:00 Проведение 2 попытки соревнований по олимпийской системе ((10+5)*4мин=1час)
  • 13:00 – 14:00 Перерыв. (Проведение дополнительных матчей, если много команд попало в пятёрки лучших по результатам первых попыток)
  • 14:00 – 15:00 Финал. Каждый с каждым.
  • 15:00 – 16:00 Подведение итогов.
  • 16:00 – 17:00 Награждение.

ПРОГРАММА" РОБОТА МИНИ-СУМО. Заключительная статья по сборке робота мини-сумо. В первой части статьи "Шасси для робота мини-сумо" было подробно рассказано о том как изготовить шасси робота. В этой статье подробно разберём составление программы для робота. Наш робот готов. У него есть шасси, функцию «мозгов» выполнит микроконтроллер, а связь с внешним миром осуществят датчики. Но, не смотря на все это, он так и будет стоять на столе неподвижно. И чтобы этого не случилось, в наше творение пора вдохнуть жизнь, так сказать, почувствовать себя «создателем» окончательно. Программа, которую мы создадим, не только оживит робота, но и заставит его вести себя на ринге осмысленно и логично.


1. Основа программы-алгоритм.

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

Не буду использовать научные термины, скажу просто, Алгоритм - это описание последовательности неких действий. Вся наша жизнь - это различные действия; мы ходим, говорим, двигаем руками и ногами, вертим головой. У всего этого есть свой смысл - алгоритм, последовательность, которая определяет наше поведение, и его можно составить и описать. Для наглядности приведу пример из жизни. Вы каждое утро чистите зубы. Попробуйте описать, как вы это делаете, как бы составьте программу для себя. Вот что получится: «Берем зубную щетку. Выдавливаем пасту. Чистим зубы движениями влево-вправо. Полощем рот. Моем щетку».

В принципе все верно, но эту маленькую программу мы можем выполнить в обед, вечером или после каждого приема пищи. Но мы не учли важные факторы, которые могут свести на НЕТ все наши старания. Изначально мы говорили про утро. Это важный фактор и если его не учесть, то чистить зубы придется лежа в постели и с закрытыми глазами. Поэтому всегда у любой программы должно быть какое-то начало и конец с возможностью повторения цикла. Повторяющимся циклом для человека является следующий день, где снова будет утро, и снова нужно будет чистить зубы. Поэтому добавим к нашей программе следующий алгоритм (последовательность действий).

«Проснуться. Встать с постели...» Если на этом этапе остановить создания алгоритма и перейти сразу к чистке зубов то программа застопорится (зависнет). Почему? Потому что мы снова не учли всех факторов. Вы стоите посреди своей спальни и не можете выполнить следующую команду; «Берем зубную щетку», так как щетка находится в ванной, а в нее нужно еще дойти. Ну, если вы спите в ванной, то нет проблем - программа выполнится! Но в большинстве случаев нормальные люди спят в другой комнате. Такой подход называется логическим, то есть осмысленным. Все наши действия должны быть разумными и содержать определенный смысл, иначе поставленная цель не будет достигнута. Поэтому «Проснуться. Встать с постели. Пойти в ванную комнату», будет наилучшим вариантом.

Вернемся к роботу. Как же теперь нам составить план действий робота мини-сумо на ринге? У нас есть правила, где четко обозначена цель - «Вытолкнуть противника за пределы ринга». Но для ее достижения нужно учитывать определенные факторы. Основной фактор это не выйти за пределы круга самому, а если быть точнее, то не выйти за белую границу круга. Вот что у нас получилось:

Рис. 1 Алгоритм поведения робота на ринге.

На рисунке 1 вы видите блок-схему. По всем правилам, именно так принято составлять алгоритмы. Наглядно и понятно.

Первый блок - «Начало». С этого момента программа начинает выполнение действий робота после включения. Первое что он должен будет сделать - это найти противника, блок «Поиск цели». Следующий блок нашей схемы в виде ромбика «Цель найдена?». Это означает, что перед нами будет стоять выбор действий по достижению определенного события. Если цель найдена (Да), то мы продолжим выполнение программы и перейдем к следующей части программы «Атаковать», но если цель не найдена (Нет), то логичнее всего продолжить ее поиск. Программа зациклится на этом моменте, пока робот не обнаружит противника. При атаке робот движется вперед на противника, пытаясь вытолкнуть его за пределы ринга, в этот момент работает блок «Достигнут край ринга?», если край ринга не достигнут, то атака продолжается, но если датчики обнаружили белую полосу края, то атака прекращается и программа переходит к следующему блоку «Отъезжаем назад» и «Разворот». После разворота, цикл основной программы повторяется, то есть она начинается с самого начала и робот снова ищет противника. Так сделано неспроста. Если в момент атаки, противнику удалось улизнуть от нашего робота, то мы должны вернуться к его поиску не выехав за край ринга. С теорией все. Перейдем к практике.

2. Правила написания программ для Arduino.

Хоть я и говорил что с теоретической частью покончено, но нам следует изучить принцип построения программы для микроконтроллеров Arduino, хотя эти принципы будут верными и для других МК семейства AVR.

Рис. 2 Метод написания программы для Arduino.

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

В самом начале программы при необходимости подключаются дополнительные модули. Затем объявляются глобальные переменные. Далее идет блок инициализации контроллера. В нем определяются назначения портов, вход это или выход и другие настройки. Так же из этого блока могут быть вызваны дополнительные вспомогательные подпрограммы. Если быть кратким, то в этом месте программа производит предварительные настройки контроллера. Этот блок выполняется один раз при старте или перезагрузке контроллера. Обратите внимание, в блоке добавлена строчка «задержка 5 сек». К общим правилам написания программы это не относится, но для робота мини-сумо необходимо. В правилах сказано, что после команды судьи роботы должны начать движение по истечении 5 секунд. Данную задержку нельзя выполнять в основном цикле программы, так как она будет постоянно повторяться, и поведение робота изменится не в лучшую сторону.

В блоке основного цикла программы будет выполняться основной алгоритм поведения робота на ринге, который мы рассмотрели на Рис. 1. В процессе работы основного цикла можно будет обращаться к подпрограммам. Программисты очень часто, для оптимизации и сокращения кода используют подпрограммы. Например, программу движения вперед или назад, логичнее выделить в отдельные модули, и не включать в основное тело программы. Она от этого станет огромной, совершенно не читаемой, а найти ошибку или сделать небольшое изменение будет очень проблематично.

3. Средство разработки Arduino IDE .

Скачайте с сайта Arduino.ru последнюю версию Arduino IDE. Программа не требует какой-то специальной установки, достаточно распаковать содержимое архива в нужное место. В конце данной статьи находится файл библиотеки УЗ дальномера Ultrasonic. Его следует распаковать в папку Libraries.

Запускаем приложение. Проверяем правильность установки библиотеки, заходим в меню, «Файл» - «Примеры». Почти в самом низу должен появиться пункт Ultrasonic как на рис. 3.

Рис. 3 Проверка правильности установки библиотеки Ultrasonic.

Если все нормально, переходим в пункт «Сервис» - «Плата». Нам необходимо выбрать нашу плату - Arduino Pro Mini 5v.

Рис. 4 настройка платы контроллера

Последовательный порт необходимо выбрать тот, который появится после подключения Arduino к компьютеру. Следует немного сказать по поводу Arduino Pro Mini. В отличие от других контроллеров семейства Arduino, у Pro Mini нет встроенного модуля соединения с компьютером. Он поставляется отдельно в виде платы адаптера USB to UART(TTL) и при помощи четырех проводков соединяется с платой контроллера.

Рис. 5 USB-UART (TTL) адаптер.

На рис. 6 показано, как правильно нужно соединить контроллер и адаптер.

Рис. 6. Соединение контроллера с USB-UART адаптером.

В отличии от принятого соединения сигнальных линий, вместо RX-TX и TX-RX эти линии нужно соединять напрямую: RX-RX, TX-TX. При первом подключении адаптера к компьютеру автоматически начнется установка драйверов устройства. Следует дождаться окончания установки. Еще одной особенностью контроллера является отсутствия программного сброса Reset в момент программирования. Это конечно немного неудобно, но не настолько чтобы отказаться от Pro Mini. Достаточно нажать кнопку Reset на контроллере после того, как надпись «Компилирование» сменится на «Загрузка», Рис. 7.

Рис. 7. Отображение информации о ходе программирования МК.

4. Пишем код.

В этой главе я не буду подробно останавливаться на описании команд, директив и операторов. Предполагается, что вы уже имеете некоторые базовые знания. В противном случае нужно обратиться к документации на официальном сайте или другим источникам в сети.Написание кода программы мы будем выполнять четко по плану или алгоритму, который мы составили. В определенные блоки алгоритма я добавил код, который мы сейчас рассмотрим подробнее на рис. 8.

Рис. 8. Написания начального блока программы.

Первый блок: директива # подключает к нашему проекту библиотеку управления модулем.

Второй блок: Объявляем переменные и записываем в них начальные значения равные нулю. Обращаю ваше внимание, что мы не будем создавать имена для портов выводов МК. Я намеренно оставил их в цифровом виде, чтобы вам было удобно сверяться с принципиальной схемой. В данном блоке мы объявляем всего три переменные - это левый и правый датчики ринга (_и _) в них будут записаны значения АЦП. А так же переменная расстояния УЗ дальномера (_), в нее запишется расстояние в сантиметрах до препятствия.

Строчка Ultrasonic ultrasonic (4, 2), не что иное, как объявление переменной для УЗ дальномера, взятое из примера подключенной библиотеки. В скобках указаны порты, к которым подключены ножки датчика и.

Третий блок: (), в нем мы настраиваем все входы и выходы микроконтроллера. Входящие сигналы мы будем принимать портами 15, 17, поэтому назначаем им (Вход). Двигателями у нас управляют четыре порта: 3,5 для левого двигателя и 6,9 для правого двигателя, назначаем их как выход.

Почему мы задействуем для одного двигателя два порта? Все просто; если на контакты мотора подать напряжение он начнет крутиться в одну из сторон, скажем по часовой стрелке. Но если изменить полярность, т.е. поменять «плюс» и «минус» - вал моторчика будет крутиться в другую сторону. Это свойство мы и будем использовать для полноценных маневров.

5. Основной цикл loop.

В этом цикле выполняется основная программа контроллера. Из него нельзя выйти совсем или завершить его. Из него возможны лишь вызовы внешних процедур, так называемых подпрограмм.

Рассмотрим структуру нашего цикла на основе алгоритма рис. 9

Рис. 9. Алгоритм основного цикла Loop.

С самого начала нам необходимо получить показания всех датчиков, для этого мы вызываем подпрограмму:

void check_sensor() // Подпрограмма проверки сенсоров.

R_Sensor=analogRead(15); // считываем показания правого датчика

L_Sensor=analogRead(17); // считываем показания левого датчика

delay(10); //задержка для окончания преобразования АЦП

dist_cm = ultrasonic.Ranging(CM); // считываем показания УЗ дальномера

delay(10); // Задержка для окончания преобразования

После получения данных нам нужно их обработать. Сначала мы должны определить свое местоположение, на ринге мы ли нет. Если на ринге проверяем наличие противника в пределах 40 см. Если противника нет, мы его ищем поворачиваясь налево процедура:

void go_left() // поиск цели или движение налево

analogWrite(5, 100); //LEFT MOTOR

analogWrite(6, 100); //RIGHT MOTOR

Значение мощности моторов снижено почти вдвое, если крутиться слишком быстро мы можем по инерции проскочить обнаруженную цель.

Если цель обнаружена, мы должны ее атаковать, двигаясь вперед на полном ходу.

void go_forward() //Атакуем - движение вперед

analogWrite(3, 0); //LEFT MOTOR

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

go_stop(); // Остановка

delay(100); //Ждем 10 мс

go_back(); //Движемся назад

delay(1000); //1 секунду.

go_right(); //Поворачиваем направо

delay(300); //300 мс

go_forward(); //Движемся вперед

delay(300); //300 мс

void go_stop() //остановка

analogWrite(5, 255); //LEFT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

void go_back () //двидение назад

analogWrite(3, 255); //LEFT MOTOR

analogWrite(6, 255); //RIGHT MOTOR

analogWrite(9, 0); //RIGHT MOTOR

void go_right () //поиск цели или движение направо

analogWrite(3, 100); //LEFT MOTOR

analogWrite(5, 0); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 100); //RIGHT MOTOR

void go_forward() //Атакуем движение вперед

analogWrite(3, 0); //LEFT MOTOR

analogWrite(5, 255); //LEFT MOTOR

analogWrite(6, 0); //RIGHT MOTOR

analogWrite(9, 255); //RIGHT MOTOR

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

Полный скетч для скачивания, находится в конце статьи.

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

Архив 1

Архив 2 к статье "Программа робота минисумо".

Если у ВАС возникли вопросы пишите на ФОРУМЕ или в Online чат по робототехнике мы их обсудим!

Внимание! Полное либо частичное копирование материала без разрешения администрации запрещено!

Привет! Желаешь собрать не сложного в сборке робота? Ты пришел по адресу! =) Именно у нас на сайте ты сможешь найти подробные статьи по сборке шаг-за-шагом своего первого робота, а так же многих других роботов, и даже для соревнований.

Мы очень рады, что наши статьи помогут тебе - начинающему робототехнику, освоить эту интереснейшую сферу и прокачать свой скилл в этом направлении. Также хотим отметить, что по данным статьям мы - разработчики сайта SERVODROID проводим занятия в бесплатных кружках робототехники, и нам очень нравится учить и рассказывать что такое BEAM-робототехника всем желающих.

Помоги нашему проекту! Зарегистрируйся на нашем сайте и приходи в наш Online-чат или форум и делись своими поделками и своим прогрессом - ведь именно твоя активность привлекает к робототехнике все больше и больше внимания начинающих - они смотрят на твой успех и хотят стать такими же крутыми, а нам очень приятно видеть что у вас все получается. А если что-то не получается - мы поможем;)