- Необходимые материалы:
- Концепции последователя линии
- Принципиальная схема и пояснения:
- Программирование микроконтроллера PIC:
- Последователь линии PIC в действии:
Робот-следящий за линией - простой, но увлекательный робот, который может построить большинство студентов / любителей. В этом уроке мы узнаем, как работает робот-следящий за линией и как мы можем его построить, используя микроконтроллер PIC PIC16F877A. PIC16F877A - это 40-контактный многоцелевой микроконтроллер от Microchip, мы использовали эту микросхему в нашей полной серии руководств по PIC. Если вы новичок, возможно, вам захочется взглянуть на эти руководства по PIC, чтобы изучить основы этой ИС и то, как загружать программы в микроконтроллер. Поскольку мы уже рассмотрели эту информацию в наших руководствах, мы пропустим их в объяснении ниже.
Если вы интересуетесь робототехникой, вы должны быть хорошо знакомы с названием « Робот-следящий за линией ». Этот робот может следовать по линии, просто используя пару датчиков и двигателей. Этот робот дает вам пространство для бесконечного развития, и такие роботы, как Kiva (складской робот Amazon), являются примером этого. Вы также можете проверить других наших роботов-последователей линии:
- Робот следящего за линией с использованием микроконтроллера 8051
- Робот следящего за линией, использующий Arduino
- Робот-последователь линии с использованием Raspberry Pi
Необходимые материалы:
- PIC16F877A
- ИК-датчик (2 шт.)
- Редукторный двигатель постоянного тока (2Nos)
- Драйвер двигателя L293D
- Шезлонги (также можно построить свои собственные из картона)
- Внешний аккумулятор (любой доступный источник питания)
Концепции последователя линии
Робот-следящий за линией может отслеживать линию с помощью ИК-датчика. Этот датчик имеет ИК-передатчик и ИК-приемник. ИК-передатчик (ИК-светодиод) излучает свет, а приемник (фотодиод) ждет, пока переданный свет вернется обратно. ИК-свет вернется обратно, только если он будет отражен от поверхности. Принимая во внимание, что все поверхности не отражают ИК-свет, только белая цветная поверхность может полностью их отражать, а черная цветная поверхность будет полностью наблюдать их, как показано на рисунке ниже. Узнайте больше о модуле ИК-датчика здесь.
Теперь мы будем использовать два ИК-датчика, чтобы проверить, идет ли робот по пути с линией, и два двигателя, чтобы исправить положение робота, если он уходит за пределы пути. Эти двигатели требуют большого тока и должны быть двунаправленными; поэтому мы используем модуль драйвера двигателя, такой как L293D. Нам также понадобится микроконтроллер, такой как PIC, для управления двигателями на основе значений ИК-датчика. Упрощенная блок-схема того же показана ниже.
Эти два ИК-датчика будут размещены по одному по обе стороны от линии. Если ни один из датчиков не обнаруживает черную линию, микроконтроллер PIC дает указание двигателям двигаться вперед, как показано ниже.
Если левый датчик показывает черную линию, то микроконтроллер дает команду роботу повернуть налево, вращая только правое колесо.
Если правый датчик показывает черную линию, то микроконтроллер дает команду роботу повернуть направо, вращая только левое колесо.
Если оба датчика показывают черную линию, робот останавливается.
Таким образом, робот сможет следовать за линией, не выходя за пределы трассы. Теперь давайте посмотрим, как выглядят схема и код.
Принципиальная схема и пояснения:
Полная принципиальная схема этого робота-следящего за линией на базе PIC показана ниже.
В схеме используются два ИК-датчика и пара редукторных двигателей постоянного тока, а также модуль привода двигателя, как показано выше. Модуль драйвера двигателя, используемый в этом проекте, - L293D, нам понадобится драйвер двигателя, потому что выходной вывод микроконтроллера PIC не может подавать ток, достаточный для работы двигателей. Этот модуль будет питаться напрямую от источника питания (5 В), как показано на схеме. Модуль имеет четыре контакта (по два для каждого двигателя), которые подключены к PIC для управления направлением двигателей. У нас также есть два ИК-датчика, которые действуют как вход для микроконтроллера PIC. Эти датчики будут двигаться вверх (1), если они находятся над белой поверхностью, и будут опускаться (0), если они будут над черной поверхностью. Полное соединение контактов показано в таблице ниже.
S.No |
Подключено от |
Соединен с |
1 |
ИК-датчик Левый вывод |
RD2 (вывод 21) |
2 |
ИК-датчик Прямой вывод |
RD3 (вывод 22) |
4 |
Мотор 1, канал A, вывод |
RC4 (вывод 23) |
5 |
Двигатель 1 Канал B, контакт |
RC5 (вывод 25) |
6 |
Мотор 2, канал A, штифт |
RC6 (контакт 26) |
7 |
Мотор 2, канал B, контакт |
RC7 (вывод 27) |
В фактическом оборудовании я использовал блок питания, который выдает выходное напряжение +5 В непосредственно через порт USB; поэтому я обошел регулятор напряжения 7805 и запитал PIC, датчики и двигатели, используя его. Вы можете сделать то же самое, используя батарею 12 В вместе с регулятором, как показано на схеме.
Программирование микроконтроллера PIC:
Когда вы будете готовы со своим оборудованием, пора начинать программировать. Полная программа этого проекта PIC Line Follower Робот приводится в конце этой страницы. Однако важные фрагменты объясняются ниже.
Инициализируйте контакты ввода-вывода следующими строками. 2 контакта ИК-датчика действуют как вход, а четыре контакта двигателя - как выходные контакты.
TRISD2 = 1; TRISD3 = 1; // Закрепляем контакты ИК-датчика как input TRISC4 = 0; TRISC5 = 0; // Выводы двигателя 1 объявлены как выход TRISC6 = 0; TRISC7 = 0; // Вывод двигателя 2 объявлен как выход
Теперь нам нужно прочитать состояние ИК-датчика и соответственно управлять двигателем. Например, если оба датчика находятся на высоком уровне (не попадают под черную линию), мы перемещаем оба двигателя вперед, как показано в программе ниже.
if (RD2 == 1 && RD3 == 1) // Оба датчика не выходят за черту {RC4 = 0; RC5 = 1; // Мотор 1 вперед RC6 = 1; RC7 = 0; // Двигатель 2 вперед}
Если левый датчик пересекает черную линию, мы делаем поворот вправо, удерживая двигатель 1 неподвижным и вращая двигатель 2 в прямом направлении. Этот тип точения называется дифференциальным точением.
else if (RD2 == 0 && RD3 == 1) // Левый датчик находится над черной линией {RC4 = 1; RC5 = 1; // Двигатель 1 останавливается RC6 = 1; RC7 = 0; // Двигатель 2 вперед}
Точно так же, если правый датчик пересекает черную линию, бот вынужден повернуть налево, удерживая второй двигатель неподвижным и вращая только первый двигатель в прямом направлении, как показано ниже.
else if (RD2 == 1 && RD3 == 0) // Правый датчик находится над черной линией {RC4 = 0; RC5 = 1; // Мотор 1 вперед RC6 = 1; RC7 = 1; // Двигатель 2 останавливается}
Наконец, если оба датчика попадают под черную линию, пора остановить бота. Это можно сделать, подняв все штыри обоих двигателей. Код, который делает то же самое, показан ниже.
else // Оба датчика над черной линией {RC4 = 1; RC5 = 1; // Двигатель 1 останавливается RC6 = 1; RC7 = 1; // Двигатель 2 останавливается}
На этом программа готова и может быть загружена на PIC с помощью любого программатора, например PicKit.
Последователь линии PIC в действии:
Когда оборудование и код готовы, самое время действовать. Как было сказано ранее, я использовал Power bank для питания бота, поэтому все, что мне нужно сделать, это просто подключить power bank к боту, у которого уже настроено оборудование и загружен код.
Плата PIC Perf была создана для нашей серии руководств по PIC, в которых мы узнали, как использовать микроконтроллер PIC. Возможно, вы захотите вернуться к этим руководствам по микроконтроллерам PIC с использованием MPLABX и XC8, если вы не знаете, как записать программу с помощью Pickit 3, поскольку я пропущу всю эту основную информацию.
Теперь просто запустите бота над черной линией, и вы должны наблюдать, как он следует за линией.
Вначале вы можете столкнуться с некоторыми трудностями, в таком случае читайте дальше. Если колеса вращаются в противоположном направлении, просто поменяйте полярность двигателя, колесо которого вращается в противоположном направлении. Если бот отклоняется от линии, поменяйте местами ИК-датчик, и все должно быть в порядке.
С полной версией работы бота можно ознакомиться на видео ниже. Надеюсь, вам понравился проект, и вам понравилось создавать что-то подобное. Если у вас есть проблемы с тем, чтобы заставить это работать, вы можете опубликовать их в разделе комментариев ниже, чтобы решить эту проблему, или использовать наши форумы для обсуждения технического содержания.