Kazalo:

Enostavna in pametna robotska roka z uporabo Arduina !!!: 5 korakov (s slikami)
Enostavna in pametna robotska roka z uporabo Arduina !!!: 5 korakov (s slikami)

Video: Enostavna in pametna robotska roka z uporabo Arduina !!!: 5 korakov (s slikami)

Video: Enostavna in pametna robotska roka z uporabo Arduina !!!: 5 korakov (s slikami)
Video: Высокая плотность 2022 2024, Junij
Anonim
Image
Image
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete

V tem navodilu bom naredil preprosto robotsko roko. To bo nadzorovano z glavno roko. Roka si zapomni poteze in igra v zaporedju. Koncept ni nov. Idejo sem dobil iz "mini robotske roke -avtor Stoerpeak", ki sem jo želel narediti dolgo časa, toda takrat sem bil popolnoma noob in nisem imel znanja o programiranju. Zdaj končno gradim eno, naj bo preprosto, poceni in ga delim z vsemi.

Pa začnimo….

1. korak: Stvari, ki jih potrebujete:-

Stvari, ki jih potrebujete
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete
Stvari, ki jih potrebujete

Tu je seznam stvari, ki jih potrebujete:-

1. Servo motorji x 5 Povezava za ZDA:- https://amzn.to/2OxbSH7Link za Evropo:-

2. Potenciometri x 5 (uporabil sem 100k.) Povezava za ZDA:- https://amzn.to/2ROjhDMLink za Evropo:-

3. Arduino UNO. (Lahko uporabite tudi Arduino Nano) Povezava za ZDA:- https://amzn.to/2DBbENWLink za Evropo:-

4. Ogledna plošča. (Predlagam ta komplet) Povezava za ZDA:- https://amzn.to/2Dy86w4Link za Evropo:-

5. Baterija. (neobvezno, uporabljam adapter 5V)

6. Karton/les/sončna plošča/akril, kar koli je na voljo ali enostavno najti.

Potrebovali boste tudi nameščen Arduino IDE.

2. korak: Izdelava roke:-

Izdelava roke
Izdelava roke
Izdelava roke
Izdelava roke

Tu sem za izdelavo roke uporabil paličice iz makalic. Uporabite lahko kateri koli material, ki vam je na voljo. Lahko pa poskusite z različnimi mehanskimi izvedbami, da naredite roko še boljšo. moj dizajn ni zelo stabilen.

Pravkar sem z dvostranskim trakom prilepil servomotorje na palico Popsicle in jih pritrdil z vijaki.

Za roko Master sem zlepil potenciometre na palčke za mačke in naredil roko.

Če pogledate slike, boste dobili boljšo idejo.

Vse sem namestil na platno velikosti A4, ki se uporablja kot osnova.

3. korak: vzpostavitev povezav:-

Vzpostavljanje povezav
Vzpostavljanje povezav
Vzpostavljanje povezav
Vzpostavljanje povezav
Vzpostavljanje povezav
Vzpostavljanje povezav

V tem koraku bomo vzpostavili vse potrebne povezave, glejte zgornje slike.

  • Najprej vzporedno priključite vse servomotorje na napajalnik (rdeča žica na +ve in črna ali rjava žica na Gnd)
  • Nato priključite signalne žice, tj. Rumeno ali oranžno žico na PWM pin arduina.
  • Zdaj povežite potenciometre na +5v in Gnd arduina vzporedno.
  • Srednji priključek priključite na analogni pin ardunio.

Tu se za krmiljenje servomotorjev uporabljajo digitalni zatiči 3, 5, 6, 9 in 10

Analogni zatiči A0 do A4 se uporabljajo za vnos iz potenciometrov.

Servo, priključen na pin 3, bo krmiljen s potenciometrom, priključenim na A0

Servo, priključen na pin 5, bo nadzoroval pot na A1 in tako naprej….

Opomba:- Čeprav servomotorjev ne poganja arduino, ne pozabite priključiti Gnd servomotorjev na arduino, sicer roka ne bo delovala.

4. korak: Kodiranje:-

Kodiranje
Kodiranje

Logika te kode je dokaj preprosta: vrednosti potenciometrov so shranjene v matriki, nato se zapisi preiščejo z zanko for, servomotorji pa naredijo korake v skladu z vrednostmi. Lahko si ogledate to vadnico, ki sem jo uporabil za referenco "Arduino Potenciometer Servo Control & Memory"

Koda:- (spodaj naložena datoteka za prenos.)

Najprej bomo globalno razglasili vse potrebne spremenljivke, da jih bomo lahko uporabljali v celotnem programu. Za to ni potrebna posebna razlaga

#vključi

// Servo objekti Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Objekti potenciometra int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // spremenljivka za shranjevanje položaja servo int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // spremenljivka za shranjevanje prejšnjih vrednosti položaja int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // spremenljivka za shranjevanje vrednosti trenutnega položaja int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // shrani kot int Servo_Number; // Trgovine št. Servo int Shranjevanje [600]; // Niz za shranjevanje podatkov (povečanje velikosti matrike bo porabilo več pomnilnika) int Index = 0; // Indeks matrike se začne od 0. pozicije char data = 0; // spremenljivka za shranjevanje podatkov iz serijskega vhoda.

Zdaj bomo napisali namestitveno funkcijo, kjer bomo nastavili zatiče in njihove funkcije. To je glavna funkcija, ki se najprej izvede

void setup ()

{Serial.begin (9600); // Za serijsko komunikacijo med arduinom in IDE. // Servo objekti so pritrjeni na zatiče PWM. Servo_0.priključek (3); Servo_1.priključek (5); Servo_2.priključek (6); Servo_3.priključek (9); Servo_4.priključek (10); // Servomotorji so pri inicializaciji nastavljeni na 100. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Pritisnite 'R' za snemanje in 'P' za predvajanje"); }

Zdaj moramo prebrati vrednosti potenciometrov z uporabo analognih vhodnih zatičev in jih preslikati za krmiljenje servomotorjev. Za to bomo definirali funkcijo in jo poimenovali Map_Pot ();, lahko ga poimenujete karkoli želite, to je uporabniško določena funkcija

void Map_Pot ()

{ / * Servomotorji se vrtijo za 180 stopinj, vendar uporaba do omejitev ni dobra ideja, saj servomotorji neprestano brenčijo, kar je nadležno, zato omejimo servo, da se premika med: 1-179 * / Pot_0 = analogRead (A0); // Preberite vnos iz lonca in ga shranite v spremenljiv pot_0. Servo_0_Pos = zemljevid (Pot_0, 0, 1023, 1, 179); // Zemljevidi servomotorjev glede na vrednost med 0 in 1023 Servo_0.write (Servo_0_Pos); // Premaknite servo v ta položaj. Pot_1 = analogRead (A1); Servo_1_Pos = zemljevid (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = zemljevid (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogno branje (A3); Servo_3_Pos = zemljevid (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = zemljevid (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Zdaj bomo zapisali funkcijo zanke:

void loop ()

{Map_Pot (); // Funkcijski klic za branje vrednosti potkov medtem ko (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Snemanje se premakne …"); if (data == 'P') Serial.println ("Predvajanje posnetih premikov …"); } if (data == 'R') // Če je vneseno 'R', začnite snemati. {// Shranite vrednosti v spremenljivko Prev_0_Pos = Servo_0_Pos; Prev_1_Pos = Servo_1_Pos; Prev_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Funkcija zemljevida je za primerjavo priklicana if (abs (Prev_0_Pos == Servo_0_Pos)) // absolutno vrednost dobimo s primerjavo {Servo_0.write (Servo_0_Pos); // Če se vrednosti ujemajo, je servo spremenjeno v položaj if (Current_0_Pos! = Servo_0_Pos) // Če se vrednosti ne ujemajo {Storage [Index] = Servo_0_Pos + 0; // Vrednost je dodana matriki Index ++; // Vrednost indeksa se poveča za 1} Current_0_Pos = Servo_0_Pos; } /* Podobno se izvede primerjava vrednosti za vse servomotorje, +100 se vsakemu doda za vnos kot diferencialna vrednost. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); če (Trenutni_1_Pos! = Servo_1_Pos) {Shramba [Indeks] = Servo_1_Pos + 100; Indeks ++; } Trenutni_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); če (Trenutni_2_Pos! = Servo_2_Pos) {Shramba [Indeks] = Servo_2_Pos + 200; Indeks ++; } Trenutni_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); če (Trenutni_3_Pos! = Servo_3_Pos) {Shramba [Indeks] = Servo_3_Pos + 300; Indeks ++; } Trenutni_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); če (Trenutni_4_Pos! = Servo_4_Pos) {Shramba [Indeks] = Servo_4_Pos + 400; Indeks ++; } Trenutni_4_Pos = Servo_4_Pos; } / * Vrednosti so natisnjene na serijskem monitorju, '\ t' je za prikaz vrednosti v obliki tabele * / Serial.print (Servo_0_Pos); Serial.print ("\ t"); Serial.print (Servo_1_Pos); Serial.print ("\ t"); Serial.print (Servo_2_Pos); Serial.print ("\ t"); Serial.print (Servo_3_Pos); Serial.print ("\ t"); Serial.println (Servo_4_Pos); Serial.print ("Indeks ="); Serial.println (kazalo); zamuda (50); } če (podatki == 'P') // ČE je vneseno 'P', začnite predvajati posnete poteze. {for (int i = 0; i <Index; i ++) // Premaknite matriko z zanko for {Servo_Number = Storage /100; // Najde število servo Servo_Position = Shramba % 100; // Poišče položaj servo stikala (Servo_Number) {primer 0: Servo_0.write (Servo_Position); prekiniti; primer 1: Servo_1.write (Servo_Position); prekiniti; primer 2: Servo_2.write (Servo_Position); prekiniti; primer 3: Servo_3.write (Servo_Position); prekiniti; primer 4: Servo_4.write (Servo_Position); prekiniti; } zamuda (50); }}}

Ko je koda pripravljena, jo naložite na arduino ploščo

Pametna roka je pripravljena za delo. Funkcija še ni tako gladka, kot jo je naredil Stoerpeak.

Če lahko izboljšate kodo ali imate kakšne predloge zame, mi to sporočite v razdelku za komentarje.

S tem povejmo, pojdimo na testiranje …

5. korak: Testiranje:-

Ko uspešno naložite kodo na ploščo, odprite 'Serial Monitor', ki jo najdete v možnosti Orodja. Ko se serijski monitor zažene, se bo arduino ponastavil. Zdaj lahko upravljate robotsko roko z glavno roko. A nič se ne beleži.

Za začetek snemanja vnesite 'R' na monitor, zdaj lahko izvajate poteze, ki jih želite posneti.

Po končanih potezah morate za predvajanje posnetih potez vnesti 'P'. Servomotorji bodo še naprej izvajali premike, dokler plošča ni ponastavljena.

Priporočena: