Sadržaj:

Jednostavna i pametna robotska ruka pomoću Arduina !!!: 5 koraka (sa slikama)
Jednostavna i pametna robotska ruka pomoću Arduina !!!: 5 koraka (sa slikama)

Video: Jednostavna i pametna robotska ruka pomoću Arduina !!!: 5 koraka (sa slikama)

Video: Jednostavna i pametna robotska ruka pomoću Arduina !!!: 5 koraka (sa slikama)
Video: CS50 2015 - Week 8, continued 2024, Lipanj
Anonim
Image
Image
Stvari koje će vam trebati
Stvari koje će vam trebati

U ovoj instrukciji napravit ću jednostavnu robotsku ruku. To će se kontrolirati pomoću glavne ruke. Ruka će pamtiti poteze i igrati u nizu. Koncept nije nov. Ideju sam dobio od "mini robotske ruke -by Stoerpeak". Dugo sam to htio napraviti, ali tada sam bio potpuno noob i nisam imao znanja o programiranju. Sada konačno gradim jedan, održavajući ga jednostavnim, jeftinim i dijelim ga sa svima vama.

Pa krenimo….

Korak 1: Stvari koje trebate:-

Stvari koje će vam trebati
Stvari koje će vam trebati
Stvari koje će vam trebati
Stvari koje će vam trebati

Evo popisa stvari koje će vam trebati:-

1. Servo motori x 5 Link za SAD:- https://amzn.to/2OxbSH7Link za Europu:-

2. Potenciometri x 5 (koristio sam 100 000). Link za SAD:- https://amzn.to/2ROjhDMLink za Europu:-

3. Arduino UNO. (Možete koristiti i Arduino Nano) Veza za nas:- https://amzn.to/2DBbENWLink za Europu:-

4. Oglasna ploča. (Predlažem ovaj komplet) Veza za SAD:- https://amzn.to/2Dy86w4Link za Europu:-

5. Baterija. (izborno, koristim adapter od 5 V)

6. Karton/drvo/ploča od sunca/akril sve što je dostupno ili lako pronaći.

Također će vam trebati instaliran Arduino IDE.

Korak 2: Izrada ruke:-

Izrada ruke
Izrada ruke
Izrada ruke
Izrada ruke

Ovdje sam koristio štapiće od sladoleda za izradu ruke. Možete koristiti bilo koji materijal koji vam je dostupan. Možete isprobati različite mehaničke dizajne kako biste učinili ruku još boljom. moj dizajn nije baš stabilan.

Upravo sam upotrijebio dvostranu ljepljivu traku da zalijepim servo pogone na štapić za sladoled i pričvrstim ih vijcima.

Za Master ruku zalijepio sam potenciometre na štapiće od slatkiša i napravio ruku.

Pozivom na slike dobit ćete bolju ideju.

Sve sam montirao na platnu veličine A4 koja se koristi kao osnova.

Korak 3: Uspostavljanje veza:-

Uspostavljanje veza
Uspostavljanje veza
Uspostavljanje veza
Uspostavljanje veza
Uspostavljanje veza
Uspostavljanje veza

U ovom koraku ćemo uspostaviti sve potrebne veze, pogledajte gornje slike.

  • Prvo spojite sve servo -sisteme paralelno na izvor napajanja (Crvena žica na +ve i crna ili smeđa žica na Gnd)
  • Zatim spojite signalne žice, odnosno žutu ili narančastu žicu na PWM pin arduina.
  • Sada paralelno povežite potenciometre na +5v i Gnd arduina.
  • Spojite srednji terminal na analogni pin ardunia.

Ovdje se digitalni pinovi 3, 5, 6, 9 i 10 koriste za upravljanje servo pogonima

Analogni pinovi A0 do A4 koriste se za ulaz s potenciometara.

Servo spojen na pin 3 kontrolirat će se potenciometrom spojenim na A0

Servo spojen na pin 5 kontrolirat će pot na A1, i tako dalje….

Napomena:- Iako servosisteme ne napaja arduino, svakako spojite Gnd servosa na arduino, inače ruka neće raditi.

Korak 4: Kodiranje:-

Kodiranje
Kodiranje

Logika ovog koda je prilično jednostavna, vrijednosti potenciometara su pohranjene u nizu, a zapisi se zatim prelaze pomoću for petlje, a servomotori izvode korake prema vrijednostima. Možete pogledati ovaj vodič koji sam koristio za referencu "Arduino potenciometar servo kontrola i memorija"

Kôd:- (Datoteka koja se može preuzeti ispod.)

Prvo ćemo globalno proglasiti sve potrebne varijable kako bismo ih mogli koristiti tijekom cijelog programa. Za to nije potrebno posebno objašnjenje

#uključi

// Servo objekti Servo Servo_0; Servo Servo_1; Servo Servo_2; Servo Servo_3; Servo Servo_4; // Objekti potenciometra int Pot_0; int Pot_1; int Pot_2; int Pot_3; int Pot_4; // Varijabla za spremanje položaja servo int Servo_0_Pos; int Servo_1_Pos; int Servo_2_Pos; int Servo_3_Pos; int Servo_4_Pos; // Varijabla za spremanje prethodnih vrijednosti položaja int Prev_0_Pos; int Prethodna_1_Pos; int Prethodna_2_Pos; int Prethodna_3_Pos; int Prethodna_4_Pos; // Varijabla za spremanje vrijednosti trenutne pozicije int Current_0_Pos; int Current_1_Pos; int Current_2_Pos; int Current_3_Pos; int Current_4_Pos; int Servo_Position; // Pohranjuje kut int Servo_Number; // Pohranjivanje servo int pohrane [600]; // Niz za spremanje podataka (Povećanje veličine niza potrošit će više memorije) int Index = 0; // Indeks polja počinje od 0. pozicije char data = 0; // varijabla za spremanje podataka iz serijskog unosa.

Sada ćemo napisati funkciju postavljanja, gdje postavljamo pinove i njihove funkcije. Ovo je glavna funkcija koja se prva izvršava

void setup ()

{Serial.begin (9600); // Za serijsku komunikaciju između arduina i IDE -a. // Servo objekti su pričvršćeni na PWM pinove. Servo_0.priključak (3); Servo_1.priključak (5); Servo_2.priključak (6); Servo_3.priključak (9); Servo_4.priključak (10); // Servomotori su pri inicijalizaciji postavljeni na 100 položaj. Servo_0.pisati (100); Servo_1.pisati (100); Servo_2.pisati (100); Servo_3.pisati (100); Servo_4.pisati (100); Serial.println ("Pritisnite 'R' za snimanje i 'P' za reprodukciju"); }

Sada moramo očitati vrijednosti potenciometara pomoću pinova za analogni ulaz i preslikati ih za upravljanje servoma. Za to ćemo definirati funkciju i dati joj ime Map_Pot ();, možete ga nazvati kako god želite, to je korisnički definirana funkcija

void Map_Pot ()

{ / * Servosi se okreću za 180 stupnjeva, ali koristiti ih do ograničenja nije dobra ideja jer čini da servo neprestano zuji što je neugodno pa ograničavamo servo da se kreće između: 1-179 * / Pot_0 = analogno čitanje (A0); // Pročitajte unos iz pot i pohranite ga u promjenjivi Pot_0. Servo_0_Pos = karta (Pot_0, 0, 1023, 1, 179); // Kartirajte servosisteme prema vrijednosti između 0 do 1023 Servo_0.write (Servo_0_Pos); // Pomaknite servo u taj položaj. 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 = analogno čitanje (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); }

Sada ćemo napisati funkciju petlje:

void loop ()

{Map_Pot (); // Poziv funkcije za čitanje vrijednosti pot dok (Serial.available ()> 0) {data = Serial.read (); if (data == 'R') Serial.println ("Snimanje se pomiče …"); if (data == 'P') Serial.println ("Reprodukcija snimljenih poteza …"); } if (data == 'R') // Ako je uneseno 'R', započnite snimanje. {// Pohranite vrijednosti u varijablu Prev_0_Pos = Servo_0_Pos; Prethodna_1_Pos = Servo_1_Pos; Prethodna_2_Pos = Servo_2_Pos; Prethodna_3_Pos = Servo_3_Pos; Prethodna_4_Pos = Servo_4_Pos; Map_Pot (); // Funkcija karte opozvana radi usporedbe if (abs (Prev_0_Pos == Servo_0_Pos)) // apsolutna vrijednost dobivena je usporedbom {Servo_0.write (Servo_0_Pos); // Ako se vrijednosti podudaraju, servo se mijenja na mjesto if (Current_0_Pos! = Servo_0_Pos) // Ako se vrijednosti ne podudaraju {Storage [Index] = Servo_0_Pos + 0; // Vrijednost se dodaje u polje Index ++; // Vrijednost indeksa povećana za 1} Current_0_Pos = Servo_0_Pos; } /* Slično se uspoređuje vrijednost za sve servomotore, +100 se dodaje svakom za unos kao diferencijalna vrijednost. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos); if (Current_1_Pos! = Servo_1_Pos) {Pohrana [Indeks] = Servo_1_Pos + 100; Indeks ++; } Trenutni_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) {Pohrana [Indeks] = Servo_2_Pos + 200; Indeks ++; } Trenutni_2_Pos = Servo_2_Pos; } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos); if (Trenutni_3_Pos! = Servo_3_Pos) {Pohrana [Indeks] = Servo_3_Pos + 300; Indeks ++; } Trenutni_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) {Pohrana [Indeks] = Servo_4_Pos + 400; Indeks ++; } Trenutni_4_Pos = Servo_4_Pos; } / * Vrijednosti se ispisuju na serijskom monitoru, '\ t' služi za prikaz vrijednosti u tabličnom formatu * / 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); kašnjenje (50); } if (data == 'P') // AKO je uneseno 'P', Počnite svirati snimljene poteze. {for (int i = 0; i <Index; i ++) // Prelazimo niz pomoću for petlje {Servo_Number = Storage /100; // Nalazi broj servo Servo_Position = Spremište % 100; // Pronalazi položaj servo sklopke (Servo_Number) {slučaj 0: Servo_0.write (Servo_Position); pauza; slučaj 1: Servo_1.write (Servo_Position); pauza; slučaj 2: Servo_2.write (Servo_Position); pauza; slučaj 3: Servo_3.write (Servo_Position); pauza; slučaj 4: Servo_4.write (Servo_Position); pauza; } kašnjenje (50); }}}

Nakon što je kôd spreman, sada ga prenesite na arduino ploču

Pametna ruka je spremna za rad. Funkcija još nije tako glatka kao ona koju je napravio Stoerpeak.

Ako možete poboljšati kôd ili imate bilo kakve prijedloge za mene, javite mi u odjeljku za komentare.

S obzirom na to, prijeđimo na testiranje….

Korak 5: Testiranje:-

Nakon uspješnog učitavanja koda na ploču, otvorite 'Serial Monitor' i možete ga pronaći u opciji Alati. Kada se serijski monitor pokrene, arduino će se resetirati. Sada možete upravljati robotskom rukom pomoću glavne ruke. Ali ništa se ne bilježi.

Za početak snimanja unesite 'R' na monitor i sada možete izvoditi poteze koje želite snimiti.

Nakon što su potezi obavljeni, morate unijeti 'P' da biste svirali snimljene poteze. Servomotori će nastaviti izvoditi poteze sve dok se ploča ne resetira.

Preporučeni: