Pogovorimo se o tem, kako lahko z Arduinom ustvarite robota, ki uravnoteži kot Segway.

Segway iz angl. Segway je dvokolesno stoječe vozilo, opremljeno z električnim pogonom. Imenujejo jih tudi hoverboardi ali električni skuterji.

Ste se kdaj vprašali, kako deluje Segway? V tej vadnici vam bomo poskušali pokazati, kako narediti robota Arduino, ki se uravnoteži tako kot Segway.

Za uravnoteženje robota se morajo motorji upreti padcu robota. Ta ukrep zahteva povratne informacije in korektivne elemente. Povratni element - ki zagotavlja tako pospešek kot vrtenje v vseh treh oseh (). Arduino to uporablja za poznavanje trenutne usmerjenosti robota. Korektivni element je kombinacija motorja in kolesa.

Končni rezultat bi moral biti nekaj takega:

Diagram robota

L298N modul gonilnika motorja:

Motor z enosmernim menjalnikom s kolesom:

Samouravnoteženi robot je v bistvu obrnjeno nihalo. Morda je bolje uravnoteženo, če je središče mase višje glede na osi koles. Višje središče mase pomeni večji vztrajnostni moment mase, kar ustreza manjšemu kotnemu pospešku (počasnejšemu padcu). Zato smo baterijo postavili na vrh. Vendar je bila višina robota izbrana glede na razpoložljivost materialov :)

Končana različica samouravnoteženega robota je vidna na zgornji sliki. Na vrhu je šest Ni-Cd baterij za napajanje tiskano vezje. Med motorji se uporablja 9-voltna baterija za pogon motorja.

Teorija

V teoriji krmiljenja je za držanje neke spremenljivke (v tem primeru položaja robota) potreben poseben krmilnik, imenovan PID (proporcionalni integralni derivat). Vsak od teh parametrov ima "dobitek", običajno imenovan Kp, Ki in Kd. PID zagotavlja korekcijo med želeno vrednostjo (ali vhodom) in dejansko vrednostjo (ali izhodom). Razlika med vhodom in izhodom se imenuje "napaka".

PID regulator zmanjša napako na najmanjšo možno vrednost z zveznim prilagajanjem izhoda. V našem robotu za samouravnoteženje Arduino je vnos (ki je želeni nagib v stopinjah) nastavljen s programsko opremo. MPU6050 bere trenutni nagib robota in ga posreduje algoritmu PID, ki izvaja izračune za nadzor motorja in ohranjanje robota v pokončnem položaju.

PID zahteva prilagoditev vrednosti Kp, Ki in Kd na optimalne vrednosti. Inženirji uporabljajo programsko opremo, kot je MATLAB, za samodejni izračun teh vrednosti. MATLAB-a v našem primeru žal ne moremo uporabiti, ker bo projekt še bolj zapletel. Namesto tega bomo prilagodili vrednosti PID. To storite tako:

  1. Naj bodo Kp, Ki in Kd enaki nič.
  2. Prilagodite Kp. Premajhen Kp bo povzročil padec robota, ker popravek ni dovolj. Preveč Kp povzroči, da robot divja naprej in nazaj. Zaradi dobrega Kp se bo robot precej premikal naprej in nazaj (ali malo nihal).
  3. Ko je Kp nastavljen, prilagodite Kd. Dobra vrednost Kd bo zmanjšala nihanja, dokler robot ne postane skoraj stabilen. Poleg tega bo pravilen Kd zadržal robota, tudi če ga potisnete.
  4. Končno namestite Ki. Ko je vklopljen, bo robot nihal, tudi če sta Kp in Kd nastavljena, vendar se bo sčasoma stabiliziral. Pravilna vrednost Ki bo skrajšala čas, potreben za stabilizacijo robota.

Obnašanje robota si lahko ogledate v spodnjem videu:

Koda Arduino za robota, ki se sam uravnava

Za izdelavo našega robota smo potrebovali štiri zunanje knjižnice. Knjižnica PID poenostavlja izračun vrednosti P, I in D. Knjižnica LMotorController se uporablja za krmiljenje dveh motorjev z modulom L298N. Knjižnici I2Cdev in knjižnici MPU6050_6_Axis_MotionApps20 sta zasnovani za branje podatkov iz MPU6050. V tem repozitoriju lahko prenesete kodo, vključno s knjižnicami.

#vključi #vključi #include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif #define MIN_ABS_SPEED 20 MPU6050 mpu; // nadzor/status MPU vars bool dmpReady = false; // nastavi na true, če je bila inicializacija DMP uspešna uint8_t mpuIntStatus; // vsebuje dejanski bajt statusa prekinitve iz MPU uint8_t devStatus; // vrni status po vsaki operaciji naprave (0 = uspeh, !0 = napaka) uint16_t packetSize; // pričakovana velikost paketa DMP (privzeto je 42 bajtov) uint16_t fifoCount; // število vseh bajtov, ki so trenutno v FIFO uint8_t fifoBuffer; // vmesni pomnilnik FIFO // orientacija/gibanje vars Quaternion q; // kvaternionski vsebnik VectorFloat gravity; // gravitacijski vektor float ypr; //vsebnik nihanja/nagiba/zvijanja in gravitacijski vektor //PID dvojna originalna nastavljena točka = 173; dvojna nastavljena točka = originalna nastavljena točka; dvojni premični odmik kota = 0,1; dvojni vhod, izhod; //prilagodite te vrednosti tako, da ustrezajo vaši zasnovi dvojni Kp = 50; dvojni Kd = 1,4; dvojni Ki = 60; PID pid(&vhod, &izhod, &nastavljena točka, Kp, Ki, Kd, ​​​​DIREKT); dvojni motorSpeedFactorLeft = 0,6; dvojni motorSpeedFactorRight = 0,5; //KRMILNIK MOTORJA int ENA = 5; int IN1 = 6; int IN2 = 7; int IN3 = 8; int IN4 = 9; int ENB = 10; LMotorController motorController(ENA, IN1, IN2, ENB, IN3, IN4, motorSpeedFactorLeft, motorSpeedFactorRight); volatile bool mpuInterrupt = false; // označuje, ali je prekinitveni pin MPU dosegel visoko vrednost void dmpDataReady() ( mpuInterrupt = true; ) void setup() ( // pridruži se vodilu I2C (knjižnica I2Cdev tega ne naredi samodejno) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin( ); TWBR = 24; // 400kHz I2C takt (200kHz, če je CPE 8MHz) #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif mpu.initialize(); devStatus = mpu.dmpInitialize(); // tukaj navedite lastne odmike žiroskopa, prilagojene za najmanjšo občutljivost mpu.setXGyroOffset(220); mpu.setYGyroOffset(76); mpu.setZGyroOffset(-85); mpu.setZAccelOffset(1788); // 1688 tovarniško privzeto za moj test čip // poskrbi, da deluje (vrne 0, če je tako) if (devStatus == 0) ( // vklopi DMP, zdaj ko je pripravljen mpu.setDMPEnabled(true); // omogoči Arduino interrupt detectionInterrupt(0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // nastavimo našo zastavico DMP Ready, tako da funkcija main loop() ve, da je v redu, da jo uporablja dmpReady = true; // pridobi pričakovano velikost paketa DMP za poznejšo primerjavo packetSize = mpu.dmpGetFIFOPacketSize(); //nastavitev PID pid.SetMode(AUTOMATIC); pid.SetSampleTime(10); pid. SetOutputLimits(-255, 255); ) else ( // NAPAKA! // 1 = začetno nalaganje pomnilnika ni uspelo // 2 = posodobitve konfiguracije DMP niso uspele // (če se bo pokvarilo, bo običajno koda 1) Serial.print(F("Inicializacija DMP neuspešno (koda ")); Serial.print(devStatus); Serial.println(F()")); ) ) void loop() ( // če programiranje ni uspelo, ne poskušajte narediti ničesar, če (!dmpReady) return; // počakajte na prekinitev MPU ali dodatne pakete, ki so na voljo, medtem ko (!mpuInterrupt && fifoCount< packetSize) { //no mpu data - performing PID calculations and output to motors pid.Compute(); motorController.move(output, MIN_ABS_SPEED); } // reset interrupt flag and get INT_STATUS byte mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus(); // get current FIFO count fifoCount = mpu.getFIFOCount(); // check for overflow (this should never happen unless our code is too inefficient) if ((mpuIntStatus & 0x10) || fifoCount == 1024) { // reset so we can continue cleanly mpu.resetFIFO(); Serial.println(F("FIFO overflow!")); // otherwise, check for DMP data ready interrupt (this should happen frequently) } else if (mpuIntStatus & 0x02) { // wait for correct available data length, should be a VERY short wait while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount(); // read a packet from FIFO mpu.getFIFOBytes(fifoBuffer, packetSize); // track FIFO count here in case there is >1 paket na voljo // (to nam omogoča takojšnje branje več brez čakanja na prekinitev) fifoCount -= packetSize; mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); vnos = ypr * 180/M_PI + 180; ) )

Vrednosti Kp, Ki, Kd lahko delujejo ali pa tudi ne. Če ne, sledite zgornjim korakom. Upoštevajte, da je nagib v kodi nastavljen na 173 stopinj. To vrednost lahko spremenite, če želite, vendar upoštevajte, da je to kot nagiba, ki ga mora ohraniti robot. Če so vaši motorji prehitri, lahko prilagodite vrednosti motorSpeedFactorLeft in motorSpeedFactorRight.

To je vse za zdaj. Se vidiva.

Zadnji del članka govori o majhnem robotu, ki ga sestavimo na šasijo - pokrov iz plastične posode za hrano. Možgani našega robota so plošča Arduino UNO, motorje in servo pogon krmili plošča Driver Motor Shield, senzor za ovire je ultrazvočni sonar - oči kot Vallijeve (iz risanke) - "HC-SR04 ultrazvočni senzor". , . Kako ustvariti robota na Arduinu?

9. Priključitev baterije in motorjev

Pri priključitvi baterije morate biti popolnoma prepričani, da je polarnost pravilna, kot pravijo, izmerite 7-krat, povežite enkrat. Poskusite upoštevati to pravilo - rdeča žica je vedno na + moč, črna žica je ozemljena, znana tudi kot minus, znana tudi kot GND. Proizvajalci poskušajo upoštevati enaka pravila. Zato povežemo žice, ki prihajajo iz prostora za baterije, na blok +M in GND na krmilni plošči motorja. Žice iz delujočih motorjev priključimo na bloke M1, M2 krmilne plošče motorja. Leva stran v smeri vožnje je vezana na blok M1, desna na blok M2. Za polarnost motorjev še ni treba skrbeti, lahko jo spremenite, če gre med testom kaj narobe.

10. Preverite polarnost in pravilno povezavo modulov

Zelo pomemben in ključen trenutek pri sestavljanju mikrorobota je preverjanje pravilne namestitve, povezav, modulov po blokovni shemi, poglejte si oznake na ploščah, preverite s testerjem, polarnost napajalnika, kdo ima tester.

11. Stopnja programiranja Arduino

Program se na mikrokrmilnik Arduino naloži iz računalnika s pomočjo USB kabla in posebnega programa - okolja (programov) za programiranje in urejanje skic - Arduino IDE. Program lahko dobite na spletni strani arduino.cc, razdelek za prenos, kjer lahko vedno prenesete najnovejšo, najnovejšo različico programa. Po namestitvi programskega okolja preostane le še, da iz programskega menija gonilnikov izberete, za katero ploščo želite uporabiti - v našem primeru Arduino UNO in COM port, preko katerega je Arduino povezan preko USB emulacije. Obstaja veliko različnih priročnikov na to temo, zato ta korak preskočimo (za vsak slučaj - meni Orodja > Serijska vrata).

Program za mikro robota najdete na naši spletni strani, čeprav šele po registraciji, šala Mini robot na Arduinu. Da bi program deloval, so potrebne dodatne knjižnice - AFMotor.h, Sevo.h, NewPing.h, vse so v arhivu, arhiv morate razpakirati v mapo nameščenega programa Arduino IDE. Zame je to imenik c:Program Files (x86)Arduino, knjižnice je treba postaviti v mapo c:Program Files (x86)Arduinolibraries. Nato vnesite imenik c:Program Files (x86)ArduinolibrariesAPC_4_ROBOT in dvakrat kliknite na APC_4_ROBOT.ino - to je sama skica, nato se bo zagnalo programsko okolje. Golo ploščo Arduino Uno (to pomeni brez priključenih modulov) preko USB kabla povežemo z računalnikom, pritisnemo gumb s puščico v desno, program se bo začel nalagati na krmilnik. Celoten postopek traja nekaj sekund in če je vse pravilno povezano, ne smejo zasvetiti nobeni rdeči znaki, indikator v spodnjem desnem kotu pa bo dokončal svoje gibanje pri 100%. Program Arduino je nameščen v krmilniku Atmega328.

12. Zagon robota

Mini robot na Arduinu - pripravljen na selitev. Robot Wally

Izvedete lahko prvo, še testno vožnjo našega robota. Naš robot ni vozil pravilno, eno kolo se je vrtelo pravilno, drugo pa v nasprotno smer. Moral sem spremeniti polarnost žic motorja na bloku M2. Potem pa je naš robotček častno opravil z vsemi vogali in ovirami v sobi.

Ta članek posvečam vsem začetnikom, ki so se odločili spoznati Arduino. Nadaljnji študij se lahko nadaljuje od prve lekcije - utripajoča LED. Gradivo z robotom je zelo zanimivo in da bi vas zanimalo, sem se odločil, da začnem s tem, kako zgraditi robota, ki obvozi ovire. Naslednje bo veliko lažje in bo šlo kot po maslu. Ta robot res deluje. Srečno vsem!

P.S. Šlo je za dokaj svoboden prevod članka, ki smo ga davno našli na prostranstvih interneta, seveda bolj zafrkancija, saj je bilo vse narejeno na novo, risbe spremenjene, povezav do vira ni bilo, ker dokument je bil Word.

Ampak tudi od nakupa že pripravljenega, polnopravnega robota, ki temelji na tej plošči. Za otroke osnovna šola ali predšolska starost končanih projektov Arduino je še bolje, ker "Neanimirana" tabla izgleda nekoliko dolgočasno. Na ta način Primeren je tudi za tiste, ki jih električna vezja ne privlačijo posebej.

Z nakupom delujočega modela robota, t.j. pravzaprav lahko pripravljena visokotehnološka igrača prebudi zanimanje za samostojno oblikovanje in ustvarjanje robotov. Ko ste se dovolj igrali s takšno igračo in razumeli, kako deluje, lahko začnete izboljševati model, vse razstavite in začnete sestavljati nove projekte na Arduinu z uporabo sproščene plošče, pogonov in senzorjev. Odprtost platforme Arduino omogoča isto komponente naredi si nove igrače.

Ponujamo majhen pregled že pripravljenih robotov na plošči Arduino.

Stroj Arduino, krmiljen prek Bluetootha

Avto nadzorovan preko Bluetootha, ki stane nekaj manj kot 100 dolarjev. Dobavljeno nesestavljeno. Poleg ohišja, motorja, koles, litijeve baterije in polnilnika dobimo ploščo Arduino UNO328, krmilnik motorja, Bluetooth adapter, daljinski upravljalnik in še več.

Videoposnetek tega in še enega robota:

več natančen opis igrač in možnost nakupa na spletni strani spletne trgovine DealExtreme.

Robot želva Arduino

Komplet za sestavljanje robotske želve stane približno 90 $. Manjka le lupina, vse ostalo, kar je potrebno za življenje tega junaka, je vključeno: plošča Arduino Uno, servo motorji, senzorji, sledilni moduli, IR sprejemnik in daljinski upravljalnik, baterija.

Želvo je mogoče kupiti na spletni strani DealExtreme, podoben cenejši robot je na Aliexpressu.

Arduino vozilo na gosenicah, nadzorovano z mobilnim telefonom

Sledeno vozilo, nadzorovano prek Bluetootha iz mobilnega telefona, stane 94 $. Poleg stezne baze dobimo ploščo Arduino Uno in razširitveno ploščo, Bluetooth ploščo, baterijo in polnilec.

Gosenično vozilo je mogoče kupiti tudi na spletni strani DealExtreme, tam je tudi podroben opis. Morda bolj zanimiv železni Arduino rezervoar na Aliexpressu.

Arduino avto, ki se vozi skozi labirinte

Vožnja avtomobila skozi labirinte, ki stane 83 dolarjev. Poleg motorjev, plošče Arduino Uno in drugih potrebnih elementov vsebuje module za sledenje in module za izogibanje oviram.

Pripravljen robot ali okvir za robota

Poleg možnosti uporabe že pripravljenih kompletov za ustvarjanje robotov Arduino, obravnavanih v pregledu, lahko kupite ločen okvir (telo) robota - lahko je platforma na kolesih ali gosenica, humanoid, pajek in drugi modeli. V tem primeru boste morali sami narediti polnjenje robota. Pregled takih primerov je podan v našem.

Kje drugje lahko kupite že pripravljene robote?

V pregledu smo izbrali najcenejše in po našem mnenju najbolj zanimive že pripravljene robote Arduino iz kitajskih spletnih trgovin. Če nimate časa čakati na paket iz Kitajske, je v spletnih trgovinah Amperka in DESSY velika izbira že pripravljenih robotov. Nizke cene in hitro dostavo vam ponuja spletna trgovina ROBstore. Seznam priporočenih trgovin.

Morda vas bodo zanimale tudi naše ocene projektov Arduino:


Arduino usposabljanje

Ne veste, kje začeti učiti Arduino? Pomislite, kaj vam je bližje - sestavljanje lastnih preprostih modelov in njihovo postopno zapletanje ali spoznavanje bolj zapletenih, a že pripravljenih rešitev?

Dober dan! Dragi moji, pred vami je umetniški robot, ki lahko barva različne kroglaste ali jajčaste predmete velikosti od 4 do 9 cm.

Za izdelavo boste potrebovali 3D tiskalnik, nabor standardnih orodij + Arduino.

Opomba: Ne obupajte nad projekti, ki uporabljajo 3D tiskalnik. Če želite, lahko vedno najdete mesto ali način, kjer lahko naročite tisk delov, ki so potrebni za projekt.

1. korak: Nekaj ​​o robotu

Art robot - dvoosni domače, ki lahko vzorčijo na večini sferičnih površin. Robot je prilagojen za določeno vrsto predmeta (ping pong žogice, božični okraski, žarnice in jajca (raca, gos, kokoš...).

Visoko natančni koračni motorji z visokim navorom se uporabljajo za vrtenje sferičnega predmeta in premikanje manipulatorja, tih in zanesljiv servo pogon SG90 pa za dvig mehanizma ročaja.

2. korak: potrebni deli

Da bi naredili DIY obrti potrebujemo:

  • 2x ležaji 623;
  • Lasnica s premerom 3 mm in dolžino 80-90 mm;
  • 1x vzmet (dolžina 10 mm in premer 4,5 mm);
  • 2x NEMA 17 koračna motorja (navor 4,4 kg/cm);
  • Motorni kabli (dolžine 14 + 70 cm);
  • USB kabel;
  • 1x servo SG90;
  • Arduino Leonardo;
  • ščit JJRobots;

  • 2xA4988 gonilnika za koračne motorje;
  • Napajanje 12V/2A;
  • 11x vijaki M3 6 mm;
  • 4x M3 16 mm vijaki;
  • 4x M3 matice;
  • 2x 20 mm priseski;
  • 1x krilata matica M3;
  • 1x marker;

3. korak: Splošni oris

Ta diagram lahko uporabite kot "goljufalo".

4. korak: Začnimo!

Robot premika manipulator s pritrjenim markerjem, ki ga poganja koračni motor. Drugi koračni motor je zadolžen za vrtenje predmeta, na katerega je nanešena risba (jajce, žoga ...). Za pritrditev predmeta se uporabljata dve priseski: ena je pritrjena na koračni motor, druga pa na nasprotni strani predmeta. Majhna vzmet bo pritisnila na prisesek in ji pomagala držati predmet. Za dviganje/spuščanje markerja se uporablja servo pogon SG90.

5. korak: Manipulator

Namestite matico v zanjo pripravljeno luknjo in privijte 16 mm vijak. Naredimo enako za držalo predmeta (desno na zgornji sliki). Pri izdelavi tečaja za manipulator smo uporabili 2 vijaka 16 mm. Ta tečaj se mora po privijanju vijakov prosto vrteti.

6. korak: sesalci

Postavite eno od priseskov v luknjo v držalu predmeta.

7. korak: Montaža koračnih motorjev

Oba koračna motorja pritrdimo na glavni okvir z 8 vijaki.

8. korak: Os vrtenja

Postavimo vse elemente, kot je prikazano na zgornji sliki.

  • sesalec;
  • vijak;
  • Zgornji del;
  • pomlad;
  • Ležaj 623 (mora biti vgrajen v levo skodelico);
  • Leva skodelica;
  • Prosti prostor za glavni okvir;
  • Desna skodelica;
  • Ležaj 623;
  • distančni obroč;
  • Krilata matica (M3).

9. korak: Vse postavite na svoje mesto

Sestavljen manipulator vstavimo na os koračnega motorja.

Namestimo levi nosilec na os koračnega motorja.

Marker in jajce sta postavljena kot primer (zdaj ju ni treba postaviti).

OPOMBA: Servo bo zahteval prilagoditve. Med postopkom umerjanja boste morali znova nastaviti njegov kot.

10. korak: Elektronika

Elektroniko pritrdimo na zadnjo stran glavnega okvirja z vijaki (2 bosta dovolj).

Povežimo kable.

Če ob priklopu koračnih motorjev obrnete polarnosti, se le ti vrtijo v nasprotni smeri, pri servo pogonu pa situacija ne bo tako neškodljiva! Zato pred priključitvijo še enkrat preverite polarnost!

11. korak: Programiranje Arduino Leonardo

Programirajmo Arduino Leonardo z uporabo Arduino IDE (v 1.8.1).

  • Prenesite Arduino IDE (v 1.8.1) in namestite program;
  • Zaženimo programsko opremo. Izberite ploščo Arduino Leonardo in ustrezna COM PORT v meniju »tools->board«;
  • Odprimo in prenesimo kodo Sphere-O-Bot. Razpakirajmo vse datoteke znotraj ene mape in jo poimenujmo “Ejjduino_ARDUINO”.

12. korak: Umetniški robot je pripravljen za ustvarjanje umetniških del

13. korak: Upravljanje robota

Programska oprema Inkscape. Prenesimo in namestimo program Inkscape (priporočam stabilno različico 0.91).

Prenesite in namestite razširitev EggBot Control (različica 2.4.0 je bila v celoti preizkušena).

Razširitev EggBot Control za Inkscape je orodje, ki ga morate uporabiti pri testiranju in umerjanju vašega EggBot ter prenosu vašega dizajna na jajce. Najprej morate zagnati Inkscape. Po zagonu Inkscape se prikaže meni »Razširitve«, v njem pa morate izbrati podmeni »Eggbot«. Če ne vidite podmenija Eggbot, potem niste pravilno namestili razširitev. Izvedi rezerva in natančno sledite navodilom za namestitev razširitev.

To je vse, hvala za pozornost!)

Z Arduinom je zelo enostavno narediti različne stroje daljinec, preprosti senzorji in logika. Zato je ta linija neverjetno priljubljena. Prodanih je veliko združljivih senzorjev in razširitvenih plošč. Internet je poln že pripravljenih programskih knjižnic in odprtokodnih projektov za vse priložnosti. Skoraj vsa vprašanja, ki se vam bodo pojavila v procesu obvladovanja Arduina, je nekdo že zastavil in vedno boste našli odgovor.

Začnimo nekje? Glavno vprašanje je izbira krmilnika. Obstaja veliko revizij Arduina, pa tudi klonov tretjih oseb, zgrajenih na teh različicah. Tukaj sta morda dva najbolj zanimiva razreda za nas:

  • Arduino Uno - najboljša izbira za začetnika, najpreprostejša, proračunska in najpogostejša plošča. Temelji na čipu ATmega328 s taktno frekvenco 16 MHz, 32 KB flash pomnilnika, 2 KB RAM-a in 1 KB EEPROM-a. Uno ima 14 digitalnih vhodov/izhodov, ki se lahko uporabljajo za krmiljenje senzorjev in servomotorjev ter drugih naprav;
  • Arduino Mega / Mega 2560 je plošča, ki je primerna, ko že vnaprej veš, da bo projekt kompleksen. Glavna razlika je v večjem številu vhodov/izhodov (48 pri Mega, 54 pri Mega 2560). Veliko več je tudi pomnilnika: 8 KB RAM, 4 KB EEPROM in bliskovni pomnilnik 128 oziroma 256 KB (v Mega oziroma Mega 2560). Plošče se med seboj razlikujejo tudi po čipu, hitrosti USB in nekaterih drugih lastnostih.

Seveda so tu še Arduino Pro, Arduino LilyPad in številni drugi. A za zdaj se osredotočimo na prva dva modela. V našem primeru je vse precej preprosto: Mega je potreben za robota z veliko nogami.

Prva koda

Najprej namestimo Arduino IDE (arduino.cc) – to je brezplačno razvojno okolje za več platform. Zdaj, če povežemo naš Arduino, lahko poskusimo napisati prvo kodo z najpreprostejšim primerom: programom za utripanje LED. Večina krmilnikov Arduino ga ima in so povezani na pin 13. Mimogrede, v svetu Arduino se programi običajno imenujejo skice. Tukaj je besedilo skice s komentarji:

// Dajmo temu zatiču ime LED: const int LED = 13; void setup() ( // Inicializiraj digitalni pin // za izhod: pinMode(LED, OUTPUT); ) void loop() ( // Uporabi logično eno raven // na pin 13 (prižgi LED): digitalWrite(LED , HIGH) ; // Začasno zaustavi izvajanje skice // za sekundo: delay(1000); // Uporabi raven logične ničle // na pin 13 (izklopi LED): digitalWrite(LED, LOW); / / Znova zaustavi izvajanje // skice za sekundo: delay(1000); )

Bodite pozorni na nastavitve in funkcije zanke. Prisotni morajo biti v kateri koli skici Arduino. Nastavitev se prikliče enkrat ob vklopu ali po ponovnem zagonu krmilnika. Če želite, da se koda izvede samo enkrat, jo postavite sem. Najpogosteje so to vse vrste postopkov za inicializacijo nečesa. Naša skica ni izjema: digitalni zatiči Arduino lahko delujejo kot vhodi in izhodi. V funkciji nastavitve rečemo, da bo pin 13 deloval kot digitalni izhod krmilnika.

Ko nastavitvena funkcija konča svoje delo, se samodejno zažene zaprta zanka, znotraj katere se prikliče funkcija zanke. Tam moramo napisati, kaj želimo početi. Na pin 13 želimo uporabiti nivo logične enice (5 V), to pomeni, da prižgemo LED, nato počakamo eno sekundo (1000 v milisekundah), nato uporabimo nivo logične ničle (0 V) in spet počakamo eno sekundo. Naslednji klic zanke bo ponovil vse.

Zdaj naložimo našo skico v krmilnik. Ne, ne potrebujemo programerja. Krmilniki Arduino, poleg naših skic, vsebujejo poseben program - bootloader, ki predvsem nadzoruje nalaganje kode iz računalnika. Za nalaganje skice potrebujemo samo kabel USB in element menija Datoteka → Naloži (Ctrl + U) v Arduino IDE.

Ključno vprašanje

Koliko nog pravzaprav potrebujemo? Opredelimo številne konfiguracije hodečih robotov. Po številu nog:

  • dvonožec - dvonožec (prototip - človek);
  • štirinožni - štirinožni (prototip - večina sesalcev);
  • heksapod - šesteronožni (prototip - večina žuželk);
  • hobotnica - osemkraki (prototip - pajki, škorpijoni, raki in drugi členonožci).

Poleg števila nog je pomembna tudi konfiguracija vsake. Glavna značilnost noge je število prostostnih stopinj ali dimenzij svobode (DOF). Stopnja svobode je zmožnost vrtenja ali upogibanja okoli ene osi (redkeje premikanje naprej vzdolž nje). Očitno je, da če obstaja samo ena stopnja svobode, potem na takšni nogi ne boste prišli daleč. Nogi z dvema stopnjama svobode (2DOF) robotom z več nogami že omogočata premikanje, čeprav 2DOF omogoča prosto gibanje samo konice noge v eni ravnini. In 3DOF noga premika "nogo" v 3D prostoru (če seveda niso vse tri osi vzporedne). Obstajajo tudi noge 4DOF, ki preprosto povečajo fleksibilnost in obseg gibanja noge. Žuželke imajo najpogosteje noge 4DOF.

Kaj to pomeni za nas? Pri poceni amaterskih robotih vsako stopnjo svobode realizira en motor, natančneje servo pogon ali serv. Konfiguracija nog enolično določa, koliko teh servomotorjev je potrebnih. Torej, 3DOF heksapod bo zahteval 18 servomotorjev, 4DOF spider pa 32. Naj vas ne prestraši količina, majhni servo motorji, ki se uporabljajo v amaterskih RC modelih, so zelo poceni. Najdete jih v spletnih trgovinah z iskanjem micro servo.

Za programiranje servomotorjev je dovolj vedeti, da že imajo krmilnik, ki opravlja glavno delo. In vse, kar je potrebno, je napajanje in digitalni signal, ki krmilniku pove, v kateri položaj želimo zavrteti pogonsko gred. Informacije o njihovi zasnovi je enostavno najti. Njihov protokol je najpreprostejši izmed vseh digitalnih komunikacijskih protokolov: impulzna širinska modulacija - PWM (v angleščini PWM). Vsi enostavni servo motorji imajo konektor s tremi nožicami: maso, +5 V (napetost se lahko razlikuje glede na velikost in moč) in vhod signala. Krmilniki Arduino imajo lahko dva različne poti ustvariti tak signal. Prvi je strojni PWM, ki ga lahko sam čip izpiše na več svojih digitalnih V/I zatičih. Drugi je programska oprema. Programska oprema vam omogoča hkratni sprejem več različnih signalov PWM kot strojna oprema. Zagotovljen je priročen ovoj pod Arduinom - knjižnica Servo. Omogoča vam uporabo 12 servomotorjev hkrati na večini majhnih krmilnikov (Uno, Due, Nano) in 48 servomotorjev na Arduino Mega in podobnih. Servo signalni zatič je povezan z digitalnim zatičem Arduino. Ozemljitev in napajanje - očitno za ozemljitev in napajanje sta lahko skupna vsem servom. V trižičnih servo zankah je črna ali rjava ozemljitev, na sredini je običajno rdeča +5 V in končno bela ali rumena je signal. S programskega vidika je nadzor nadvse preprost:

Servo myservo; // Servo na pin 9 Arduino myservo.attach(9); // Zasukaj na položaj 90º myservo.write(90);

Večina servomotorjev lahko zavrti gred za 180°, pri njih pa je 90° povprečni položaj. Za poenostavitev povezave servomotorjev s ploščo Arduino obstaja več rešitev. Najbolj kanoničen je Sensors Shield. Če ga namestite na Uno in napajate priključke za servomotorje, lahko njihove konektorje priključite neposredno vanj.

Baterija

Drugo pomembno vprašanje je prehrana. Če imate napredno ploščo, ki vam omogoča napajanje celotnega sistema preko enega napajalnega voda (in servo motorji ne bodo motili delovanja krmilnika), potem lahko dobite z enim virom. Izbira je ogromna, najboljši so seveda Li-Ion/Li-Po briketi za radijske modele. Potrebujejo pa tudi ustrezne polnilce. Če imate enostavnejši krmilnik (Uno/Due/Nano), ga lahko napajate ločeno, na primer z 9-voltno "Krono", servomotorje pa priključite na glavno močno baterijo. Tako bodo servo motorji zagotovo imeli dovolj moči. Kdaj litijeve baterije napetost morate spremljati še bolj natančno kot običajno, da ne pride do prekomernega praznjenja (dovoljene napetosti je treba pojasniti za določeno vrsto baterije). V ta namen ima robot Sleipnir, o katerem bomo še govorili, pritrjen tudi majhen digitalni voltmeter.

Robot hrošč naredi sam

Komplet

  • Krmilnik Arduino Uno: 1150 rub.
  • Trije servo motorji. Uporabil sem HXT500, 200 rub. košček
  • Baterijski prostor za Krona s stikalom: 50 rub.
  • Baterija "Krona": 145 rub.
  • IR sprejemnik: 90 rub.
  • Jeklena žica s premerom približno 1,5 mm. Za stepanje jajc sem na primer uporabil polomljeno metlico

Skupaj: 2035 rub.

DmitryDzz:Želim vas povabiti, da naredite majhnega daljinsko vodenega šestnožnega robotskega hrošča, ki temelji na krmilniku Arduino Uno. Noge bodo imele eno stopnjo svobode, upravljanje pa bo potekalo z navadnim TV daljincem.

Moram reči, da so to cene dragih moskovskih trgovin. V kitajskih spletnih trgovinah bo vse to stalo pol manj. Štetje dostave. Res je, po mojih izkušnjah boste morali počakati od dveh tednov do treh mesecev.

Enostavnejši način je, da vzamete konstruktorski set, ker v prvih korakih en krmilnik ne bo dovolj. Zdaj številne trgovine ponujajo takšne komplete. Na primer, obstaja čudovita spletna trgovina "Amperka". Tukaj vam bomo ponudili več podobnih gradbenih kompletov, ki se razlikujejo po vsebini in seveda ceni. Dovolj mi je bil najpreprostejši - "Matrjoška X". Vsebuje krmilnik Arduino Uno, USB kabel za povezavo z računalnikom, prototipno ploščo (nenadomestljiva stvar!), komplet mostičkov, LED, uporov in drugih drobnarij.

V isti trgovini je razdelek »Wiki«, kjer boste našli celo čudovite kratke video vadnice, prevedene v ruščino. Vsekakor jih preverite. In seveda obstaja forum, kjer vam bodo verjetno poskušali pomagati.

Katera orodja boste potrebovali:

  • spajkalnik in vse, kar potrebujete za spajkanje. Ne bo vam treba veliko spajkati in ne boste potrebovali posebnih veščin;
  • pištola za vroče lepilo in palice zanjo;
  • klešče za delo z žico.

Če ste zbrali vse, začnimo!

Nadzor

Preidimo na prvi korak: naučiti se moramo komunicirati z daljinskim upravljalnikom in poiskati kode za pritisk nekaterih njegovih gumbov. Te kode bodo kasneje uporabne za skico krmiljenja robota.

Na tej stopnji boste potrebovali tudi IR sprejemnik in lepo bi bilo imeti prototipno ploščo. Velika večina IR daljinskih upravljalnikov deluje na nosilnih frekvencah 36 kHz, 38 kHz ali 40 kHz (Panasonic, Sony). Izjema so daljinci Sharp (56 kHz), Bang & Olufsen (455 kHz) in morda še kdo bolj eksot. Zato je za nas povsem primeren vsak IR sprejemnik na 36, ​​38 ali 40 kHz. Frekvenca morda ne ustreza natančno nosilni frekvenci signala. V tem primeru se bo občutljivost sprejemnika zmanjšala, vendar v praksi nisem opazil nobenega neugodja pri uporabi IR sprejemnika TSOP2136 (36 kHz - zadnji dve števki sta frekvenca) in daljinskega upravljalnika Sony (40 kHz).

Tako so IR sprejemniki TSOP21xx, TSOP22xx, TSOP312xx primerni za večino daljinskih upravljalnikov. Zadnji dve števki sta lahko 36, 37, 38 ali 40. Preden vklopite IR sprejemnik, preverite ožičenje njegovih kontaktov - le trije so: +5V (napajanje), GND (ozemljitev), Vs (izhod) . Sestavimo vezje kot na sliki (ožičenje za TSOP2136).


Kot lahko vidite, smo izhod IR sprejemnika povezali z analognim vhodom krmilnika A0.

Tako izgleda koda skice:

#include "IRremote.h" // Analogni vhod krmilnika, // na katerega je priključen IR sprejemnik: const int IR_PIN = A0; // Ustvari objekt IR sprejemnika: IRrecv irrecv(IR_PIN); void setup() ( Serial.begin(9600); Serial.println("ready"); // Začnite poslušati IR signale: irrecv.enableIRIn(); ) void loop() ( // Opišite strukturo rezultatov, / / v kateri // bodo nameščeni prejeti in dekodirani // ukazi IR: rezultati decode_results; // Če je ukaz IR prejet in // uspešno dekodiran, potem izdamo // prejeto kodo v serijska // vrata krmilnika: if (irrecv.decode (&results)) ( Serial.println(results.value); irrecv.resume(); ) )

Skica uporablja posebno knjižnico IRremote.h, ki dekodira signale različnih IR daljinskih upravljalnikov. Ta knjižnica je odprt projekt, prenesete jo lahko s https://github.com/shirriff/Arduino-IRremote. In da ga povežemo z našim projektom, moramo izvesti tri korake:

  • kopirajte imenik knjižnice v imenik knjižnic, ki se nahaja v namestitvenem imeniku Arduino IDE;
  • znova zaženite IDE;
  • dodajte vrstico #include "IRremote.h" na začetek naše skice.

Zdaj bo skica imela na voljo funkcije dekodiranja IR signala. Toda za ogled prejetih kod bomo uporabili tudi objekt Serial. Z njegovo pomočjo bomo preko serijskega priključka (isti USB kabel) prenesli kode v računalnik. V funkciji nastavitve inicializiramo serijski objekt. "9600" je 9600 baud - hitrost, ki bo uporabljena za prenos podatkov. Po inicializaciji lahko pišemo v serijska vrata s funkcijo println. Če si želite ogledati rezultat tega izhoda na vašem računalniku v Arduino IDE, izberite menijsko postavko Orodja → Serijski monitor (Ctrl + Shift + M). Prepričajte se, da je nastavljena na 9600 baudov.

Krmilnik torej prejema napajanje prek kabla USB in preko njega prenaša podatke. Naložite skico, zaženite Serial Monitor in začnite pritiskati gumbe daljinskega upravljalnika. Kode bi se morale prikazati v oknu Serial Monitor. Protokoli daljinskega upravljanja so različni, včasih je lahko ena koda, včasih več. V vsakem primeru lahko vedno izberete kode, ki so edinstvene za vsak gumb na daljinskem upravljalniku.

Potrebujemo 13 gumbov za daljinsko upravljanje. Uporabil sem naslednje:

  • 1 - gladek zavoj v levo;
  • 2 - gibanje naprej;
  • 3 - gladek zavoj v desno;
  • 4 - na mestu zavijte levo;
  • 5 - stop;
  • 6 - zavijte desno na mestu;
  • 7 - premikanje nazaj z desnim zavojem;
  • 8 - gibanje nazaj;
  • 9 - premikanje nazaj z levim zavojem;
  • modri gumb - zelo počasen;
  • rumena - počasna;
  • zelena - hitro;
  • rdeča - zelo hitro.

Zapišite si kode teh gumbov, kasneje jih boste potrebovali za skico krmiljenja robota.

Algoritem gibanja

Skica krmiljenja robota je na voljo na naši projektni strani (bit.ly/1dEwNDC). Ne pozabite spremeniti vrednosti konstant za kode pritisnjenih gumbov na daljinskem upravljalniku v kode vašega daljinskega upravljalnika (konstante IR_COMMAND_XXX_CODES v datoteki ir_command_codes.h).

Ne bomo si podrobneje ogledali skice; mislim, da je komentarjev v kodi dovolj, vendar je eno vprašanje vseeno vredno razmisliti.

Gibanje žuželk je zelo zanimivo. In čeprav so vsi ti hrošči zelo blizu padcu na tla, so iz nekega razloga vedno stabilni: v danem trenutku na površini stojijo vsaj tri noge (dve na eni strani in ena na drugi). In medtem ko te noge vlečejo hrošča proti eni tarči, se druge tri potegnejo navzgor, da ponovijo to gibanje. Naša naloga je narediti nekaj podobnega.

Naš robotski hrošč ima tri servomotorje, ki so postavljeni pravokotno na gibanje. Pri levem in desnem servomotorju je os gredi usmerjena navzgor, pri centralnem servomotorju pa naprej. Naloga, na primer, levega servo je, da črpa dve nogi hkrati: levo sprednjo in levo zadnjo. Mimogrede, med seboj so togo povezani in prilepljeni na rocker tega servo. Naloga centralnega servo je, da dvigne levo ali desno stran hrošča. Zato sta osrednji levi in ​​desni krak, ki sta en sam del v obliki črke U, pritrjeni na zibalnik tega motorja.

Skica mora zagotoviti premikanje robota naprej, nazaj, gladke obrate v gibanju in obračanje na mestu. Rad bi tudi nadzoroval hitrost hrošča. Za programski opis teh gibanj bomo potrebovali matematiko. Poglej diagram.


Modri ​​krogi označujejo noge robotskega hrošča, ki stojijo na površini, beli krogi pa tiste, ki so v zraku. Upoštevajte, da se morata levi in ​​desni servo motor pri premikanju naprej ali nazaj premikati popolnoma enako. In pri obračanju na mestu se morajo motorji vrteti v različnih smereh (simetrično). Zanimivo je tudi to, da se gibanje naprej in nazaj razlikuje le v fazi centralnega servomotorja.

Torej, kako se to izvaja? Spomnimo se, da krmilnik nenehno kliče funkcijo zanke. To pomeni, da moramo v to funkcijo postaviti kodo, ki določa trenutni položaj servomotorjev in jih nastavi na ta položaj. Vsak servomotor mora delovati oscilatorna gibanja. Položaj servomotorja v času t lahko izračunamo z naslednjo formulo:

X = A sin(2πt/T),

kjer je X želeni položaj servomotorja, A je amplituda nihanja, T je nihajna doba.

Torej, odvisno od trenutka t, bomo dobili spremembo vrednosti X v območju od –A do +A. Servo motorje lahko nastavite od 0 do 180°. Zato je za nas bolje, da nihamo okoli "ničelnega" položaja 90°. In če želimo zagotoviti nihanje s periodo 1 s okoli položaja 90° z amplitudo 30°, potem se formula pretvori v naslednjo obliko:

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

kjer je t čas v milisekundah, ki je pretekel od začetka nihanj. Za nadzor hitrosti robotskega hrošča lahko spreminjamo periodo nihanja. Večji kot je, manjša je hitrost.

Zdaj pa se še enkrat vrnimo k našemu diagramu, ker zgoraj zapisana formula še ni dokončana. Kako zagotoviti sinhrono ali nasprotno gibanje levega in desnega servomotorja? Kako spremeniti fazo centralnega servomotorja? Naši formuli moramo dodati fazo nihanja. Če prestavite argument sinusa za količino π za na primer desni motor, bo ta deloval v protifazi proti levemu, to je tako, kot potrebujemo, da se obrne na mestu. Tako bo zdaj izgledala naša formula:

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

kjer je Φ faza nihanja, vrednost je od 0 do 2π.

Poglejte tabelo, da boste razumeli, kakšne bi morale biti faze nihanja za servo motorje za vsako vrsto gibanja.

Montaža

Zdaj pa sestavimo robota na prototipno ploščo in naložimo krmilno skico.

To je zelo pomemben korak pred montažo. Poskusite odklopiti kabel USB in napajati testno ploščo z baterijo Krona. Preverite vse faze gibanja in se prepričajte, da vse deluje. Po sestavljanju robota bo težje spremeniti karkoli (na primer zamenjati nedelujoči servomotor).


Zdaj pa preidimo na samo montažo. Glavni nosilni element je predal za baterije. Priporočam uporabo predelka zaprtega tipa in vedno s stikalom.

Dele hrošča najlažje pritrdite z vročim lepilom. Začnite s servo motorji. Odstranite nepotrebna pritrdilna ušesa in povežite stroje med seboj. Nato prilepite ta sklop treh "serva" na pokrov prostora za baterije. Ne pozabite, da se mora predal za baterije prosto odpreti, če želite zamenjati baterijo.

Najlažji način je, da krmilnik prilepite na predal, vendar mi ta možnost ni ravno všeč, saj bom moral Arduino Uno dati hrošču za vedno. Zato si lahko zakomplicirate življenje in uporabite priključke Arduino za pritrditev prostora za baterije. Na dno predala prilepite pin konektor z razmikom med nožicami 2,54 mm. Postavite ga tako, da se prilega vtičnici krmilnika v območju digitalnih nožic 8–11. Tako ali tako jih še ne bomo potrebovali. Če pri roki nimate konektorja, bo ustrezala sponka za papir v obliki črke U.

Žice, ki prihajajo iz prostora za baterije, morajo biti povezane z nožicami Vin in sosednjo GND. Ne zamenjujte polarnosti! Plus "Crowns" na Vin, minus na GND. Da bi zagotovili zanesljiv stik žic z Arduino konektorji, lahko konico žice preprosto debeleje pokositrite, jaz pa sem kot čep uporabil kratko sponko. Spajkalno območje sem pokril s toplotno skrčljivo cevjo.


Konektorje kablov servo pogona je treba odrezati, napajalne žice (+5 V - običajno rdeče in GND - črne ali rjave) združiti in napeljati na 5 V vtičnice in sosednji GND na krmilniku. Povezali se bomo malo kasneje. Žice krmilnega signala (običajno rumene) so povezane z digitalnimi izhodi krmilnika: levi servomotor na pin 2, srednji na pin 4, desni na pin 7.

“+” in “–” IR sprejemnika lahko preprosto priključite na Arduino konektor (5V in sosednji GND). Res je, da jih upognete na polovico in podvojite njihovo debelino. Prej povezane napajalne žice servomotorjev spajkamo na iste napajalne noge IR sprejemnika. Izhod signala IR sprejemnika verjetno ne bo dosegel analognega vhoda krmilnika A0 in ga boste morali povečati z žico.

Nekaj ​​nasvetov za izdelavo nog. Najprej pripravite levo in desno "spredaj-zadaj" nogi. Prepričajte se, da so simetrični (bodite pozorni na dolžine in kote upogiba). Začnite z lepljenjem nog šele potem, ko se prepričate, da so servomotorji nastavljeni na položaj "nič" (90°).

Bolje je, da zadnji par namestite srednji par nog. Svetujem vam, da najprej naredite srednje noge daljše, nato pa jih po namestitvi obrežete na želeno dolžino. V položaju "nič" mora biti vseh šest nog na površini. Nihanje srednjih nog z amplitudo 15 ° ne sme ovirati "antero-posteriornih" obratov.

Kaj je naslednje?

Robozhuk je že pripravljena mobilna platforma, ki temelji na enem najbolj priljubljenih in dostopnih krmilnikov. Projekt je odprt: https://github.com/beetle-ringo/arduino. Naredite fork (vejo) v GitHubu in dodajte svojo lastno funkcionalnost. Pustite domišljiji prosto pot - dodajte IR LED in robot je pripravljen na robotsko bitko. Povežite daljinomere, taktilne senzorje, žiroskop ... Naučite robota, da se izogiba oviram ali hodi po črti, poskusite nanj namestiti spletno kamero. Idej je lahko milijon in vedno lahko izberete najbolj zanimivo.

Robot Sleipnir

Komplet

  • Krmilnik Arduino Uno Dagu Spider Robot: 2530 rub.
  • Servo pogoni SG90 9g (16 kosov) 1150 rub.
  • Baterija LiPo baterijski paket, 7,4 V, 1800 mAh 490 RUR
  • Radijski modul 4-pinski Bluetooth RF-sprejemnik 270 rubljev
  • Indikator napetosti (izbirno) DC 3,3–30 V Rdeči LED panelni merilnik 100 RUR
  • Aluminijasti kotiček. Na najbližjem gradbenem trgu 135 rubljev.
  • Vijaki in matice. Na najbližjem bolšjem trgu 35 rubljev.

Skupaj: 4710 rub.

*Komponente so bile kupljene ob različnih časih in številne elemente je mogoče optimizirati

poconoco: Poskusimo sestaviti nestandardno konfiguracijo - osemnožni robot 2DOF. Noge 2DOF je veliko lažje programirati, poleg tega imam naokoli kup neuporabljenih servomotorjev. In kar je najpomembneje, mogoče ga bo poimenovati v čast osemnožnega konja boga Odina, Sleipnirja (o tem sem vedno sanjal!).

Naš Sleipnir bo imel štiri noge na vsaki strani z dvema členkoma. Vsak sklep je servo pogon, kar pomeni osem servomotorjev na stran. Za poenostavitev se bo vseh osem sklepov na eni strani konja vrtelo v isti ravnini. Čeprav to sploh ni potrebno. Poleg tega, če so noge na eni strani nekoliko "šahovnice", tako da se dve sosednji nogi ne moreta dotikati, bo to še bolje, saj boste lahko naredili širši korak in galop.


Čedna in funkcionalna, a daleč od najcenejše rešitve, je uporaba prilagojene krmilne plošče, optimizirane za povezovanje servomotorjev v velike količine. Naletel sem na Dagu Spider Robot Controller - to je isti Arduino Mega, vendar na plošči z vnaprej spajkanimi 3-pinskimi konektorji, kamor lahko takoj povežeš tistih 48 servov brez ščitov. Idealno za večnožne robote na Arduinu.

Nadzor

Upravljali se bomo preko Bluetootha. Za to obstajajo različne strojne rešitve. To so ščiti in ločene kartice s serijskim vmesnikom UART (kot običajna vrata COM, le z nivoji signala 5 V). Zdelo se mi je, da je najbolj praktična najmanjša kartica z vmesnikom UART. Povezuje se z ustreznimi zatiči UART/Serial vrat Arduino. Upoštevajte dve niansi: na Uno/Due/Nano in podobnih je samo ena taka vrata in se uporablja tudi za strojno programsko opremo prek USB. Zato boste morda morali med posodobitvijo vdelane programske opreme izklopiti modul Bluetooth. In drugi odtenek - ne pozabite, da je zatič RX modula priključen na zatič TX Arduino in TX na RX. Takšne stvari se dogajajo v UART.

Programiranje Bluetooth ni nič bolj zapleteno kot servomotorji; podatke je mogoče brati bajt za bajtom, kar bomo uporabili:

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

Če se uporablja Arduino Mega in je Bluetooth povezan z drugimi vrati, potem je Serial1 zapisan namesto Serial. Omeniti velja, da vam ni treba uporabljati Bluetootha, temveč upravljate robota neposredno prek USB-ja. In nič se ne bo spremenilo v zgornji kodi! To samo deluje s serijskimi vrati in ali tam visi oddajnik BT ali serijski pretvornik USB, nam ni pomembno.

Druga stran Bluetootha

Najprimernejši način povezovanja je s standardnimi pripomočki za Linux. Za delo bomo potrebovali pripomočke sdptool, rfcomm (del paketa bluez v repozitorijih Ubuntu), pa tudi minicom (tako se imenuje paket). Navodila za delo s temi pripomočki najdete na internetu.

Algoritem gibanja


Za heksapod bi bila najpreprostejša hoja: noge so razdeljene v dve skupini s tremi nogami, ena od skupin je popolnoma na tleh, druga je v zraku, prerazporejena naprej. To še zdaleč ni edina možna hoja. V zraku lahko držite samo dve taci ali celo eno, ostalih štiri ali pet pa na tleh. Obstaja tudi veliko hodov za osmeronožca. Vzeli bomo najpreprostejšega, tudi z dvema skupinama po štiri noge.

Kaj moramo torej narediti, da bomo delali s 16 servomotorji in izbrano hojo? Pravilen odgovor je branje o inverzni kinematiki (IR). Dolžina članka nam ne dovoljuje, da bi na široko razširili temo, vendar je na internetu veliko gradiva. Skratka, IR rešuje problem iskanja potrebnih krmilnih signalov, da sistem v prostoru zavzame želeni položaj. Za nogo to pomeni, da je treba na podlagi koordinat točke, kamor naj stopalo udari, določiti kote servomotorjev, ki jih je treba za to nastaviti. In z nadzorom koordinat stopal lahko nadzorujete položaj telesa. Imamo 2DOF noge, osi sta vzporedni, zato se noga vedno giblje v isti ravnini. Problem IR je v tem primeru zmanjšan na 2D prostor, kar ga močno poenostavi.

Naj bo lokalni izvor koordinat O za vsako nogo gred zgornjega servo, to je bokov. In imamo koordinate točke A, kamor mora stopalo udariti. Potem je enostavno videti, da morate rešiti problem iskanja presečišč dveh krogov (glejte diagram krakov ene strani, to je prikazano na skrajnem desnem kraku). Ko najdete presečišče B krogov (z izbiro katerega koli od njih), je enostavno izračunati zahtevane kote s pretvorbo iz kartezičnih koordinat v polarne. V kodi je rešitev te težave videti takole:

Float A = -2 * x; float B = -2 * y; float C = sqr(x) + sqr(y) + sqr(dolžina bokov) - sqr(dolžina goleni); 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 * več; bx = X0 - B * več; ay = Y0 - A * več; po = Y0 + A * več; // ali bx za drugo presečišče float jointLocalX = ax; // ali z za drugo presečišče float jointLocalY = ay; float hipPrimaryAngle = polarAngle(jointLocalX, jointLocalY); float hipAngle = hipPrimaryAngle - hipStartAngle; float shinPrimaryAngle = polarni kot (x - jointLocalX, y - jointLocalY); float shinAngle = (shinPrimaryAngle - hipAngle) - shinStartAngle;

kjer sta x in y koordinati točke, ki jo morate doseči z nogo; hipStartAngle - kot, pod katerim je "kolk" prvotno zasukan (s servo v srednjem položaju), podobno - shinStartAngle. Mimogrede, v teh izračunih so koti očitno v radianih, vendar jih je treba prenesti na objekte Servo v stopinjah. Celotna delovna koda vdelane programske opreme, vključno s tem delom, je objavljena na GitHubu, glejte povezavo na koncu članka. To je del IR, vendar poleg njega potrebujete malo več dokaj preproste kode za uporabo tega IR na vseh nogah (glejte funkcije legsReachTo(), legWrite()). Potrebovali boste tudi kodo, ki dejansko implementira hojo - premikanje ene skupine nog "nazaj" (tako da se robot premakne naprej), medtem ko se druga skupina nog dvigne in premakne naprej za naslednji korak, glejte funkcijo stepForward(). Z danimi parametri traja en korak. S temi parametri, mimogrede, lahko naredite korak nazaj, kljub imenu funkcije. Če je ta funkcija poklicana v zanki, bo robot stopil naprej.

Zdaj sprejema ukaze in jih razlaga. Programu dodamo stanje:

Enum State (STOP, NAPREJ, NAZAJ, NAPREJ_DESNO, NAPREJ_LEVO);

In v glavni izvršilni zanki loop() bomo pogledali trenutno stanje (spremenljivka stanja) in potegnili stepForward(), če se premikamo naprej (z vrtenjem ali brez), in spet stepForward(), vendar z negativnim argumentom xamp, če se moramo premakniti nazaj. Zavoje bo obravnaval legWrite(), pri zavoju v desno pa bodo noge na desni strani mirovale (medtem ko bodo leve veslale). Tukaj je tak konjski rezervoar. Brutalno, a zelo preprosto in deluje. Gladko vrtenje je mogoče izvesti le z nogami 3DOF, primer tega lahko vidite v skladišču buggybug.

Preklop (stanje) ( case FORWARD: case FORWARD_RIGHT: case FORWARD_LEFT: stepForward(h, dh, xamp, xshift); break; case BACKWARD: stepForward(h, dh, - xamp, xshift); break; )

Char ukaz; medtem ko (Serial1.available()) ukaz = Serial1.read(); preklop (ukaz) ( case "w": stanje = NAPREJ; break; case "s": state = BACKWARD; break; case "d": state = NAPREJ_DESNO; break; case "a": state = FORWARD_LEFT; break; privzeto : stanje = STOP; )

Tu so glavne točke vdelane programske opreme končane, ostalo so vse vrste malenkosti. Čeprav obstaja še ena, morda pomembna točka - možnost natančne nastavitve servomotorjev. Tudi pri najbolj previdnem sestavljanju, če vsem servo motorjem ukažete, naj se obrnejo za 90°, bodo nekateri od njih še vedno na koncu nekoliko pod kotom. Zato potrebujemo sposobnost, da ga prilagodimo. Vidite lahko, kako sem to naredil v metodah hipsWrite() in shinsWrite() ter v nizih za natančno nastavitev hipsTune in shinsTune.

Montaža

Za takšne modele ne potrebujete nič posebnega: list pleksi stekla primerne debeline (z najbližjega bolšjega trga strojne opreme) in vbodna žaga ali žaga za kovino, da izrežete dele. In seveda, sveder za vrtanje lukenj. Namesto pleksi stekla lahko uporabite vezane plošče (takrat lahko na končni konstrukciji naredite tudi nepozaben napis z gorilnikom). Uporabite lahko tudi plošče ali vogale iz aluminija. Pri Sleipnirju sem šel po poti uporabe aluminijastega kotnika z rebri 1 cm (kupljen nekje v gradbenem supermarketu).


Osnova bo pravokoten okvir. Okončine - 4-centimetrske črte. Prav tako je vredno založiti veliko majhnih vijakov in matic. Vogal odrežemo na potrebne kose, izrežemo utore za servomotorje in izvrtamo luknje za pritrdilne vijake in vijake. Bolje je pokazati dizajn kot ga opisati. Velikosti so lahko poljubne, roboti morajo biti raznoliki. Vendar ne pozabite: daljše kot so noge, bolj bo moral servo potisniti vzvod in večjo obremenitev bo imel. Do te mere, da se ne more obrniti in se celo zlomi. Ampak 4–5 cm ni problem.

Pri nizkocenovnih lahkih robotih se pogosto ne trudijo z ločenim zgibnim sklepom za okončine, celotna obremenitev pa v celoti pade na gred servo pogona. Glede na majhno težo to sploh ni kritično. In z večjo težo bi morali razmišljati o servo motorjih s kovinskimi zobniki in krogličnim ležajem.

Vsak servo je običajno opremljen z nekaj vijaki in kompletom nastavkov, ki jih je mogoče priviti na gred za različne namene. Naša najboljša izbira je en sam "rog" (ali rog), ki vam omogoča, da pritrdite drog na servo. Torej sta osi dveh servomotorjev pritrjeni na eno palico in palica postane "bok". V tem primeru je en servo pritrjen na telo, drugi pa postane del spodnjega dela noge. Nanj je vredno pritrditi še eno palico, samo da jo podaljšate ali naredite ud bolj zanimiv. Malo mukotrpnega dela - in platforma je pripravljena (priročni kompleti izvijačev, ključev, pincet, rezil za žice itd. Zelo pospešijo postopek).

Kaj je naslednje?

Celoten projekt je na voljo na https://github.com/poconoco/sleipnir. Opisal sem eno najbolj nepraktičnih konfiguracij - veliko 2DOF nog, visokih, ozkih, enostavno pade na bok. Poskusite narediti boljšega robota s 3DOF nogami. Z nogami 4DOF. S kremplji ali čeljustmi. Kot primer inverzne kinematike 3DOF se lahko sklicujete na repozitorij buggybug - vdelana programska oprema hexapod je tam. Prav tako lahko naredite inteligentne robote, namesto nadzorovanih, tako da namestite senzorje razdalje namesto Bluetootha in naučite robota, da se izogiba stenam in oviram. Če tak senzor postavite na servo pogon in ga zavrtite, lahko skenirate območje, skoraj s sonarjem.

Ta članek je na voljo tudi v naslednjih jezikih: tajska

  • Naslednji

    Najlepša HVALA za zelo koristne informacije v članku. Vse je predstavljeno zelo jasno. Zdi se, da je bilo z analizo delovanja trgovine eBay vloženega veliko dela

    • Hvala vam in ostalim rednim bralcem mojega bloga. Brez vas ne bi bil dovolj motiviran, da bi posvetil veliko časa vzdrževanju te strani. Moji možgani so tako zgrajeni: rad se poglabljam, sistematiziram razpršene podatke, preizkušam stvari, ki jih še nihče ni naredil ali pogledal s tega zornega kota. Škoda, da naši rojaki zaradi krize v Rusiji nimajo časa za nakupovanje na eBayu. Kupujejo pri Aliexpressu iz Kitajske, saj je tam blago veliko cenejše (pogosto na račun kakovosti). Toda spletne dražbe eBay, Amazon, ETSY bodo Kitajcem zlahka dale prednost pri ponudbi blagovnih znamk, vintage predmetov, ročno izdelanih predmetov in različnih etničnih izdelkov.

      • Naslednji

        V vaših člankih je dragocen vaš osebni odnos in analiza teme. Ne opustite tega bloga, sem pogosto. Takšnih bi nas moralo biti veliko. Pošlji mi email Pred kratkim sem prejel e-pošto s ponudbo, da me bodo naučili trgovati na Amazonu in eBayu. In spomnil sem se vaših podrobnih člankov o teh poslih. območje Še enkrat sem vse prebral in ugotovil, da so tečaji prevara. Ničesar še nisem kupil na eBayu. Nisem iz Rusije, ampak iz Kazahstana (Almaty). Ampak tudi dodatnih stroškov še ne potrebujemo. Želim vam veliko sreče in ostanite varni v Aziji.

  • Lepo je tudi, da so poskusi eBaya, da rusificira vmesnik za uporabnike iz Rusije in držav CIS, začeli obroditi sadove. Navsezadnje velika večina državljanov držav nekdanje ZSSR nima dobrega znanja tujih jezikov. Angleško ne govori več kot 5% prebivalstva. Več jih je med mladimi. Zato je vsaj vmesnik v ruščini - to je velika pomoč pri spletnem nakupovanju na tej trgovalni platformi. eBay ni šel po poti svojega kitajskega kolega Aliexpressa, kjer se izvaja strojno (zelo okorno in nerazumljivo, mestoma vzbujajoč smeh) prevajanje opisov izdelkov. Upam, da bo na naprednejši stopnji razvoja umetne inteligence visokokakovostno strojno prevajanje iz katerega koli jezika v katerega koli v nekaj sekundah postalo resničnost. Zaenkrat imamo tole (profil enega od prodajalcev na eBayu z ruskim vmesnikom, a angleškim opisom):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png