Izdelajmo Arduino robotsko roko z brezžičnim upravljanjem prek pametnega telefona

Svet elektronike colorHow To Mechatronics collects
Prevod: Bojan Kovač
2019_274_49

V tem članku sem pripravil podrobna navodila, kako narediti Arduino robotsko roko, ki jo potem lahko brezžično upravljate s pomočjo Android aplikacije za pametni telefon. Prikazan bo celoten proces gradnje, od oblikovanja in 3D tiskanja robotskih delov, povezovanja elektronskih komponent in programiranja Arduina, pa vse do razvoja lastne Android aplikacije za nadzor robotske roke.

Opis možnosti

274 49 02 300x76 - Izdelajmo Arduino robotsko roko z brezžičnim upravljanjem prek pametnega telefonaS pomočjo drsnikov, ki jih najdemo v aplikaciji, lahko ročno upravljamo gibanje vsakega posameznega servomotorja ali takoimenovane osi robotske roke. Z gumbom »Shrani« lahko posnamemo vsak položaj ali posamezen korak, nato pa se lahko robotska roka samodejno premika s ponovitvijo teh korakov. Z istim gumbom lahko zaustavimo samodejno delovanje in ponastavimo ali celo izbrišemo vse posamezne korake, namesto njih pa posnamemo nove.

274 49 01 300x170 - Izdelajmo Arduino robotsko roko z brezžičnim upravljanjem prek pametnega telefona

Slika 1

3D model robotske roke Arduino
Čisto na začetku sem oblikoval in narisal robotsko roko z uporabo programske opreme Solidworks 3D. Roka ima 5 stopenj svobode (sika 2).

Za prve 3 osi, pas, ramo in komolec sem uporabil servo motorje z oznako MG996R, za drugi dve osi, za višino in nagib zapestja ter za prijemalo, pa sem uporabil manjši mikro servo z oznako SG90.

Na spodnjih povezavah si lahko prenesete datoteke 3D-modela te robotske roke

3D tiskanje robotske roke
S svojim novim 3D tiskalnikom z oznako Creality CR-10, sem lahko doma čisto sam v 3D tehniki natisnil vse sestavne dele za Arduino robotsko roko (sika 3).

Tukaj bi rad izkoristil priložnost in izrekel zahvalo spletni trgovini Banggood.com, prek katere sem si ta odličen 3D tiskalnik lahko kupil. Kakovost tiskanja tiskalnika Creality CR-10 je prav neverjetna glede na svojo ceno in je zelo ugodna glede na to, da je tiskalnik že ob dobavi skoraj 90% sestavljen (slika 4).

Da pa bi montažo dokončali, moramo zgornje in spodnje dele okvirja povezati z nekaj vijaki in nosilci, nato pa elektronske komponente in ohišje krmilnika med seboj povezati s priloženimi kabli (slika 5).

Preden 3D tiskalnik prvič vklopite, vam priporočam, da preverite, če se drsna kolesca dovolj tesno prilegajo vodilom in če se ne, lahko težavo preprosto odpravite z uporabo ekscentričnih matic, ki jih po potrebi privijete. In to je to, ko imate poravnano osnovno ploščo za 3D, ste pripravljeni, da se vaše 3D stvaritve spremenijo v resničnost (slika 6)!
Vse dele za robotsko roko Arduino sem uspel pripraviti v samo nekaj urah

Sestavljanje robotske roke

No, zdaj pa smo prišli do tiste točke, ko lahko začnemo robotsko roko sestavljati. Začel sem z osnovo, podnožjem, na katerega sem z vijaki, ki so sestavni del servo kompleta, pritrdil servo motor. Nato sem na pogonsko os servo motorja z vijakom pritrdil ročico, vzvod v obliki diska (slika 7).

Na zgornjo stran tega vzvoda sem z dvema vijakoma pritrdil zgornji del robotske roke (slika 8).

Tudi v nadaljevanju sestavljanja najprej namestimo servo, nato vzvod v obliki diska na naslednji gibljivi del robotske roke, nato pa ju, že pritrjena drug na drugega, z vijakom pritrdimo na izhodno gred servo motorja (slika 9).

Najbrž boste opazili, da bi bilo pri ramenski osi dobro dodati kakšno vzmet ali kot vidite v mojem primeru, uporabiti navadno gumico. S tem nekoliko pomagamo servomotorju, ki nosi tako celotno težo preostale roke, kot tudi težo tovora, ki jo nosi (slika 10).

Na podoben način sem nadaljeval s sestavljanjem preostalih delov robotske roke. Kar zadeva prijemalni mehanizem, sem za sestavljanje uporabil nekaj vijakov in matic M4 (slika 11).
Nazadnje sem mehanizem prijemala pritrdil na zadnji servo in sestavljanje Arduino robotske roke je bilo s tem končano (slika 12).

Shema robotske roke Arduino
V naslednji fazi bomo povezali elektroniko. Vezje tega projekta je pravzaprav dokaj preprosto. Za komunikacijo s pametnim telefonom potrebujemo samo ploščo Arduino in Bluetooth modul HC-05. Krmilni priključki šestih servo motorjev so priključeni na šest digitalnih priključkov Arduino plošče (slika 13).

Za napajanje servomotorjev potrebujemo napetost 5V, vendar jo moramo zagotoviti iz nekega zunanjega vira, saj Arduino ne zmore zagotavljati tolikšnega toka, ki bi ga v nekem trenutku lahko zahtevali vsi servo motorji za svoje delovanje. Vir napajanja mora za delovanje servo motorjev namreč zagotavljati vsaj 2A toka. Ko vse skupaj povežemo, lahko že kar nadaljujemo s programiranjem Arduina in Android aplikacije.

Komponente, ki jih potrebujete za ta primer, lahko kupite v bolj znanih spletnih trgovinah, na primer Banggood ali Amazon, potrebovali pa boste:

  • Servo MG996R
  • Micro servo SG90
  • Bluetooth modul HC-05
  • Arduino UNO
  • Napajalnik z izhodno napetostjo 5 V, ki zmore vsaj 2 A toka

Programska koda Arduino robotske roke
Ker je ta programska koda malo daljša, bom za boljše razumevanje objavil izvorno kodo programa po delih z opisom vsakega dela, na koncu tega članka bo objavljena celotna izvorna koda.

Najprej moramo vključiti knjižnico z imenom SoftwareSerial za serijsko komunikacijo modula Bluetooth in knjižnico za servo motorje. Obe knjižnici sta že vključeni v Arduino IDE, zato ju ni potrebno dodatno namestiti. Zatem moramo določiti šest servomotorjev, Bluetooth modul HC-05 in nekatere spremenljivke za shranjevanje trenutnega in predhodnega položaja servomotorjev, kot tudi nizov za shranjevanje pozicij ali posameznih korakov za samodejni način delovanja, glej program 1.

V odseku z uvodnimi nastavitvami moramo inicializirati servo sisteme in Bluetooth modul ter premakniti robotsko roko v začetni položaj. To naredimo z uporabo funkcije write (), ki preprosto premakne servo na kateri koli položaj med 0 in 180 stopinjami, glej program 2.

Nato v delu zanke s funkcijo Bluetooth.available () ves čas preverjamo, če iz pametnega telefona prihajajo kakšni podatki. Če so, jih s funkcijo readString () preberemo kot niz znakov in jih shranimo kot spremenljivko dataIn. Glede na prejete podatke bomo robotski roki ukazovali, kaj naj počne, glej program 3.

Android aplikacija za upravljanje Arduino robotske roke

Zdaj pa si oglejmo Android aplikacijo in preverimo, kakšne podatke lahko dejansko pošilja Arduinu (slika 14).

Aplikacijo sem naredil s spletno aplikacijo MIT App Inventor in tukaj vam bom opisal, kako deluje. Na vrhu imamo dva gumba za povezavo pametnega telefona z Bluetooth modulom HC-05. Na levi strani imamo sliko robotske roke, na desni strani pa šest drsnikov za krmiljenje delovanja servomotorjev in en drsnik za nastavljanje hitrosti (slika 15).

Vsak drsnik ima drugačno začetno, minimalno in maksimalno vrednost, ki ustreza členku robotske roke. Na dnu aplikacije imamo tri tipke SAVE, RUN in RESET, s katerimi lahko sprogramiramo robotsko roko tako, da deluje samodejno. Spodaj je tudi napis s prikazanim številom korakov, ki smo jih shranili. Če želite, so vam na razpolago podrobna navodila, kako zgraditi takšne aplikacije, kot je ta z uporabo MIT App Inventor-ja. Vabim vas, da preverite ta in še druga moja podrobna navodila, ki vam utegnejo koristiti pri delu.

No, zdaj pa si oglejmo program, oziroma bloke, ki so uporabljeni v tej aplikaciji. Na levi strani imamo najprej bloke za povezavo pametnega telefona z Bluetooth modulom (slika 16).

V nadaljevanju so bloki za drsnike, s katerimi krmilimo položaje servomotorjev in bloki z gumbi za programiranje robotske roke. Torej, v trenutku, ko spremenimo položaj drsnika, hkrati s funkcijo Bluetooth .SendText, pošljemo besedilo Arduinu. To besedilo je sestavljeno iz predpone, ki označuje, na katerem drsniku je prišlo do spremembe, poleg nje pa še trenutna vrednost tega drsnika (slika 17).

Na naslednji povezavi boste našli datoteko opisanega projekta MIT App Inventor in Android aplikacijo, ki je že pripravljena za namestitev na vaš pametni telefon:

Torej, na strani Arduina z uporabo funkcije startWith () preverimo predpono vsakega vhodnega podatka in že po njej vemo, kaj bomo v naslednjem koraku spreminjali. Če naletimo na primer na predpona “s1”, vemo, da moramo premakniti servo številka ena. S funkcijo substring () potem pridobimo še preostali del besedila, ki predstavlja vrednost položaja, ga pretvorimo v celo število in dobljeno vrednost uporabimo za premik serva v ta položaj, glej program 4.

Tukaj lahko čisto preprosto le pokličemo funkcijo write () in servo se bo takoj premaknil v ta položaj, vendar se bo ta premik serva izvedel pri največji možni hitrosti, kar pa je za robotsko roko preveč zahtevno. Namesto takega načina uvedemo nadzor nad hitrostjo servomotorjev, ki sem ga izvedel z nekaj FOR zankami, s katerimi postopoma premaknemo servo iz prejšnjega v želeni novi položaj z neko časovno zakasnitvijo med vsako posamezno ponovitvijo. S spreminjanjem tega časa zakasnitve lahko prilagajamo hitrost servomotorja pri premiku sklepa robotske roke v nov položaj, glej program 5.

Če potem pritisnemo gumb RUN, s tem prikličemo uporabniško funkcijo z imenom runservo(), ki izvaja shranjene korake. Oglejmo si pobliže to funkcijo!

Tu ciklično znova in znova izvajamo shranjene korake, dokler ne pritisnemo gumba RESET. V FOR zanki izvajamo premike v vse položaje, ki so shranjeni v nizih, hkrati pa preverjamo, če morda iz pametnega telefona prihajajo kakšni podatki. Ti podatki so med drugimi lahko tudi pritisk na tipko RUN / PAUSE, ki ustavi delovanje robota in ob ponovnem pritisku nadaljuje s samodejnim delovanjem. Če uporabnik spremeni položaj drsnika hitrosti, bomo to vrednost uporabili za spremembo oziroma novo nastavitev časa zakasnitve med vsako posamezno ponovitvijo v spodnjih FOR zankah, ki krmilijo hitrost, s katero servo motorji izvedejo premik iz starega na novi položaj, glej program 6.

274 49 18 300x235 - Izdelajmo Arduino robotsko roko z brezžičnim upravljanjem prek pametnega telefona

Slika 17

Na podoben način, kot je bilo pojasnjeno že prej, z IF stavki in FOR zankami premikamo servomotorje na njihov ciljni položaj. Čisto na koncu imamo blok, s katerim obravnavamo pritisk na tipko RESET, s katerim bomo vse podatke iz nizov izbrisali in ponastavili kazalec, ki kaže na trenutno spremenljivko znotraj niza na vrednost nič, tako da bomo lahko robotsko roko ponovno sprogramirali s čisto novimi premiki, glej program 7.

In to je to, zdaj lahko začnemo uživati in se zabavamo z upravljanjem robotske roke.

Na naši strani https://svet-el.si si lahko ogledate celotni program.

Upam, da vam je všeč tudi videoposnetek, ki prikazuje delovanje Arduino robotske roke in da ste se naučili nekaj novega. Vesel bom vaših vprašanj in komentarjev, hkrati pa vas vabim, da preverite mojo celotno zbirko Arduino projektov na spletni strani: https://howtomechatronics.com/arduino-projects/

Povzeto po:

Tags: