[Перевод] Робот из LEGO и Arduino, обходящий препятствия

Мы обожаем LEGO и Crazy Circuits [LEGO-совместимая электроника / прим. перев.], поэтому решили скомбинировать их в простого и интересного робота, умеющего обходить препятствия. Мы покажем, как собрать такого робота и подробно опишем этот процесс. Ваша версия робота может не полностью совпадать с нашей.

Приводим список необходимой электроники и деталек LEGO. Не бойтесь экспериментировать с ними.
10c0c279d1e41130ff65431ec623aaf8.jpg

abde7a47545f6be75593697a33e9ee7e.jpg

b7a042630b385e6a261dfe3ccb542b8d.jpg

Комплектующие


Электроника


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

LEGO


Мы использовали различные детальки, а вам рекомендуем сделать так, как вы считаете нужным, и из того, что есть у вас на руках. Важно, чтобы у вас был способ приделать сервомоторы снизу, ультразвуковой датчик — так, чтобы он смотрел вперёд, и каким-то образом закрепить плату и источник питания. Для этого можно использовать двусторонний скотч, резинки, липучку. Приводим ссылки на наши детальки в магазине BrickOwl, однако вы можете купить их где угодно, где продаётся LEGO и совместимые наборы.

Шаг 1: строим шасси из LEGO


6a75aa47fc46d804dbe138e549af87fb.jpg

Мы начали с пластинки LEGO 6×12, это был минимальный размер, который нас устроил. Можно использовать более крупную, однако мельче уже будет сложнее.

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

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

Шаг 2: добавляем колёса


5b64653ba9704711e28bfaf74f47014e.jpg

89cd192ec16b49af9d4a4863fc56a7c7.jpg

96672757c99b606b91a38396ea15492f.jpg

c64a1094eade87e458b1bada2b7a8007.jpg

f55d5a734ea60ce4981960d61fa66260.jpg

cb4bf974d586f3d1f837bd4244fbac4f.jpg

5c7810299592a68cd7069742f2a81fef.jpg

Каждый сервомотор нужно разместить снизу шасси. В итоге нам понадобились следующие комплектующие:

  • Ось 4 LEGO со стопором (87083)
  • Втулка LEGO (32123 / 42136)
  • Круглый кирпичик LEGO 2×2 (3941 / 6143)


Для закрепления двух моторов нужно по 4 штуки каждой из комплектующих. После их закрепления добавляем колесо: LEGO Wedge Belt Wheel (4185 / 49750).

Как и с другими модельками LEGO, вариантов тут масса! У нас получилось с теми комплектующими, что мы перечислили, а вы можете попробовать что-нибудь другое.

Шаг 3: добавляем ролик


4dbb2fc2795e81a9a44d7ab80614f3d1.jpg

47dc901e2e77130dd66e2677cfa417ad.jpg

829eee5fc82d4afc2ee83daaa72d565b.jpg

3ceba1859fbacaaca3b809e8b17a437e.jpg

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

Для его закрепления потребовались следующие детали:

  • LEGO EV3 Technic Ball Pivots Set 5003245
  • LEGO Technic Cross Block Beam 3 with Four Pins (48989 / 65489)
  • LEGO Technic Brick 1×6 with Holes (3894)


В предыдущей версии мы использовали просто круглые детали LEGO в качестве «ноги», и на гладкой поверхности это работало нормально. Но не работало на ковре или не гладком полу. Если у вас нет ролика, рассмотрите вариант с такой «ногой».

Шаг 4: добавляем датчик расстояния


e67a57403a0aeff7e97ba788936808e7.jpg

f6d5d336f5b8c8926a5705c50e944208.jpg

3e482a020cb07bbdffdb8f701b4675f5.jpg

Ультразвуковой датчик расстояния нужно закрепить на передней части робота, чтобы он «видел», куда едет, и понимал, когда нужно остановиться, чтобы не столкнуться с препятствием.

Для датчика мы распечатали совместимый с LEGO корпус на 3D-принтере. Модель выложена на сайте Thingiverse: www.thingiverse.com/thing:3171004

Если 3D-принтера у вас нет, придумайте, как удержать датчик при помощи деталек LEGO, клейкой ленты, резинок, хомутов и т.п. Важно, чтобы он смотрел прямо — туда, куда едет робот, когда движется вперёд.

Шаг 5: добавляем плату


6dee3836b7cda7626e3489aba20e8a4e.jpg

7d903ee602f2c57bbcd9877379bec799.jpg

50a892303f1d7eb47356f6f89c4e996d.jpg

6563e0a55202b3cbfc9a9658d93ae11c.jpg

Плата — мозг всей операции. Она размещается наверху кубиков LEGO, поэтому её крепить легко.

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

Плату размещаем так, чтобы USB-кабель питания было легко воткнуть. Нам повезло найти в коробке с кабелями очень короткий USB-кабель.

Теперь можно подключать датчик и моторы!

По датчику: разъём echo нужно подключить к контакту 3 на плате, разъём trigger — к контакту 5, VCC — к 5 В, Gnd — к GND. Таким образом датчик будет получать питание и общаться с платой.

Затем нужно подключить каждый из моторов. Это сделать легко — коричневые провода на GND, красные — на 5 В, оранжевые — к контакту D6 для левого мотора и D9 для правого.

Шаг 6: программируем Robotics Board


b84400ee63da627752829e2a333ec7fa.jpg

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

Свой код мы выложили в репозиторий на GitHub:

github.com/BrownDogGadgets/CrazyCircuits/tree/master/Projects/Avoidance%20Robot

Код простой, в нём много комментариев, чтобы было понятно, что за что отвечает.

Вам также потребуется библиотека NewPing

bitbucket.org/teckel12/arduino-new-ping/wiki/Home

Шаг 7: пускаем робота погулять


6dd9fca4309d89bb354f573166a5caac.jpg

51e885ece3d589d3c1a14e9fddaa3b09.jpg

22232672bda242f8d88fcee01d3d23ea.jpg

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

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

Мы построили простую шестиугольную «арену» из картона, чтобы роботу было где поездить. Не бойтесь экспериментировать с тем, что есть у вас.

Шаг 8: дальнейшее развитие


15fd800877f7365417f6396782a5fd28.jpg

63ea58968559849c5694378cf7cae320.jpg

Если вам интересно развивать этот проект, вот вам вопросы:

— что вы узнали, собирая робота?
— что повлияло на ваш выбор деталей?
— поедет ли робот быстрее, если увеличить ему колёса?

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

// сколько миллисекунд робот отъезжает назад

int goBackwardTime = 1000;

// сколько миллисекунд робот поворачивается

int turnRightTime = 1000;

© Habrahabr.ru