Направете този Line Follower Robot for Science Fair Project

Опитайте Нашия Инструмент За Премахване На Проблемите





В тази публикация научаваме как да изградим верига за робот за последователи на линии, използвайки 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.) d.c. двигатели.

КОЛЕЧКА БОЛ : Нормалните колела осигуряват транслационно движение по една ос, но рициновата топка е проектирана да се движи по всяка посока на повърхността. Дава ни задвижване на три колела.

Причината да предпочетете задвижването на три колела пред 4 колела е поради сравнително по-бързото му завъртане. Може би сте забелязали цикъл рикши, пронизващ трафика като влечуги. Същият е случаят с нашия робот.

СЕНЗОРИ : Това е устройство, което открива или измерва всеки физически параметър на нашата среда и го преобразува в електрически сигнали. В този случай откритият параметър е инфрачервените лъчи.

Сензорите са изключително важни за всеки робот. Е, ако arduino е мозъкът на нашия бот, сензорите също могат да играят ролята на очи. Ето няколко неща относно сензорите:

Сензорите трябва да бъдат ориентирани по начин, който води (и) към земята.

Трябва да бъде поставен в предния край на вашия бот.

Минималното разстояние между тях трябва да е по-голямо от ширината на черната линия.

ДЪСКА ЗА ДВИГАТЕЛ НА МОТОРА : Двигателите на двигателя са буферни вериги, които приемат сигнали за ниско напрежение за захранване на двигателите, които изискват по-високо напрежение.

В нашия случай Arduino може да осигури достатъчно напрежение за задвижване на двигателите, но не може да осигури достатъчно ток. 5v и GND щифтовете на Arduino UNO имат текущ рейтинг от 200mA, докато всеки GPIO пин има рейтинг от 40 mA. Това е много по-ниско от нужните ни двигатели за пускови и спиращи токове.

Има два моторни драйвера, които предпочитам за този проект: L298N и L293D. И двамата са еднакво подходящи за направата на този проект.

Макар, L293D е сравнително по-евтин но има нисък ток. Техните връзки са почти еднакви. Тъй като дадох връзките и за двете, зависи изцяло от вас как да направите своя бот.

ЗАХРАНВАНЕ :

Използвайте адаптер 12 v или батерия (не повече от 12 волта).

Поставяне на компоненти (от преден към заден край):

Сензори в главата на вашия бот.

Рициново колело в средата.

Мотори и гуми в една линия отзад.

Връзки:

СЕНЗОРИ към ARDUINO :

Свържете щифта на сензора към щифта arduino, както е показано,

ПИН на сензораArduino щифт
VCC (5v)5V
GND (G)GND
ЛЯВ СЕНЗОР ИЗХОД (НАПРАВЯНЕ)щифт 6
ДЯСЕН СЕНЗОР ИЗХОД (НАПРАВИ)щифт 7

Забележка: За да проверите дали сензорите ви са включени, насочете камерата на мобилния си телефон към инфрачервения предавател. Ще видите светещ на екрана светодиод, който не може да се види с невъоръжените ни очи. Някои съвременни камери за мобилни телефони имат инфрачервен филтър. Така че, моля, вземете това предвид.

МОТОР към МОТОР ШОФЬОР:

Всеки двигател има два терминала, които трябва да бъдат свързани към водача на двигателя. Никога не се опитвайте да ги свързвате директно с arduino. Поглеждайки от задната страна на вашия бот, с двигатели близо до вас и далеч от сензори, свържете ги по следния начин:

ДВИГАТЕЛL298NL293D
ЛЯВ ДВИГАТЕЛПИН 1 И 2ПИН 7 И 8
ДЯСЕН ДВИГАТЕЛПИН 13 И 14ПИН 9 И 10

МОТОРЕН ШОФЬОР към ARDUINO UNO:

ДВИГАТЕЛ НА МОТОРА (L298N)ARDUINO ONE
ПИН 4ВИНО
ПИН 5GND
ПИН 65V
ПИН 8 и ПИН 9ПИН 3 и ПИН 9
ПИН 10 и ПИН 11ПИН 5 и ПИН 10
ПИН 7 и ПИН 125V
ДВИГАТЕЛ НА МОТОРА (L293D)ARDUINO ONE
ПИН 3ВИНО
ПИН 2GND
ПИН 15V
ПИН 5 И ПИН 6ПИН 3 и ПИН 9
ПИН 11 И ПИН 12ПИН 5 и ПИН 10
ПИН 4 И ПИН 55V

ЗАБЕЛЕЖКА: Пинове 8 и 9 от l298n се използват за управление на двигателя, свързан към 1 и 2. И, 10 и 11 управляващ двигател, свързан към щифтове 13 и 14. По същия начин, щифтове 5 и 6 от l293d се използват за управление на двигателя, свързан към 7 и 8. И 12, 11 управляващ двигател, свързан към щифтове 9 и 10.

Тук сме момчета, до края на дизайнерската част. Все още ни предстои кодирането, но преди това ще преминем през принципите, които позволяват следването на редове.

Как работи инфрачервеният сензор:

Инфрачервените сензори (IR сензори) могат да се използват за усещане на контраст в цветовете и близостта на обектите до него. Принципът, лежащ зад работата на IR сензора, е доста основен.

Както виждаме, той има два светодиода - IR излъчващ led и фотодиод. Те действат като двойка предавател-приемник. Когато препятствие дойде пред емитерните лъчи, те се отразяват обратно и се прихващат от приемника.

Това генерира цифров сигнал, който може да се подава към микроконтролери и изпълнителни механизми, за да предприеме необходимите действия при среща с препятствия.

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

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

ЛИНИЯ СЛЕДНО СЛЕДВАНЕ

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

Програмирано е да върти двата двигателя така, че ботът да се движи в посока напред.

Съвсем естествено, с изтичането на времето един от двата сензора идва през черната линия.

Ако левият сензор премине през линията, левите двигатели се спират и в резултат ботът започва да се обръща наляво, освен ако левият сензор се върне на бяла повърхност и не се постигне нормално състояние.

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

ДИАГРАМА НА КРУГА:

ПОДРОБНОСТИ ЗА СВЪРЗВАНЕ:

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

След като приключихме с верижната част, сега ще преминем към програмиращата част. В този раздел ще разберем програмата, която контролира нашия робот. Ето кода: / *
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 (): Той отчита показанията на двата сензора и ги съхранява в променливите отляво и отдясно.

move_forward (): Когато arduino изпълнява тази функция, и двата двигателя се движат в посока напред.

turn_left (): Ляв мотор спира. Бот завива наляво.

turn_right (): Десните моторни спирания. Бот завива надясно.

halt (): Bot спира.

print_readings (): Показва показанията на сензорите на серийния монитор. За това трябва да коментирате „Serial.begin (9600)“ в void setup.

ЧЕТЕНИЯ НА СЕНЗОРА:

СЕНЗОР НАД ЛИНИЯЧЕТЕНИЯ НА СЕНЗОРА
НАЛЯВОНАДЯСНО
ЛЯВ СЕНЗОР01
ДЕСЕН СЕНЗОР10
НИТО ЕДИН11
И ДВЕТЕ00

КОНТРОЛ НА СКОРОСТТА:

Понякога скоростта на двигателите е толкова висока, че преди arduino да интерпретира сигналите на сензора, роботът губи линията. Накратко, ботът не следва линията поради висока скорост и продължава да губи линията, въпреки че алгоритъмът е правилен.

За да избегнем такива обстоятелства, намаляваме скоростта на бота, използвайки ШИМ техника. В горния код има променлива с име на стойност.

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

analogWrite (щифт, стойност)

0<= value <=255

Това е краят на моя пост на линия последовател. Надявам се, че е достатъчно подробен, за да отговори на всички ваши горещи запитвания и ако в най-рядката реалност не е така, тогава винаги имаме на разположение раздел за коментари за вас. Коментирайте съмненията си. Приятно майтапене!




Предишен: Контролиран от мобилен телефон автомобил-робот, използващ DTMF модул Напред: Превключвател за включване / изключване на променливотоковото захранване с контролирана парола