Робот который ездит по линии

от admin

Робот который ездит по линии

Наведите камеру, чтобы скачать приложение

  • Загрузить из AppStore
  • Загрузить из Google Play
  • Загрузить из AppGallery

2004-2023 © Wildberries — модный интернет-магазин одежды, обуви и аксессуаров. Все права защищены. Доставка по всей России.

2004-2023 © Wildberries — модный интернет-магазин одежды, обуви и аксессуаров. Все права защищены. Доставка по всей России.

Робот, ездящий по линии под управлением Arduino

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

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

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

В результате выглядеть он будет так:

Что понадобится

Для нашего примера понадобятся следующие детали:

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

Собираем робота

Сначала соберём робота, установим всю механику и электронику.

Собираем платформу

Для начала прикрепим колёса к моторам.

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

Теперь крепим балансировочный шар.

Отлично! Платформа собрана. Если вам кажется, что колёсам отведено слишком мало места и они трутся о платформу, то скорее всего вам нужно посильнее надавить на колёса, чтобы они плотнее сели на вал мотора.

Крепим сенсоры

Закрепим их, как показано на фото:

Можно было бы выбрать и другое место. Это могло бы сделать контроль проще или сложнее, а самого робота более или менее эффективным. Оптимальное расположение — вопрос серии экспериментов. Для этого проекта просто был выбран такой способ крепления.

Крепим Arduino

Arduino закрепим с противоположной стороны двумя винтиками и гайками.

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

Крепим Motor Shield и соединительные провода

Установим Motor Shield на Arduino и подсоединим соединительные провода. Обратите внимание, чтобы соотвествовать программному коду из примера ниже, моторчики соединены с Motor Shield так: правый — к клеммам M1 с прямой полярностью (плюс к плюсу), а левый — к M2 с обратной (плюс к минусу).

В этом проекте, для экономии времени концы соединительных проводов просто скручены с контактами моторов. При работе «начисто» стоит жёстко припаять провода к моторам.

Крепим Troyka Shield

Присоединяем сверху Troyka Shield и подключаем датчики к 8 и 9 цифровым контактам. В итоге получаем следующую конструкцию:

Программирование

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

Основная идея алгоритма

Пусть у нас усть белое поле, и на нём чёрным нарисован трек для нашего робота. Используемые датчики линии выдают логический ноль, когда «видят» чёрное и единицу, когда «видят» белое.

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

При повороте траектории направо, правый сенсор наезжает на трек и начинает показывать логический ноль. При повороте налево, ноль показывает левый сенсор.

Таким образом получаем простую систему с тремя состояниями:

На вход системы поступает информация с сенсоров. Получаем следующую логику переходов:

Левый Правый Целевое состояние
0 0 STATE_FORWARD
0 1 STATE_RIGHT
1 0 STATE_LEFT
1 1 STATE_FORWARD

Реализация на Arduino

Проблема инертности и её решение

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

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

Эксперимент проведём для разных скоростей. Код программы для эксперимента таков:

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

Таким образом, начиная с некоторого момента у нашего робота нет никакой возможности успеть среагировать и остаться на треке.

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

Для того, чтобы понять зависимость расстояния при заднем ходе от времени, был проведён ещё один замер:

На скорости 50, например, робот проделывал путь, зависящий от времени следующим образом:

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

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

Адаптивное поведение

Перед финальным экспериментом произведём ещё несколько поправок.

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

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

В итоге наш код будет выглядит следующим образом:

Результат

Что дальше?

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

Ozobot — робот, который ходит по линиям

Ozobot — миниатюрный робот, который, впрочем, умеет многое. Основной «хайп» вокруг него возник из-за способа управления роботом: ребенок просто рисует линии в разных направлениях, а робот ходит по ним. И, тем не менее, все не так просто и однобоко. Я коротко расскажу о нем.

Робот Ozobot представлен в двух версиях: Bit и Evo.

Вторая версия (Evо) — более продвинутая с точки зрения исполнения (здесь есть звуковое сопровождение) и возможностей управления (здесь есть Bluetooth, так что можно «рулить» роботом с помощью смартфона).

Однако функция управления со смартфона применительно к данному гаджету совсем неинтересна: основная фишка Ozobot’ов как раз в том, что они умеют ходить по линиям маркера.

Мы поговорим о младшей модели — Ozobot Bit. Это компактный, можно даже сказать, миниатюрный бот, размер которого чуть больше пятака:

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

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

Робот выполнен из прозрачного пластика, что должно, вероятно, заинтересовать ребенка: платки и диоды превращают в воображении модели Ozobot в миниатюрных инопланетян!

С тыльной стороны Ozobot разъем для зарядки.

На самом деле Ozobot можно «нарядить». В комплекте к роботу Bit идет целый набор для кастомизации: кроме двух силиконовых чехлов.

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

Это и забавно, и полезно. Например, в роликах на Youtube Ozobot представлен как инструмент для совместной игры, и если роботов на игровой площадке много, то не потерять свой — единственный шанс только принарядив устройство.

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

Фишка с маркерами

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

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

Подобные наклейки уже приложены к сопроводительным материалам Ozobot Bit, чтобы их можно было потренироваться использовать на распечатанных листах с заданиями:

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

Причем управлять роботом и менять правила можно прямо по ходу!

ПК и приложения

Отсутствие Bluetooth не означает отсутствие возможности работать с мобильными устройствами: в приложении ребенка ждет площадка для рисования.

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

Игра-дискотека и игра на логику. По сюжету последней Bit нужно вывести из лабиринта подставляя ему квадратики с линиями поворотов.

Ценность представляет и специальный сайт для программирования — «Озоблокли». Здесь для робота предстоит создавать алгоритмы, которые он затем будет выполнять.

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

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

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

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

Для начала робот необходимо вызвать меню «Flashing» и откалибровать Bit:

  • Зажать и удерживать кнопку до светового сигнала
  • Поднести к специальному полю на экране
  • Дождаться зеленого сигнала о том, что калибровка закончена

После этого робот нужно будет еще раз включить, разово нажав на кнопку, и уже затем нажать «Load Bit», не снимая робот с дисплея. Если процесс проходит корректно, робот будет мигать зеленым. При красном сигнале на Bit, придется все переделать.

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

Ozobot Bit — что в итоге?

И мне, и детям робот Ozobot Bit показался забавным, а впечатления от теста остались положительными. Положа руку на сердце, сказать, что сложные задачи с ним, типа программирования, кодирования мы выполняли неохотно и постольку, поскольку. Работа с приложением в логической его части вполне оправдана.

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

Робот который ездит по линии

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

По сути, существует два типа роботов, движущийся по линии: первый — это робот движущийся по черной линии, а второй — робот движущийся по белой линии. Данный робот фактически видит линию и следует по ней. Хотя идея звучит просто, но не самые умные роботы, подобные этому, практически используются во многих областях, таких как производство или склад. Мы же собрали своего робота, движущегося по линии, с помощью Arduino UNO. Демонстрационное видео, можете посмотреть ниже:

Движение по линии

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

Белая поверхность

Черная поверхность

В этом роботе, на базе Arduino, мы использовали ИК-передатчики и ИК-приемники, также называемые фотодиодами. Данные фотодиоды используются для отправки и получения сигнала света. ИК-передатчик передает инфракрасное излучение. Когда инфракрасные лучи падают на белую поверхность, они отражаются обратно и улавливаются фотодиодами, которые генерируют некоторые изменения напряжения. Когда инфракрасный свет падает на черную поверхность, то свет поглощается черной поверхностью, и никакие лучи не отражаются обратно, поэтому фотодиод не получает никакого сигнала. В нашем же роботе, когда датчик обнаруживает белую поверхность, Arduino получает, в качестве входных данных, сигнал (1) , а когда видит черную линию, то Arduino получает сигнал (0).

Описание схемы

Всего робота, движущегося по линии, можно разделить на 3 части: часть датчиков, часть управления и часть драйвера.

Датчики:

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

Управление:

Arduino UNO используется для управления всем процессом робота, движущегося по линии. Выходы компараторов подключены к цифровым пинам (контактам) 2 и 3 платы Arduino. Arduino считывает эти сигналы и отправляет команды в схему драйвера для правильной работы трансмиссии.

Драйвер:

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

Работа робота движущегося по линии

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

Работа робота

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

Робот движется вперед

Если левый датчик попадает на черную линию, то робот поворачивает влево.

Робот поворачивает влево

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

Робот поворачивает вправо

Если оба датчика попадают на черную линию, робот останавливается.

Робот останавливается

Принципиальная электрическая схема

Схема движущегося по линии робота

Принципиальная электрическая схема робота

Полная принципиальная схема робота движущегося по линии на Arduino показана выше. Как видите, выход компараторов напрямую подключен к цифровым контактам 2 и 3 платы Arduino. Входные контакты 2, 7, 10 и 15 драйвера двигателя подключены к цифровым контактам платы Arduino 4, 5, 6 и 7 соответственно. И один двигатель подключен к выходным контактам драйверов двигателей 3 и 6, а другой двигатель подключен к контактам 11 и 14.

Описание программы

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

Читать:
Сколько платины в термопаре

Похожие публикации