Indholdsfortegnelse:

Enkel og smart robotarm ved hjælp af Arduino !!!: 5 trin (med billeder)
Enkel og smart robotarm ved hjælp af Arduino !!!: 5 trin (med billeder)

Video: Enkel og smart robotarm ved hjælp af Arduino !!!: 5 trin (med billeder)

Video: Enkel og smart robotarm ved hjælp af Arduino !!!: 5 trin (med billeder)
Video: Lesson 77: Using VL53L0X 200cm Laser Distance Sensor | Arduino Step By Step Course 2024, Juni
Anonim
Image
Image
Ting du skal bruge
Ting du skal bruge

I denne instruktive vil jeg lave en simpel robotarm. Det kontrolleres ved hjælp af en masterarm. Armen vil huske træk og spille i rækkefølge. Konceptet er ikke nyt. Jeg fik ideen fra "mini robotarm -ved Stoerpeak". Jeg ville lave dette i lang tid, men dengang var jeg totalt noob og havde ingen viden om programmering. Nu er jeg endelig ved at bygge en, holde den enkel, billig og dele den med jer alle.

Så lad os komme i gang….

Trin 1: Ting du skal bruge:-

Ting du skal bruge
Ting du skal bruge
Ting du skal bruge
Ting du skal bruge

Her er en liste over ting, du skal bruge:-

1. Servomotorer x 5 Link til USA:- https://amzn.to/2OxbSH7Link for Europe:-

2. Potentiometre x 5 (jeg har brugt 100k.) Link til USA:- https://amzn.to/2ROjhDMLink for Europe:-

3. Arduino UNO. (Du kan også bruge Arduino Nano) Link til USA:- https://amzn.to/2DBbENWLink for Europe:-

4. Brødbræt. (Jeg foreslår dette kit) Link til USA:- https://amzn.to/2Dy86w4Link for Europe:-

5. Batteri. (valgfrit, jeg bruger en 5v adapter)

6. Pap/træ/solbræt/akryl hvad der nogensinde er tilgængeligt eller let at finde.

Og du skal også installere Arduino IDE.

Trin 2: Fremstilling af armen:-

At lave armen
At lave armen
At lave armen
At lave armen

Her har jeg brugt Popsicle sticks til at lave armen. Du kan bruge ethvert materiale, der er tilgængeligt for dig. Og du kan prøve forskellige mekaniske designs for at lave en endnu bedre arm. mit design er ikke særlig stabilt.

Jeg har lige brugt dobbeltsidet tape til at klæbe servoerne til Popsicle -pinden og fastgøre dem med skruer.

Til Master -armen limede jeg potentiometre til popsicle sticks og lavede arm.

Henvisning til billederne giver dig en bedre idé.

Jeg har monteret alt på et lærredstavle i A4 -størrelse, der bruges som bund.

Trin 3: Opret forbindelser:-

Oprettelse af forbindelser
Oprettelse af forbindelser
Oprettelse af forbindelser
Oprettelse af forbindelser
Oprettelse af forbindelser
Oprettelse af forbindelser

I dette trin foretager vi alle de nødvendige forbindelser, se billederne ovenfor.

  • Tilslut først alle servoer parallelt med strømforsyningen (Den røde ledning til +ve og sort eller brun ledning til Gnd)
  • Tilslut derefter signaltrådene, dvs. gul eller orange ledning til PWM -pin af arduino.
  • Tilslut nu potentiometrene til +5v og Gnd for arduino parallelt.
  • Tilslut den midterste terminal til den analoge pin af ardunio.

Her bruges Digital Pins 3, 5, 6, 9 & 10 til styring af servoerne

Analoge ben A0 til A4 bruges til input fra potentiometre.

Servoen tilsluttet pin 3 styres af et potentiometer tilsluttet A0

Servo forbundet til pin 5 styres af pot på A1, og så videre ….

Bemærk:- Selvom servoer ikke drives af arduino, skal du sørge for at slutte servoenes Gnd til arduino, ellers fungerer armen ikke.

Trin 4: Kodning:-

Kodning
Kodning

Logikken i denne kode er ret simpel, værdierne for potentiometre gemmes i en matrix, hvor posterne derefter krydses ved hjælp af en for loop, og servoerne udfører trinene i henhold til værdierne. Du kan tjekke denne vejledning, jeg brugte til reference "Arduino Potentiometer Servo Control & Memory"

Kode:- (Filen kan downloades vedhæftet nedenfor).

Først vil vi erklære alle de nødvendige variabler globalt, så vi kan bruge dem i hele programmet. Der kræves ingen særlig forklaring på dette

#omfatte

// Servoobjekter Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potentiometer Objekter int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Variabel til at gemme Servo Position int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Variabel til lagring Tidligere positionsværdier int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Variabel til lagring Aktuelle positionsværdier int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Gemmer vinklen int Servo_Number; // Lagrer ikke noget servo int Storage [600]; // Array til lagring af data (Forøgelse af arraystørrelse vil forbruge mere hukommelse) int Index = 0; // Arrayindeks starter fra 0. position char data = 0; // variabel til lagring af data fra seriel input.

Nu vil vi skrive en opsætningsfunktion, hvor vi sætter stifter og deres funktioner. Dette er hovedfunktionen, der først udføres

ugyldig opsætning ()

{Serial.begin (9600); // Til seriel kommunikation mellem arduino og IDE. // Servo -objekter er fastgjort til PWM -ben. Servo_0. vedhæfte (3); Servo_1.attach (5); Servo_2.fastgør (6); Servo_3.attach (9); Servo_4. vedhæfte (10); // Servoer indstilles til 100 positioner ved initialisering. Servo_0.write (100); Servo_1.write (100); Servo_2.skrive (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Tryk på 'R' for at optage og 'P' for at afspille"); }

Nu er vi nødt til at læse værdierne for potentiometre ved hjælp af analoge indgangsstifter og kortlægge dem til at styre servoer. Til dette vil vi definere en funktion og navngive den Map_Pot ();, du kan navngive det, hvad du vil, det er en brugerdefineret funktion

ugyldig Map_Pot ()

{ / * Servoerne roterer 180 grader, men at bruge det til grænser er ikke en god idé, da det får servoerne til at bruse kontinuerligt, hvilket er irriterende, så vi begrænser servoen til at bevæge sig mellem: 1-179 * / Pot_0 = analogRead (A0); // Læs input fra potten og gem den i Variable Pot_0. Servo_0_Pos = kort (Pot_0, 0, 1023, 1, 179); // Kort servoer i henhold til værdien mellem 0 til 1023 Servo_0.write (Servo_0_Pos); // Flyt servoen til den position. Pot_1 = analogRead (A1); Servo_1_Pos = kort (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = kort (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = kort (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = kort (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Nu skriver vi loop -funktion:

hulrum ()

{Map_Pot (); // Funktionsopkald for at læse pot -værdier mens (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Optagelse bevæger sig …"); if (data == 'P') Serial.println ("Afspilning af optagede bevægelser …"); } hvis (data == 'R') // Hvis 'R' er indtastet, start optagelsen. {// Gem værdierne i en variabel 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 (); // Kortfunktionen tilbagekaldes til sammenligning, hvis (abs (Prev_0_Pos == Servo_0_Pos)) // absolut værdi opnås ved at sammenligne {Servo_0.write (Servo_0_Pos); // Hvis værdier, der matcher servo, genpositioneres, hvis (Current_0_Pos! = Servo_0_Pos) // Hvis værdier ikke matcher {Storage [Index] = Servo_0_Pos + 0; // Værdi tilføjes til matrixindeks ++; // Indeksværdi øget med 1} Current_0_Pos = Servo_0_Pos; } /* På samme måde foretages værdisammenligningen for alle servoer, +100 tilføjes hver for indtastning som en differentialværdi. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); hvis (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100; Indeks ++; } Current_1_Pos = Servo_1_Pos; } hvis (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos); hvis (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200; Indeks ++; } Current_2_Pos = Servo_2_Pos; } hvis (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); hvis (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300; Indeks ++; } Current_3_Pos = Servo_3_Pos; } hvis (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos); hvis (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400; Indeks ++; } Current_4_Pos = Servo_4_Pos; } / * Værdier udskrives på seriel skærm, '\ t' er til visning af værdier i tabelformat * / 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 ("Indeks ="); Serial.println (indeks); forsinkelse (50); } hvis (data == 'P') // HVIS 'P' er indtastet, Start afspilning af optagede træk. {for (int i = 0; i <Index; i ++) // Gennemgå arrayet ved hjælp af loop {Servo_Number = Storage /100; // Finder antal servo Servo_Position = Lagring % 100; // Finder position for servo switch (Servo_Number) {case 0: Servo_0.write (Servo_Position); pause; sag 1: Servo_1.write (Servo_Position); pause; sag 2: Servo_2.write (Servo_Position); pause; sag 3: Servo_3.write (Servo_Position); pause; sag 4: Servo_4.write (Servo_Position); pause; } forsinkelse (50); }}}

Når koden er klar, skal du nu uploade den til arduino -kortet

Smart -armen er klar til at fungere. Funktionen er endnu ikke så glat som den, der er lavet af Stoerpeak.

Hvis du kan gøre koden bedre eller har forslag til mig, så lad mig det vide i kommentarfeltet.

Når det er sagt, lad os gå videre til test ….

Trin 5: Testning:-

Efter at have uploadet koden til bestyrelsen med succes, skal du åbne 'Serial Monitor', du kan finde den i indstillingen Værktøjer. Når seriel skærm starter, nulstilles arduinoen. Nu kan du styre robotarmen ved hjælp af masterarmen. Men der registreres ikke noget.

For at starte optagelsen skal du indtaste 'R' på skærmen, nu kan du udføre de træk, du vil optage.

Når bevægelserne er udført, skal du indtaste 'P' for at afspille de indspillede træk. Servoerne vil fortsætte med at udføre bevægelserne, så længe brættet ikke nulstilles.

Anbefalede: