Innholdsfortegnelse:

Enkel og smart robotarm ved bruk av Arduino !!!: 5 trinn (med bilder)
Enkel og smart robotarm ved bruk av Arduino !!!: 5 trinn (med bilder)

Video: Enkel og smart robotarm ved bruk av Arduino !!!: 5 trinn (med bilder)

Video: Enkel og smart robotarm ved bruk av Arduino !!!: 5 trinn (med bilder)
Video: Lesson 102: Using ZK-5AD 4A Dual DC Motor Driver TA6586 4A 14V The best Motor Driver (new product) 2024, Juni
Anonim
Image
Image
Ting du trenger
Ting du trenger

I denne instruksen vil jeg lage en enkel robotarm. Det vil bli kontrollert ved hjelp av en masterarm. Armen vil huske trekk og spille i rekkefølge. Konseptet er ikke nytt. Jeg fikk ideen fra "mini robotic arm -by Stoerpeak". Jeg ønsket å lage dette lenge, men da var jeg helt noob og hadde ingen kunnskap om programmering. Nå bygger jeg endelig en, holder den enkel, billig og deler den med dere alle.

Så la oss komme i gang ….

Trinn 1: Ting du trenger:-

Ting du trenger
Ting du trenger
Ting du trenger
Ting du trenger

Her er en liste over ting du trenger:-

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

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

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

4. Brødbrett. (Jeg foreslår dette settet) Link for USA:- https://amzn.to/2Dy86w4Link for Europe:-

5. Batteri. (valgfritt, jeg bruker en 5v adapter)

6. Kartong/tre/solbrett/akryl hva som nå er tilgjengelig eller lett å finne.

Og du trenger også Arduino IDE installert.

Trinn 2: Gjør armen:-

Making the Arm
Making the Arm
Making the Arm
Making the Arm

Her har jeg brukt Popsicle -pinner for å lage armen. Du kan bruke alt materiell som er tilgjengelig for deg. Og du kan prøve forskjellige mekaniske design for å lage en enda bedre arm. designet mitt er ikke veldig stabilt.

Jeg brukte bare dobbeltsidig tape for å feste servoene til Popsicle -pinnen og feste dem med skruer.

For Master -armen limte jeg potensiometre til popsicle -pinner og lagde arm.

Henvisning til bildene vil gi deg en bedre idé.

Jeg har montert alt på et lerretstavle i A4 -størrelse som brukes som base.

Trinn 3: Opprette tilkoblinger:-

Gjør tilkoblinger
Gjør tilkoblinger
Gjør tilkoblinger
Gjør tilkoblinger
Gjør tilkoblinger
Gjør tilkoblinger

I dette trinnet vil vi gjøre alle nødvendige tilkoblinger, se bildene ovenfor.

  • Koble først alle servoene parallelt med strømforsyningen (Den røde ledningen til +ve og Black or Brown Wire to Gnd)
  • Koble deretter signaltrådene, dvs. gul eller oransje ledning, til PWM -pinnen til arduino.
  • Koble nå potensiometrene til +5v og Gnd for arduino parallelt.
  • Koble den midterste terminalen til den analoge pinnen til ardunio.

Her brukes Digital Pins 3, 5, 6, 9 & 10 for å kontrollere servoene

Analoge pinner A0 til A4 brukes for inngang fra potensiometre.

Servoen som er koblet til pin 3 vil bli styrt av potensiometer koblet til A0

Servo koblet til pin 5 vil bli kontrollert av potten på A1, og så videre ….

Merk:- Selv om servoer ikke drives av arduino, må du sørge for å koble servoenes Gnd til arduino, ellers fungerer armen ikke.

Trinn 4: Koding:-

Koding
Koding

Logikken til denne koden er ganske enkel. Verdiene til potensiometre lagres i en matrise, postene blir deretter krysset ved hjelp av en for -sløyfe og servoene gjør trinnene i henhold til verdiene. Du kan sjekke ut denne opplæringen jeg brukte som referanse "Arduino Potentiometer Servo Control & Memory"

Kode:- (Nedlastbar fil vedlagt nedenfor.)

Først vil vi deklarere alle nødvendige variabler globalt slik at vi kan bruke dem gjennom hele programmet. Ingen spesiell forklaring er nødvendig for dette

#inkludere

// Servoobjekter Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Potensiometer Objekter int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Variabel for lagring av Servoposisjon int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Variabel for lagring Tidligere posisjonsverdier int Prev_0_Pos; int Prev_1_Pos; int Prev_2_Pos; int Prev_3_Pos; int Prev_4_Pos; // Variabel for lagring Gjeldende posisjonsverdier int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Posisjon; // Lagrer vinkelen int Servo_Number; // Lagrer ingen servo int Lagring [600]; // Array for å lagre data (Økende matrisestørrelse vil forbruke mer minne) int Index = 0; // Arrayindeks starter fra null posisjon char data = 0; // variabel for å lagre data fra seriell inngang.

Nå skal vi skrive en oppsettfunksjon, der vi setter pins og deres funksjoner. Dette er hovedfunksjonen som utføres først

ugyldig oppsett ()

{Serial.begin (9600); // For seriell kommunikasjon mellom arduino og IDE. // Servoobjekter er festet til PWM -pinner. Servo_0.festach (3); Servo_1.attach (5); Servo_2. Fest (6); Servo_3.festach (9); Servo_4.festach (10); // Servoer er satt til 100 posisjoner ved initialisering. Servo_0.write (100); Servo_1.write (100); Servo_2.write (100); Servo_3.write (100); Servo_4.write (100); Serial.println ("Trykk" R "for å spille inn og" P "for å spille"); }

Nå må vi lese verdiene til potensiometre ved hjelp av analoge inngangspinner og kartlegge dem for å kontrollere servoer. For dette vil vi definere en funksjon og gi den navnet Map_Pot ();, du kan gi det navnet du vil, det er en brukerdefinert funksjon

ugyldig Map_Pot ()

{ / * Servoene roterer 180 grader, men å bruke den til grenser er ikke en god idé, da det får servoen til å surre kontinuerlig, noe som er irriterende, så vi begrenser servoen til å bevege deg mellom: 1-179 * / Pot_0 = analogRead (A0); // Les input fra potten og lagre den i Variable Pot_0. Servo_0_Pos = kart (Pot_0, 0, 1023, 1, 179); // Kart servoer i henhold til verdien mellom 0 til 1023 Servo_0.write (Servo_0_Pos); // Flytt servoen til den posisjonen. Pot_1 = analogRead (A1); Servo_1_Pos = kart (Pot_1, 0, 1023, 1, 179); Servo_1.write (Servo_1_Pos); Pot_2 = analogRead (A2); Servo_2_Pos = kart (Pot_2, 0, 1023, 1, 179); Servo_2.write (Servo_2_Pos); Pot_3 = analogRead (A3); Servo_3_Pos = kart (Pot_3, 0, 1023, 1, 179); Servo_3.write (Servo_3_Pos); Pot_4 = analogRead (A4); Servo_4_Pos = kart (Pot_4, 0, 1023, 1, 179); Servo_4.write (Servo_4_Pos); }

Nå skal vi skrive sløyfefunksjon:

hulrom ()

{Map_Pot (); // Funksjonskall for å lese pot -verdier mens (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Opptak beveger seg …"); if (data == 'P') Serial.println ("Spiller av innspilte filmer …"); } if (data == 'R') // Hvis 'R' er angitt, start opptaket. {// Lagre verdiene i en variabel Prev_0_Pos = Servo_0_Pos; Forrige_1_Pos = Servo_1_Pos; Forrige_2_Pos = Servo_2_Pos; Prev_3_Pos = Servo_3_Pos; Prev_4_Pos = Servo_4_Pos; Map_Pot (); // Kartfunksjon tilbakekalt for sammenligning hvis (abs (Prev_0_Pos == Servo_0_Pos)) // absolutt verdi oppnås ved å sammenligne {Servo_0.write (Servo_0_Pos); // Hvis verdiene samsvarer med servoen, blir den omplassert hvis (Current_0_Pos! = Servo_0_Pos) // Hvis verdiene ikke samsvarer med {Storage [Index] = Servo_0_Pos + 0; // Verdi legges til array Index ++; // Indeksverdi økt med 1} Current_0_Pos = Servo_0_Pos; } /* På samme måte utføres verdisammenligningen for alle servoene, +100 legges til hver for oppføring som en differensialverdi. */ 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; Indeks ++; } 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; Indeks ++; } 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; Indeks ++; } 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; Indeks ++; } Current_4_Pos = Servo_4_Pos; } / * Verdier skrives ut på seriell skjerm, '\ t' er for visning av verdier 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 (indeks); forsinkelse (50); } hvis (data == 'P') // HVIS 'P' er angitt, begynner du å spille av innspilte trekk. {for (int i = 0; i <Index; i ++) // Krysser matrisen ved hjelp av loop {Servo_Number = Storage /100; // Finner antall servoer Servo_Position = Lagring % 100; // Finner posisjonen til servobryteren (Servo_Number) {case 0: Servo_0.write (Servo_Position); gå i stykker; sak 1: Servo_1.write (Servo_Position); gå i stykker; sak 2: Servo_2.write (Servo_Position); gå i stykker; sak 3: Servo_3.write (Servo_Position); gå i stykker; sak 4: Servo_4.write (Servo_Position); gå i stykker; } forsinkelse (50); }}}

Når koden er klar, last den nå opp til arduino -kortet

Smart -armen er klar til bruk. Funksjonen er ennå ikke så jevn som den som Stoerpeak har laget.

Hvis du kan gjøre koden bedre eller har noen forslag til meg, vennligst gi meg beskjed i kommentarfeltet.

Når det er sagt, la oss gå videre til testing….

Trinn 5: Testing:-

Etter å ha lastet opp koden til brettet, åpner du 'Serial Monitor', og du finner den i alternativet Verktøy. Når seriell skjerm starter, vil arduino nullstilles. Nå kan du kontrollere robotarmen ved hjelp av hovedarmen. Men ingenting blir registrert.

For å starte innspillingen, skriv 'R' på skjermen nå kan du utføre bevegelsene du ønsker å ta opp.

Etter at trekkene er utført må du skrive 'P' for å spille de innspilte trekkene. Servoene vil fortsette å utføre bevegelsene så lenge brettet ikke blir tilbakestilt.

Anbefalt: