Новости УЦ

Программируем движение робота КЛИК по линии!

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

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

В этом материале мы разберем, принцип работы датчика линии, который позволяет роботу самостоятельно двигаться по черной или белой линии, куда бы она не повернула. Для этого нам необходимо подключить датчик линии к порту 1, 2, 5 или 6 порту (на ваш выбор).
В роботе «Клик» используется двойной датчик линии, который предназначен для определения границ чёрной и белой поверхности. Данный датчик состоит из оптического модуля, содержащего инфракрасный излучатель (светодиод) и фототранзистор (фотодиод). Они определяют цвет поверхности по отражённому сигналу.
Как работает датчик линии:
Светодиод излучает свет, который отражается от поверхности карты. В случае если свет отражается от белой поверхности, то отраженный сигнал будет сильным, а если от темной поверхности, то слабым, поскольку черный цвет поглощает свет.
Фотодиод обрабатывает отраженный сигнал, измеряя его интенсивность, и отправляет значение 1, если сигнал сильный и 0 если сигнал слабый. Далее датчик собирает сигналы от всех сенсоров и определяет положение робота.
Датчик определяет 4 состояния:
• 00 – оба сенсора на черном;
• 01 – правый на белом, левый на черном;
• 10 – левый на белом, правый на черном;
• 11 – оба на белом.

Диапазон работы датчика составляет 1-2 см.

Ниже представлена таблица, в которой указаны подходящие порты для датчика линии и соответствующие им пины. Левый и правый каналы отвечают за сенсоры на датчике линии.
Перейдём к блокам, с помощью которых мы можем запрограммировать датчик линии.
Вот основные блоки:
1.Блок, с помощью которого указывается к какому порту подключён датчик. В нём мы указываем пин одного из двух сенсоров на датчике, соответственно, таких блоков должно быть два.
2.Логический блок, который будет проверять, совпадает ли результат обработки датчика с указанным вами условием.
3.Логический блок, который объединяет операции, производимые с датчиком, в одно логическое выражение
4.Блок условий "Если, то"
5.Бесконечный цикл «Всегда», с помощью которого условие проверяется постоянно.
Теперь давайте с помощью данных блоков соберём небольшую программу, которая поможет вам понять логику работы датчика линии.

Вводные: датчик линии подключён к 6-му порту, двигатели в порты М1 и М2 соответственно.
Логика построения программы состоит в следующем:

1. Скрипт срабатывает после включения контроллера.
2. Условие будет проверяться постоянно, так как находится в бесконечном цикле.
3. В условие входит проверка обоих сенсоров датчика на нахождение на чёрной линии.
4. Если условие выполняется, то робот движется вперёд по чёрной линии.

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

Давайте запрограммируем робота на движение по криволинейной траектории. Для этого нам понадобится немного иной блок условия:
Данный блок условия позволяет выполнять определённый скрипт, если условие верно и иной, если условие неверно.
Давайте рассмотрим по подробнее принцип действия алгоритма движения по криволинейной траектории (программа выше):

1. Скрипт запускается после включения контроллера.
2. Благодаря бесконечному циклу «Всегда» все условия будут проверяться в каждый момент времени.
3. Первое условие проверяет, находятся ли одновременно оба сенсора датчика на чёрной линии или нет. Если условие не удовлетворяется, то программа будет выполнять ту установку, которая дана во второй части условия - ИНАЧЕ. Но так как в ней присутствует ещё одно условие ЕСЛИ-ИНАЧЕ, то программа будет проверять следующим именно её.
4. В условиях указаны пины 8 и 2, так как наш датчик подключён к 6 порту.
5. В условиях присутствуют разные значения для сенсоров: 00, 10, 01. Обратите внимание на эту настройку.
6.При условии, что оба сенсора принимают значение 0, то есть «видят» чёрный цвет, робот двигается вперёд. Об этом нам говорят значения «низкий» в обоих блоках движения, отвечающих за направление движения.
7.Условие, что левый сенсор «видит» белый цвет, а правый – чёрный, означает, что робот съехал с чёрной линии в левую сторону (значения 1 и 0). Соответственно, нам необходимо вернуть робота на чёрную линию, поэтому мы меняем направление движения правого мотора, выбирая значение высокий, вместо значения «низкий». Аналогично со значением сенсоров 0 и 1, только в этом случае мы задаём обратное направление уже левому колесу.

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

А теперь рассмотрим ситуацию, когда на пути робота, движущегося по чёрной линии, встречаются Г-образные и Т-образные перекрёстки.

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

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

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

ПИНы 13 (левый датчик) и 8 (правый датчик) отвечают за центральные сенсоры, а 12 и 2 пины – за крайние.

Наша программа будет выглядеть следующим образом (для приближения нажмите на изображение):
Вы можете скачать программу и открыть ее в ПО - посмотреть
Перед тем, как мы рассмотрим по подробнее принцип действия алгоритма, обратите ваше внимание на очень полезную таблицу ниже, которая наглядно показывает, что «видят» сенсоры в условиях выполнения программы выше:
Принцип действия алгоритма:

1. Скрипт запускается после включения контроллера.
2. Благодаря бесконечному циклу «Всегда» все условия будут проверяться в каждый момент времени.
3. Первое условие проверяет нахождение центральных сенсоров на чёрной линии, а крайних – на белом фоне.

ПИНы и их значения:
Если данное условие выполняется, то робот двигается вперёд.
Второе условие, которое находится в части ИНАЧЕ первого условия, проверяет, съехал ли наш робот с чёрной линии вправо.
Если данное условие выполняется, то робот возвращается на чёрную линию, выключая работу только левого мотора. Таким образом проверяются все условия, связанные с обнаружением сенсорами белого фона и чёрной линии. Условия, которые отвечают за обнаружение Г-образного перекрёстка с поворотом направо:
При выполнении данного условия робот едет прямо.

Последнее условие – это проверка нахождения всех 4-х сенсоров на белом фоне. При выполнении условия наш робот едет в обратном направлении до тех пор, пока не найдёт хотя бы одним сенсором чёрную линию. Тогда снова выполняется проверка условий выше.

Если же ни одно из всех условий не выполняется, то робот остановится. Об этом нам говорит часть ИНАЧЕ последнего условия.

Обращаем ваше внимание на то, что данная программа по своей сути является бесконечной, то есть остановки робота не должно быть. Последнее условие, в котором присутствует остановка двигателей в части ИНАЧЕ, является проверочным. Если ваш робот во время исполнения данной программы совершил остановку, то необходимо опытным путём выяснить, что «видят» сенсоры, а после задать условие для этих значений.

В этой статье мы с вами разобрали принцип работы датчика линии для осуществления движения робота по чёрной криволинейной траектории с Г- и Т-образными перекрёстками.
2025-10-01 14:57