Obsah:

Jednoduché a inteligentné robotické rameno pomocou Arduina !!!: 5 krokov (s obrázkami)
Jednoduché a inteligentné robotické rameno pomocou Arduina !!!: 5 krokov (s obrázkami)

Video: Jednoduché a inteligentné robotické rameno pomocou Arduina !!!: 5 krokov (s obrázkami)

Video: Jednoduché a inteligentné robotické rameno pomocou Arduina !!!: 5 krokov (s obrázkami)
Video: Privacy, Security, Society - Computer Science for Business Leaders 2016 2024, Jún
Anonim
Image
Image
Veci, ktoré budete potrebovať
Veci, ktoré budete potrebovať

V tomto návode vyrobím jednoduché robotické rameno. To sa bude ovládať pomocou hlavného ramena. Rameno si zapamätá pohyby a bude hrať postupne. Koncept nie je nový. Dostal som nápad od „mini robotic arm -by Stoerpeak“, ktorý som chcel robiť už dlho, ale vtedy som bol úplne hlúpy a nemal som znalosti o programovaní. Teraz konečne jeden staviam, udržujem ho jednoduchý, lacný a zdieľam ho s vami všetkými.

Začnime teda ….

Krok 1: Veci, ktoré budete potrebovať:-

Veci, ktoré budete potrebovať
Veci, ktoré budete potrebovať
Veci, ktoré budete potrebovať
Veci, ktoré budete potrebovať

Tu je zoznam vecí, ktoré budete potrebovať:-

1. Servomotory x 5 Odkaz pre USA:- https://amzn.to/2OxbSH7Link pre Európu:-

2. Potenciometre x 5 (použil som 100 tis.) Odkaz pre USA:- https://amzn.to/2ROjhDMLink pre Európu:-

3. Arduino UNO. (Môžete tiež použiť Arduino Nano) Odkaz pre USA:- https://amzn.to/2DBbENWLink pre Európu:-

4. Breadboard. (Navrhujem túto súpravu) Odkaz pre USA:- https://amzn.to/2Dy86w4Link pre Európu:-

5. Batéria. (voliteľné, používam adaptér 5 V)

6. Kartón/drevo/slnečná doska/akryl, čo je k dispozícii alebo sa dá ľahko nájsť.

A tiež budete potrebovať nainštalované Arduino IDE.

Krok 2: Vytvorenie paže:-

Výroba paže
Výroba paže
Výroba paže
Výroba paže

Tu som na výrobu ramena použil tyčinky Popsicle. Môžete použiť akýkoľvek materiál, ktorý máte k dispozícii. A môžete vyskúšať rôzne mechanické prevedenia, aby ste vytvorili ešte lepšie rameno. môj návrh nie je veľmi stabilný.

Na prilepenie servo k tyči Popsicle som použil obojstrannú pásku a upevnil ich pomocou skrutiek.

Pre rameno Master som nalepil potenciometre na nanuky a vyrobil som rameno.

Odkaz na obrázky vám poskytne lepšiu predstavu.

Všetko som namontoval na plátennú dosku veľkosti A4, ktorá sa používa ako základ.

Krok 3: Vytvorenie spojení:-

Vytváranie spojení
Vytváranie spojení
Vytváranie spojení
Vytváranie spojení
Vytváranie spojení
Vytváranie spojení

V tomto kroku vykonáme všetky potrebné pripojenia, pozrite si obrázky vyššie.

  • Najprv zapojte všetky serva paralelne k napájaciemu zdroju (červený vodič na +ve a čierny alebo hnedý vodič na GND)
  • Potom pripojte signálne vodiče, tj. Žltý alebo oranžový vodič, k kolíku PWM arduina.
  • Teraz zapojte potenciometre paralelne k +5v a Gnd z arduina.
  • Pripojte stredný terminál k analógovému kolíku ardunio.

Tu sa na ovládanie serva používajú digitálne kolíky 3, 5, 6, 9 a 10

Na vstup z potenciometrov slúžia analógové piny A0 až A4.

Servo pripojené k pinu 3 bude ovládané potenciometrom pripojeným k A0

Servo pripojené k pinu 5 bude ovládané pot na A1, a tak ďalej ….

Poznámka:- Aj keď serva nie sú napájané arduinom, uistite sa, že ste pripojili GND serva k arduinu, inak rameno nebude fungovať.

Krok 4: Kódovanie:-

Kódovanie
Kódovanie

Logika tohto kódu je pomerne jednoduchá. Hodnoty potenciometrov sú uložené v poli, záznamy sa potom prenášajú pomocou slučky for a serva robia kroky podľa hodnôt. Môžete si pozrieť tento návod, ktorý som použil ako referenciu "Ovládanie a pamäť potenciometra Arduino potenciometra"

Kód:- (Nasledujúci súbor je možné stiahnuť.)

Najprv globálne deklarujeme všetky potrebné premenné, aby sme ich mohli použiť v celom programe. Na to nie je potrebné žiadne špeciálne vysvetlenie

#zahrnúť

// Objekty serva Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Objekty potenciometra int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // premenná na uloženie polohy servo v servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Premenná na ukladanie hodnôt predchádzajúcej polohy int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Predchádzajúci_3_Pos; int Prev_4_Pos; // Premenná na ukladanie hodnôt aktuálnej polohy int Current_0_Pos; int Current_1_Pos; int Aktuálne_2_Pos; int Aktuálne_3_Pos; int Aktuálne_4_Pos; int Servo_Position; // Uloží uhol int Servo_Number; // Uklada nie servo int Storage [600]; // Pole na ukladanie údajov (Zväčšenie veľkosti poľa zaberie viac pamäte) int Index = 0; // Index poľa začína od 0. pozície char data = 0; // premenná na ukladanie údajov zo sériového vstupu.

Teraz napíšeme funkciu nastavenia, kde nastavíme piny a ich funkcie. Toto je hlavná funkcia, ktorá sa vykonáva ako prvá

neplatné nastavenie ()

{Serial.begin (9600); // Sériová komunikácia medzi arduino a IDE. // Na piny PWM sú pripevnené servo objekty. Servo_0.attach (3); Servo_1.attach (5); Servo_2.attach (6); Servo_3.attach (9); Servo_4.attach (10); // Serva sú pri inicializácii nastavené na pozíciu 100. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ( Stlačením 'R' na nahrávanie a 'P' na prehrávanie); }

Teraz musíme prečítať hodnoty potenciometrov pomocou pinov analógového vstupu a namapovať ich na ovládanie serv. Na to definujeme funkciu a pomenujeme ju Map_Pot (); Môžete ho pomenovať, ako chcete, je to funkcia definovaná používateľom

zrušiť Map_Pot ()

{ / * Servo sa otáča o 180 stupňov, ale použiť ho na limity nie je dobrý nápad, pretože servo bzučí nepretržite, čo je nepríjemné, takže obmedzujeme pohyb serva medzi: 1-179 * / Pot_0 = analogRead (A0); // Prečítajte vstup z hrnca a uložte ho do premennej Pot_0. Servo_0_Pos = mapa (Pot_0, 0, 1023, 1, 179); // Mapovanie serva podľa hodnoty medzi 0 až 1023 Servo_0.write (Servo_0_Pos); // Posuňte servo do tejto polohy. Pot_1 = analogRead (A1); Servo_1_Pos = mapa (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = mapa (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = mapa (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = mapa (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Teraz napíšeme funkciu slučky:

prázdna slučka ()

{Map_Pot (); // Volanie funkcie na čítanie hodnôt potu while (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Nahrávanie sa presúva …"); if (data == 'P') Serial.println ("Prehrávanie zaznamenaných ťahov …"); } if (data == 'R') // Ak je zadané 'R', spustite nahrávanie. {// Uložte hodnoty do premennej 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 (); // Funkcia mapy vyvolaná na porovnanie if (abs (Prev_0_Pos == Servo_0_Pos)) // absolútna hodnota sa získa porovnaním {Servo_0.write (Servo_0_Pos); // Ak sa hodnoty zhodujú, servo sa premiestni, ak (Current_0_Pos! = Servo_0_Pos) // Ak sa hodnoty nezhodujú {Storage [Index] = Servo_0_Pos + 0; // Hodnota sa pridá do poľa Index ++; // Hodnota indexu sa zvýši o 1} Current_0_Pos = Servo_0_Pos; } /* Podobne sa porovnanie hodnôt vykonáva pre všetky serva, +100 sa pripočíta ku vstupu ako diferenciálna hodnota. */ 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; Index ++; } 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; Index ++; } 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; Index ++; } 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; Index ++; } Current_4_Pos = Servo_4_Pos; } / * Hodnoty sú vytlačené na sériovom monitore, '\ t' slúži na zobrazenie hodnôt v tabuľkovom formáte * / 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 ("Index ="); Serial.println (Index); oneskorenie (50); } if (data == 'P') // AK je zadané 'P', spustite prehrávanie zaznamenaných ťahov. {for (int i = 0; i <Index; i ++) // Prechádzajte poľom pomocou cyklu for {Servo_Number = Storage /100; // Zistí počet servo Servo_Position = Úložisko % 100; // Zistí polohu prepínača serva (Servo_Number) {prípad 0: Servo_0.write (Servo_Position); prestávka; prípad 1: Servo_1.write (Servo_Position); prestávka; prípad 2: Servo_2.write (Servo_Position); prestávka; prípad 3: Servo_3.write (Servo_Position); prestávka; prípad 4: Servo_4.write (Servo_Position); prestávka; } oneskorenie (50); }}}

Akonáhle je kód pripravený, teraz ho nahrajte na dosku arduino

Inteligentné rameno je pripravené na prácu. Táto funkcia ešte nie je taká hladká ako funkcia Stoerpeak.

Ak môžete kód vylepšiť alebo máte pre mňa nejaké návrhy, dajte mi vedieť v sekcii komentárov.

Keď to bolo povedané, prejdime k testovaniu …

Krok 5: Testovanie:-

Po úspešnom nahraní kódu na dosku otvorte „Sériový monitor“, ktorý nájdete v možnosti Nástroje. Keď sa spustí sériový monitor, arduino sa resetuje. Teraz môžete robotické rameno ovládať pomocou hlavného ramena. Ale nič sa nezaznamenáva.

Ak chcete začať nahrávať, zadajte na monitore „R“a teraz môžete vykonávať pohyby, ktoré chcete zaznamenať.

Po dokončení ťahov musíte zadať 'P', aby ste mohli nahraté pohyby hrať. Servo bude pokračovať v pohybe, pokiaľ nie je doska resetovaná.

Odporúča: