Innehållsförteckning:
- Steg 1: Saker du behöver:-
- Steg 2: Gör armen:-
- Steg 3: Anslutningar:-
- Steg 4: Kodning:-
- Steg 5: Testning:-
Video: Enkel och smart robotarm med Arduino !!!: 5 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
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:-
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:-
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:-
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:-
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:
En enkel robotarm kontrollerad över verklig handrörelse: 7 steg (med bilder)
En enkel robotarm kontrollerad över verklig handrörelse: Detta är en mycket enkel DOF -robotarm för nybörjare. Armen är Arduino kontrollerad. Den är ansluten till en sensor som sitter på operatörens hand. Därför kan operatören styra armens armbåge genom att böja sin egen armbåge. Vid
Enkel och enkel Spider-Man Web-Shooter: 12 steg
Simple & Easy Spider-Man Web-Shooter: Har du sett en Spider-Man-film? En Spider-Man-serietidning? Något vagt Spider-Man-relaterat? Spider-Man är till synes överallt. Varför inte göra en enkel webb-shooter? Efter lite övning skapade jag en design av husmaterial som kunde skapas
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: 5 steg (med bilder)
8 Reläkontroll med NodeMCU och IR -mottagare med WiFi och IR -fjärrkontroll och Android -app: Styrning av 8 reläväxlar med nodemcu och IR -mottagare via wifi och IR -fjärrkontroll och Android -app. Fjärrkontrollen fungerar oberoende av wifi -anslutning. HÄR ÄR EN UPPDATERAD VERSIONKLICK HÄR
Temperatur och fuktighet Display och datainsamling med Arduino och bearbetning: 13 steg (med bilder)
Temperatur- och luftfuktighetsvisning och datainsamling med Arduino och bearbetning: Intro: Detta är ett projekt som använder ett Arduino -kort, en sensor (DHT11), en Windows -dator och ett bearbetningsprogram (ett gratis nedladdningsbart) för att visa temperatur, luftfuktighetsdata i digital och stapeldiagramform, visa tid och datum och kör en räkningstid
En enkel, billig och enkel LED-blinkande krets med CMOS 74C14: 5 steg
En lätt att göra, billig och enkel LED-blinkande krets med CMOS 74C14: Ibland behöver du bara några blinkande lysdioder, för juldekoration, blinkande konstverk eller bara för att ha kul med blink blink blink. Jag ska visa dig hur du gör en billig och enkel krets med upp till 6 blinkande lysdioder. Obs: Detta är min första instuktiv och