Turinys:

Paprasta „Arduino“robotikos platforma!: 5 žingsniai
Paprasta „Arduino“robotikos platforma!: 5 žingsniai

Video: Paprasta „Arduino“robotikos platforma!: 5 žingsniai

Video: Paprasta „Arduino“robotikos platforma!: 5 žingsniai
Video: Робот паук на Ардуино! от @enjoyrobotics 2024, Liepa
Anonim
Paprasta „Arduino“robotikos platforma!
Paprasta „Arduino“robotikos platforma!
Paprasta „Arduino“robotikos platforma!
Paprasta „Arduino“robotikos platforma!

Aš ką tik gavau „Arduino“, žaisdamas su kai kuriais AVR mikrovaldikliais per „Robotics“komandos susitikimus. Man patiko tikrai pigaus programuojamo lusto idėja, kuri galėtų paleisti beveik viską iš paprastos kompiuterio sąsajos, todėl gavau „Arduino“, nes ji jau turi gražią plokštę ir USB sąsają. Pirmajam „Arduino“projektui iškasiau „Vex Robotics“rinkinį, kurį turėjau iš kai kurių vidurinėje mokykloje vykusių varžybų. Visada norėjau sukurti kompiuteriu valdomą robotikos platformą, tačiau „Vex“mikrovaldikliui reikalingas programavimo kabelis, kurio aš neturėjau. Aš nusprendžiau naudoti savo naująjį „Arduino“(o gal vėliau ir pliką AVR lustą, jei jis veiks), kad vairuočiau platformą. Galų gale noriu gauti „netbook“ir tada galiu vairuoti robotą naudodamas „WiFi“ir peržiūrėti jo internetinę kamerą nuotoliniu būdu.

Man pavyko gauti padorų serijinį protokolą ir paprastą pavyzdį, kuris varo robotą naudojant „Xbox 360“valdiklį, prijungtą prie „Linux“kompiuterio.

1 žingsnis: ką jis gali padaryti…

Ką tai gali padaryti…
Ką tai gali padaryti…
Ką tai gali padaryti…
Ką tai gali padaryti…

„Arduino“yra labai universali platforma. Mano pagrindinis tikslas buvo tiesiog priversti „Arduino“prijungti du „Vex“variklius prie kompiuterio, tačiau turėjau daug įvesties/išvesties kaiščių ir nusprendžiau pridėti papildomų dalykų. Šiuo metu turiu RGB šviesos diodą, skirtą nuoseklaus prievado būsenai (žalia, jei paketai geri, raudona, jei jie yra blogi), ir kompiuterio ventiliatorių, varomą tranzistoriaus. Taip pat galiu pridėti jungiklius ir jutiklius, bet dar neįdėjau nė vieno iš jų. Geriausias dalykas yra tai, kad prie „Arduino“roboto galite pridėti viską, ko norite. Norint valdyti papildomus dalykus ir įvesti kompiuterį, reikia tik šiek tiek sąsajos kodo.

2 žingsnis: dalys

Dalys
Dalys
Dalys
Dalys
Dalys
Dalys

Savo robotui naudojau keletą skirtingų dalių. Dauguma dalių buvo iš senų daiktų, kuriuos klojau aplink savo rūsį. 1) „Arduino Duemilanove“su „ATMega328“Tai yra naujausias „Arduino“, ir kadangi ką tik jį gavau prieš kelias dienas, turiu naujausią. Tačiau kodas yra pakankamai mažas, todėl jis turėtų lengvai tilpti į bet kurį „Arduino“. Jis tikriausiai netgi tilptų „ATTiny“(jei aš sukursiu roboto valdiklį, išskyrus „Arduino“, „ATTiny 2313“atrodo geras pasirinkimas, jis yra mažesnis ir pigesnis, tačiau vis tiek turi daug išėjimų ir serijinę UART sąsają) 2) „Vex Robotics PlatformI“prieš keletą metų gavo „Vex“rinkinį, skirtą sukurti radijo bangomis valdomą robotą, kuris paimtų daiktus vidurinės mokyklos varžyboms. Aš sukūriau pagrindinę „kvadratinio roboto“bazę, kurioje yra 4 ratai, varomi dviem varikliais. Jei turite kitą platformą, kurią norite vairuoti, galite pakeisti kitas robotų bazes. Svarbu atkreipti dėmesį į tai, kad „Vex“varikliai iš esmės yra nepertraukiamo sukimosi servos, jie naudoja impulsų pločio moduliaciją, kad signalizuotų, kaip greitai ir kokia kryptimi pasukti. „Vex“varikliai yra gražūs, nes jie turi didelę darbinę įtampą, nuo 5 iki 15 voltų. Aš naudoju 12V, nes turėjau 12V bateriją. Daugeliui standartinių pomėgių servo reikia mažesnės įtampos (dažnai 6 voltų).3) Akumuliatorius Robotas nenaudingas be maitinimo. Bandymams naudoju standartinį 9 V sienelės karpų adapterį iš „RadioShack“, tačiau veikimui belaidžiu būdu radau 12 V NiMH akumuliatorių sename nešiojamajame kompiuteryje. Nors nešiojamojo kompiuterio veikimui nepakanka įkrovimo, jis puikiai veža mano „Vex“robotą. Jis taip pat gali maitinti „Arduino“naudodami maitinimo jungties „Vin“įvesties kaištį, „Arduino“reguliuos 12V iki 5 ir netgi išves 5V išėjimo kaištį ant maitinimo jungties. 4) Pagrindinė duonos lenta viską sujungti. Galų gale aš gausiu gražesnę prototipų plokštę ir lydmetalį prie kai kurių pastovesnių jungčių, tačiau kol kas duonos plokštė leidžia lengvai pakeisti dalykus. Mano duonos lenta yra „SparkFun“„pagrindinė duonos lenta“, tai tik duonos lentelė ant metalinės plokštės su 3 gnybtais.5) MAX232 pagrindu pagamintas RS232-TTL keitiklis Jei norite vairuoti savo robotą naudodami RS-232 nuoseklaus prievado jungtį (priešingai nei pastatytas „Arduino“) USB), galite naudoti RS232-TTL keitiklį. Aš naudoju „MAX232“, nes keli iš jų gulėjo, ir lituodavau ant nedidelio prototipų plokštės gabalo su reikiamais kondensatoriais. Man reikia RS-232, nes mano sename nešiojamajame kompiuteryje yra tik vienas USB prievadas, ir aš jį naudoju žaidimų valdikliui vairuoti robotą. gavau vieną su mano „Arduino“užsakymu, nes jie skambėjo šauniai). Šviesa mirksi raudona, žalia, mėlyna spalva iš eilės, kai „Arduino“įsijungia, kad parodytų, jog robotas iš naujo paleistas, ir užsidega žalia spalva, kai gaunamas variklio paketas, mėlyna, kai gaunamas ventiliatoriaus paketas, ir raudona, kai blogas arba nežinomas paketas gautas. Norėdami valdyti ventiliatorių, naudoju standartinį NPN tranzistorių (tuos pačius, kuriuos demonstravau savo paskutinėje instrukcijoje) ir rezistorių tarp tranzistoriaus ir „Arduino“(tranzistorius traukė per daug srovės ir įkaitino „Arduino“, todėl nustatiau apribojimą įjunkite rezistorių, kad jį sustabdytumėte).

3 žingsnis: „Arduino“ir kompiuterio programavimas

„Arduino“ir kompiuterio programavimas
„Arduino“ir kompiuterio programavimas

Norėdami užprogramuoti „Arduino“, jums akivaizdžiai reikės „Arduino“programinės įrangos ir USB kabelio. Taip pat galite užprogramuoti „Arduino“naudodami nuoseklųjį prievadą ir TTL lygio keitiklį, jei jūsų kompiuteryje yra nuoseklusis prievadas. Atminkite, kad USB nuoseklioji sąsaja nebendraus su „Arduino“„ATMega“procesoriumi, jei prie „Arduino“nuoseklių kaiščių yra prijungtas lygio keitiklis (0 ir 1 kaiščiai), todėl atjunkite jį prieš naudodami USB. „Arduino“mums reikės serijinės sąsajos, leidžiančios PC valdyti variklius. Mums taip pat reikės PWM servo pavaros sistemos, kad galėtume siųsti teisingus signalus į „Vex“variklius ir įsitikinti, kad jie eina teisingomis kryptimis, kai pateikiamos tinkamos vertės. Aš taip pat pridėjau paprastą šviesos diodų mirksėjimą, daugiausia būsenos indikacijai, bet taip pat todėl, kad jis atrodo kietas. Kompiuteryje turėsime atidaryti nuoseklųjį prievadą ir išsiųsti duomenų kadrus, kuriuos supras „Arduino“programa. Kompiuteris taip pat turi pateikti variklio vertes. Lengvas būdas tai padaryti yra naudoti USB žaidimų trinkelę arba vairasvirtę, aš naudoju „Xbox 360“valdiklį. Kitas variantas - belaidžiu važiavimu pačiame robote naudoti tinklo kompiuterį („netbook“arba mažą mini ITX plokštę). Naudodami „netbook“, netgi galite naudoti įmontuotą internetinę kamerą, kad galėtumėte srautiniu būdu perduoti vaizdo įrašų srautą atgal ir vairuoti robotą nuotoliniu būdu. Savo sąrankai tinklo programavimui naudoti „Linux“lizdų sistemą. Viena programa („vairasvirtės serveris“) vykdoma atskirame kompiuteryje, prie kurio yra prijungtas valdiklis, o kita programa („klientas“) paleidžiama prie „Arduino“prijungto tinklo. Tai susieja du kompiuterius ir siunčia vairasvirtės informaciją į „netbook“, kuri siunčia serijinius paketus į „Arduino“, kuris varo robotą. Norėdami prisijungti prie „Arduino“naudodami „Linux“kompiuterį (C ++), pirmiausia turite atidaryti nuoseklųjį prievadą baudų spartą ir tada nusiųskite reikšmes naudodami protokolą, kurį taip pat naudojote „Arduino“kode. Mano serijinis formatas yra paprastas ir efektyvus. Aš naudoju 4 baitus kiekvienam „kadrui“, kad galėčiau siųsti du variklio greičius (kiekvienas yra vienas baitas). Pirmasis ir paskutinis baitai yra užkoduotos reikšmės, kurios naudojamos, kad „Arduino“nesiųstų neteisingo baito į PWM kodą ir varikliai neišprotėtų. Tai yra pagrindinis RGB šviesos diodo tikslas, jis mirksi raudonai, kai serijos kadras buvo neužbaigtas. 4 baitai yra šie: 255 (kietas „pradinis“baitas),,, 200 (griežtai koduotas „pabaigos“baitas) Kad užtikrintumėte patikimą duomenų priėmimą, įsitikinkite, kad tarp programų ciklų atidėjote pakankamai laiko. Jei paleisite savo kompiuterio kodą per greitai, jis užtvindys prievadą ir „Arduino“gali pradėti kristi arba net neteisingai skaityti baitus. Net jei jis nemeta informacijos, jis taip pat gali perpildyti „Arduino“nuosekliojo prievado buferį. „Vex“varikliams naudoju „Arduino Servo“biblioteką. Kadangi „Vex“varikliai yra tik nuolatinio sukimosi varikliai, jie naudoja tą patį signalą, kokį naudoja servai. Tačiau vietoj to, kad 90 laipsnių būtų centras, tai yra sustojimo taškas, kuriame variklis nesisuka. Sumažinus „kampą“, variklis pradeda suktis viena kryptimi, o pakėlus kampą jis sukasi kita kryptimi. Kuo toliau nuo centro taško, tuo greičiau variklis suksis. Nors siunčiant varikliams didesnes nei 180 laipsnių vertes, tai nieko nesulaužys, patarčiau apriboti vertes nuo 0 iki 180 laipsnių (šiuo atveju tai yra greičio padidėjimas). Kadangi norėjau daugiau valdymo ir mažiau nekontroliuojamo roboto vairavimo, prie savo programos pridėjau programinės įrangos „greičio apribojimą“, kuris neleidžia greičiui didėti daugiau nei 30 laipsnių bet kuria kryptimi (diapazonas yra 90 +/- 30). Aš planuoju pridėti serijinio prievado komandą, kuri pakeis greičio apribojimą, kad kompiuteris galėtų greitai pašalinti greičio apribojimą (bandžiau mažuose kambariuose, todėl nenoriu, kad jis paspartėtų) ir atsitrenkti į sieną, ypač su „netbook“). Norėdami gauti daugiau informacijos, atsisiųskite pridėtą kodą šios instrukcijos pabaigoje.

4 žingsnis: pridėkite „Netbook“, kad iš tolo tyrinėtumėte nežinomus pasaulius

Pridėkite „Netbook“, kad iš tolo tyrinėtumėte nežinomus pasaulius
Pridėkite „Netbook“, kad iš tolo tyrinėtumėte nežinomus pasaulius
Pridėkite „Netbook“, kad iš tolo tyrinėtumėte nežinomus pasaulius
Pridėkite „Netbook“, kad iš tolo tyrinėtumėte nežinomus pasaulius

Turėdami pilną kompiuterį savo „Arduino“robote, galėsite vairuoti robotą iš tiek, kiek gali pasiekti „WiFi“be jokių laidų, kad robotas būtų apribotas tik vienoje srityje. Geras kandidatas į šį darbą yra „netbook“, nes „netbooks“yra maži, lengvi, turi įmontuotą bateriją, turi „WiFi“ir dauguma netgi turi įmontuotas internetines kameras, kuriomis galima perduoti roboto vaizdą atgal į saugią vietą. gali jį kontroliuoti. Be to, jei jūsų „netbook“įrengta mobiliojo plačiajuosčio ryšio paslauga, jūsų diapazonas yra praktiškai neribotas. Turėdami pakankamai baterijų, galite nuvežti robotą į vietinę picos vietą ir pateikti užsakymą per internetinę kamerą (nerekomenduojama, robotai paprastai neleidžiami picos vietose, net jei jie būtų žmonės, kurie greičiausiai bandys pavogti robotą ir galbūt net pica). Tai taip pat gali būti geras būdas ištirti tamsią rūsio gelmę iš patogios biuro kėdės, nors šiuo atveju gali būti labai naudinga pridėti keletą žibintų.

Yra daug būdų, kaip tai padaryti, daugelis tikriausiai yra daug lengvesni nei mano, nors aš nesu susipažinęs su apdorojimo ar scenarijaus kalbomis, todėl nusprendžiau naudoti „Linux“ir „C ++“, kad sukurtų belaidį valdymo ryšį tarp savo bazinės stoties (dar žinomas kaip senas „ThinkPad“) ir mano naujasis „Lenovo IdeaPad“nešiojamasis kompiuteris, prijungtas prie „Arduino“disko bazės. Abiejuose kompiuteriuose veikia „Ubuntu“. „ThinkPad“yra prijungtas prie mano mokyklos LAN, o „IdeaPad“- prie mano „WiFi“prieigos taško, kuris taip pat yra prijungtas prie mokyklos LAN (negalėjau gauti patikimo vaizdo srauto iš mokyklos „WiFi“, nes visi kiti juo naudojasi, todėl nustatiau sukurti savo maršrutizatorių, kad būtų užtikrintas geras ryšys). Geras ryšys yra ypač svarbus mano atveju, nes neįdiegiau jokių klaidų tikrinimo ar skirtojo laiko. Jei tinklo ryšys staiga nutrūksta, robotas eina tol, kol atsitrenkia į kažką arba aš bėgu ir jį sustabdau. Tai yra pagrindinis veiksnys, lemiantis mano sprendimą sulėtinti pavarą tiek sumažinant variklius, tiek įgyvendinant programinės įrangos greičio apribojimą.

5 veiksmas: gaukite vaizdo įrašą

Kai jūsų robotas tyrinėtojas galės vairuoti belaidį ryšį, tikriausiai norėsite turėti vaizdo įrašą iš „netbook“, kad galėtumėte pasakyti, kur yra jūsų robotas. Jei naudojate „Ubuntu“(ar net jei to nedarote!), Srautiniam perdavimui rekomenduoju naudoti „VLC Media Player“. Jei jo neįdiegėte, jums tikrai trūksta, todėl įdiekite jį naudodami komandą „sudo apt-get install vlc“, naršykite VLC „Ubuntu“programinės įrangos centre (tik 9.10) arba atsisiųskite diegimo programą iš „videolan“. org, jei naudojate „Windows“. Jums reikės VLC, veikiančio abiejuose kompiuteriuose. VLC gali transliuoti ir leisti srautus tinkle. „Netbook“kompiuteryje (roboto kompiuteryje) pirmiausia įsitikinkite, kad jūsų internetinė kamera (integruota arba prijungta prie USB) veikia spustelėję „Open Capture Device“ir bandydami „Video for Linux 2“(kai kuriems senesniems įrenginiams gali reikėti „Video for Linux“, o ne naujos 2 versijos). „Netbook“ekrane turėtumėte pamatyti fotoaparato vaizdą. Norėdami jį transliuoti, meniu „Failas“pasirinkite „Srautinis perdavimas“, tada pasirodžiusio lango viršuje pasirinkite skirtuką „Fiksuoti įrenginį“. Atminkite, kad naudojant „Ubuntu“(ir daugelį kitų „Linux“distribucijų) galite laikyti nuspaudę „Alt“, kad spustelėtumėte ir vilktumėte per didelius ekranui skirtus langus (ypač naudinga senesniuose nešiojamuosiuose kompiuteriuose, nors net mano „IdeaPad“be jokios akivaizdžios priežasties turi nelyginę 1024x576 skiriamąją gebą). Norėdami sumažinti vėlavimą, spustelėkite „Rodyti daugiau parinkčių“ir sumažinkite talpyklos vertę. Suma, kurią galite sumažinti, kartais priklauso nuo įrenginio, ji tampa nestabili, jei ją sumažinsite per daug. Po 300 ms galite šiek tiek atidėti, bet tai nėra labai blogai.

Tada spustelėkite Srautas, kad pereitumėte į kitą meniu. Spustelėkite Pirmyn, tada pasirinkite ir pridėkite HTTP kaip naują paskirties vietą. Dabar nustatykite transkodavimą, kad srautas būtų mažesnis. Aš sukūriau pasirinktinį profilį, kuriame naudojamas M-JPEG greitis 60 kb/s ir 8 kadrai per sekundę. Taip yra todėl, kad naudojant išplėstinį kodeką, pvz., MPEG ar „Theora“, „Netbook“„Atom“procesorius sunaudos daug procesoriaus laiko ir dėl to jūsų vaizdo įrašas gali būti sustabdytas be jokios akivaizdžios priežasties. MJPEG yra paprastas kodekas, kurį lengva naudoti esant mažam pralaidumui. Pradėję srautą, kitame kompiuteryje atidarykite VLC, atidarykite tinklo srautą, pasirinkite HTTP ir įveskite savo „netbook“IP adresą (vietinį arba interneto, priklausomai nuo to, kaip jungiatės), po kurio eina „: 8080“. Dėl keistos priežasties turite nurodyti prievadą, kitaip jis pateikia klaidų. Jei turite tinkamą ryšį, kitame kompiuteryje turėtumėte pamatyti savo žiniatinklio kameros sklaidos kanalą, tačiau jis šiek tiek (apie sekundę) vėluoja. Tiksliai nežinau, kodėl atsiranda toks vėlavimas, bet negaliu suprasti, kaip jo atsikratyti. Dabar atidarykite valdymo programą ir pradėkite vairuoti savo „netbook“robotą. Pajuskite, kaip važiuojant veikia atidėjimas, kad į nieką neatsitrenktumėte. Jei tai veikia, jūsų „netbook“robotas baigtas.

Rekomenduojamas: