Šiame įraše mes sužinosime, kaip sukurti linijos sekėjo roboto grandinę naudojant „Arduino“, kuri eis per specialiai nubrėžtą linijos išdėstymą ir ištikimai jo laikysis tol, kol ji bus prieinama ir atsekama jutikliais.
Autorius navneet sajwan
Kas yra linijos sekėjo robotas
Autonominis robotas yra mašina, kuri gali atlikti daugybę veiksmų, kaip nurodė programuotojas, realiuoju laiku rankiniu būdu nevaldomas žmogaus.
Linijos sekėjai (LFR) taip pat yra autonominiai robotai automobiliai, kuriuos valdo vienas ar keli jutikliai ir juodas arba baltas linijos kelias. Jie yra šiuolaikinių savaeigių automobilių pagrindas.
Kaip ir kiekvienas autonominis robotas, sekėjai turi signalų apdorojimo ir sprendimų priėmimo bloką, jutiklius ir pavaras. Jei esate robotikos pradininkas ir norite į tai žiūrėti rimtai, turėtumėte pradėti nuo to. Pradėkime tai daryti.
Šiam projektui panaudojau du infraraudonųjų spindulių jutiklius ir trijų varančiųjų ratų pavarą. Mažiausias jutiklių skaičius, kurį galima naudoti, yra vienas, o aštuonių pakanka, kad būtų galima sekti PID.
Būtini komponentai:
„Arduino uno“
Važiuoklė
Du su baterijomis (b.o.) varikliai ir suderinamos padangos
Ricinos kamuolys
Du infraraudonųjų spindulių jutikliai
Variklio vairuotojo modulis
Maitinimas
„Arduino IDE“ programinė įranga
Pažvelkime į savo komponentus:
ARDUINO VIENAS : Įsivaizduokite, kad tai yra mūsų roboto valdymo kambarys. Dabar šiame projekte buvo atsižvelgta į daugybę programavimo lentų, tačiau „Arduino UNO“ tiesiog neprilygo kitiems. Nėra taip, kad mūsų veikėjas būtų pranašesnis už savo daugiamačius bruožus.
Jei taip būtų buvę, „Raspberry Pi“ ir „Intel Edison“ būtų pataikę jam į akis. Labiausiai įtikinami argumentai, dėl kurių buvo pasirinkta „Arduino UNO“, buvo sujungti su projekto funkcijomis, kaina, dydžiu ir reikalavimais.
Buvo keletas svarbių priežasčių:
DYDIS : Jis yra gana mažas, palyginti su „Atmega16“ arba „Atmega8“ pagrįstomis kūrimo plokštėmis, sunaudoja šiek tiek vietos važiuoklėje, todėl gausite kompaktišką ir patogų robotą.
Tai tikrai svarbu robotikos varžybose. Patikėkite manimi, jūs nekenčiate klajoti aplinkui su tuo dideliu negražiu botu, visą dieną keičiant vietą.
Mažesnis dydis, greitesnis robotas ir efektyvesni posūkiai.
GERIAUSIAM PROTOTIPŲ PATIRTINIMO LENTELEI : Be abejo, „Arduino UNO“ turi geriausią funkcijų derinį prototipų kūrimas . Kai jūsų grandinės yra vietoje ir jūsų projektas veikia puikiai, galite jį pakeisti kažkuo mažesniu ir pigesniu, pavyzdžiui, „Arduino Nano“ ir „Attiny85 ic“.
Tiems, kurie yra kolegijos projektų sekėjai, siūlau pabaigoje UNO pakeisti „Nano“.
ŠASAS : Tai yra rėmas, kuris tvirtina visus komponentus. Yra keli dalykai, į kuriuos reikia atsižvelgti perkant naują važiuoklę,
Jis turėtų būti lengvas ir tvirtas.
Projektams geriau, jei perkate vieną iš rinkos. Bet jei ruošiatės varžyboms, primygtinai siūlau pritaikyti savo, turint omenyje konkurso matmenis ir reikalavimus.
Pasirinkite plastikinę arba medinę važiuoklę. Kai metaliniai rėmai liečiasi su „Arduino“, sutrumpėja daugybė kaiščių. Tai yra didelis veiksnys, į kurį reikia atkreipti dėmesį ieškant važiuoklės.
Laikykite važiuoklę kuo žemiau - tai suteikia robotui stabilumo.
VARIKLIAI : Naudokite lengvą akumuliatorių (B.O.) nuolatinės srovės varikliai.
RAGULIŲ Rutulys : Įprasti ratai suteikia judesį išilgai vienos ašies, tačiau ratukas yra skirtas judėti bet kuria paviršiaus kryptimi. Tai suteikia mums trijų varomųjų ratų pavarą.
Priežastis, kodėl pirmenybė teikiama trijų varomųjų ratų, o ne 4 ratams, yra dėl palyginti greito pasukimo. Galbūt pastebėjote eismą perveriančias dviračių rikšas kaip ropliai. Tas pats yra ir su mūsų robotu.
JUTIKLIAI : Tai prietaisas, kuris aptinka ar matuoja bet kokį fizinį mūsų aplinkos parametrą ir paverčia jį elektriniais signalais. Šiuo atveju aptiktas parametras yra infraraudonieji spinduliai.
Jutikliai yra labai svarbūs bet kokiam robotui. Na, jei arduino yra mūsų roboto smegenys, jutikliai taip pat gali atlikti akių vaidmenį. Štai keletas dalykų apie jutiklius:
Jutikliai turi būti nukreipti taip, kad nukreipti (-i) į žemę.
Turi būti dedamas priekiniame roboto gale.
Mažiausias atstumas tarp jų turi būti didesnis nei juodos linijos plotis.
Variklio vairuotojo lenta : Variklių tvarkyklės yra buferinės grandinės, kurios perima žemos įtampos signalus, kad įjungtų variklius, kuriems reikalinga didesnė įtampa.
Mūsų atveju „Arduino“ gali užtikrinti pakankamą įtampą varikliams varyti, tačiau jis negali užtikrinti pakankamos srovės. „Arduino UNO“ 5v ir GND kaiščių dabartinis įvertinimas yra 200mA, o bet kurio GPIO kaiščio - 40 mA. Tai yra daug mažesnė už mums reikalingus variklio paleidimo ir gesinimo srovės variklius.
Šiam projektui man labiau patinka du variklių vairuotojai: L298N ir L293D. Jie abu yra vienodai tinkami šiam projektui kurti.
Nors L293D yra palyginti pigesnis bet turi žemą dabartinį reitingą. Jų ryšiai yra beveik vienodi. Kadangi aš nurodžiau ryšius abiem, visiškai priklauso nuo jūsų, kaip sukursite savo robotą.
MAITINIMAS :
Naudokite 12 V adapterį arba akumuliatorių (ne daugiau kaip 12 voltų).
Komponentų išdėstymas (nuo priekio iki galo):
Jutikliai jūsų roboto galvoje.
Ratuko ratas viduryje.
Varikliai ir padangos vienoje eilėje gale.
Jungtys:
JUTIKLIAI ARDUINO :
Prijunkite jutiklio kaištį prie „arduino“ kaiščio, kaip parodyta,
Jutiklio kaištis | „Arduino“ kaištis |
VCC (5v) | 5V |
BND (G) | BND |
Kairysis jutiklis išjungtas (DO) | 6 kaištis |
TEISINIS JUTIKLIS IŠJUNGTAS (DARYTI) | 7 kaištis |
Pastaba: Norėdami patikrinti, ar jūsų jutikliai įjungti, nukreipkite mobiliojo telefono kamerą į IR siųstuvo laidą. Ekrane pamatysite švytintį švyturį, kurio nematome plikomis akimis. Kai kuriose šiuolaikinėse mobiliųjų telefonų kamerose yra infraraudonųjų spindulių filtras. Taigi, prašau į tai atsižvelgti.
VARIKLIS - VARIKLIO VADOVAS:
Kiekvienas variklis turi du gnybtus, kuriuos reikia prijungti prie variklio tvarkyklės. Niekada nebandykite jų tiesiogiai prijungti prie „Arduino“. Žiūrėdami iš savo roboto galo, šalia esančius variklius ir atokius jutiklius, prijunkite juos taip:
VARIKLIS | L298N | L293D |
Kairysis variklis | 1 IR 2 PIN | 7 ir 8 PIN |
TEISINGAS VARIKLIS | PIN 13 ir 14 | PIN 9 ir 10 |
Variklio vairuotojas į ARDUINO UNO:
Variklio vairuotojas (L298N) | ARDUINO VIENAS |
4 PIN kodas | VYNAS |
5 PIN kodas | BND |
6 PIN kodas | 5V |
PIN 8 ir PIN 9 | 3 PIN kodas ir 9 PIN kodas |
PIN 10 ir PIN 11 | 5 PIN kodas ir 10 PIN kodas |
PIN 7 ir 12 PIN kodai | 5V |
Variklio vairuotojas (L293D) | ARDUINO VIENAS |
3 PIN kodas | VYNAS |
2 PIN kodas | BND |
1 PIN kodas | 5V |
5 PIN kodas ir 6 PIN kodas | 3 PIN kodas ir 9 PIN kodas |
PIN 11 ir PIN 12 | 5 PIN kodas ir 10 PIN kodas |
4 PIN kodas ir 5 PIN kodas | 5V |
PASTABA: l298n 8 ir 9 kaiščiai naudojami valdyti variklį, prijungtą prie 1 ir 2. Ir 10 ir 11 valdymo variklį, prijungtą prie 13 ir 14 kaiščių. Panašiai l293d 5 ir 6 kaiščiai naudojami valdyti variklį, prijungtą prie 7 ir 8. Ir 12 ir 11 valdymo variklis prijungtas prie 9 ir 10 kaiščių.
Čia mes vaikinai, iki dizaino dalies pabaigos. Mes vis dar turime koduoti, bet prieš tai mes pereisime principus, leidžiančius sekti linijas.
Kaip veikia infraraudonųjų spindulių jutiklis:
Infraraudonieji jutikliai (IR jutikliai) gali būti naudojami spalvų kontrastui ir objektų artumui nustatyti. IR jutiklio veikimo principas yra gana pagrindinis.
Kaip matome, jis turi dvi lemputes - IR spinduliuojančią lemputę ir fotodiodą. Jie veikia kaip siųstuvo ir imtuvo pora. Kai prieš spinduliuojančius spindulius ateina kliūtis, imtuvas juos atspindi atgal ir perima.
Tai sukuria skaitmeninį signalą, kurį galima perduoti mikrovaldikliams ir pavaroms, kad jie imtųsi būtinų veiksmų susidūrę su kliūtimi.
Pagrindinė fizika mums sako, kad juodas kūnas sugeria visą į jį patekusią elektromagnetinę spinduliuotę, o baltas - ją. Šiuo principu linijos sekėjas naudojasi norėdamas atskirti baltą ir juodą paviršių.
Kaip veikia linijos sekimo robotas:
Įprastomis sąlygomis robotas juda taip, kad abu jutikliai būtų per balti, o juoda linija būtų tarp abiejų jutiklių.
Programuojama sukti abu variklius taip, kad botas judėtų į priekį.
Natūralu, kad praeina laikas, kai vienas iš dviejų jutiklių ateina per juodąją liniją.
Jei kairysis jutiklis ateina per liniją, kairieji varikliai sustoja ir dėl to botas pradeda suktis kairės link, nebent kairysis jutiklis grįžta ant balto paviršiaus ir pasiekia normalią būklę.
Panašiai, kai dešinysis jutiklis patenka per juodąją liniją, dešinieji varikliai sustabdomi, todėl botas dabar pasisuka į dešinę, nebent jutiklis grįžta per baltą paviršių. Šis posūkio mechanizmas yra žinomas kaip diferencialo pavaros mechanizmas.
APTRAUKIMO DIAGRAMA:
DUOMENYS:
PROGRAMAVIMAS IR KONCEPCIJOS:
Atlikę grandinės dalį, dabar pereisime prie programavimo dalies. Šiame skyriuje suprasime programą, kuri valdo mūsų robotą. Štai kodas: / * 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()
}
}
Naudojamų funkcijų aprašymas:
read_sensors (): imami jutiklių rodmenys ir jie saugomi kintamuosiuose kairėje ir dešinėje.
move_forward (): Kai „arduino“ vykdo šią funkciją, abu varikliai juda pirmyn.
turn_left (): kairysis variklis sustoja. Botas pasuka į kairę.
turn_right (): Dešinysis variklis sustoja. Botas pasisuka į dešinę.
sustabdyti (): Botas sustoja.
print_readings (): rodo serijinio monitoriaus jutiklių rodmenis. Norėdami tai padaryti, negalėsite nustatyti „Serial.begin (9600)“ komentaro.
JUTIKLIŲ SKAITYMAI:
JUTIKLIS ANT LINIJOS | JUTIKLIŲ SKAITYMAI | |
Kairė | TEISĖ | |
Kairysis jutiklis | 0 | 1 |
TEISINIS JUTIKLIS | 1 | 0 |
NĖ VIENAS | 1 | 1 |
Abi | 0 | 0 |
GREIČIO KONTROLĖ:
Kartais variklių greitis yra toks didelis, kad prieš arduino interpretuojant jutiklio signalus, robotas praranda liniją. Trumpai tariant, robotas nesilaiko linijos dėl didelio greičio ir vis praranda liniją, nors algoritmas yra teisingas.
Norėdami išvengti tokių aplinkybių, mes sumažiname roboto greitį, naudodami PWM techniką. Aukščiau esančiame kode yra kintamasis, kurio vertė yra.
Tiesiog sumažinkite skaitinę funkcijos reikšmę, kad sumažintumėte greitį. „Arduino UNO“ galite turėti tik pwm reikšmes nuo 0 iki 255.
analogWrite (kaištis, vertė)
0<= value <=255
Tai mano pranešimo apie sekėją pabaiga. Tikiuosi, kad jis yra pakankamai išsamus, kad atsakytų į visas jūsų užklausas, o jei taip nėra, tada mes visada turime komentarų skiltį. Pakomentuokite abejones. Linksmo tinkingo!
Pora: Mobiliuoju telefonu valdomas robotas, naudojant DTMF modulį Kitas: slaptažodžiu valdomas kintamosios srovės įjungimo / išjungimo jungiklis