Движущийся вдоль линии робот на микроконтроллере AVR ATmega16


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

Движущийся вдоль линии робот на микроконтроллере AVR ATmega16: внешний вид конструкции

Для обнаружения линии обычно используются инфракрасные сенсоры – они хорошо подходят для обнаружения (распознавания) белых или черных поверхностей. Но если вы будете использовать более сложные сенсоры, то вы можете сделать робота, который сможет следовать вдоль линии любого цвета. Робот должен распознавать линию даже если она поворачивает под каким то углом. Также он должен уметь останавливаться если встретит на линии зону остановки.

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

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

Принцип работы робота движущегося вдоль линии

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

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

Белая поверхность отражает инфракрасный свет

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

Внешний вид инфракрасного сенсора

Таким образом, мы будем использовать два инфракрасных сенсора чтобы проверять находится ли робот на пути вдоль линии, и два двигателя чтобы корректировать движение робота если он отклонится от этого маршрута. Поскольку эти двигатели требуют достаточно большого тока и должны быть двунаправленными (реверсивными) мы будем использовать драйвер мотора, например, L293D. Микроконтроллер будет нам необходим для управления двигателями основываясь на показаниях инфракрасных сенсоров. Упрощенные диаграммы этого процесса показаны на рисунках ниже.

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

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

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

Робот должен повернуть влево

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

Робот должен повернуть вправо

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

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

Необходимые компоненты

  1. Микроконтроллер ATmega16 (купить на AliExpress).
  2. Батарейка или аккумулятор с напряжением 5 Вольт.
  3. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  4. Двигатель постоянного тока (2 шт.).
  5. Инфракрасный датчик (2 шт.) (купить на AliExpress).
  6. Драйвер двигателя L293D (купить на AliExpress).
  7. Кварцевый генератор 16 МГц (купить на AliExpress).
  8. Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
  9. Конденсатор 22 пФ (2 шт.) (купить на AliExpress).
  10. Шасси робота.
  11. Кнопка.
  12. Макетная плата и соединительные провода.

Работа схемы

Схема устройства приведена на следующем рисунке.

Движущийся вдоль линии робот на микроконтроллере AVR ATmega16: схема соединений

Инфракрасные сенсоры подключаются к PORTA микроконтроллера. Управляющие команды на драйвер мотора L293D подаются с PORTC микроконтроллера. Оба электродвигателя управляются при помощи драйвера L293D.

Исходный код программы на языке С (Си) с пояснениями

Мы постараемся сделать код программы настолько коротким насколько это возможно. Для этого мы будем использовать макросы (Macros) и регистры специальных функций.

if(bit_is_clear(PINA,leftSen)){ // проверить выключен ли левый сенсор

Это выражение проверяет находится ли контакт PA0 микроконтроллера, к которому подсоединен левый сенсор, в состоянии LOW или HIGH.

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

Условия, определяющие алгоритм движения робота

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

Видео, демонстрирующее работу схемы

(2 голосов, оценка: 5,00 из 5)
Загрузка...
2 254 просмотров

Комментарии

Движущийся вдоль линии робот на микроконтроллере AVR ATmega16 — 7 комментариев

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

      • У меня не работает код, эмулировал просто работу в протеусе 8
        Ничего не работает, подскажите в чем может проблема?
        Может код не полный, и в какой программе его компилировать?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *