Robotics Arm

Introducere

Proiectul meu este un brat robotic, conceput pentru a ridica și muta diverse obiecte într-un mediu controlat. Scopul său principal este de a oferi asistență în sarcinile de manipulare a obiectelor, ușurând munca umană și sporind eficiența proceselor.

Ideea mea a pornit de la observarea nevoii de automatizare a anumitor sarcini repetitive și obositoare, precum mutarea obiectelor grele sau fragile. Am dorit să creez un dispozitiv care să fie ușor de utilizat.

Cred că acest brat robotic este util deoarece este un punct de plecare pentru peluarea sarcini grele și periculoase pentru oameni, reducând astfel riscul de accidente și epuizare. Prin afișarea unui mesaj atunci când nu poate să apuce un obiect, ofer utilizatorului informații rapide și precise despre starea operațională a bratului robotic, ceea ce contribuie la o utilizare mai eficientă și sigură a dispozitivului.

Descriere generală

Prin intermediul unuia dintre cele două module joystick, ai posibilitatea să direcționezi mișcarea brațului robotic. Odată ce ai ajustat brațul în poziția potrivită, vei utiliza celălalt joystick pentru a controla deschiderea și închiderea cleștelui, permițându-ți să apuci sau să eliberezi un obiect.

Mișcarea brațului este gestionată de patru servomotoare. În cazul în care obiectul este prea voluminos sau prea greu și servomotoarele nu pot opera în mod corespunzător, un mesaj adecvat va fi afișat pe ecranul LCD.

Hardware Design

Lista de piese:

  1. 1x Arduino Uno R3 CH340
  2. 4x Servo motor MG90S
  3. 1x Placa expansiune
  4. 1x Cablu USB
  5. 2x Modul joystick Arduino
  6. Piese acrilic
  7. Ecran LCD + modul I2C

Schema electrica:

Software Design

Mediul de dezvoltare folosit pentru relizarea proiectului a fost Arduino IDE

Librăriile folosite au fost:

  • Servo.h - utilizată pentru controlarea celor 4 servomotoare
  • LiquidCrystal_I2C.h - utilizată pentru scrierea pe ecranul LCD folosind I2C

Descrierea codului implementat

Variabile folosite

  • Variabile pentru LCD si Servomotoare, specifice bibliotecilor:

LiquidCrystal_I2C mylcd(0x27,16,2);

Servo myservo1;

Servo myservo2;

Servo myservo3;

Servo myservo4;

  • Variabile care retin pozitiile servomotoarelor

int pos1=90, pos2=90, pos3=90, pos4=90;

aceste variabile au fost folosite si pt a calibra servomotoarele inainte de a reliza montajul bratului, atfel incat sa avem o referinta.

  • Variabile care retin pozitiile anterioare ale servomotoarelor:

int prev_pos1=90, prev_pos2=90, prev_pos3=90, prev_pos4=90;

  • Variabile pt pozitiile actuale ale joystick-urilor:

int x1,y1,z1;

int x2,y2,z2;

  • Variabile care retin pozitiile anterioare ale joystick-urilor:

int last_x1, last_x2, last_y1, last_y2;

Pentru a realiza mișcările principale ale brațului robotic, am împărțit implementarea în patru funcții, fiecare dintre acestea gestionând modificarea poziției unui servomotor

Funcția turn() gestionează primul servomotor, indicându-i unghiul la care trebuie să ajungă pentru a roti corpul brațului robotic, bazându-se pe mișcările orizontale ale joystick-ului din dreapta. Brațul se va roti în direcția în care este împins joystick-ul.

Funcția lower_arm() controlează mișcarea de extindere și retragere a brațului, utilizând al doilea servomotor. Aceasta interpretează mișcările verticale ale joystick-ului din dreapta. Când joystick-ul este împins în jos, brațul se retrage, iar când este împins în sus, brațul se extinde.

Funcția upper_arm() reglează mișcarea de ridicare și coborâre a brațului, fiind controlată de al treilea servomotor. Această funcție interpretează mișcările verticale ale joystick-ului din stânga. Când joystick-ul este împins în jos, brațul coboară, iar când este împins în sus, brațul urcă.

Funcția claw() controlează al patrulea servomotor, responsabil de deschiderea și închiderea cleștelui de la capătul brațului robotic, în funcție de mișcările orizontale ale joystick-ului din stânga. Când joystick-ul este împins spre stânga, cleștele se închide, iar când este împins spre dreapta, se deschide. Pentru a preveni deschiderea sau închiderea excesivă a cleștelui, unghiul de rotire al servomotorului este limitat.

În funcția setup(), se configurează LCD-ul și bratul robotic este adus în poziția inițială, afișând un mesaj de pornire pe ecranul LCD.

În funcția loop(), sunt apelate funcțiile care controlează mișcările brațului și sunt afișate mesaje pe ecranul LCD dacă mișcările nu pot fi efectuate.

Intializarea pinilor si setarea LCD-ului

  • Setarea pinilor servomotaorelor:

myservo1.attach(3); seteaza pin-ul de control al servomotorului 1 la D3

myservo2.attach(5); seteaza pin-ul de control al servomotorului 2 la D5

myservo3.attach(6); seteaza pin-ul de control al servomotorului 3 la D6

myservo4.attach(9); seteaza pin-ul de control al servomotorului 4 la D9

  • Setarea pinilor joystick-urilor:

pinMode(right_key, INPUT);

pinMode(left_key, INPUT);

const int right_X = A2; miscarea pe axa X a joystick-ului din dreapta este conectata la pin-ul A2

const int right_Y = A1; miscarea pe axa Y a joystick-ului din dreapta este conectata la pin-ul A5

const int right_key = 7; joystick-ul din dreapta e conectat la pin-ul 7

const int left_X = A3; miscarea pe axa X a joystick-ului din stanga este conectata la pin-ul A3

const int left_Y = A0; miscarea pe axa Y a joystick-ului din stanga este conectata la pin-ul A4

const int left_key = 8; joystick-ul din stanga e conectat la pin-ul 8

  • Setarea LCD-ului

mylcd.init();

mylcd.backlight();

Rezultate Obţinute

Rezultate obținute în urma ansamblării componentelor hardware și a scheletului brațului robotic

Link catre video cu proiectul: https://drive.google.com/file/d/1cY6TqEeWAdGDGRrtBJKsB_g0R_Y-mH4Q/view?usp=sharing

Concluzii

Realizarea acestui proiect m-a făcut să conștientizez cât de multă muncă implică fiecare mic obiect care are la bază un circuit electric. Mi-ar plăcea să mă implic și în alte proiecte mai complexe, dar recunosc că atât proiectarea, cât și asamblarea unui astfel de proiect sunt provocări considerabile.

Probabil cea mai dificilă parte a fost asamblarea structurii și conectarea firelor, deoarece a necesitat o atenție extremă. Scrierea codului s-a dovedit și ea destul de complexă, întâmpinând diverse bug-uri din cauza lipsei de familiaritate cu librăriile.

Realizarea acestui proiect m-a făcut să realizez câtă muncă se află în spatele oricărui mic obiect care are în spatele lui un circuit electric. Această experiență m-a determinat să apreciez mai mult munca și dedicarea necesară în acest domeniu.

În ciuda dificultăților întâmpinate, mă simt motivată să lucrez la alte proiecte mai complicate. Proiectarea și asamblarea unui astfel de proiect sunt sarcini dificile, dar satisfacția obținută la final este pe măsură.

Download

Arhiva conține:

  • codul sursă
  • schema bloc
  • diagrama electrică
  • video cu bratul

331cc_circioroaba_anca_maria.zip

Jurnal

  • 08.04.2024 - alegere proiect
  • 15.04.2024 - comandare piese
  • 03.05.2024 - scriere documentație
  • 17.05.2024 - finalizarea părții hardware
  • 19.05.2024 - finalizarea părții software
  • 26.05.2024 - finalizarea pagina ocw

Bibliografie/Resurse

pm/prj2024/fgul/anca.circioroaba.txt · Last modified: 2024/05/27 04:13 by anca.circioroaba
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0