Padarykite šį robotą, skirtą mokslo mugės projektui

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Š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:

VARIKLISL298NL293D
Kairysis variklis1 IR 2 PIN7 ir 8 PIN
TEISINGAS VARIKLISPIN 13 ir 14PIN 9 ir 10

Variklio vairuotojas į ARDUINO UNO:

Variklio vairuotojas (L298N)ARDUINO VIENAS
4 PIN kodasVYNAS
5 PIN kodasBND
6 PIN kodas5V
PIN 8 ir PIN 93 PIN kodas ir 9 PIN kodas
PIN 10 ir PIN 115 PIN kodas ir 10 PIN kodas
PIN 7 ir 12 PIN kodai5V
Variklio vairuotojas (L293D)ARDUINO VIENAS
3 PIN kodasVYNAS
2 PIN kodasBND
1 PIN kodas5V
5 PIN kodas ir 6 PIN kodas3 PIN kodas ir 9 PIN kodas
PIN 11 ir PIN 125 PIN kodas ir 10 PIN kodas
4 PIN kodas ir 5 PIN kodas5V

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:

EILUTĖS TOLIAU PASKIRTIS

Į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 LINIJOSJUTIKLIŲ SKAITYMAI
KairėTEISĖ
Kairysis jutiklis01
TEISINIS JUTIKLIS10
NĖ VIENAS11
Abi00

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