- Концепция робота-следящего за линией
- Необходимые компоненты
- Принципиальная электрическая схема
- Программирование Atmega16 для робота-следящего за линией
Здесь мы будем строить еще один проект с микроконтроллером AVR Atmega16. Если вы новичок в микроконтроллерах AVR, вы можете обратиться к предыдущим проектам AVR и руководствам.
Создание робота всегда вызывает острые ощущения для всех любителей электроники. И этот азарт можно усилить, если робот сможет автоматически выполнять некоторые действия без каких-либо внешних инструкций. Один из наиболее часто создаваемых новичками в электронике роботов - это робот Line Follower. Как следует из названия, робот будет следовать за линией, нарисованной на поверхности. Линия не обязательно должна быть прямой. Также линии могут быть любого цвета.
Ранее мы создавали проекты роботов-следящих за линией, используя разные контроллеры:
- Робот следящего за линией с использованием микроконтроллера 8051
- Робот следящего за линией с использованием микроконтроллера PIC
- Робот следящего за линией, использующий Arduino
- Робот-последователь линии с использованием Raspberry Pi
- Робот следящего за линией, использующий панель запуска MSP430
Сегодня мы будем использовать микроконтроллер AVR для создания робота-последователя линии.
В основном для обнаружения линий используются инфракрасные датчики. Инфракрасные датчики хорошо обнаруживают белые или черные поверхности. Хотя вы можете использовать другие сложные датчики, которые смогут определять все цвета и могут создать робота, который может следить за всеми цветовыми линиями. Робот должен уметь обнаруживать линию, даже если путь изменен путем изменения угла, и продолжать движение по линии. Кроме того, он должен останавливаться там, где стоп-зона подходит к линии.
Роботы-следящие за линией сегодня широко используются в обрабатывающей промышленности, медицине, бытовом применении и на товарных складах. Роботы не ограничиваются только этими приложениями и могут расширить свои приложения во многих будущих приложениях.
Концепция робота-следящего за линией
Инфракрасные датчики являются ключевыми фигурами в этом проекте. Инфракрасные датчики размещаются спереди робота для отслеживания нарисованной черной линии и поверхности. Робот размещается между линией и с помощью инфракрасных датчиков отслеживает линию. ИК-датчики передают показания микроконтроллеру, и с помощью считывания ИК-сигналов микроконтроллер перемещает двигатели влево или вправо и снова выводит робота на путь.
Робот-следящий за линией может отслеживать линию с помощью ИК-датчика. Этот датчик имеет ИК-передатчик и ИК-приемник. ИК-передатчик (ИК-светодиод) излучает свет, а приемник (фотодиод) ждет, пока переданный свет вернется обратно. ИК-свет вернется обратно, только если он будет отражен от поверхности. Принимая во внимание, что все поверхности не отражают ИК-свет, только белая цветная поверхность может полностью их отражать, а черная цветная поверхность будет полностью наблюдать их, как показано на рисунке ниже. Узнайте больше о модуле ИК-датчика здесь.
Теперь мы будем использовать два ИК-датчика, чтобы проверить, идет ли робот по пути с линией, и два двигателя, чтобы исправить положение робота, если он уходит за пределы пути. Эти двигатели требуют большого тока и должны быть двунаправленными; поэтому мы используем модуль драйвера двигателя, такой как L293D. Нам также понадобится микроконтроллер, такой как ATmega16, чтобы управлять двигателями на основе значений с ИК-датчика. Упрощенная блок-схема того же показана ниже.
Эти два ИК-датчика будут размещены по одному по обе стороны от линии. Если ни один из датчиков не обнаруживает черную линию, микроконтроллер AVR дает указание двигателям двигаться вперед, как показано ниже.
Если левый датчик показывает черную линию, то микроконтроллер дает команду роботу повернуть налево, вращая только правое колесо.
Если правый датчик показывает черную линию, то микроконтроллер дает команду роботу повернуть направо, вращая только левое колесо.
Если оба датчика показывают черную линию, робот останавливается.
Таким образом, робот сможет следовать за линией, не выходя за пределы трассы. Теперь давайте посмотрим, как выглядят схема и код.
Необходимые компоненты
- Мотор-редукторы постоянного тока (2 шт.)
- Модуль ИК-датчика (2 шт.)
- Модуль L293D
- Беспроводной источник питания (например, аккумулятор, внешний аккумулятор)
- Робот Шезлонги
- Микроконтроллер Atmega16 IC
- Кристаллический осциллятор 16 МГц
- Два конденсатора по 100 нФ
- Два конденсатора 22 пФ
- Нажать кнопку
- Перемычки
- Макетная плата
- USBASP v2.0 (для программирования Atmega16)
Принципиальная электрическая схема
Подключите все компоненты, как показано ниже на принципиальной схеме.
Программирование Atmega16 для робота-следящего за линией
Здесь Atmega16 запрограммирован с использованием USBASP и Atmel Studio7.0. Если вы не знаете, как программировать Atmega16 с помощью USBASP, перейдите по ссылке. Полная программа предоставляется в конце проекта, просто загрузите программу в Atmega16 с помощью программатора JTAG и Atmel Studio 7.0, как описано в предыдущем руководстве.
Мы постарались сделать код максимально коротким и простым. Итак, в этом коде мы используем макросы и регистры специальных функций.
if (bit_is_clear (PINA , leftSen)) { // проверяем, выключен ли левый датчик
Этот оператор проверяет, является ли PA0, к которому подключен левый датчик, LOW или HIGH.
Если вы хотите узнать больше об этом операторе и других макросах, перейдите по этой ссылке
Есть четыре условия, которым мы следуем, чтобы считывать данные с помощью ИК-датчиков. Инфракрасные датчики названы в соответствии с их расположением спереди робота. Левый ИК-датчик - это левый датчик, а правый ИК-датчик - это правый датчик. Следующие условия будут определять движение робота.
Мы написали код в соответствии с вышеуказанными условиями. Единственное изменение состоит в том, что мы используем только два входных контакта L293D для управления обоими двигателями.
Полный код с демонстрационным видео приведен ниже.