Satura rādītājs:

Vienkārša un gudra robotu roka, izmantojot Arduino !!!: 5 soļi (ar attēliem)
Vienkārša un gudra robotu roka, izmantojot Arduino !!!: 5 soļi (ar attēliem)

Video: Vienkārša un gudra robotu roka, izmantojot Arduino !!!: 5 soļi (ar attēliem)

Video: Vienkārša un gudra robotu roka, izmantojot Arduino !!!: 5 soļi (ar attēliem)
Video: BERMUDU DIVSTŪRIS x APVEDCEĻŠ - Brāl' Ar Dzīvi Nekaulē 2024, Jūnijs
Anonim
Image
Image
Nepieciešamās lietas
Nepieciešamās lietas

Šajā pamācībā es izveidošu vienkāršu robotu roku. To kontrolēs, izmantojot galveno roku. Roka atcerēsies kustības un spēlēs pēc kārtas. Koncepcija nav jauna, es ideju ieguvu no "Stoerpeak mini robotu rokas". Es to gribēju uztaisīt jau sen, bet toreiz es biju pavisam niecīgs un nezināju par programmēšanu. Tagad beidzot es to būvēju, saglabājot to vienkāršu, lētu un dalīšos ar jums visiem.

Tātad, sāksim….

1. darbība: lietas, kas jums būs nepieciešamas:-

Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas
Nepieciešamās lietas

Šeit ir saraksts ar lietām, kas jums būs nepieciešamas:-

1. Servo motori x 5 Saite ASV:- https://amzn.to/2OxbSH7Link Eiropai:-

2. Potenciometri x 5 (esmu izmantojis 100k.) Saite ASV:- https://amzn.to/2ROjhDMLink Eiropai:-

3. Arduino UNO. (Varat izmantot arī Arduino Nano) Saite ASV:- https://amzn.to/2DBbENWLink Eiropai:-

4. Maizes dēlis. (Es iesaku šo komplektu) Saite ASV:- https://amzn.to/2Dy86w4Link Eiropai:-

5. Akumulators. (pēc izvēles, es izmantoju 5V adapteri)

6. Kartons/koks/sauļošanās dēlis/akrils, kas jebkad ir pieejams vai viegli atrodams.

Un jums būs jāinstalē arī Arduino IDE.

2. solis: rokas izgatavošana:-

Rokas izgatavošana
Rokas izgatavošana
Rokas izgatavošana
Rokas izgatavošana

Šeit es esmu izmantojis Popsicle nūjas, lai izgatavotu roku. Jūs varat izmantot jebkuru jums pieejamo materiālu. Un jūs varat izmēģināt dažādus mehāniskos dizainus, lai padarītu roku vēl labāku. mans dizains nav ļoti stabils.

Es tikko izmantoju divpusēju lenti, lai piestiprinātu servos pie Popsicle nūjas un piestiprinātu tos, izmantojot skrūves.

Meistara rokai es pielīmēju potenciometrus popsicle nūjām un izveidoju roku.

Atsaucoties uz attēliem, jūs iegūsit labāku ideju.

Visu esmu uzstādījis uz A4 izmēra audekla tāfeles, ko izmanto kā pamatu.

3. darbība. Savienojumu izveide:-

Savienojumu izveide
Savienojumu izveide
Savienojumu izveide
Savienojumu izveide
Savienojumu izveide
Savienojumu izveide

Šajā solī mēs izveidosim visus nepieciešamos savienojumus, skatiet iepriekš redzamos attēlus.

  • Vispirms pievienojiet visus servos paralēli barošanas avotam (sarkanais vads līdz +ve un melnais vai brūnais vads līdz Gnd)
  • Pēc tam pievienojiet signāla vadus, ti, dzelteno vai oranžo vadu arduino PWM tapai.
  • Tagad savienojiet potenciometrus ar +5v un Gnd arduino.
  • Savienojiet vidējo termināli ar ardunio analogo tapu.

Šeit servo vadīšanai tiek izmantotas digitālās tapas 3, 5, 6, 9 un 10

Ievadīšanai no potenciometriem tiek izmantotas analogās tapas no A0 līdz A4.

Servo, kas savienots ar 3. tapu, kontrolēs potenciometrs, kas savienots ar A0

Servo, kas savienots ar tapu 5, tiks kontrolēts ar katlu uz A1 utt.

Piezīme:- Lai gan servos nav strāvas ar arino, pārliecinieties, vai servo Gnd ir savienots ar arino, pretējā gadījumā roka nedarbosies.

4. darbība: kodēšana:-

Kodēšana
Kodēšana

Šī koda loģika ir diezgan vienkārša, potenciometru vērtības tiek saglabātas masīvā, pēc tam ieraksti tiek pārvietoti, izmantojot for loop, un servos tiek veiktas darbības atbilstoši vērtībām. Jūs varat pārbaudīt šo pamācību, kuru izmantoju atsaucei "Arduino potenciometra servo vadība un atmiņa"

Kods:- (Lejupielādējams fails pievienots zemāk.)

Vispirms mēs deklarēsim visus nepieciešamos mainīgos visā pasaulē, lai mēs tos varētu izmantot visā programmā. Tam nav vajadzīgs īpašs paskaidrojums

#iekļaut

// Servo objekti Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potenciometra objekti int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Mainīgais, lai saglabātu Servo pozīciju int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Mainīgais, ko uzglabāt Iepriekšējās pozīcijas vērtības int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Mainīgais, lai saglabātu pašreizējās pozīcijas vērtības int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Saglabā leņķi int Servo_Number; // Servo int veikalu skaits Storage [600]; // Masīvs datu glabāšanai (masīva lieluma palielināšana patērēs vairāk atmiņas) int Index = 0; // Masīva indekss sākas no 0 pozīcijas char dati = 0; // mainīgais, lai saglabātu datus no sērijveida ievades.

Tagad mēs uzrakstīsim iestatīšanas funkciju, kurā mēs iestatām tapas un to funkcijas. Šī ir galvenā funkcija, kas tiek izpildīta vispirms

anulēts iestatījums ()

{Sērijas sākums (9600); // Sērijveida saziņai starp arduino un IDE. // Servo objekti ir pievienoti PWM tapām. Servo_0.pielikums (3); Servo_1.pielikums (5); Servo_2.pielikums (6); Servo_3.pielikums (9); Servo_4.pielikums (10); // Sākotnēji servos ir iestatīta 100 pozīcija. Servo_0.write (100); Servo_1.rakstīt (100); Servo_2.rakstīt (100); Servo_3.rakstīt (100); Servo_4.rakstīt (100); Serial.println ("Nospiediet" R ", lai ierakstītu un" P ", lai atskaņotu"); }

Tagad mums jāizlasa potenciometru vērtības, izmantojot analogās ieejas tapas, un jāsaskaņo tās, lai kontrolētu servos. Šim nolūkam mēs definēsim funkciju un nosauksim to Map_Pot ();, varat to nosaukt par visu, ko vēlaties, tā ir lietotāja definēta funkcija

anulēts Map_Pot ()

{ / * Servo elementi griežas par 180 grādiem, taču to izmantošana ierobežojumiem nav laba ideja, jo tas padara servos nepārtraukti zvana, kas ir kaitinoši, tāpēc mēs ierobežojam servo kustību starp: 1-179 * / Pot_0 = analogRead (A0); // Nolasiet ievadi no katla un uzglabājiet to mainīgajā katlā_0. Servo_0_Pos = karte (Pot_0, 0, 1023, 1, 179); // Kartes servos atbilstoši vērtībai no 0 līdz 1023 Servo_0.write (Servo_0_Pos); // Pārvietojiet servo šajā pozīcijā. Pot_1 = analogRead (A1); Servo_1_Pos = karte (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = karte (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = karte (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = karte (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Tagad mēs uzrakstīsim cilpas funkciju:

tukša cilpa ()

{Map_Pot (); // Funkcijas izsaukums, lai nolasītu katla vērtības, kamēr (Serial.available ()> 0) {data = Serial.read (); ja (dati == 'R') Serial.println ("Ieraksta kustības …"); ja (dati == 'P') Serial.println ("Ierakstīto kustību atskaņošana …"); } ja (dati == 'R') // Ja ir ievadīts 'R', sāciet ierakstīšanu. {// Saglabājiet vērtības mainīgajā 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 (); // Kartes funkcija tiek atsaukta salīdzināšanai, ja (abs (Prev_0_Pos == Servo_0_Pos)) // absolūtā vērtība tiek iegūta, salīdzinot {Servo_0.write (Servo_0_Pos); // Ja vērtības sakrīt servo tiek pārvietots, ja (Current_0_Pos! = Servo_0_Pos) // Ja vērtības nesakrīt {Storage [Index] = Servo_0_Pos + 0; // Vērtība tiek pievienota masīvam Index ++; // Indeksa vērtība palielināta par 1} Current_0_Pos = Servo_0_Pos; } /* Līdzīgi vērtību salīdzinājums tiek veikts visiem servos, +100 tiek pievienots katram ierakstam kā starpības vērtība. */ ja (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Indekss ++; } Current_1_Pos = Servo_1_Pos; } ja (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); ja (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Indekss ++; } Current_2_Pos = Servo_2_Pos; } ja (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); ja (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indekss ++; } Current_3_Pos = Servo_3_Pos; } ja (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); ja (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Indekss ++; } Current_4_Pos = Servo_4_Pos; } / * Vērtības tiek drukātas uz seriālā monitora, '\ t' ir vērtību parādīšanai tabulas formātā * / 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 ("Indekss ="); Serial.println (rādītājs); kavēšanās (50); } ja (dati == 'P') // JA tiek ievadīts 'P', sāciet atskaņot ierakstītās kustības. {for (int i = 0; i <Index; i ++) // Pārvietojiet masīvu, izmantojot cilpu {Servo_Number = Storage /100; // Atrod servo skaitu Servo_Position = Storage % 100; // Atrod servo slēdža pozīciju (Servo_Number) {case 0: Servo_0.write (Servo_Position); pārtraukums; 1. gadījums: Servo_1.write (Servo_Position); pārtraukums; 2. gadījums: Servo_2.write (Servo_Position); pārtraukums; 3. gadījums: Servo_3.write (Servo_Position); pārtraukums; 4. gadījums: Servo_4.write (Servo_Position); pārtraukums; } kavēšanās (50); }}}

Kad kods ir gatavs, tagad augšupielādējiet to arduino panelī

Viedā roka ir gatava darbam. Funkcija vēl nav tik gluda kā Stoerpeak.

Ja jūs varat uzlabot kodu vai jums ir kādi ieteikumi, lūdzu, informējiet mani komentāru sadaļā.

To sakot, pāriesim pie testēšanas….

5. darbība: pārbaude:-

Pēc koda veiksmīgas augšupielādes uz tāfeles atveriet "Sērijas monitoru", to varat atrast opcijā Rīki. Sākot sērijas monitoru, arduino tiks atiestatīts. Tagad jūs varat vadīt robotu roku, izmantojot galveno roku. Bet nekas netiek ierakstīts.

Lai sāktu ierakstīšanu, tagad monitorā ievadiet 'R', un jūs varat veikt ierakstāmās kustības.

Pēc kustību pabeigšanas jums jāievada “P”, lai atskaņotu ierakstītās kustības. Servos turpinās veikt kustības, kamēr dēlis nav atiestatīts.

Ieteicams: