Turinys:

Paprasta ir protinga robotinė ranka naudojant „Arduino“!!!: 5 žingsniai (su nuotraukomis)
Paprasta ir protinga robotinė ranka naudojant „Arduino“!!!: 5 žingsniai (su nuotraukomis)

Video: Paprasta ir protinga robotinė ranka naudojant „Arduino“!!!: 5 žingsniai (su nuotraukomis)

Video: Paprasta ir protinga robotinė ranka naudojant „Arduino“!!!: 5 žingsniai (su nuotraukomis)
Video: Дешевый сервер домашнего помощника, дешевое решение #homeassistant #solarpanelsforhome 2024, Birželis
Anonim
Image
Image
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės

Šioje pamokoje aš padarysiu paprastą robotą ranką. Tai bus kontroliuojama naudojant pagrindinę ranką. Ranka prisimins judesius ir žais iš eilės. Koncepcija nėra nauja. Idėją gavau iš „Stoerpeak“sukurtos „mini robotų rankos“. Aš norėjau tai padaryti jau seniai, bet tada buvau visiškai niekam tikęs ir neturėjau žinių apie programavimą. Dabar pagaliau aš jį kuriu, kad tai būtų paprasta, pigu ir dalinuosi su jumis visais.

Taigi pradėkime….

1 žingsnis: reikalingi dalykai:-

Dalykai, kurių jums reikės
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės
Dalykai, kurių jums reikės

Čia yra sąrašas dalykų, kurių jums reikės:-

1. Servo varikliai x 5 Nuoroda JAV:- https://amzn.to/2OxbSH7Link Europai:-

2. Potenciometrai x 5 (naudojau 100 tūkst.) Nuoroda JAV:- https://amzn.to/2ROjhDMLink Europai:-

3. Arduino UNO. (Taip pat galite naudoti „Arduino Nano“) Nuoroda JAV:- https://amzn.to/2DBbENWLink Europai:-

4. Duonos lenta. (Siūlau šį rinkinį) Nuoroda JAV:- https://amzn.to/2Dy86w4Link Europai:-

5. Baterija. (neprivaloma, naudoju 5v adapterį)

6. Kartonas/medis/saulės plokštė/akrilas, kas kada nors yra prieinama ar lengvai randama.

Be to, jums reikės įdiegti „Arduino IDE“.

2 žingsnis: rankos sukūrimas:-

Rankos padarymas
Rankos padarymas
Rankos padarymas
Rankos padarymas

Čia aš naudoju „Popsicle“lazdeles rankai gaminti. Galite naudoti bet kokią jums prieinamą medžiagą. Ir jūs galite išbandyti įvairius mechaninius dizainus, kad padarytumėte dar geresnę ranką. mano dizainas nėra labai stabilus.

Aš tiesiog naudoju dvipusę juostą, kad priklijuočiau servo prie Popsicle lazdelės ir pritvirtinčiau varžtais.

Pagrindinei rankai aš priklijavau potenciometrus prie popsicle lazdelių ir padariau ranką.

Remdamiesi nuotraukomis, turėsite geresnę idėją.

Aš viską sumontavau ant A4 dydžio drobės lentos, naudojamos kaip pagrindas.

3 žingsnis: užmegzkite ryšius:-

Ryšių užmezgimas
Ryšių užmezgimas
Ryšių užmezgimas
Ryšių užmezgimas
Ryšių užmezgimas
Ryšių užmezgimas

Šiame žingsnyje mes padarysime visus reikiamus ryšius, žiūrėkite aukščiau esančias nuotraukas.

  • Pirmiausia prijunkite visas servo sistemas lygiagrečiai prie maitinimo šaltinio (raudonas laidas prie +ve ir juodas arba rudas laidas prie Gnd)
  • Tada prijunkite signalo laidus, ty geltoną arba oranžinę vielą prie PWM kaiščio arduino.
  • Dabar lygiagrečiai prijunkite potenciometrus prie arduino +5v ir Gnd.
  • Prijunkite vidurinį terminalą prie analoginio „ardunio“kaiščio.

Čia skaitmeniniai kaiščiai 3, 5, 6, 9 ir 10 naudojami servo valdymui

Analoginiai kaiščiai nuo A0 iki A4 naudojami įvedimui iš potenciometrų.

Servo, prijungto prie 3 kaiščio, valdys potenciometras, prijungtas prie A0

Servo, prijungtą prie 5 kaiščio, bus valdomas A1 puodu ir pan.

Pastaba:- nors „Servos“nėra maitinamas „arduino“, būtinai prijunkite servo Gnd prie „arduino“, kitaip ranka neveiks.

4 žingsnis: kodavimas:-

Kodavimas
Kodavimas

Šio kodo logika yra gana paprasta, potenciometrų vertės yra saugomos masyve, po to įrašai perkeliami naudojant for ciklą, o servos atlieka veiksmus pagal vertes. Galite peržiūrėti šią pamoką, kurią naudojau kaip nuorodą „Arduino potenciometro servo valdymas ir atmintis“

Kodas:- (Atsisiunčiamas failas pridedamas žemiau.)

Pirmiausia paskelbsime visus reikiamus kintamuosius visame pasaulyje, kad galėtume juos naudoti visoje programoje. Tam nereikia specialaus paaiškinimo

#įtraukti

// Servo objektai Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potenciometro objektai int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Kintamasis, skirtas saugoti servo poziciją int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Kintamasis saugoti Ankstesnės pozicijos vertės int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Kintamasis dabartinėms pozicijų vertėms saugoti int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Dabartiniai_3_Pos; int Dabartiniai_4_Pos; int Servo_Position; // Saugo kampą int Servo_Number; // Servo int saugyklų parduotuvių skaičius [600]; // Masyvas duomenims saugoti (didinant masyvo dydį sunaudos daugiau atminties) int Index = 0; // Masyvo indeksas prasideda nuo 0 pozicijos char data = 0; // kintamasis norint saugoti duomenis iš nuoseklaus įvesties.

Dabar parašysime sąrankos funkciją, kurioje nustatysime kaiščius ir jų funkcijas. Tai yra pagrindinė funkcija, kuri pirmiausia atliekama

negaliojanti sąranka ()

{Serial.begin (9600); // Serijiniam ryšiui tarp arduino ir IDE. // Servo objektai pritvirtinti prie PWM kaiščių. Servo_0.attach (3); Servo_1.priedas (5); „Servo_2.attach“(6); Servo_3.attach (9); Servo_4.attach (10); // Paleidžiant servus, nustatyta 100 padėtis. Servo_0.write (100); „Servo_1.write“(100); „Servo_2.write“(100); „Servo_3.write“(100); Servo_4.rašyti (100); Serial.println („Paspauskite„ R “, kad įrašytumėte, o„ P “, kad paleistumėte“); }

Dabar turime perskaityti potenciometrų reikšmes naudojant analoginio įvesties kaiščius ir susieti juos su valdikliais. Tam mes apibrėžsime funkciją ir pavadinsime ją Map_Pot ();, galite jį pavadinti bet kokiu norimu, tai yra vartotojo apibrėžta funkcija

void Map_Pot ()

{ / * Servo sistemos sukasi 180 laipsnių kampu, tačiau jų naudojimas ribotiems tikslams nėra gera idėja, nes dėl to servos nuolat zuja, o tai erzina, todėl apribojame servo judėjimą tarp: 1-179 * / Pot_0 = analogRead (A0); // Skaitykite įvestį iš puodo ir saugokite jį kintamajame inde_0. Servo_0_Pos = žemėlapis (Pot_0, 0, 1023, 1, 179); // Žemėlapių servos pagal vertę nuo 0 iki 1023 Servo_0.write (Servo_0_Pos); // Perkelkite servo į tą padėtį. Pot_1 = analogRead (A1); Servo_1_Pos = žemėlapis (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = žemėlapis (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = žemėlapis (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = žemėlapis (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Dabar parašysime ciklo funkciją:

tuštumos kilpa ()

{Map_Pot (); // Funkcijos iškvietimas skaityti puodo reikšmes, o (Serial.available ()> 0) {data = Serial.read (); if (duomenys == 'R') Serial.println ("Įrašymo judesiai …"); if (duomenys == 'P') Serial.println ("Įrašytų judesių grojimas …"); } if (data == 'R') // Jei įvesta 'R', pradėkite įrašinėti. {// Saugokite reikšmes kintamajame 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“(); // Žemėlapio funkcija prisiminta palyginimui, jei (abs (Prev_0_Pos == Servo_0_Pos)) // absoliuti vertė gaunama lyginant {Servo_0.write (Servo_0_Pos); // Jei reikšmės atitinka servo, padėtis perkeliama, jei (Current_0_Pos! = Servo_0_Pos) // Jei vertės neatitinka {Storage [Index] = Servo_0_Pos + 0; // Vertė pridedama prie masyvo Index ++; // Indekso vertė padidinta 1} Current_0_Pos = Servo_0_Pos; } /* Panašiai verčių palyginimas atliekamas visoms servoms, +100 pridedamas kiekvieną kartą įvedant kaip diferencinė vertė. */ if (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; Indeksas ++; } Current_1_Pos = Servo_1_Pos; } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); if (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Indeksas ++; } Current_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indeksas ++; } Current_3_Pos = Servo_3_Pos; } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); if (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Indeksas ++; } Current_4_Pos = Servo_4_Pos; } / * Reikšmės spausdinamos serijiniame monitoriuje, „\ t“- reikšmėms rodyti lentelės formatu * / 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 ("Indeksas ="); Serial.println (indeksas); vėlavimas (50); } jei (duomenys == 'P') // JEI 'P', pradėkite žaisti įrašytus judesius. {for (int i = 0; i <Index; i ++) // Pereikite masyvą naudodami ciklą {Servo_Number = Storage /100; // Rasti servo skaičių Servo_Position = Saugykla % 100; // Rasia servo jungiklio padėtį (Servo_Number) {atvejis 0: Servo_0.write (Servo_Position); pertrauka; 1 atvejis: Servo_1.write (Servo_Position); pertrauka; 2 atvejis: Servo_2.write (Servo_Position); pertrauka; 3 atvejis: Servo_3.write (Servo_Position); pertrauka; 4 atvejis: Servo_4.write (Servo_Position); pertrauka; } uždelsimas (50); }}}

Kai kodas bus paruoštas, dabar įkelkite jį į arduino plokštę

Išmanioji ranka paruošta darbui. Funkcija dar nėra tokia sklandi kaip „Stoerpeak“.

Jei galite patobulinti kodą ar turite pasiūlymų, praneškite man komentarų skiltyje.

Tai pasakius, pereikime prie bandymų….

5 žingsnis: bandymas:-

Sėkmingai įkėlę kodą į lentą, atidarykite „Serial Monitor“, kurį rasite „Tools“parinktyje. Kai serijinis monitorius paleidžiamas, arduino bus atstatytas. Dabar galite valdyti robotinę ranką naudodami pagrindinę ranką. Tačiau niekas nėra įrašoma.

Norėdami pradėti įrašymą, įveskite „R“į monitorių, dabar galite atlikti judesius, kuriuos norite įrašyti.

Atlikę judesius turite įvesti „P“, kad galėtumėte paleisti įrašytus judesius. Servos ir toliau atliks judesius, kol plokštė nebus atstatyta.

Rekomenduojamas: