Obsah:

Jednoduché a chytré robotické rameno pomocí Arduina !!!: 5 kroků (s obrázky)
Jednoduché a chytré robotické rameno pomocí Arduina !!!: 5 kroků (s obrázky)
Anonim
Image
Image
Věci, které budete potřebovat
Věci, které budete potřebovat

V této instrukci budu dělat jednoduchou robotickou ruku. To bude ovládáno pomocí hlavního ramene. Rameno si bude pamatovat pohyby a hrát postupně. Koncept není nový. Dostal jsem myšlenku od „mini robotic arm -by Stoerpeak“, kterou jsem chtěl dělat už dlouho, ale tehdy jsem byl úplně noob a neměl žádné znalosti o programování. Nyní konečně jeden stavím, udržuji jej jednoduchý, levný a sdílím ho s vámi všemi.

Pojďme tedy začít….

Krok 1: Věci, které budete potřebovat:-

Věci, které budete potřebovat
Věci, které budete potřebovat
Věci, které budete potřebovat
Věci, které budete potřebovat

Zde je seznam věcí, které budete potřebovat:-

1. Servomotory x 5 Odkaz pro USA:- https://amzn.to/2OxbSH7Link pro Evropu:-

2. Potenciometry x 5 (použil jsem 100 tis.) Odkaz pro USA:- https://amzn.to/2ROjhDMLink pro Evropu:-

3. Arduino UNO. (Můžete také použít Arduino Nano) Odkaz pro USA:- https://amzn.to/2DBbENWLink pro Evropu:-

4. Breadboard. (Navrhuji tuto sadu) Odkaz pro USA:- https://amzn.to/2Dy86w4Link pro Evropu:-

5. Baterie. (volitelně, používám adaptér 5 V)

6. Karton/dřevo/sluneční deska/akryl, co je k dispozici nebo lze snadno najít.

A také budete potřebovat nainstalované Arduino IDE.

Krok 2: Vytvoření paže:-

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

Zde jsem použil nanukové tyčinky k výrobě paže. Můžete použít jakýkoli materiál, který máte k dispozici. A můžete vyzkoušet různé mechanické konstrukce, abyste vytvořili ještě lepší rameno. můj design není příliš stabilní.

Právě jsem použil oboustrannou pásku k přilepení serva k tyči Popsicle a upevnění pomocí šroubů.

Pro rameno Master jsem nalepil potenciometry na nanuky a vyrobil rameno.

Odkaz na obrázky vám poskytne lepší představu.

Všechno jsem namontoval na plátěnou desku velikosti A4 použitou jako základ.

Krok 3: Vytváření připojení:-

Vytváření připojení
Vytváření připojení
Vytváření připojení
Vytváření připojení
Vytváření připojení
Vytváření připojení

V tomto kroku provedeme všechna potřebná připojení, viz obrázky výše.

  • Nejprve připojte všechna serva paralelně k napájecímu zdroji (červený vodič na +ve a černý nebo hnědý vodič na GND)
  • Dále připojte signální vodiče, tj. Žlutý nebo oranžový vodič k PWM pinu arduina.
  • Nyní připojte potenciometry paralelně k +5v a Gnd z arduina.
  • Připojte střední terminál k analogovému kolíku Ardunio.

Zde se k ovládání serv používají digitální piny 3, 5, 6, 9 a 10

Pro vstup z potenciometrů se používají analogové piny A0 až A4.

Servo připojené na pin 3 bude ovládáno potenciometrem připojeným k A0

Servo připojené na pin 5 bude ovládáno potem na A1 atd.…

Poznámka:- Přestože serva nejsou napájena arduinem, nezapomeňte připojit GND serva k arduinu, jinak nebude rameno fungovat.

Krok 4: Kódování:-

Kódování
Kódování

Logika tohoto kódu je poměrně jednoduchá, hodnoty potenciometrů jsou uloženy v poli, záznamy jsou poté procházeny pomocí smyčky for a serva provádějí kroky podle hodnot. Můžete se podívat na tento tutoriál, který jsem použil jako referenci „Ovládání a paměť potenciometru Arduino potenciometru“

Kód:- (Soubor ke stažení níže připojený.)

Nejprve globálně deklarujeme všechny potřebné proměnné, abychom je mohli používat v celém programu. K tomu není třeba žádné zvláštní vysvětlení

#zahrnout

// Objekty serva Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Objekty potenciometru int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Proměnná pro uložení pozice servo Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Proměnná pro uložení hodnot předchozích pozic int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Předchozí_3_Pos; int Předchozí_4_Pos; // Proměnná pro uložení hodnot aktuální polohy int Current_0_Pos; int Current_1_Pos; int Aktuální_2_Pos; int Aktuální_3_Pos; int Aktuální_4_Pos; int Servo_Position; // Uloží úhel int Servo_Number; // Stores no of servo int Storage [600]; // Pole pro ukládání dat (Zvětšení pole zabere více paměti) int Index = 0; // Index pole začíná od 0. pozice char data = 0; // proměnná pro ukládání dat ze sériového vstupu.

Nyní napíšeme funkci nastavení, kde nastavíme piny a jejich funkce. Toto je hlavní funkce, která se spouští jako první

neplatné nastavení ()

{Serial.begin (9600); // Pro sériovou komunikaci mezi arduino a IDE. // Servo objekty jsou připojeny k pinům PWM. Servo_0.attach (3); Servo_1.attach (5); Servo_2.attach (6); Servo_3.attach (9); Servo_4.attach (10); // Serva jsou při inicializaci nastavena na pozici 100. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ( Stiskněte 'R' pro záznam a 'P' pro přehrávání); }

Nyní musíme přečíst hodnoty potenciometrů pomocí pinů analogového vstupu a namapovat je pro ovládání serv. Za tímto účelem definujeme funkci a pojmenujeme ji Map_Pot ();, můžete jej pojmenovat jakkoli chcete, je to funkce definovaná uživatelem

zrušit Map_Pot ()

{ / * Serva se otáčejí o 180 stupňů, ale použít je na limity není dobrý nápad, protože serva bzučí nepřetržitě, což je nepříjemné, takže omezujeme pohyb serva mezi: 1-179 * / Pot_0 = analogRead (A0); // Přečíst vstup z potu a uložit jej do Variable Pot_0. Servo_0_Pos = mapa (Pot_0, 0, 1023, 1, 179); // Mapování serv podle hodnoty mezi 0 až 1023 Servo_0.write (Servo_0_Pos); // Posuňte servo do této 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); }

Nyní napíšeme funkci smyčky:

prázdná smyčka ()

{Map_Pot (); // Volání funkce pro čtení hodnot potu while (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Nahrávání se pohybuje …"); if (data == 'P') Serial.println ("Přehrávání zaznamenaných tahů …"); } if (data == 'R') // Pokud je zadáno 'R', spusťte nahrávání. {// Uložte hodnoty do proměnné 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 (); // Mapová funkce vyvolaná pro porovnání if (abs (Prev_0_Pos == Servo_0_Pos)) // absolutní hodnota se získá porovnáním {Servo_0.write (Servo_0_Pos); // Pokud se hodnoty shodují, servo se přemístí, pokud (Current_0_Pos! = Servo_0_Pos) // Pokud se hodnoty neshodují {Storage [Index] = Servo_0_Pos + 0; // Hodnota je přidána do pole Index ++; // Hodnota indexu zvýšena o 1} Current_0_Pos = Servo_0_Pos; } /* Podobně se porovnávání hodnot provádí pro všechna serva, +100 se přidá ke každému záznamu jako diferenciální 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 jsou vytištěny na sériovém monitoru, '\ t' slouží k zobrazení hodnot v tabulkovém formátu * / 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); zpoždění (50); } if (data == 'P') // IF 'P' is entered, Start playing zaznamenané pohyby. {for (int i = 0; i <Index; i ++) // Procházení pole pomocí for for {Servo_Number = Storage /100; // Zjistí počet serv Servo_Position = Úložiště % 100; // Vyhledá polohu přepínače serva (Servo_Number) {případ 0: Servo_0.write (Servo_Position); přestávka; případ 1: Servo_1.write (Servo_Position); přestávka; případ 2: Servo_2.write (Servo_Position); přestávka; případ 3: Servo_3.write (Servo_Position); přestávka; případ 4: Servo_4.write (Servo_Position); přestávka; } zpoždění (50); }}}

Jakmile je kód připraven, nahrajte jej na desku arduino

Inteligentní rameno je připraveno k práci. Funkce ještě není tak hladká jako ta, kterou vytvořil Stoerpeak.

Pokud můžete kód vylepšit nebo pro mě máte nějaké návrhy, dejte mi prosím vědět v sekci komentáře.

S tím, co bylo řečeno, přejděme k testování….

Krok 5: Testování:-

Po úspěšném nahrání kódu na desku otevřete „Sériový monitor“, který najdete v možnosti Nástroje. Když se spustí sériový monitor, arduino se resetuje. Nyní můžete robotické rameno ovládat pomocí hlavního ramene. Nic se ale nezaznamenává.

Chcete -li zahájit nahrávání, zadejte na monitoru „R“, nyní můžete provádět pohyby, které chcete zaznamenat.

Po dokončení tahů musíte zadat „P“, abyste mohli zaznamenané tahy přehrát. Serva budou i nadále provádět tahy, dokud nebude deska resetována.

Doporučuje: