- Необходимые материалы:
- Концепции последователя линии
- Принципиальная схема и пояснения робота-повторителя линии Raspberry Pi:
- Программирование вашего Raspberry PI:
- Последователь линии Raspberry Pi в действии:
Как мы все знаем, Raspberry Pi - замечательная платформа для разработки, основанная на микропроцессоре ARM. Благодаря высокой вычислительной мощности и возможностям разработки он может творить чудеса в руках любителей электроники или студентов. Чтобы узнать больше о Raspberry Pi и о том, как он работает, давайте попробуем создать робота-следящего за линией, используя Raspberry Pi.
Если вы интересуетесь робототехникой, вы должны быть хорошо знакомы с названием « Робот-следящий за линией ». Этот робот может следовать по линии, просто используя пару датчиков и двигателей. Использование мощного микропроцессора, такого как Raspberry Pi, для создания простого робота может показаться неэффективным. Но этот робот дает вам пространство для бесконечного развития, и такие роботы, как Kiva (складской робот Amazon), являются примером этого. Вы также можете проверить других наших роботов-последователей линии:
- Робот следящего за линией с использованием микроконтроллера 8051
- Робот следящего за линией, использующий Arduino
Необходимые материалы:
- Raspberry Pi 3 (подойдет любая модель)
- ИК-датчик (2 шт.)
- Редукторный двигатель постоянного тока (2Nos)
- Драйвер двигателя L293D
- Шезлонги (также можно построить свои собственные из картона)
- Внешний аккумулятор (любой доступный источник питания)
Концепции последователя линии
Робот-следящий за линией может отслеживать линию с помощью ИК-датчика. Этот датчик имеет ИК-передатчик и ИК-приемник. ИК-передатчик (ИК-светодиод) излучает свет, а приемник (фотодиод) ждет, пока переданный свет вернется обратно. ИК-свет вернется обратно, только если он будет отражен от поверхности. Принимая во внимание, что все поверхности не отражают ИК-свет, только белая цветная поверхность может полностью их отражать, а черная цветная поверхность будет полностью наблюдать их, как показано на рисунке ниже. Узнайте больше о модуле ИК-датчика здесь.
Теперь мы будем использовать два ИК-датчика, чтобы проверить, идет ли робот по пути с линией, и два двигателя, чтобы исправить положение робота, если он уходит за пределы пути. Эти двигатели требуют большого тока и должны быть двунаправленными; поэтому мы используем модуль драйвера двигателя, такой как L293D. Нам также понадобится вычислительное устройство, такое как Raspberry Pi, чтобы управлять двигателями на основе значений ИК-датчика. Упрощенная блок-схема того же показана ниже.
Эти два ИК-датчика будут размещены по одному по обе стороны от линии. Если ни один из датчиков не обнаруживает черную линию, они PI дают указание двигателям двигаться вперед, как показано ниже.
Если левый датчик показывает черную линию, то PI дает команду роботу повернуть налево, вращая только правое колесо.
Если правый датчик показывает черную линию, то PI дает команду роботу повернуть направо, вращая только левое колесо.
Если оба датчика показывают черную линию, робот останавливается.
Таким образом, робот сможет следовать за линией, не выходя за пределы трассы. Теперь давайте посмотрим, как выглядят схема и код.
Принципиальная схема и пояснения робота-повторителя линии Raspberry Pi:
Полная принципиальная схема этого робота-следящего за линией Raspberry Pi показана ниже.
Как видите, в схеме используются два ИК-датчика и пара двигателей, подключенных к Raspberry pi. Вся схема питается от мобильного блока питания (представленного батареей AAA в схеме выше).
Поскольку детали контактов не упоминаются на Raspberry Pi, нам необходимо проверить контакты, используя изображение ниже.
Как показано на рисунке, вывод PI в верхнем левом углу является выводом + 5V, мы используем этот вывод + 5V для питания ИК-датчиков, как показано на принципиальной схеме (красный провод). Затем мы соединяем контакты заземления с землей ИК-датчика и модуля драйвера двигателя с помощью черного провода. Желтый провод используется для подключения к выходному контакту датчика 1 и 2 к выводам GPIO и 3 соответственно.
Для управления двигателями нам понадобятся четыре штифта (A, B, A, B). Эти четыре контакта подключены к GPIO14,4,17 и 18 соответственно. Оранжевый и белый провод вместе образуют соединение для одного двигателя. Итак, у нас есть две такие пары на два мотора.
Двигатели подключены к модулю драйвера двигателя L293D, как показано на рисунке, а модуль драйвера питается от блока питания. Убедитесь, что земля блока питания подключена к земле Raspberry Pi, только тогда ваше соединение будет работать.
Программирование вашего Raspberry PI:
Когда вы закончите сборку и соединения, ваш робот должен выглядеть примерно так.
Теперь пришло время запрограммировать нашего бота и запустить его. Полный код этого бота можно найти внизу этого руководства. Узнать больше о программе и запустить код в Raspberry Pi можно здесь. Важные строки объясняются ниже.
Мы собираемся импортировать файл GPIO из библиотеки, функция ниже позволяет нам программировать контакты GPIO PI. Мы также переименовали «GPIO» в «IO», поэтому в программе всякий раз, когда мы хотим обратиться к контактам GPIO, мы будем использовать слово «IO».
импортировать RPi.GPIO как IO
Иногда, когда контакты GPIO, которые мы пытаемся использовать, могут выполнять другие функции. В этом случае мы будем получать предупреждения при выполнении программы. Команда ниже указывает PI игнорировать предупреждения и продолжить выполнение программы.
IO.setwarnings (Ложь)
Мы можем ссылаться на контакты GPIO PI, либо по номеру контакта на плате, либо по номеру их функции. Как и «PIN 29» на плате, это «GPIO5». Итак, мы говорим здесь, что будем обозначать булавку цифрой 29 или 5.
IO.setmode (IO.BCM)
Мы устанавливаем 6 контактов в качестве контактов ввода / вывода. Первые два контакта - это входные контакты для считывания показаний ИК-датчика. Следующие четыре являются выходными контактами, первые два из которых используются для управления правым двигателем, а следующие два - для левого двигателя.
IO.setup (2, IO.IN) #GPIO 2 -> Левый ИК-выход IO.setup (3, IO.IN) #GPIO 3 -> Правый ИК-выход IO.setup (4, IO.OUT) #GPIO 4 - > Motor 1, клемма A IO.setup (14, IO.OUT) #GPIO 14 -> Motor 1, клемма B IO.setup (17, IO.OUT) #GPIO 17 -> Motor Left terminal A IO.setup (18, IO..OUT) #GPIO 18 -> Левый вывод двигателя B
ИК-датчик выдает «Истина», если он находится над белой поверхностью. Итак, пока оба датчика говорят True, мы можем двигаться вперед.
if (IO.input (2) == True и IO.input (3) == True): # оба белых двигаются вперед IO.output (4, True) # 1A + IO.output (14, False) # 1B- IO.output (17, True) # 2A + IO.output (18, False) # 2B-
Мы должны повернуть направо, если первый ИК-датчик пересекает черную линию. Это делается путем считывания данных с ИК-датчика, и если условие выполнено, мы останавливаем правый двигатель и вращаем только левый двигатель, как показано в приведенном ниже коде.
elif (IO.input (2) == False и IO.input (3) == True): # повернуть вправо IO.output (4, True) # 1A + IO.output (14, True) # 1B- IO.output (17, Верно) # 2A + IO.output (18, False) # 2B-
Нам нужно повернуть налево, если второй ИК-датчик пересекает черную линию. Это делается путем считывания данных с ИК-датчика, и если условие выполнено, мы останавливаем левый двигатель и вращаем только правый двигатель, как показано в приведенном ниже коде.
elif (IO.input (2) == True и IO.input (3) == False): # повернуть влево IO.output (4, True) # 1A + IO.output (14, False) # 1B- IO.output (17, True) # 2A + IO.output (18, True) # 2B-
Если оба датчика пересекают черную линию, это означает, что робот должен остановиться. Это можно сделать, установив правильность обоих выводов двигателя, как показано в коде ниже.
else: # оставаться на месте IO.output (4, True) # 1A + IO.output (14, True) # 1B- IO.output (17, True) # 2A + IO.output (18, True) # 2B-
Последователь линии Raspberry Pi в действии:
Загрузите код Python для повторителя строки на свой Raspberry Pi и запустите его. Нам нужен портативный блок питания, в этом случае блок питания становится удобным, поэтому я использовал то же самое. Тот, который я использую, поставляется с двумя портами USB, поэтому я использовал для питания PI и другого драйвера двигателя, как показано на рисунке ниже.
Теперь все, что вам нужно сделать, это настроить свой собственный трек черного цвета и отпустить своего бота над ним. Я использовал изоляционную ленту черного цвета для создания дорожки, вы можете использовать любой материал черного цвета, но убедитесь, что ваш основной цвет не темный.
С полной версией работы бота можно ознакомиться на видео ниже. Надеюсь, вы поняли проект и получили удовольствие от его создания. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев ниже.