Занятие 8.
Датчик линии, движение по линии на одном датчике.

Робототехника на Hobot L в mBlock Scratch
Движение по линии используется для нахождения роботом пути на заранее размеченной местности. Такое используется, например, на предприятиях в цехах, на складах, где на полу рисуют линии, по которым должен двигаться робот, перевозя грузы. Также во многих робототехнических соревнованиях используется движение робота по линии.

Описание датчика линии

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

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

Опрашивается с помощью цифрового чтения (высокий уровень 1 и низкий уровень 0)

Подключение датчика линии

Рисунок. Наименование портов Hobot L

Подключите датчик линии к порту 1 Hobots L
Если моторы робота не подключены - подключите левый мотор робота к порту М1, правый мотор - к порту М2.

Проверка датчика линии - управление одним мотором

  1. Напишем программу включения одного мотора по наличию линии под датчиком. Общий алгоритм:

Если под датчиком черное - включить мотор

Иначе - выключить мотор

Для опроса датчика линии используется команда раздела Пин -> цифровой ввод: пин “номер пина”. Эта команда выдает “Истина” если на пине высокий уровень и “Ложь”, если на пине низкий уровень.
Напишем подробный алгоритм. Не забудьте о том, что опрос датчика и реакция на опрос должны постоянно повторяться (быть в бесконечном цикле), если цикла не будет - робот один раз проверит датчик, выполнит реакцию и закончит программу. Для левого датчика линии, подключенного к пину 11, создадим переменную “Левый Линия”.
  1. Начало
  2. Задать для Мотор левый Скорость значение 6
  3. Задать для Левый Линия значение 11
  4. Повторять всегда:
  • Если цифровой ввод пин “Левый Линия”:
  • Задать на цифровой пин Мотор левый Скорость значение “высокий”
  • Иначе:
  • Задать на цифровой пин Мотор левый Скорость значение “низкий”

Датчик линии - управление двумя моторами для остановки на линии

Сделаем так, чтобы робот шел по белому полю и останавливался на черной линии:

Если датчик линии на белом - робот движется вперёд

Иначе - робот стоит

Для этого изменим предыдущую программу, добавив включение второго мотора:
  1. Начало
  2. Задать для Мотор левый Скорость значение 6
  3. Задать для Мотор правый Скорость значение 6
  4. Задать для Левый Линия значение 11
  5. Повторять всегда:
  • Если цифровой ввод пин “Левый Линия”:
  • Задать на цифровой пин Мотор левый Скорость значение “высокий”
  • Задать на цифровой пин Мотор правый Скорость значение “высокий”
  • Иначе:
  • Задать на цифровой пин Мотор левый Скорость значение “низкий”
  • Задать на цифровой пин Мотор правый Скорость значение “низкий”
Таким образом, видим, что результат работы датчика, логика которого такова:

Результат условия цифровой ввод пин “11”:

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

Управление двумя моторами для остановки на линии с изменением направления

Чтобы робот двигался именно в том направлении, в котором нужно, добавим управление направлениями с использованием контактов 4 и 7 (подробнее см. занятие по управлению направлениями моторов). Для упрощения понимания программы создадим через Мои блоки и используем в ветвлении функции Вперёд и Стоп:

  1. Начало
  2. Задать для Мотор левый Направление значение 7
  3. Задать для Мотор правый Направление значение 4
  4. Задать для Мотор левый Скорость значение 6
  5. Задать для Мотор правый Скорость значение 5
  6. Задать для Левый Линия значение 11
  7. Повторять всегда:
  • Если цифровой ввод пин “Левый Линия”:
  • Вперёд
  • Иначе:
  • Стоп

Определить Вперёд:

  • Задать на цифровой пин Мотор левый Направление значение “низкий” // высокий,
  • если нужно другое направление
  • Задать на цифровой пин Мотор правый Направление значение “низкий” // высокий,
  • если нужно другое направление
  • Задать на цифровой пин Мотор левый Скорость значение “высокий”
  • Задать на цифровой пин Мотор правый Скорость значение “высокий”

Определить Стоп:

  • Задать на цифровой пин Мотор левый Скорость значение “низкий”
  • Задать на цифровой пин Мотор правый Скорость значение “низкий”
Если Вы хотите, чтобы робот двигался без подключенного к нему провода, переключитесь на режим Загрузка, чтобы загрузить программу в робота:
Также нужно изменить код, в качестве блока для исполнения команды Начало программы использовав блок При запуске Arduino Uno:
Загрузите измененную программу в робота, воспользовавшись кнопкой Загрузить

Управление двумя моторами для движения по линии на одном датчике

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

Общий алгоритм:

Если датчик на белом - ехать Вперед Влево

Если датчик на черном - ехать Вперед Вправо

Детализированный алгоритм:
  1. Начало
  2. Задать для Мотор левый Направление значение 7
  3. Задать для Мотор правый Направление значение 4
  4. Задать для Мотор левый Скорость значение 6
  5. Задать для Мотор правый Скорость значение 5
  6. Задать для Левый Линия значение 11
  7. Повторять всегда:
  • Если цифровой ввод: пин Левый Линия: // (под датчиком есть линия)
  • Вперед Вправо
  • Иначе
  • Вперед Влево
Для реализации данного алгоритма нужно создать две функции - благодаря которым робот едет Вперед Вправо (сворачивая по дуге вправо) и Вперед Влево (сворачивая по дуге влево). Для этого используется управление скоростями моторов, общий алгоритм:

Определить Вперёд Влево:

  1. Левый мотор едет вперёд медленно
  2. Правый мотор едет вперёд быстро

Определить Вперёд Вправо:

  1. Левый мотор едет вперёд быстро
  2. Правый мотор едет вперёд медленно
Примечание: для облегчения запоминания представьте, что сторона робота, на которой мотор едет быстрее, как бы “обгоняет” другую сторону, Вы сразу поймете, в каком направлении сворачивает робот (также см. занятие по управлению робота с помощью Bluetooth)
Детализированный алгоритм:

Определить Вперёд Влево:

  1. Задать на цифровой пин Мотор левый Направление значение “низкий”
  2. Задать на цифровой пин Мотор правый Направление значение “низкий”
  3. Установить на порт Мотор левый Скорость ШИМ 100
  4. Установить на порт Мотор правый Скорость ШИМ 200

Определить Вперёд Вправо:

  1. Задать на цифровой пин Мотор левый Направление значение “низкий”
  2. Задать на цифровой пин Мотор правый Направление значение “низкий”
  3. Установить на порт Мотор левый Скорость ШИМ 200
  4. Установить на порт Мотор правый Скорость ШИМ 100
Примечание: скорости 120 и 200 приведены ориентировочно и их надо будет отлаживать на конкретной конструкции.
Made on
Tilda