Realizați acest robot Line Follower for Science Fair Project

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În această postare învățăm cum să construim un circuit robot care urmărește linia folosind Arduino, care va rula peste un aspect de linie trasat special și îl va urmări cu fidelitate atâta timp cât este disponibil și trasabil de senzorii săi.

De navneet sajwan



Ce este un robot Line Follower

Un robot autonom este o mașină care poate efectua o serie de acțiuni conform instrucțiunilor programatorului, fără a fi controlat manual de o ființă umană în timp real.

Adepții liniei (LFR) sunt, de asemenea, mașini robot autonome, care sunt ghidate de unul sau mai mulți senzori și o cale de linie albă sau neagră. Ele stau la baza mașinilor moderne cu conducere automată.



Ca orice robot autonom, adepții liniei au o unitate de procesare a semnalului și de luare a deciziilor, senzori și actuatori. Dacă sunteți un începător în robotică și doriți să o luați în serios, de aici ar trebui să începeți. Să începem să o facem.

Pentru realizarea acestui proiect am folosit doi senzori cu infraroșu și trei roți cu tracțiune. Numărul minim de senzori care pot fi utilizați este unul și maximum opt sunt suficiente pentru urmărirea liniei bazate pe PID.

Componente necesare:

Arduino uno

Şasiu

Două motoare acționate pe baterie (b) și anvelope compatibile

Minge de ricin

Doi senzori în infraroșu

Modulul driverului motorului

Alimentare electrică

Software Arduino IDE

Acum, să aruncăm o privire asupra componentelor noastre:

ARDUINO ONE : Imaginați-vă ca camera de control a robotului nostru. Acum, există o mulțime de plăci de dezvoltare, care au fost luate în considerare pentru acest proiect, dar Arduino UNO pur și simplu nu se potrivea cu alții. Nu este faptul că protagonistul nostru a fost superior în ceea ce privește trăsăturile sale multidimensionale.

Dacă așa ar fi fost, Raspberry Pi și Intel Edison l-ar fi lovit între ochi. Cele mai convingătoare argumente care au dus la selectarea Arduino UNO s-au format prin combinația de caracteristici, preț, dimensiune și cerințe pentru proiect.

Unele motive relevante au fost:

MĂRIMEA : Este destul de mic în comparație cu plăcile de dezvoltare bazate pe Atmega16 sau Atmega8, consumă puțin spațiu pe șasiu, astfel încât să obțineți un bot compact și la îndemână.

Acest lucru contează cu adevărat în competițiile de robotică. Crede-mă că ai ură să te plimbi cu acel bot mare și urât, schimbând locurile toată ziua.

Cu dimensiuni mai mici, robotul este mai rapid și virajele sunt mai eficiente.

CEL MAI BUN PLAC DE PROTOTIPARE : Fără îndoială, Arduino UNO are cea mai bună combinație de caracteristici pentru prototipare . Odată ce circuitele dvs. sunt la locul lor și proiectul dvs. funcționează perfect, îl puteți înlocui cu ceva mai mic și mai ieftin, cum ar fi Arduino Nano și Attiny85 ic.

Pentru cei care fac linie pentru proiectele universitare, vă sugerăm să înlocuiți UNO cu Nano la sfârșit.

ŞASIU : Este cadrul care ține toate componentele în poziție. Există câteva puncte de luat în considerare atunci când cumpărați un șasiu nou,

Ar trebui să fie ușor și puternic.

Pentru proiecte, este mai bine dacă cumperi unul de pe piață. Dar dacă vă pregătiți pentru competiție, vă sugerez cu tărie să vă personalizați propriile, ținând cont de dimensiunile și cerințele competiției.

Alegeți un șasiu din plastic sau lemn. Când cadrele metalice intră în contact cu Arduino, un număr de pini sunt scurtcircuitați. Acesta este un factor important pe care trebuie să ne concentrăm în timp ce căutăm șasiu.

Păstrați șasiul cât mai jos posibil - acest lucru oferă stabilitate botului.

MOTORI : Utilizați baterie ușoară (B.O.) d.c. motoare.

BALA CASTOR : Roțile normale asigură mișcare translatorie de-a lungul unei singure axe, dar o bilă cu role este proiectată să se deplaseze de-a lungul oricărei direcții de pe suprafață. Ne oferă tracțiunea pe trei roți.

Motivul pentru care preferați tracțiunea față de cele patru roți se datorează acțiunii sale de rotire comparativ mai rapide. S-ar putea să fi observat ciclul de ricșă care străpunge traficul ca reptilele. Același lucru este cazul robotului nostru.

SENZORII : Este un dispozitiv care detectează sau măsoară orice parametru fizic al mediului nostru și îl transformă în semnale electrice. În acest caz, parametrul detectat este raze infraroșii.

Senzorii sunt extrem de fundamentali pentru orice robot. Ei bine, dacă arduino este creierul robotului nostru, senzorii ar putea la fel de bine să joace rolul ochilor. Iată câteva lucruri despre senzori:

Senzorii trebuie să fie orientați în așa fel încât ledul (ledurile) să fie orientat (ă) spre sol.

Ar trebui să fie plasat în partea din față a botului.

Distanța minimă între ele trebuie să fie mai mare decât lățimea liniei negre.

PLACA DE DRIVER MOTOR : Motoarele sunt circuite tampon care preiau semnale de joasă tensiune pentru a alimenta motoarele care necesită tensiune mai mare.

În cazul nostru, Arduino poate furniza suficientă tensiune pentru a acționa motoarele, dar nu poate furniza un curent suficient. Pinii 5v și GND de la Arduino UNO au un curent nominal de 200mA, în timp ce orice pin GPIO are un rating de 40 mA. Acest lucru este cu mult mai mic decât motorii de curenți de pornire și de blocare de care avem nevoie.

Există două drivere pe care le prefer pentru acest proiect: L298N și L293D. Ambele sunt la fel de potrivite pentru realizarea acestui proiect.

Deşi, L293D este relativ mai ieftin dar are un rating de curent redus. Conexiunile lor sunt aproape identice. De vreme ce, am dat conexiunile pentru ambele, depinde în totalitate de modul în care îți faci botul.

ALIMENTARE ELECTRICĂ :

Utilizați un adaptor de 12 V sau o baterie (nu mai mult de 12 volți).

Amplasarea componentelor (din față în spate):

Senzori în capul robotului dvs.

Roată cu roți în mijloc.

Motoare și anvelope într-o singură linie în spate.

Conexiuni:

SENZORI către ARDUINO :

Conectați pinul senzorului la pinul arduino așa cum se arată,

Pinul senzoruluiPinul Arduino
VCC (5v)5V
GND (G)GND
SENZOR STÂNGA IEȘIT (DO)pinul 6
SENZORUL DREPT ÎN AFARA (DO)pinul 7

Notă: Pentru a verifica dacă senzorii dvs. sunt alimentați, îndreptați camera telefonului mobil către ledul transmițătorului IR. Veți vedea ledul strălucitor pe ecran, care nu poate fi văzut de ochii noștri. Unele camere moderne de telefonie mobilă au filtru infraroșu. Deci, vă rugăm să țineți cont de asta.

DE LA MOTOR LA MOTOR:

Fiecare motor are două terminale care trebuie conectate la driverul motorului. Nu încercați niciodată să le conectați direct la arduino. Privind din spatele bot-ului dvs., cu motoare aproape de voi și senzori distanți, conectați-i după cum urmează:

MOTORL298NL293D
MOTOR STÂNGAPIN 1 ȘI 2PIN 7 ȘI 8
MOTOR DREPTPIN 13 ȘI 14PIN 9 ȘI 10

DRIVER MOTOR către ARDUINO UNO:

DRIVER MOTOR (L298N)ARDUINO ONE
PIN 4VIN
PIN 5GND
PIN 65V
PIN 8 și PIN 9PIN 3 și PIN 9
PIN 10 și PIN 11PIN 5 și PIN 10
PIN 7 și PIN 125V
DRIVER MOTOR (L293D)ARDUINO ONE
PIN 3VIN
PIN 2GND
PIN 15V
PIN 5 ȘI PIN 6PIN 3 și PIN 9
PIN 11 ȘI PIN 12PIN 5 și PIN 10
PIN 4 ȘI PIN 55V

NOTĂ: Pinii 8 și 9 din l298n sunt utilizați pentru a controla motorul conectat la 1 și 2. Și, 10 și 11 controlează motorul conectat la pinii 13 și 14. În mod similar, pinii 5 și 6 din l293d sunt utilizați pentru a controla motorul conectat la 7 și 8. Și, 12 și 11 controlează motorul conectat la pinii 9 și 10.

Iată-ne băieți, până la sfârșitul părții de proiectare. Mai avem de făcut codificarea, dar înainte vom trece prin principiile care permit urmărirea liniei.

Cum funcționează un senzor cu infraroșu:

Senzorii infraroșii (senzori IR) pot fi folosiți pentru a simți contrastul în culori și apropierea obiectelor de acesta. Principiul care stă la baza funcționării senzorului IR este destul de simplu.

După cum putem vedea, are două leduri - led cu emisie de IR și o fotodiodă. Acționează ca pereche emițător-receptor. Când un obstacol vine în fața razelor emițătoare, acestea sunt reflectate înapoi și interceptate de receptor.

Acest lucru generează un semnal digital care poate fi alimentat către microcontrolere și actuatoare pentru a lua măsurile necesare la întâmpinarea obstacolelor.

Fizica de bază ne spune că un corp negru absoarbe toată radiația electromagnetică incidentă pe el, în timp ce un corp alb îl reflectă. Acest principiu este exploatat de un adept de linie pentru a face diferența dintre suprafața albă și cea neagră.

Cum funcționează un robot de linie:

DISPOZIȚIA LINIEI DE URMĂTOR

În stare normală, robotul se mișcă în așa fel încât ambii senzori să fie peste alb, iar linia neagră să fie în mijlocul ambilor senzori.

Este programat să rotească ambele motoare astfel încât robotul să se miște în direcția înainte.

În mod natural, pe măsură ce timpul trece, unul dintre cei doi senzori depășește linia neagră.

Dacă senzorul stâng vine peste linie, motoarele din stânga se opresc și, ca rezultat, robotul începe să se rotească spre stânga, cu excepția cazului în care senzorul stâng revine pe suprafața albă și se atinge starea normală.

În mod similar, atunci când senzorul drept trece peste linia neagră, motoarele din dreapta sunt oprite și, prin urmare, botul se rotește acum spre dreapta, cu excepția cazului în care senzorul revine peste suprafața albă. Acest mecanism de rotire este cunoscut sub numele de mecanism de acționare diferențială.

DIAGRAMA CIRCUITULUI:

DETALII CÂNTARE:

PROGRAMARE ȘI CONCEPTE:

După ce am terminat cu partea circuitului, vom trece acum la partea de programare. În această secțiune, vom înțelege programul care controlează robotul nostru. Iată codul: / *
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()
}
}

Descrierea funcțiilor utilizate:

read_sensors (): preia citirile ambilor senzori și le stochează în variabilele din stânga și din dreapta.

move_forward (): Când arduino execută această funcție, ambele motoare se deplasează în direcția înainte.

turn_left (): motorul din stânga se oprește. Bot face stânga.

turn_right (): motorul din dreapta se oprește. Bot face dreapta.

stop (): Bot se oprește.

print_readings (): Afișează citirile senzorilor pe monitorul serial. Pentru aceasta trebuie să decomentați „Serial.begin (9600)” în configurarea nulă.

LECTURILE SENZORULUI:

SENZOR PENTRU LINIELECTURILE SENZORILOR
STÂNGADREAPTA
SENZOR STÂNGA01
SENZOR DREPT10
NICI UNUL11
AMBII00

CONTROL DE VITEZA:

Uneori viteza motoarelor este atât de mare încât înainte ca arduino să interpreteze semnalele senzorului, robotul pierde linia. Pe scurt, botul nu urmează linia din cauza vitezei mari și continuă să piardă linia, chiar dacă algoritmul este corect.

Pentru a evita astfel de circumstanțe, scădem viteza botului folosind tehnica PWM. În codul de mai sus există o variabilă numită valoare.

Doar micșorați valoarea numerică a funcției pentru a reduce viteza. În Arduino UNO puteți avea valori pwm numai între 0 și 255.

analogWrite (pin, valoare)

0<= value <=255

Acesta este sfârșitul postului meu on-line. Sper că este suficient de detaliat pentru a răspunde la toate interogările dvs. arzătoare și dacă în cea mai rară realitate nu este, atunci avem întotdeauna secțiunea de comentarii disponibilă pentru dvs. Comentează-ți îndoielile. Să aveți o veselie fericită!




Precedent: Mașină robot controlată de telefonul mobil folosind modulul DTMF Următorul: Comutator pornit / oprit de la rețeaua AC controlată prin parolă