Сделайте этого робота-последователя линии для проекта Science Fair

Попробуйте наш инструмент устранения неполадок





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

Автор: navneet sajwan



Что такое робот-последователь линии

Автономный робот - это машина, которая может выполнять серию действий в соответствии с инструкциями программиста без ручного управления человеком в режиме реального времени.

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



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

Для этого проекта я использовал два инфракрасных датчика и трехколесный привод. Минимальное количество датчиков, которые можно использовать, - один, а для отслеживания линии на основе PID достаточно максимум восьми.

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

Arduino uno

Шасси

Два мотора с батарейным питанием (b.o.) И совместимые шины

Касторовый шар

Два инфракрасных датчика

Модуль драйвера двигателя

Источник питания

Программное обеспечение Arduino IDE

Теперь давайте посмотрим на наши компоненты:

ARDUINO ONE : Представьте себе это как диспетчерскую нашего робота. Сейчас существует множество плат для разработки, которые рассматривались для этого проекта, но Arduino UNO просто не соответствовал другим. Дело не в том, что наш главный герой превосходил свои многомерные характеристики.

Если бы это было так, Raspberry Pi и Intel Edison ударили бы его между глаз. Наиболее веские аргументы, которые привели к выбору Arduino UNO, были сформированы сочетанием характеристик, цены, размера и требований проекта.

Вот некоторые важные причины:

РАЗМЕР : Он довольно мал по сравнению с платами разработки на базе Atmega16 или Atmega8, занимает немного места на шасси, поэтому вы получаете компактный и удобный бот.

Это действительно важно в соревнованиях по робототехнике. Поверьте, вы бы ненавидели бродить с этим большим уродливым ботом, целый день меняя места проведения.

Чем меньше размер, тем быстрее робот и эффективнее поворачивает.

ЛУЧШАЯ СОВЕТА ДЛЯ ПРОТОТИПОВ : Несомненно, Arduino UNO имеет лучшую комбинацию функций для прототипирование . Как только ваши схемы установлены и ваш проект работает идеально, вы можете заменить его чем-то меньшим и более дешевым, например, Arduino Nano и Attiny85 ic.

Тем, кто занимается созданием линейных последователей для студенческих проектов, я предлагаю в конце заменить UNO на Nano.

ШАССИ : Это рамка, которая удерживает все компоненты на месте. При покупке нового шасси следует учитывать несколько моментов.

Он должен быть легким и прочным.

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

Выбирайте пластиковое или деревянное шасси. Когда металлические рамки соприкасаются с Arduino, несколько контактов замыкаются. Это важный фактор, на который следует обратить внимание при поиске шасси.

Держите шасси как можно ниже - это придаст устойчивости боту.

МОТОРЫ : Используйте легкий аккумулятор постоянного тока (B.O.). моторы.

КАСТОРНЫЙ ШАР : Обычные колеса обеспечивают поступательное движение по одной оси, но поворотный шарик предназначен для движения по поверхности в любом направлении. Это дает нам полный привод.

Причина предпочтения трехколесного привода перед четырьмя колесами заключается в его сравнительно более быстром повороте. Вы могли заметить, как велорикши пробивают дорогу, как рептилии. То же самое и с нашим роботом.

ДАТЧИКИ : Это устройство, которое обнаруживает или измеряет любой физический параметр окружающей среды и преобразует его в электрические сигналы. В этом случае регистрируемым параметром являются инфракрасные лучи.

Датчики очень важны для любого робота. Что ж, если Arduino - это мозг нашего бота, датчики также могут играть роль глаз. Вот несколько вещей о датчиках:

Датчики должны быть ориентированы так, чтобы светодиоды были обращены к земле.

Должен быть размещен в передней части вашего бота.

Минимальный интервал между ними должен быть больше ширины черной линии.

ПЛАТА ВОДИТЕЛЯ МОТОРА : Драйверы двигателей представляют собой буферные схемы, которые принимают сигналы низкого напряжения для питания двигателей, которым требуется более высокое напряжение.

В нашем случае Arduino может обеспечить достаточное напряжение для привода двигателей, но не может обеспечить достаточный ток. Контакты Arduino UNO 5v и GND имеют номинальный ток 200 мА, а любой контакт GPIO - 40 мА. Это намного ниже, чем у двигателей с пусковым и тормозным токами, которые нам нужны.

Для этого проекта я предпочитаю два драйвера двигателя: L298N и L293D. Оба они одинаково подходят для создания этого проекта.

Хотя, L293D сравнительно дешевле но имеет низкий текущий рейтинг. Их связи почти такие же. Поскольку я указал связи для обоих, вам решать, как вы создадите своего бота.

ИСТОЧНИК ПИТАНИЯ :

Используйте адаптер на 12 В или аккумулятор (не более 12 В).

Размещение компонентов (спереди в конец):

Датчики во главе вашего бота.

Колесико посередине.

Двигатели и шины в одну линию сзади.

Подключения:

ДАТЧИКИ к ARDUINO :

Подключите контакт датчика к контакту Arduino, как показано на рисунке.

Штифт датчикаШтырь Arduino
VCC (5 В)
GND (G)GND
ВЫХОД ЛЕВОГО ДАТЧИКА (DO)вывод 6
ВЫХОД ПРАВОГО ДАТЧИКА (DO)вывод 7

Примечание. Чтобы проверить, включены ли датчики, направьте камеру мобильного телефона на светодиод ИК-передатчика. Вы увидите, как на экране светится светодиод, который не виден невооруженным глазом. Некоторые современные камеры сотовых телефонов имеют инфракрасный фильтр. Пожалуйста, примите это во внимание.

ОТ МОТОРА к ВОДИТЕЛЮ МОТОРА:

Каждый двигатель имеет две клеммы, которые необходимо подключить к приводу двигателя. Никогда не пытайтесь подключить их напрямую к Arduino. Глядя со стороны бота, с двигателями рядом с вами и датчиками подальше, подключите их следующим образом:

ДВИГАТЕЛЬL298NL293D
ЛЕВЫЙ ДВИГАТЕЛЬКОНТАКТЫ 1 И 2КОНТАКТЫ 7 И 8
ПРАВЫЙ ДВИГАТЕЛЬПИН 13 И 14ПИН 9 И 10

ДРАЙВЕР МОТОРА в ARDUINO UNO:

ВОДИТЕЛЬ МОТОРА (L298N)ARDUINO ONE
ПИН 4ВИНО
ПИН 5GND
ПИН 6
PIN 8 и PIN 9PIN 3 и PIN 9
PIN 10 и PIN 11PIN 5 и PIN 10
PIN 7 и PIN 12
ВОДИТЕЛЬ МОТОРА (L293D)ARDUINO ONE
PIN 3ВИНО
PIN 2GND
PIN 1
КОНТАКТ 5 И КОНТАКТ 6PIN 3 и PIN 9
КОНТАКТ 11 И КОНТАКТ 12PIN 5 и PIN 10
КОНТАКТ 4 И КОНТАКТ 5

ПРИМЕЧАНИЕ: Контакты 8 и 9 l298n используются для управления двигателем, подключенным к 1 и 2. И, 10 и 11 управляют двигателем, подключенным к контактам 13 и 14. Аналогичным образом, контакты 5 и 6 l293d используются для управления двигателем, подключенным к 7 и 8. И, 12 и 11 управляют двигателем, подключенным к контактам 9 и 10.

Вот и мы, ребята, до конца дизайнерской части. У нас еще есть код, но перед этим мы рассмотрим принципы, позволяющие следовать строкам.

Как работает инфракрасный датчик:

Инфракрасные датчики (ИК-датчики) могут использоваться для определения контраста цветов и близости к ним объектов. Принцип работы ИК-датчика довольно прост.

Как мы видим, у него два светодиода - ИК-светодиоды и фотодиод. Они действуют как пара передатчик-приемник. Когда перед излучателями появляется препятствие, они отражаются назад и перехватываются приемником.

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

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

Как работает робот-последователь линии:

ПЛАН ПОСЛЕДУЮЩЕЙ ЛИНИИ

В нормальных условиях робот движется таким образом, что оба датчика находятся над белым, а черная линия проходит между обоими датчиками.

Он запрограммирован на вращение обоих двигателей таким образом, чтобы бот двигался вперед.

Вполне естественно, что по прошествии времени один из двух датчиков пересекает черную линию.

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

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

ПРИНЦИПИАЛЬНАЯ ЭЛЕКТРИЧЕСКАЯ СХЕМА:

ДЕТАЛИ ПРОВОДКИ:

ПРОГРАММИРОВАНИЕ И КОНЦЕПЦИИ:

Закончив со схемной частью, мы перейдем к части программирования. В этом разделе мы разберемся с программой, которая управляет нашим роботом. Вот код: / *
Created and tested by Navneet Singh Sajwan
*Based on digital output of two sensors
*Speed control added
*/
int left, right
int value=250
void setup()
{
pinMode(6,INPUT)//left sensor
pinMode(7,INPUT)//right sensor
pinMode(9,OUTPUT)//left motor
pinMode(3,OUTPUT)//left motor
pinMode(10,OUTPUT)//right motor
pinMode(5,OUTPUT)//right motor
// Serial.begin(9600)
}
void read_sensors()
{
left=digitalRead(6)
right= digitalRead(7)
}
void move_forward()
{
analogWrite(9,value)//3,9 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_left()
{
digitalWrite(9,LOW)//9,3 for left motor
digitalWrite(3,LOW)
analogWrite(10,value)//10,5 for right motor
digitalWrite(5,LOW)
}
void turn_right()
{
analogWrite(9,value)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void halt()
{
digitalWrite(9,LOW)// 9,3 for left motor
digitalWrite(3,LOW)
digitalWrite(10,LOW)// 10,5 for right motor
digitalWrite(5,LOW)
}
void print_readings()
{
Serial.print(' leftsensor')
Serial.print(' ')
Serial.print(left)
Serial.print('rightsensor')
Serial.print(' ')
Serial.print(right)
Serial.println()
}
void loop()
{
read_sensors()
while((left==0)&&(right==1)) // left sensor is over black line
{
turn_left()
read_sensors()
print_readings()
}
while((left==1)&&(right==0)) // right sensor is over black line
{
turn_right()
read_sensors()
print_readings()
}
while((left==0)&&(right==0)) // both sensors over the back line
{
halt()
read_sensors()
print_readings()
}
while((left==1)&&(right==1))// no sensor over black line
{
move_forward()
read_sensors()
print_readings()
}
}

Описание используемых функций:

read_sensors (): принимает показания обоих датчиков и сохраняет их в переменных left и right.

move_forward (): когда Arduino выполняет эту функцию, оба двигателя движутся в прямом направлении.

turn_left (): Левый мотор останавливается. Бот поворачивает налево.

turn_right (): Правый мотор останавливается. Бот поворачивает направо.

halt (): Бот останавливается.

print_readings (): отображает показания датчиков на последовательном мониторе. Для этого вы должны раскомментировать «Serial.begin (9600)» в настройке void.

ПОКАЗАНИЯ ДАТЧИКА:

ДАТЧИК НАД ЛИНИЕЙПОКАЗАНИЯ ДАТЧИКА
ОСТАВИЛИВЕРНО
ЛЕВЫЙ ДАТЧИК01
ПРАВЫЙ ДАТЧИК10
НИКТО11
ОБЕ00

КОНТРОЛЬ СКОРОСТИ:

Иногда скорость двигателей настолько высока, что до того, как Arduino интерпретирует сигналы датчиков, робот теряет линию. Короче говоря, бот не следует линии из-за высокой скорости и продолжает терять линию, даже если алгоритм правильный.

Чтобы избежать подобных ситуаций, мы уменьшаем скорость работы бота с помощью техники ШИМ. В приведенном выше коде есть переменная с именем value.

Просто уменьшите числовое значение в функции, чтобы уменьшить скорость. В Arduino UNO вы можете иметь значения pwm только от 0 до 255.

analogWrite (контакт, значение)

0<= value <=255

Это конец моего поста о подписчике. Я надеюсь, что он достаточно подробный, чтобы ответить на все ваши острые вопросы, и если в очень редкой реальности это не так, тогда у нас всегда есть раздел комментариев, доступный для вас. Прокомментируйте свои сомнения. Удачной работы!




Предыдущая статья: Автомобиль-робот, управляемый мобильным телефоном, с использованием модуля DTMF Далее: Управляемый паролем выключатель питания переменного тока