Keturkampis robotas Arduino pagrindu. „Pasidaryk pats“ Arduino robotas Kokius robotus galima surinkti iš arduino

Rezultatas – gana juokingas robotas, kuris mato prieš save esančias kliūtis, analizuoja situaciją ir tada, tik pasirinkęs geriausią maršrutą, eina toliau. Robotas pasirodė labai manevringas. Jis gali pasisukti 180 laipsnių, o sukimosi kampas yra 45 ir 90 laipsnių. Kaip pagrindinį valdiklį autorius naudojo Iteaduino, kuris yra Arduino analogas.

Medžiagos ir įrankiai robotui gaminti:
- mikrovaldiklis (Arduino ar panašus Iteaduino);
- ultragarsinis jutiklis;
- laikiklis baterijoms;
- Kinietiški žaislai ratų bazei sukurti (galite nusipirkti jau paruoštų);
- vielos pjaustytuvai;
- klijai;
- laidai;
- varikliai;
- medienos plaušų plokštės;
- dėlionės;
- tranzistoriai (D882P).

Roboto gamybos procesas:

Pirmas žingsnis. Ratų bazės sukūrimas
Siekdamas sukurti ratų bazę, autorius įsigijo du kiniškus žaislinius automobilius. Tačiau jūs neturite dėl to jaudintis, jei turite papildomų pinigų, nes galite nusipirkti paruoštą pagrindą. Vielos pjaustytuvų pagalba automobiliai buvo supjaustyti į dvi dalis, suformuojant dvi varomąsias ašis. Tada šios dalys buvo suklijuotos. Tačiau šiuo atveju galite dirbti su lituokliu, plastikas puikiai lituojamas.

Renkantis automobilius, geriausia pasiimti žaislus su paprastais ratukais, nes, pasak autoriaus, su tokiais smaigaliais kaip jo robotas labai šokinėja.

Yra dar vienas toks momentas, kai laidai bus išvesti iš variklių, viename iš jų reikia nepamiršti pakeisti poliškumą.


Antras žingsnis. Viršutinio dangtelio gaminimas
Viršutinis roboto dangtelis pagamintas iš medienos plaušų plokštės, o šiam tikslui galima naudoti ir storą kartoną. Dangte matosi stačiakampė skylutė, ji turi būti išdėstyta taip, kad servo, kuris bus įkištas į jį, ašis būtų simetriška. Kalbant apie skylę viduryje, per ją bus išvesti laidai.


Trečias žingsnis. Robotų iškamša
Važiuoklės prijungimui geriausia naudoti atskirą maitinimo šaltinį, nes valdikliui maitinti reikia 9 V, o varikliams - tik 3 V. Apskritai tokių mašinų važiuoklėse jau yra įmontuoti baterijų laikikliai, tereikia juos jungti lygiagrečiai.








Varikliai prie valdiklio jungiami naudojant D882 P tipo tranzistorius, kurie buvo ištraukti iš senos mašinos valdymo pulto. Geriausia, žinoma, naudoti TIP120B tipo galios tranzistorius, tačiau autorius pasirinko tiesiog pagal tinkamas charakteristikas. Visa elektroninė dalis jungiama pagal nurodytą schemą.

Kai bus įdiegta roboto programinė įranga, jis bus paruoštas bandymui. Kad robotas spėtų apsisukti tam tikru kampu, reikia pasirinkti tinkamą variklių veikimo laiką.

Kalbant apie jutiklius, ultragarsinis turi būti prijungtas prie 7-osios skaitmeninės mikrovaldiklio išvesties. Servovariklis yra prijungtas prie 3-iojo skaitmeninio įėjimo, kairiojo variklio tranzistoriaus pagrindas yra prijungtas prie 11-ojo, o dešiniojo - prie 10-ojo.

Jei Krona naudojama kaip maitinimas, tada minusas prijungiamas prie GND, o pliusas - prie VIN. Taip pat reikia prijungti tranzistoriaus emiterį ir neigiamą kontaktą nuo roboto važiuoklės maitinimo šaltinio prie GND.

Sveiki. Šis straipsnis yra trumpa istorija apie tai, kaip daryti robotas rankas. Kodėl istorija, paklausite? Viskas dėl to, kad tokių gamybai amatai būtina panaudoti nemažą žinių kiekį, kurį labai sunku pateikti viename straipsnyje. Peržiūrėsime kūrimo procesą, žvilgtelėsime į kodą ir galiausiai atgaivinsime Silicio slėnio kūrimą. Patariu žiūrėti vaizdo įrašą, kad susidarytumėte idėją, kas turėtų nutikti galiausiai.

Prieš tęsdami, atkreipkite dėmesį į tai, kad gaminant amatai naudojo lazerinį pjaustytuvą. Galite atsisakyti lazerinio pjaustytuvo, jei turite pakankamai patirties dirbant rankomis. Tikslumas yra raktas į sėkmingą projekto užbaigimą!

1 veiksmas: kaip tai veikia?

Robotas turi 4 kojeles, kurių kiekvienoje yra po 3 servo, kurie leidžia judinti savo galūnes 3 laisvės laipsniais. Jis juda „šliaužiančia eisena“. Tegul jis būna lėtas, bet vienas sklandžiausių.

Pirmiausia reikia išmokyti robotą judėti pirmyn, atgal, kairėn ir dešinėn, tada pridėti ultragarsinį jutiklį, kuris padės aptikti kliūtis/kliūtis, o po to – Bluetooth modulį, kurio dėka roboto valdymas pasieks naują lygį.

2 veiksmas: reikalingos dalys

Skeletas pagamintas iš 2 mm storio organinio stiklo.

Elektroninę naminio gaminio dalį sudarys:

  • 12 servo;
  • arduino nano (gali būti pakeista bet kokia kita arduino plokšte);

  • Servo valdymo skydas;
  • maitinimo blokas (projekte naudotas 5V 4A maitinimo blokas);

  • ultragarsinis jutiklis;
  • hc 05 bluetooth modulis;

Norėdami pagaminti skydą, jums reikės:

  • plokštė (pageidautina su bendrosiomis maitinimo ir įžeminimo linijomis (autobusais);
  • inter-board kaiščių jungtys - 30 vnt;
  • lizdai vienoje plokštėje - 36 vnt;

  • laidai.

Instrumentai:

  • Lazerinis pjaustytuvas (arba sumanios rankos);
  • Super klijai;
  • Karšti klijai.

3 žingsnis: skeletas

Naudokime grafikos programą skeleto sudedamosioms dalims nupiešti.

Po to bet kokiu turimu būdu išpjauname 30 būsimojo roboto dalių.

4 žingsnis: surinkimas

Po pjovimo nuimkite apsauginę popierinę dangą nuo organinio stiklo.

Tada pereikite prie kojų surinkimo. Tvirtinimo detalės, įmontuotos į skeleto dalis. Viskas, ką reikia padaryti, yra sudėti gabalus. Jungtis gana sandari, tačiau siekiant didesnio patikimumo, tvirtinimo detales galite patepti lašeliu superklijų.

Tada reikia modifikuoti servo elementus (priklijuoti varžtą priešais servo velenus).

Šiuo patobulinimu padarysime robotą stabilesnį. Patobulinti reikia tik 8 servo, likusieji 4 bus pritvirtinti tiesiai prie korpuso.

Kojas pritvirtiname prie jungiamojo elemento (lenktos dalies), o jis, savo ruožtu, prie korpuso servo.

5 veiksmas: skydo kūrimas

Padaryti lentą yra gana paprasta, jei sekate žingsnyje pateiktas nuotraukas.

6 veiksmas: elektronika

Pritvirtinkite servo kaiščius ant arduino plokštės. Kaiščiai turi būti prijungti teisinga seka, kitaip niekas neveiks!

7 veiksmas: programavimas

Atėjo laikas prikelti Frankenšteiną į gyvenimą. Pirmiausia įkelkite legs_init programą ir įsitikinkite, kad robotas yra tokioje padėtyje, kaip parodyta paveikslėlyje. Tada įkelkite quattro_test, kad pamatytumėte, ar robotas reaguoja į pagrindinius judesius, tokius kaip pirmyn, atgal, kairėn ir dešinėn.

SVARBU: prie arduino IDE turite pridėti papildomą biblioteką. Nuoroda į biblioteką pateikiama žemiau:

Robotas turi žengti 5 žingsnius į priekį, 5 žingsnius atgal, pasukti į kairę 90 laipsnių, pasukti į dešinę 90 laipsnių. Jeigu Frankenšteinas viską daro teisingai, judame teisinga kryptimi.

P. S: sumontuokite robotą ant puodelio kaip stovą, kad kiekvieną kartą jis nenustatytų jo į pradinį tašką. Kai testai parodys normalų roboto veikimą, galime tęsti testavimą pastatydami jį ant žemės / grindų.

8 veiksmas: atvirkštinė kinematika

Atvirkštinė kinematika yra tai, kas iš tikrųjų valdo robotą (jei jūsų nedomina matematinė šio projekto pusė ir skubate baigti projektą, galite praleisti šį žingsnį, tačiau žinoti, kas varo robotą, visada bus naudinga).

Paprastais žodžiais tariant, atvirkštinė kinematika arba sutrumpintai IK yra trigonometrinių lygčių „dalis“, kurios nustato aštraus kojos galo padėtį, kiekvieno servo kampą ir t. t., kurios galiausiai lemia keletą išankstinių nustatymų. Pavyzdžiui, kiekvieno roboto žingsnio ilgis arba aukštis, kuriame kūnas bus judėjimo / poilsio metu. Naudodama šiuos iš anksto nustatytus parametrus, sistema išskirs kiekvieno servo judėjimo kiekį, kad galėtų valdyti robotą duotomis komandomis.

Jie pradeda mokytis arduino kurdami paprastus robotus. Šiandien pakalbėsiu apie paprasčiausią arduino uno robotą, kuris kaip šuo seks paskui tavo ranką ar bet kurį kitą infraraudonąją šviesą atspindintį objektą. Be to, šis robotas pralinksmins vaikus. Mano 3 metų sūnėnas noriai žaidė su robotu :)

Pradėsiu nuo dalių, kurių prireiks statant, sąrašo - Arduino UNO;

Infraraudonųjų spindulių tolimačiai;

- 3 voltų varikliai su pavarų dėžėmis ir ratais;

- jungtys 3A baterijoms;

-baterija (jei neužtenka baterijų);

- Relė varikliams valdyti;

Na, ir kitos medžiagos, kurių prireiks kūrimo procese.
Pirmiausia gaminame pagrindą. Nusprendžiau padaryti iš medžio. Pjaučiau medinę lentą taip, kad varikliai puikiai įsitaisytų plyšiuose


Tada suspaudžiau variklius medžio lenta, prisuku šį strypą

Toliau ant korpuso įdėjau arduino, relę, smegenų plokštę, nuotolio ieškiklius ir po važiuoklės pagrindu besisukantį

Dabar viską sujungiame pagal schemą

Pabaigoje į arduino įkeliame šį eskizą:

Const int R = 13; //kontaktai, prie kurių prijungti IR nuotolio ieškikliai const int L = 12; vidinis variklis L = 9; //kontaktai, prie kurių prijungta relė int motorR = 11; int mygtukasBūsena = 0; void setup() ( pinMode(R,INPUT); pinMode(L,INPUT); pinMode(variklisR,OUTPUT); pinMode(variklisL,OUTPUT); ) void loop() ( ( mygtuko būsena = skaitmeninis skaitymas(L); if (buttonState) == AUKŠTA)( digitalWrite(variklisR,HIGH); ) else ( digitalWrite(variklisR,LOW); ) ) (( mygtuko būsena = skaitmeninis skaitymas(R); if (mygtuko Būsena == HIGH)( digitalWrite(variklisL, HIGH); ) else (digitalWrite(motorL,LOW); ) ) )

Veikimo principas labai paprastas. Kairysis nuotolio ieškiklis yra atsakingas už dešinįjį ratą, o dešinysis - už kairįjį

Kad būtų aiškiau, galite pažiūrėti vaizdo įrašą, kuriame parodytas kūrimo procesas ir roboto veiksmas

Šis robotas yra labai paprastas ir kiekvienas gali tai padaryti. Tai padės suprasti, kaip veikia moduliai, pvz., relės ir IR nuotolio ieškikliai, ir kaip geriausiai juos naudoti.

Tikiuosi, kad jums patiko šis amatas, atminkite, kad amatai yra šaunūs!

Gera diena! Prieš jus, mielieji, meno robotas, galintis piešti įvairius sferinius ar kiaušinio formos objektus, kurių dydis nuo 4 iki 9 cm.

Norėdami tai padaryti, jums reikia 3D spausdintuvo, standartinių įrankių rinkinio + Arduino.

Pastaba: nepasiduokite projektams, kuriuose naudojamas 3D spausdintuvas. Jei pageidaujate, visada galite rasti vietą ar būdą, kur galėsite užsisakyti projektui reikalingų detalių spausdinimą.

1 veiksmas: šiek tiek apie robotą

Meno robotas – dviejų ašių naminis, kuris gali spausdinti ant daugumos sferinių paviršių. Robotas sukonfigūruotas tam tikro tipo objektams (ping-pong kamuoliukai, kalėdinės dekoracijos, lemputės ir kiaušiniai (antis, žąsis, vištiena...).

Sferiniam objektui sukti ir manipuliatoriui judinti naudojami didelio tikslumo žingsniniai varikliai su dideliu sukimo momentu, o rankenos mechanizmui pakelti – tyli ir patikima SG90 servo pavara.

2 veiksmas: reikalingos dalys

Gaminti „pasidaryk pats“ amatas mums reikės:

  • 2x guoliai 623;
  • 3 mm skersmens ir 80-90 mm ilgio plaukų segtukas;
  • 1x spyruoklė (ilgis 10mm ir skersmuo 4,5mm);
  • 2x NEMA 17 žingsniniai varikliai (sukimo momentas 4,4 kg/cm);
  • Kabeliai varikliams (ilgis 14 + 70 cm);
  • USB kabelis;
  • 1x SG90 servo;
  • Arduino Leonardo;
  • skydas JJRobots;

  • 2xA4988 žingsninio variklio tvarkyklės;
  • Maitinimas 12V / 2A;
  • 11x M3 6mm varžtai;
  • 4x M3 16mm varžtai;
  • 4x veržlės M3;
  • 2x 20mm siurbtukai;
  • 1x sparnuota veržlė M3;
  • 1x žymeklis;

3 veiksmas: bendra schema

Kaip „sukčiavimo lapą“ galite naudoti šią schemą.

4 veiksmas: pradėkime!

Robotas judina manipuliatorių su prie jo pritvirtintu žymekliu, kurį varo žingsninis variklis. Kitas žingsninis variklis yra atsakingas už objekto, ant kurio piešiamas piešinys (kiaušinis, rutulys ...) pasukimą. Elementui laikyti naudojami du siurbtukai, vienas pritvirtintas prie žingsninio variklio, o kitas – priešingoje daikto pusėje. Maža spyruoklė paspaus siurbtuką, kad padėtų jam laikyti daiktą. SG90 servo yra naudojamas pakelti / nuleisti žymeklį.

5 veiksmas: manipuliatorius

Įdėkite veržlę į jai paruoštą angą ir priveržkite 16 mm varžtą. Padarykime tą patį su daiktų turėtoju (dešinėje aukščiau esančiame paveikslėlyje). Kuriant vyrį manipuliatoriui buvo panaudoti 2 16 mm varžtai. Priveržus varžtus, šis vyris turėtų laisvai suktis.

6 veiksmas: siurbtukai

Įdėkite vieną iš siurbtukų į angą daiktų laikiklyje.

7 veiksmas: žingsninių variklių pritvirtinimas

Pritvirtinkite abu žingsninius variklius prie pagrindinio rėmo 8 varžtais.

8 veiksmas: sukimosi ašis

Sudėkime visus elementus, kaip parodyta aukščiau esančiame paveikslėlyje.

  • Siurblys;
  • Varžtas;
  • Viršutinė dalis;
  • Pavasaris;
  • Guolis 623 (turėtų būti įmontuotas į kairįjį kaušelį);
  • Kairysis puodelis;
  • Laisva vieta pagrindiniam rėmui;
  • Dešinysis puodelis;
  • Guolis 623;
  • Atskyrimo žiedas;
  • Sparninė veržlė (M3).

9 veiksmas: pastatykite viską į savo vietas

Įdėkite surinktą manipuliatorių ant žingsninio variklio ašies.

Sumontuokite kairę atramą ant žingsninio variklio ašies.

Žymeklis ir kiaušinis pateikiami kaip pavyzdys (jų dabar dėti nereikia).

PASTABA: servo valdiklį reikės reguliuoti. Kalibravimo proceso metu turėsite iš naujo nustatyti jo kampą.

10 veiksmas: elektronika

Pritvirtinkite elektroniką pagrindinio rėmo galinėje pusėje varžtais (užteks 2).

Sujungkime laidus.

Jei jungdami žingsninius variklius pakeisite poliškumą, jie tiesiog suksis priešinga kryptimi, tačiau su servo padėtis nėra tokia nekenksminga! Taigi prieš prijungdami dar kartą patikrinkite poliškumą!

11 veiksmas: „Arduino Leonardo“ programavimas

Programuokime Arduino Leonardo naudodami Arduino IDE programinės įrangos aplinką (v 1.8.1).

  • Atsisiųskite Arduino IDE (v 1.8.1) ir įdiekite programą;
  • Paleiskite programinę įrangą. „Tools->board“ meniu pasirinkite „Arduino Leonardo“ plokštę ir atitinkamą COM-PORT;
  • Atidarykime ir atsisiųskite Sphere-O-Bot kodą. Išpakuosime visus failus viename aplanke ir pavadinkime jį „Ejjduino_ARDUINO“.

12 veiksmas: meno robotas yra pasirengęs kurti meno kūrinius

13 veiksmas: roboto valdymas

Programinė įranga inkscape. Atsisiųskite ir įdiekite „Inkscape“ programinę įrangą (rekomenduoju stabilią 0.91 versiją).

Atsisiųskite ir įdiekite „EggBot Control“ plėtinį (2.4.0 versija buvo visiškai išbandyta).

„Inkscape“ skirtas „EggBot Control Extension“ yra įrankis, naudojamas bandant ir kalibruojant „EggBot“ ir perkeliant brėžinius į kiaušinį. Pirmiausia turite paleisti „Inkscape“. Paleidus „Inkscape“, atsiras „Extensions“ meniu, kuriame jau reikia pasirinkti „Eggbot“ submeniu. Jei nematote „Eggbot“ submeniu, vadinasi, netinkamai įdiegėte plėtinius. Kurkite atsarginę kopiją ir atidžiai vykdykite plėtinių diegimo instrukcijas.

Tai viskas, ačiū už dėmesį!)

Su nuotolinio valdymo pulteliu, paprastais jutikliais ir logika „Arduino“ yra labai lengva gaminti skirtingus automobilius. Todėl ši linija yra neįtikėtinai populiari. Parduodama daug suderinamų jutiklių ir išplėtimo plokščių. Internetas pilnas paruoštų programinės įrangos bibliotekų ir atvirojo kodo projektų visoms progoms. Beveik visus klausimus, kuriuos turėsite įsisavindami Arduino, kažkas jau uždavė, ir jūs visada rasite atsakymą.

Pradėkime nuo ko nors, ar ne? Pagrindinis klausimas yra valdiklio pasirinkimas. Yra daug „Arduino“ versijų, taip pat trečiųjų šalių klonų, sukurtų iš tų versijų. Čia yra turbūt dvi įdomiausios mums pamokos:

  • Arduino Uno yra geriausias pasirinkimas pradedantiesiems, pati paprasčiausia, prieinamiausia ir labiausiai paplitusi lenta. Jis pagrįstas ATmega328 lustu, kurio laikrodžio dažnis yra 16 MHz, 32 KB „flash“ atminties, 2 KB RAM ir 1 KB EEPROM. Uno turi 14 skaitmeninių įėjimų/išėjimų, kurie gali būti naudojami jutikliams ir servosistemoms bei kitiems įrenginiams valdyti;
  • Arduino Mega / Mega 2560 yra lenta, kuri pravers, kai iš anksto žinosite, kad projektas bus sunkus. Pagrindinis skirtumas – daugiau įėjimų/išėjimų (Mega – 48, Mega 2560 – 54). Čia taip pat daug daugiau atminties: 8 KB RAM, 4 KB EEPROM ir 128 ir 256 KB flash atminties (atitinkamai Mega ir Mega 2560). Tarpusavyje plokštės taip pat skiriasi lustu, USB greičiu ir kai kuriomis kitomis savybėmis.

Žinoma, taip pat yra „Arduino Pro“, „Arduino LilyPad“ ir daugelis kitų. Bet dabar sutelkime dėmesį į pirmuosius du modelius. Mūsų atveju viskas gana paprasta: „Mega“ reikalinga daug kojų turinčiam robotui.

Pirmas kodas

Pirmiausia įdiegkime Arduino IDE (arduino.cc) – tai nemokama kelių platformų kūrimo aplinka. Dabar, jei prijungsime savo Arduino, galime pabandyti parašyti pirmąjį kodą paprasčiausiu pavyzdžiu: mirksinčia LED programa. Dauguma Arduino valdiklių jį turi ir yra prijungti prie kaiščio 13. Beje, Arduino pasaulyje programos dažniausiai vadinamos eskizais. Štai eskizo tekstas su komentarais:

// Suteikite šiam kaiščiui pavadinimą LED: const int LED = 13; void setup() ( // Inicijuoti skaitmeninį kaištį // išvesties: pinMode(LED, OUTPUT); ) void loop() ( // Nustatykite loginį vieno lygio // 13 kaiščiui (švieskite šviesos diodą): digitalWrite(LED) , HIGH) ; // Pristabdykite eskizą // sekundei: delay (1000); // Taikykite loginį nulinį lygį // 13 kaiščiui (išjunkite šviesos diodą): digitalWrite (LED, LOW); // Pristabdykite sekundę dar kartą nupieškite eskizą: delsimas (1000); )

Atkreipkite dėmesį į sąrankos ir kilpos funkcijas. Jie turi būti bet kuriame „Arduino“ eskize. Sąranka iškviečiama vieną kartą, kai valdiklis įjungiamas arba valdiklis paleidžiamas iš naujo. Jei norite, kad kodas būtų vykdomas tik vieną kartą, jį reikia įdėti čia. Dažniausiai tai yra visokios kažko inicijavimo procedūros. Mūsų eskizas nėra išimtis: Arduino skaitmeniniai kaiščiai gali veikti ir kaip įvestis, ir kaip išvestis. Sąrankos funkcijoje sakome, kad 13 kaištis veiks kaip skaitmeninis valdiklio išėjimas.

Kai sąrankos funkcija baigia savo darbą, automatiškai paleidžiamas uždaras ciklas, kurio viduje bus iškviesta ciklo funkcija. Mes privalome parašyti, ką norime ten veikti. Ir mes norime pritaikyti loginį vieno lygio (5 V) 13 kaištį, tai yra, uždegti šviesos diodą, tada palaukti vieną sekundę (1000 milisekundėmis), tada pritaikyti loginį nulinį lygį (0 V) ir vėl palaukti vieną sekundę. Kitas skambutis į kilpą pakartos viską.

Dabar mes „įkeliame“ savo eskizą į valdiklį. Ne, mums nereikia programuotojo. „Arduino“ valdikliuose, be mūsų eskizų, yra speciali programa - įkrovos įkroviklis, kuris visų pirma kontroliuoja kodo įkėlimą iš kompiuterio. Taigi, norint įkelti eskizą, mums reikia tik USB kabelio ir meniu elemento Failas → Įkelti (Ctrl + U) Arduino IDE.

pagrindinis klausimas

Kiek kojų mums iš tikrųjų reikia? Apibrėžkime įvairias vaikščiojančių robotų konfigūracijas. Pagal kojų skaičių:

  • dvikojis – dvikojis (prototipas – vyras);
  • keturkojis – keturkojis (prototipas – dauguma žinduolių);
  • šešiakojai – šešiakojai (prototipas – dauguma vabzdžių);
  • aštuonkojai – aštuonkojai (prototipas – vorai, skorpionai, krabai ir kiti nariuotakojai).

Be kojų skaičiaus, svarbi ir kiekvienos jų konfigūracija. Pagrindinė kojos charakteristika yra laisvės laipsnių skaičius arba laisvės matmenys (DOF). Laisvės laipsnis – tai galimybė suktis arba pasilenkti aplink vieną ašį (rečiau – judėti į priekį išilgai jos). Akivaizdu, kad jei yra tik vienas laisvės laipsnis, tada tokia koja toli nenueisi. Dviejų laisvės laipsnių kojos (2DOF) jau leidžia judėti kelių kojų robotams, nors 2DOF leidžia laisvai judėti kojos galiukui tik vienoje plokštumoje. O 3DOF kojelė judina „pėdą“ 3D erdvėje (nebent, žinoma, visos trys ašys yra lygiagrečios). Taip pat yra 4DOF kojelės, kurios tiesiog padidina kojos lankstumą ir judesių diapazoną. Vabzdžiai dažniausiai turi 4DOF kojas.

Ką tai reiškia mums? Pigiuose mėgėjiškuose robotuose kiekvieną laisvės laipsnį įgyvendina vienas variklis, tiksliau – servo pavara, arba serv. Kojų konfigūracija vienareikšmiškai lemia, kiek šių servo sistemų reikia. Taigi 3DOF šešiakojui reiktų 18 servo, o 4DOF vorui – 32. Neišsigąskite skaičiais, mėgėjiškuose RC modeliuose naudojami maži servosai yra labai pigūs. Internetinėse parduotuvėse jų galima rasti pagal pageidavimą mikro servo.

Norint užprogramuoti servus, pakanka žinoti, kad jie jau turi valdiklį, kuris atlieka pagrindinį darbą. O tereikia tiekti maitinimą ir skaitmeninį signalą, kuris valdikliui praneša, į kurią padėtį norime pasukti pavaros veleną. Nesunku rasti informacijos apie jų dizainą. Jų protokolas yra paprasčiausias iš visų skaitmeninio ryšio protokolų: impulsų pločio moduliacija – PWM (angl. PWM). Visi paprasti servo įrenginiai turi trijų kontaktų jungtį: įžeminimą, +5V (įtampa gali skirtis priklausomai nuo dydžio ir galios) ir signalo įvestį. Arduino valdikliai gali generuoti šį signalą dviem skirtingais būdais. Pirmasis yra aparatinė PWM, kurią pati lustas gali išvesti keliuose savo skaitmeniniuose įvesties / išvesties kaiščiuose. Antrasis yra programinė įranga. Programinė įranga leidžia vienu metu priimti daugiau skirtingų PWM signalų nei aparatinė įranga. Jam yra patogus įvyniojimas pagal Arduino - Servo biblioteką. Tai leidžia vienu metu naudoti 12 servų daugumoje mažų valdiklių (Uno, Due, Nano) ir 48 servus Arduino Mega ir panašiuose įrenginiuose. Servo signalo kaištis yra prijungtas prie skaitmeninio Arduino kaiščio. Žemė ir galia – aišku, į žemę ir galią, jas gali dalytis visi servo įrenginiai. Trijų laidų servo kilpose juoda arba ruda šlifuojama, dažniausiai raudona +5 V viduryje, galiausiai balta arba geltona yra signalas. Programinės įrangos požiūriu valdymas yra labai paprastas:

Servo myservo; // Servo ant Arduino kaiščio 9 myservo.attach(9); // Pasukti į padėtį 90º myservo.write(90);

Dauguma servo gali pasukti veleną 180°, o jiems 90° yra vidurinė padėtis. Siekiant supaprastinti servo prijungimą prie Arduino plokštės, yra keletas sprendimų. Kanoniškiausias yra jutiklių skydas. Įdiegę jį ant Uno ir tiekdami maitinimą į servo gnybtus, galite tiesiogiai prie jo prijungti jų jungtis.

Baterija

Kitas svarbus klausimas yra mityba. Jei turite pažangią plokštę, kuri leidžia maitinti visą sistemą per vieną maitinimo liniją (ir servo varikliai netrukdys valdiklio darbui), tuomet galite apsieiti su vienu šaltiniu. Pasirinkimas didžiulis, geriausia, žinoma, Li-Ion / Li-Po briketai radijo modeliams. Tačiau jiems taip pat reikia atitinkamų įkroviklių. Jei turite paprastesnį valdiklį (Uno / Due / Nano), galite jį maitinti atskirai, pavyzdžiui, su 9 voltų Krona, ir prijungti servo prie pagrindinio galingo akumuliatoriaus. Taigi servo galingumo tikrai užteks. Ličio baterijų atveju įtampą reikia stebėti dar atidžiau nei įprastai, kad nebūtų per didelio išsikrovimo (reikia patikslinti leistinas įtampas tam tikro tipo akumuliatoriams). Norėdami tai padaryti, ant Sleipnir roboto taip pat prisukamas mažas skaitmeninis voltmetras, apie kurį bus kalbama toliau.

Robobug pasidaryk pats

rinkinys

  • „Arduino Uno“ valdiklis: 1150 rublių
  • Trys servovarikliai. Naudojau HXT500, 200 r. gabalas
  • „Krona“ akumuliatoriaus skyrius su jungikliu: 50 rublių.
  • Baterija "Krona": 145 rubliai.
  • IR imtuvas: 90 USD
  • Plieninė viela, kurios skersmuo maždaug 1,5 mm. Pavyzdžiui, naudojau sudaužytą kiaušinių plaktuvą

Iš viso: 2035 p.

Dmitrijus Dzz: Noriu pakviesti pasigaminti nedidelį nuotoliniu būdu valdomą šešiakojį vabaliuką robotą Arduino Uno valdiklio pagrindu. Letenėlės turės vieną laisvės laipsnį, valdymas vyks naudojant įprastą televizoriaus nuotolinio valdymo pultą.

Turiu pasakyti, kad tai yra brangių Maskvos parduotuvių kainos. Kinijos internetinėse parduotuvėse visa tai kainuos du kartus pigiau. Atsižvelgiant į siuntimą. Tiesa, teks palaukti, mano patirtimi, nuo dviejų savaičių iki trijų mėnesių.

Lengvesnis būdas – imti konstruktorių rinkinį, nes pirmiems žingsniams vieno valdiklio neužteks. Dabar daugelis parduotuvių siūlo tokius rinkinius. Pavyzdžiui, yra nuostabi internetinė parduotuvė „Amperka“. Čia jums bus pasiūlyti keli panašūs dizaineriai, besiskiriantys pilnumu ir, žinoma, kaina. Man užteko paprasčiausio dalyko – „Matrioška X“. Jame yra Arduino Uno valdiklis, USB laidas prijungimui prie kompiuterio, prototipų kūrimo plokštė (nepakeičiamas dalykas!), džemperių komplektas, šviesos diodai, rezistoriai ir kitos smulkmenos.

Toje pačioje parduotuvėje yra „Wiki“ skiltis, kurioje rasite net nuostabių trumpų video pamokėlių, išverstų į rusų kalbą. Būtinai juos patikrinkite. Ir, žinoma, yra forumas, kuriame jie tikriausiai bandys jums padėti.

Ko jums reikia iš įrankių:

  • lituoklis ir viskas, ko reikia litavimui. Jums nereikia daug lituoti ir nereikia daug įgūdžių;
  • karšto klijų pistoletas ir strypai prie jo;
  • replės darbui su viela.

Jei turite viską, pradėkime!

Kontrolė

Pereikime prie pirmojo žingsnio: turime išmokti dirbti su nuotolinio valdymo pultu ir sužinoti kai kurių jo mygtukų paspaudimo kodus. Tada šie kodai bus naudingi roboto valdymo eskizui.

Šiame etape jums taip pat reikės IR imtuvo ir būtų malonu turėti prototipų plokštę. Didžioji dauguma IR nuotolinio valdymo pultelių veikia 36 kHz, 38 kHz arba 40 kHz nešlio dažniais („Panasonic“, „Sony“). Išimtys yra Sharp (56 kHz), Bang & Olufsen (455 kHz) ir galbūt kažkas egzotiškesnis. Todėl bet koks 36, 38 ar 40 kHz IR imtuvas mums yra gana tinkamas. Dažnis gali tiksliai neatitikti signalo nešlio dažnio. Tokiu atveju imtuvo jautrumas sumažės, tačiau praktiškai nepastebėjau jokio diskomforto naudojant IR imtuvą TSOP2136 (36 kHz – paskutiniai du skaitmenys – dažnis) ir Sony nuotolinio valdymo pultą (40 kHz).

Taigi, IR imtuvai TSOP21xx, TSOP22xx, TSOP312xx tinka daugumai nuotolinio valdymo pultų. Paskutiniai du skaitmenys gali būti 36, 37, 38 arba 40. Prieš įjungdami IR imtuvą patikrinkite jo kaiščių išvadą – jų yra tik trys: + 5V (maitinimas), GND (žemė), Vs (išėjimas) . Surinkime grandinę, kaip parodyta iliustracijoje (TSOP2136 laidai).


Kaip matote, IR imtuvo išvestį prijungėme prie A0 valdiklio analoginės įvesties.

Štai kaip atrodo eskizo kodas:

#include "IRremote.h" // Valdiklio analoginis įėjimas // prie kurio prijungtas IR imtuvas: const int IR_PIN = A0; // Sukurti IR imtuvo objektą: IRrecv irrecv(IR_PIN); void setup() ( Serial.begin(9600); Serial.println("ready"); // Pradėkite klausytis IR signalų: irrecv.enableIRIn(); ) void loop() ( // Aprašykite struktūros rezultatus, // kur // bus dedamos gautos ir iškoduotos IR komandos: decode_results results; // Jei IR komanda priimta ir // sėkmingai iškoduota, tada išvesti // gautą kodą į // valdiklio nuoseklųjį prievadą: if ( irrecv.decode (&results)) ( Serial.println(results.value); irrecv.resume(); ) )

Eskize naudojama speciali biblioteka IRremote.h, kuri iškoduoja įvairių IR pultelių signalus. Ši biblioteka yra atviras projektas, galite atsisiųsti iš https://github.com/shirriff/Arduino-IRremote. Ir norėdami prijungti jį prie mūsų projekto, turite atlikti tris veiksmus:

  • nukopijuokite bibliotekos katalogą į bibliotekų katalogą, kuris, savo ruožtu, yra Arduino IDE diegimo kataloge;
  • iš naujo paleiskite IDE;
  • mūsų eskizo pradžioje pridėkite eilutę #include "IRremote.h".

Dabar eskize bus prieinamos IR dekodavimo funkcijos. Tačiau norėdami pamatyti gautus kodus, vis tiek naudosime serijos objektą. Jo pagalba per nuoseklųjį prievadą (tą patį USB kabelį) perkelsime kodus į kompiuterį. Sąrankos funkcijoje inicijuojame serijos objektą. „9600“ yra 9600 bodų – greitis, kuris bus naudojamas duomenims perduoti. Po inicijavimo galime rašyti į nuoseklųjį prievadą naudodami funkciją println. Norėdami peržiūrėti šio išvesties rezultatą kompiuteryje, esančiame Arduino IDE, pasirinkite meniu elementą Įrankiai → Serialus monitorius (Ctrl + Shift + M). Tiesiog įsitikinkite, kad jis nustatytas į 9600 bodų.

Taigi, valdiklis maitinimą gauna per USB kabelį ir per jį perduoda duomenis. Įkeliame eskizą, paleidžiame Serial Monitor ir pradedame spausti nuotolinio valdymo pultelio mygtukus. Kodai turėtų pasirodyti lange Serial Monitor. Nuotolinio valdymo protokolai yra skirtingi, kartais tai gali būti vienas kodas, kartais keli. Bet kokiu atveju kiekvienam nuotolinio valdymo pulto mygtukui visada galite priskirti unikalius kodus.

Mums reikia 13 nuotolinio valdymo mygtukų. Aš naudojau šiuos:

  • 1 - sklandus posūkis į kairę;
  • 2 - judėjimas į priekį;
  • 3 - sklandus posūkis į dešinę;
  • 4 - vietoje pasukite į kairę;
  • 5 - sustoti;
  • 6 - vietoje pasukite į dešinę;
  • 7 - judėjimas atgal su posūkiu į dešinę;
  • 8 - judėjimas atgal;
  • 9 - judėjimas atgal su posūkiu į kairę;
  • mėlynas mygtukas - labai lėtas;
  • geltona - lėtai;
  • žalias - greitas;
  • raudona - labai greitai.

Užsirašykite šių mygtukų kodus, vėliau jų prireiks roboto valdymo eskizui.

Judėjimo algoritmas

Roboto valdymo eskizą rasite mūsų projekto puslapyje (bit.ly/1dEwNDC). Nepamirškite pakeisti paspaustų nuotolinio valdymo pulto mygtukų kodų konstantų reikšmių į savo nuotolinio valdymo pulto kodus (konstantos IR_COMMAND_XXX_CODES faile ir_command_codes.h).

Detaliau eskizo neanalizuosime, manau užtenka komentarų kode, bet vienas klausimas vis tiek vertas dėmesio.

Vabzdžių judesiai yra labai įdomūs. Ir nors visi šie vabalai krinta labai arti žemės, kažkodėl jie visada yra stabilūs: bet kuriuo metu paviršiuje atsistoja mažiausiai trys kojos (dvi vienoje pusėje ir viena kitoje). Ir kol šios kojos traukia vabalą link vieno iš varomų taikinių, kitos trys patraukiamos, kad kartotų šį judesį. Mūsų tikslas yra padaryti kažką panašaus.

Mūsų robotas turi tris servovariklius, išdėstytus eilėje statmenai judėjimui. Kairiajame ir dešiniajame servovarikliuose veleno ašis nukreipta į viršų, o centrinio – į priekį. Pavyzdžiui, kairiojo servo užduotis yra siurbti dvi kojas vienu metu: kairę priekinę ir kairiąją galinę. Beje, jie yra standžiai tarpusavyje sujungti ir priklijuoti prie šio servo svirties. Centrinio servo užduotis yra pakelti kairę vabalo pusę, tada dešinę. Todėl prie šio variklio svirties pritvirtintos centrinės kairės ir dešinės kojos, kurios yra viena U formos dalis.

Eskizas turi užtikrinti, kad robotas judėtų pirmyn, atgal, sklandžiai judėtų ir suktųsi vietoje. O vabalo greitį dar norėčiau suvaldyti. Norint programiškai apibūdinti šiuos judesius, mums reikia matematikos. Pažiūrėkite į diagramą.


Mėlyni apskritimai rodo ant paviršiaus stovinčias roboto vabalo kojas, o balti apskritimai yra ore. Atkreipkite dėmesį, kad judant pirmyn arba atgal, kairysis ir dešinysis servovarikliai turi judėti lygiai taip pat. O sukant vietoje varikliai turėtų suktis įvairiomis kryptimis (simetriškai). Įdomu ir tai, kad judėjimas pirmyn ir atgal skiriasi tik centrinio servovariklio fazėje.

Taigi, kaip tai įgyvendinama? Prisimename, kad valdiklis nuolat iškviečia kilpos funkciją. Taigi, šioje funkcijoje turime įdėti kodą, kuris nustato dabartinę servo padėtį ir nustato juos į šią padėtį. Kiekvienas servovariklis turi svyruoti. Servovariklio padėtį momentu t galime apskaičiuoti pagal šią formulę:

X = A nuodėmė (2πt/T),

kur X yra norima servovariklio padėtis, A yra virpesių amplitudė, T yra virpesių periodas.

Taigi, priklausomai nuo laiko momento t, gausime X reikšmės pokytį intervale nuo -A iki +A. Servovarikliai gali veikti nuo 0 iki 180°. Todėl mums geriau svyruoti aplink „nulinę“ padėtį 90 ° kampu. Ir jei norime pateikti svyravimus, kurių laikotarpis yra 1 s aplink 90 ° padėtį, o amplitudė 30 °, tada formulė paverčiama tokia forma:

X = 90 + 30 sin (2πt/1000),

kur t yra laikas milisekundėmis nuo svyravimo pradžios. Norėdami valdyti roboto skambučio greitį, galime pakeisti virpesių periodą. Kuo jis didesnis, tuo mažesnis greitis.

O dabar vėl grįžkime prie mūsų schemos, nes aukščiau parašyta formulė dar nebaigta. Kaip užtikrinti, kad kairysis ir dešinysis servovariklis judėtų sinchroniškai, tada priešingas? Kaip pakeisti centrinio servovariklio fazę? Turime pridėti svyravimo fazę į savo formulę. Pavyzdžiui, dešiniojo variklio sinuso argumentą pakeitus π, jis veiks priešfazėje, palyginti su kairiuoju, ty tokiu būdu, kaip turime suktis vietoje. Štai kaip dabar atrodys mūsų formulė:

X = 90 + 30 sin (2πt/1000 + Φ),

kur Φ yra svyravimų fazė, reikšmė yra nuo 0 iki 2π.

Pažiūrėkite į lentelę, kad suprastumėte, kokios turi būti servomotorių virpesių fazės kiekvienam judėjimo tipui.

Surinkimas

Dabar surinkime robotą ant prototipų lentos ir užpildykime valdymo eskizą.

Tai labai svarbus žingsnis prieš surinkimą. Pabandykite atjungti USB kabelį ir maitinti išdėstymą iš Krona akumuliatoriaus. Patikrinkite visas judėjimo fazes ir įsitikinkite, kad viskas veikia. Surinkus robotą ką nors pakeisti (pavyzdžiui, pakeisti sugedusį servovariklį) bus sunkiau.


Dabar pereikime prie paties surinkimo. Pagrindinis guolių elementas yra akumuliatoriaus skyrius. Patariu naudoti uždaro tipo skyrių ir visada su jungikliu.

Pats lengviausia vabalo detales sutvarkyti karštais klijais. Pradėkite nuo servomotorų. Nuimkite nereikalingas tvirtinimo ausis ir sujunkite automobilius. Tada priklijuokite šį trijų „servo“ rinkinį prie akumuliatoriaus dangtelio. Nepamirškite, kad norint pakeisti bateriją, akumuliatoriaus skyrius turi atsidaryti laisvai.

Lengviausias būdas yra priklijuoti valdiklį prie įlankos, bet man toks variantas nelabai patinka, nes Arduino Uno turėsiu visam laikui atiduoti klaidai. Todėl galite apsunkinti savo gyvenimą ir naudoti Arduino jungtis, kad pritvirtintumėte akumuliatoriaus skyrių. Skyriaus apačioje priklijuokite kaiščio jungtį su 2,54 mm žingsniu tarp kaiščių. Jis turi būti išdėstytas taip, kad jis patektų į valdiklio lizdą skaitmeninių išėjimų 8-11 srityje. Vis tiek mums jų nereikia. Jei jungties nėra po ranka, tiks U formos lenkta sąvaržėlė.

Laidai, einantys iš akumuliatoriaus skyriaus, turi būti prijungti prie Vin gnybtų ir šalia jo esančio GND. Nekeiskite poliškumo! Plius "Krona" ant Vin, minus ant GND. Kad būtų užtikrintas patikimas laidų kontaktas su Arduino jungtimis, laido galiuką galite tiesiog skardinti storesniu, bet aš naudojau trumpą sąvaržėlę kaip kištuką. O litavimo vieta buvo uždaryta termiškai susitraukiančiais vamzdeliais.


Jungtys nuo servo laidų turi būti nupjautos, maitinimo laidus (+5 V – dažniausiai raudoni ir GND – juodi arba rudi) sujungti ir prijungti prie valdiklio 5 V lizdų ir gretimo GND. Prisijungsime šiek tiek vėliau. Valdymo signalo laidai (dažniausiai geltoni) yra išvedami į valdiklio skaitmeninius išėjimus: kairysis servovariklis yra ant 2 kaiščio, centrinis yra ant 4 kaiščio, dešinysis yra ant 7 kaiščio.

IR imtuvo "+" ir "-" galima tiesiog prijungti prie Arduino jungties (5V ir gretimo GND). Tiesa, lenkiant per pusę, padvigubinant jų storį. Anksčiau prijungtus maitinimo laidus prie servomotorių lituojame prie tų pačių IR imtuvo galios kojelių. IR imtuvo signalo išvestis vargu ar pasieks analoginę A0 valdiklio įvestį, o ją teks padidinti laidu.

Keletas patarimų, kaip pasidaryti kojas. Pirmiausia paruoškite kairę ir dešinę „priekinę-galinę“ kojas. Įsitikinkite, kad jie yra simetriški (atkreipkite dėmesį ir į lenkimų ilgį ir kampus). Kojas klijuoti pradėkite tik įsitikinę, kad servovarikliai nustatyti į „nulinę“ padėtį (90°).

Paskutinę uždėkite vidurinę kojų porą. Patariu pirmiausia vidurines kojeles pasidaryti ilgesnes, o po to sumontavus jas nukirpti iki norimo ilgio. „Nulinėje“ padėtyje visos šešios pėdos turi būti ant paviršiaus. Vidurinių kojų riedėjimas 15° amplitudė neturėtų trukdyti posūkiams priekyje-atgal.

Kas toliau?

Robobug yra paruošta mobilioji platforma, pagrįsta vienu iš populiariausių ir prieinamiausių valdiklių. Projektas atidarytas: https://github.com/beetle-ringo/arduino. „GitHub“ sukurkite šakutę (šaką) ir pridėkite savo funkcijas. Leiskite veikti savo vaizduotei – pridėkite IR šviesos diodą ir robotas pasiruošęs robotų mūšiui. Prijunkite tolimačius, lytėjimo jutiklius, giroskopą... Išmokykite robotą apeiti kliūtis arba eiti palei liniją, pabandykite įtaisyti jame internetinę kamerą. Idėjų gali būti milijonas, ir jūs visada galite pasirinkti įdomiausią.

Robotas Sleipniras

rinkinys

  • Arduino Uno Dagu Spider Robot Controller: 2530 USD
  • Servo pavaros SG90 9g (16 vnt.) 1150 р.
  • LiPo akumuliatorius, 7,4 V, 1800 mAh 4,99 USD
  • Radijo modulis 4 kontaktų Bluetooth RF siųstuvas-imtuvas 270 р.
  • Įtampos indikatorius (pasirinktinai) DC 3,3–30 V raudonas LED skydelio matuoklis 100 USD
  • Aliuminio kampas. Artimiausioje statybų rinkoje 135 rubliai.
  • Varžtai ir veržlės. Artimiausiame sendaikčių turguje 35 rub.

Iš viso: 4710 r.

*Komponentai buvo įsigyti skirtingu laiku ir galima optimizuoti daugybę pozicijų

poconoco: Pabandykime surinkti nestandartinę konfigūraciją – aštuonių kojų 2DOF robotą. 2DOF kojeles daug lengviau programuoti, be to, sandėlyje turiu krūvą nenaudojamų servo. O svarbiausia – jį bus galima pavadinti dievo Odino Sleipniro (visada svajojo!) aštuonkojo arklio garbei.

Mūsų Sleipnir turės keturias kojeles su dviem vyriais kiekvienoje pusėje. Kiekviena jungtis yra servo, taigi aštuoni servo kiekvienoje pusėje. Paprastumo dėlei visi aštuoni vienos arklio pusės vyriai suksis toje pačioje plokštumoje. Nors tai visai nebūtina. Be to, jei kojos vienoje pusėje bus įdėtos į šiek tiek „šachmatus“, kad dvi gretimos kojos negalėtų liestis, bus dar geriau, tai leis žengti platesnį žingsnį ir šuoliais.


Tvarkingas ir funkcionalus, bet toli gražu ne pigiausias sprendimas – naudoti nestandartinę valdiklio plokštę, optimizuotą dideliam servo prijungimui. Radau Dagu Spider Robot Controller - tai tas pats Arduino Mega, bet ant plokštės su iš anksto lituotomis 3 kontaktų jungtimis, prie kurių galite iškart prijungti tuos pačius 48 servus be jokių skydų. Idealiai tinka kelių kojų Arduino robotams.

Kontrolė

Mus valdys per Bluetooth. Tam yra įvairių techninės įrangos sprendimų. Tai yra skydai ir atskiri šalikai su UART nuosekliąja sąsaja (kaip įprastas com prievadas, tik su 5 V signalo lygiais). Man atrodė, kad praktiškiausia buvo maža skarelė su UART sąsaja. Jungiasi prie atitinkamų UART / serijos kaiščių Arduino prievade. Atkreipiame dėmesį į du niuansus: Uno / Due / Nano ir panašiai yra tik vienas toks prievadas, jis taip pat naudojamas mirksi per USB. Todėl gali tekti išjungti „Bluetooth“ modulį programinės įrangos metu. Ir antras niuansas - nepamirškite, kad modulio RX kontaktas yra prijungtas prie Arduino TX kontakto, o TX - prie RX. Tokie dalykai yra UART.

„Bluetooth“ programavimas nėra sunkesnis nei servo, duomenys gali būti nuskaitomi baitas po baito, kurį naudosime:

Charcmd; Serial.begin(9600); if (Serial.available()) cmd = Serial.read();

Jei naudojamas „Arduino Mega“ ir „Bluetooth“ prijungtas prie antrojo prievado, tada vietoj „Serial“ rašoma „Serial1“. Pastebėtina, kad jūs negalite naudoti „Bluetooth“, o valdyti robotą tiesiogiai per USB. Ir niekas nepasikeis aukščiau esančiame kode! Tai tik darbas su nuosekliuoju prievadu, o ar ten kabo BT siųstuvas ar USB nuoseklusis keitiklis – mums nesvarbu.

Kita Bluetooth pusė

Patogiausias būdas prisijungti yra naudojant standartines Linux paslaugų programas. Kad veiktų, mums reikia sdptool, rfcomm paslaugų (įtrauktų į bluez paketą Ubuntu saugyklose), taip pat minicom (paketas taip vadinamas). Šių paslaugų naudojimo instrukcijas galite rasti internete.

Judėjimo algoritmas


Šešiakojui paprasčiausia eisena bus tokia: kojos suskirstytos į dvi grupes po tris kojas, o viena iš grupių yra visiškai ant žemės, kita – ore, persirikiavusi į priekį. Tai toli gražu ne vienintelė galima eisena. Ore galite laikyti tik dvi letenas arba net vieną, o likusias keturias ar penkias ant žemės. Aštuonkojui taip pat yra daug eisenų. Imsime paprasčiausią, taip pat su dviem keturių kojų grupėmis.

Taigi, ką turime daryti, kad dirbtume su 16 servo ir pasirinkta eisena? Teisingas atsakymas yra perskaityti apie atvirkštinę kinematiką (IK). Straipsnio apimtis neleidžia plačiai plėsti temos, tačiau medžiagos internete apstu. Trumpai tariant, IR išsprendžia reikalingų valdymo signalų radimo problemą, kad sistema užimtų norimą vietą erdvėje. Kojai tai reiškia, kad pagal taško, į kurį turėtų atsitrenkti pėda, koordinates reikia nustatyti servo kampus, kuriuos tam reikia nustatyti. O kontroliuojant pėdų koordinates galima valdyti kūno padėtį. Turime 2DOF kojeles, ašys lygiagrečios, todėl pėda visada juda ta pačia plokštuma. IR problema šiuo atveju sumažinama iki 2D erdvės, o tai labai supaprastina.

Tegul kiekvienos kojos vietinė kilmė O yra viršutinio servo velenas, tai yra šlaunys. Ir turime taško A koordinates, kur reikia pataikyti koja. Tada nesunku pastebėti, kad reikia išspręsti dviejų apskritimų susikirtimo taškų radimo uždavinį (žr. vienos pusės kojelių schemą, tai pavaizduota ten ant dešiniosios kojos). Radus apskritimų susikirtimo tašką B (pasirinkus bet kurį iš jų), nesunku apskaičiuoti norimus kampus konvertuojant iš Dekarto koordinačių į poliarines. Kode šios problemos sprendimas atrodo taip:

Plūdis A = -2*x; plūdė B = -2 * y; plūduriuoti C = sqr(x) + sqr(y) + sqr(klubo ilgis) - sqr(shinLength); float X0 = -A * C / (sqr(A) + sqr(B)); float Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt(sqr(hipLength) - (sqr(C) / (sqr(A) + sqr(B)))); float mult = sqrt(sqr(D) / (sqr(A) + sqr(B))); float ax, ay, bx, by; ax = X0 + B*mult; bx = X0 - B*mult; ay = Y0 – A*mult; by = Y0 + A*mult; // arba bx kitam susikirtimo taškui float jointLocalX = ax; // arba pagal kitą susikirtimo tašką float jointLocalY = ay; float hipPrimaryAngle = polinisKampas(jungtisLocalX, jointLocalY); float hipAngle = hipPrimaryAngle – hipStartAngle; float shinPrimaryAngle = polarAngle(x - jointLocalX, y - jointLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

čia x ir y yra taško, kurį reikia pasiekti koja, koordinatės; hipStartAngle - kampas, kuriuo iš pradžių pasukamas "klubas" (kai servo yra vidurinėje padėtyje), panašiai - shinStartAngle. Beje, šiuose skaičiavimuose kampai akivaizdžiai pateikiami radianais, o į Servo objektus juos reikia perkelti jau laipsniais. Visas veikiantis programinės aparatinės įrangos kodas, įskaitant šią dalį, paskelbtas „GitHub“, žr. nuorodą straipsnio pabaigoje. Tai yra IC dalis, bet be to, norint naudoti šį IC visose srityse, jums reikia gana paprasto kodo (žr. funkcijas legsReachTo(), legWrite()). Taip pat reikės kodo, kuris realiai įgyvendina eiseną – vienos grupės kojų judėjimą „atgal“ (kad robotas judėtų į priekį), o kita kojų grupė pakyla ir juda į priekį kitam žingsniui, žr. žingsnį Pirmyn () funkcija. Ji žengia vieną žingsnį su nurodytais parametrais. Šie parametrai, beje, gali žengti žingsnį atgal, nepaisant funkcijos pavadinimo. Jei ši funkcija iškviečiama kilpa, robotas žengs į priekį.

Dabar gaunamos komandos ir jų interpretacija. Prie programos pridėkime būseną:

Enum būsena ( STOP, FORWARD, BACKWARD, FORWARD_RIGHT, FORWARD_LEFT );

O pagrindinėje ciklo() vykdymo ciklo metu žiūrėsime į esamą būseną (būsenos kintamąjį) ir trauksime stepForward(), jei judame į priekį (su sukimu ar be jo), ir vėl stepForward(), bet su neigiamu xamp argumentu. , jei reikia judėti atgal. Tada posūkiai bus tvarkomi legWrite(), o sukdami į dešinę kojos dešinėje stovės vietoje (o kairiosios eilutės). Štai toks arklio tankas. Brutalus, bet labai paprastas ir veikiantis. Sklandžiai pasukti galima tik su 3DOF kojomis, to pavyzdį galima pamatyti buggybug repo.

Jungiklis (būsena) ( FORWARD: raidė FORWARD_RIGHT: raidė FORWARD_LEFT: stepForward(h, dh, xamp, xshift); pertrauka; raidė BACKWARD: stepForward(h, dh, - xamp, xshift); pertrauka; )

Char komanda; while (Serial1.available()) komanda = Serial1.read(); jungiklis (komanda) ( atvejis "w": būsena = FORWARD; pertrauka; atvejis "s": būsena = ATGAL; pertrauka; atvejis "d": būsena = FORWARD_RIGHT; pertrauka; atvejis "a": būsena = FORWARD_LEFT; pertrauka; numatytasis : būsena = STOP;)

Šiuo atžvilgiu pagrindiniai programinės įrangos punktai baigėsi, o visa kita yra smulkmenos. Nors yra dar vienas, ko gero, svarbus dalykas - galimybė tiksliai sureguliuoti servos. Net ir atliekant kruopščiausią surinkimą, jei visiems servo įtaisams bus liepta pasukti 90°, kai kurie iš jų vis tiek pasirodys šiek tiek nukrypę nuo kampo. Štai kodėl jūs turite turėti galimybę jį pritaikyti. Galite pamatyti, kaip tai padariau hipsWrite() ir shinsWrite() metoduose ir hipsTune bei shinsTune koregavimo masyvuose.

Surinkimas

Tokioms konstrukcijoms nieko ypatingo nereikia: detalėms iškirpti tiks tinkamo storio organinio stiklo lakštas (iš artimiausios buitinės sendaikčių turgaus) ir pjūklas ar metalinis pjūklas. Ir, žinoma, gręžtuvas skylėms gręžti. Vietoj organinio stiklo galite naudoti fanerą (tada dar galite padaryti atminimo užrašą ant galutinio dizaino su degikliu). Taip pat gali būti naudojami aliuminio lakštai arba kampai. Su Sleipnir aš nuėjau taip, kaip naudojau aliuminio kampą su 1 cm briaunomis (pirkau kažkur aparatūros prekybos centre).


Pagrindas bus stačiakampis rėmas. Galūnės – 4 centimetrų juostelės. Taip pat verta apsirūpinti daug smulkių varžtų, veržlių. Išpjauname kampą į reikiamus gabalus, išpjauname griovelius servams, išgręžiame skylutes tvirtinimo varžtams ir varžtams. Dizainą geriau parodyti nei aprašyti. Dydžiai gali būti bet kokie, robotai turi būti įvairūs. Tačiau atminkite: kuo ilgesnės kojos, tuo daugiau svertų turės stumti servo ir tuo didesnė jo apkrova. Iki negalėjimo apsisukti ir net sulūžimo. Bet 4–5 cm nėra problema.

Nebrangiems lengviems robotams jie dažnai nesivargina atskiru galūnių pasukimu, o visa apkrova tenka tik servo velenui. Esant nedideliam svoriui, tai visai nėra kritiška. O esant didesniam svoriui, reikėtų pagalvoti apie servus su metalinėmis pavaromis ir rutulinio guolio velenu.

Prie kiekvieno servo paprastai pridedami keli varžtai ir antgalių rinkinys, kuriuos galima prisukti ant veleno įvairiems tikslams. Mums labiausiai tinka pavienis „ragas“ (arba ragas), kuris leidžia prie servo pritvirtinti strypą. Taigi prie vieno strypo pritvirtinamos dviejų servo ašys, o strypas tampa „šlaunu“. Tokiu atveju vienas servas pritvirtinamas prie kūno, o kitas tampa blauzdos dalimi. Prie jo verta prisukti dar vieną strypą, kad tik pailgėtų ar būtų įdomesnė galūnė. Šiek tiek sunkaus darbo – ir platforma paruošta (patogūs atsuktuvų, veržliarakčių, pincetų, vielos pjaustytuvų ir kt. rinkiniai labai pagreitina procesą).

Kas toliau?

Visą projektą galima rasti adresu https://github.com/poconoco/sleipnir. Aprašiau vieną nepraktiškiausių konfigūracijų – daug 2DOF kojų, aukšta, siaura, lengvai krenta ant šono. Pabandykite sukurti geresnį robotą su 3DOF kojomis. Su 4DOF kojomis. Su nagais arba žandikauliais. Kaip 3DOF atvirkštinės kinematikos pavyzdį galite kreiptis į buggybug saugyklą - yra šešioliktaipiška programinė įranga. Taip pat galite pagaminti ne valdomus, o išmaniuosius robotus, vietoje Bluetooth įdėdami atstumo jutiklius ir išmokyti robotą apeiti sienas ir kliūtis. Jei įdėsite tokį jutiklį ant servo pavaros ir jį pasuksite, galite nuskaityti sritį beveik kaip sonarą.