Innehållsförteckning:

Enkel och smart robotarm med Arduino !!!: 5 steg (med bilder)
Enkel och smart robotarm med Arduino !!!: 5 steg (med bilder)

Video: Enkel och smart robotarm med Arduino !!!: 5 steg (med bilder)

Video: Enkel och smart robotarm med Arduino !!!: 5 steg (med bilder)
Video: Вебинар по новой мобильной платформе ENG от KUKA Nordic 2024, Juni
Anonim
Image
Image
Saker du behöver
Saker du behöver

I denna instruerbara kommer jag att göra en enkel robotarm. Det kommer att styras med hjälp av en masterarm. Armen kommer ihåg drag och spelar i följd. Konceptet är inte nytt Jag fick idén från "mini robotarm -av Stoerpeak" Jag ville göra det här länge, men då var jag helt noob och hade ingen kunskap om programmering. Nu äntligen bygger jag en, håller det enkelt, billigt och delar det med er alla.

Så låt oss komma igång ….

Steg 1: Saker du behöver:-

Saker du behöver
Saker du behöver
Saker du behöver
Saker du behöver

Här är en lista över saker du behöver:-

1. Servomotorer x 5 Länk för USA:- https://amzn.to/2OxbSH7Link för Europa:-

2. Potentiometrar x 5 (jag har använt 100k.) Länk för USA:- https://amzn.to/2ROjhDMLink för Europa:-

3. Arduino UNO. (Du kan också använda Arduino Nano) Länk för USA:- https://amzn.to/2DBbENWLink för Europa:-

4. Brödbräda. (Jag föreslår detta kit) Länk för USA:- https://amzn.to/2Dy86w4Link för Europa:-

5. Batteri. (valfritt, jag använder en 5v adapter)

6. Kartong/trä/solbräda/akryl vad som än är tillgängligt eller lätt att hitta.

Och du behöver också Arduino IDE installerat.

Steg 2: Gör armen:-

Gör armen
Gör armen
Gör armen
Gör armen

Här har jag använt Popsicle -pinnar för att göra armen. Du kan använda vilken materiel som helst som är tillgänglig för dig. Och du kan prova olika mekaniska konstruktioner för att göra ännu bättre arm. min design är inte särskilt stabil.

Jag använde precis dubbelsidig tejp för att fästa servon på Popsicle -pinnen och fästa dem med skruvar.

Till Master -armen limmade jag potentiometrar på popsicle -pinnar och gjorde armen.

Att hänvisa till bilderna ger dig en bättre idé.

Jag har monterat allt på en dukbräda i A4 -storlek som används som bas.

Steg 3: Anslutningar:-

Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar
Anslutningar

I detta steg kommer vi att göra alla nödvändiga anslutningar, se bilderna ovan.

  • Anslut först alla servon parallellt med strömförsörjningen (Den röda ledningen till +ve och Black or Brown Wire to Gnd)
  • Anslut därefter signalkablarna, dvs gul eller orange ledning till PWM -stift av arduino.
  • Anslut nu potentiometrarna till +5v och Gnd för arduino parallellt.
  • Anslut mittterminalen till analog stift av ardunio.

Här används Digital Pins 3, 5, 6, 9 & 10 för att styra servon

Analoga stift A0 till A4 används för inmatning från potentiometrar.

Servon som är ansluten till stift 3 styrs av en potentiometer ansluten till A0

Servo ansluten till pin 5 kommer att styras av potten på A1, och så vidare ….

Obs:- Även om servon inte drivs av arduino, se till att ansluta servot Gnd till arduino annars fungerar armen inte.

Steg 4: Kodning:-

Kodning
Kodning

Logiken i den här koden är ganska enkel. Värdena på potentiometrar lagras i en matris, posterna korsas sedan med hjälp av en for loop och servon utför stegen enligt värdena. Du kan kolla in denna handledning som jag använde som referens "Arduino Potentiometer Servo Control & Memory"

Kod:- (Nedladdningsbar fil bifogas nedan.)

Först kommer vi att deklarera alla nödvändiga variabler globalt så att vi kan använda dem under hela programmet. Ingen särskild förklaring behövs för detta

#omfatta

// Servoobjekt Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentiometer Objekt int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Variabel för att lagra Servoposition int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Variabel att lagra Tidigare positionsvärden int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Föregående_3_Pos; int Föregående_4_Pos; // Variabel för att lagra nuvarande positionsvärden int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Lagrar vinkeln int Servo_Number; // Lagrar inget servo int Storage [600]; // Array för att lagra data (Ökande arraystorlek kommer att konsumera mer minne) int Index = 0; // Arrayindex börjar från 0: e position char data = 0; // variabel för att lagra data från seriell ingång.

Nu kommer vi att skriva en installationsfunktion, där vi ställer in stift och deras funktioner. Detta är huvudfunktionen som körs först

void setup ()

{Serial.begin (9600); // För seriell kommunikation mellan arduino och IDE. // Servoobjekt är fästa på PWM -stift. Servo_0.attach (3); Servo_1.attach (5); Servo_2.fäst (6); Servo_3.attach (9); Servo_4.attach (10); // Servos ställs in på 100 positioner vid initialisering. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Tryck" R "för att spela in och" P "för att spela"); }

Nu måste vi läsa värdena för potentiometrar med analoga ingångsstiften och mappa dem för att styra servon. För detta definierar vi en funktion och kallar den Map_Pot ();, du kan namnge det vad du vill det är en användardefinierad funktion

ogiltig Map_Pot ()

{ / * Servon roterar i 180 grader men att använda det till gränser är ingen bra idé eftersom det får servon att surra kontinuerligt vilket är irriterande så vi begränsar servon att flytta mellan: 1-179 * / Pot_0 = analogRead (A0); // Läs inmatning från kruka och lagra den i variabelkrukan_0. Servo_0_Pos = karta (Pot_0, 0, 1023, 1, 179); // Karta servon enligt värdet mellan 0 till 1023 Servo_0.write (Servo_0_Pos); // Flytta servon till den positionen. Pot_1 = analogRead (A1); Servo_1_Pos = karta (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = karta (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = karta (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = karta (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Nu kommer vi att skriva loop -funktion:

void loop ()

{Map_Pot (); // Funktionsanrop för att läsa pot -värden medan (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Inspelning rör sig …"); if (data == 'P') Serial.println ("Spelar inspelade rörelser …"); } if (data == 'R') // Om 'R' anges, starta inspelningen. {// Lagra värdena i en variabel Prev_0_Pos = Servo_0_Pos; Föregående_1_Pos = Servo_1_Pos; Föregående_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Föregående_4_Pos = Servo_4_Pos; Map_Pot (); // Kartfunktionen återkallas för jämförelse om (abs (Prev_0_Pos == Servo_0_Pos)) // absolut värde erhålls genom att jämföra {Servo_0.write (Servo_0_Pos); // Om värden matchar servo flyttas om (Current_0_Pos! = Servo_0_Pos) // Om värden inte matchar {Storage [Index] = Servo_0_Pos + 0; // Värde läggs till i arrayindex ++; // Indexvärde ökat med 1} Current_0_Pos = Servo_0_Pos; } /* På samma sätt görs värdejämförelsen för alla servon, +100 läggs till varje för inmatning som ett differensvärde. */ 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; } / * Värden skrivs ut på seriell bildskärm, '\ t' är för att visa värden i tabellformat * / 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); fördröjning (50); } om (data == 'P') // OM 'P' anges, Börja spela inspelade drag. {för (int i = 0; i <Index; i ++) // Korsa matrisen med loop {Servo_Number = Storage /100; // Hittar antalet servo Servo_Position = Lagring % 100; // Hittar positionen för servobrytaren (Servo_Number) {case 0: Servo_0.write (Servo_Position); ha sönder; fall 1: Servo_1.write (Servo_Position); ha sönder; fall 2: Servo_2.write (Servo_Position); ha sönder; fall 3: Servo_3.write (Servo_Position); ha sönder; fall 4: Servo_4.write (Servo_Position); ha sönder; } fördröjning (50); }}}

När koden är klar laddar du upp den nu till arduino -kortet

Smartarmen är redo att fungera. Funktionen är ännu inte lika smidig som den som Stoerpeak gjorde.

Om du kan göra koden bättre eller har några förslag till mig, vänligen meddela mig i kommentarsfältet.

Med det sagt, låt oss gå vidare till testning …

Steg 5: Testning:-

Efter att du har laddat upp koden till kortet, öppnar du 'Seriell bildskärm', du hittar den i alternativet Verktyg. När seriell bildskärm startar kommer arduino att återställas. Nu kan du styra robotarmen med hjälp av huvudarmen. Men ingenting spelas in.

För att börja spela in, skriv 'R' på monitorn nu kan du utföra de drag du vill spela in.

Efter att rörelserna är klara måste du ange 'P' för att spela de inspelade rörelserna. Servon fortsätter att utföra rörelserna så länge kortet inte återställs.

Rekommenderad: