Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:ncaroi:robotic-arm [2023/05/24 21:23]
corina_elena.ulariu [Software Design]
pm:prj2023:ncaroi:robotic-arm [2023/05/29 18:20] (current)
corina_elena.ulariu [Download]
Line 18: Line 18:
  
 Brațul robotic este alimentat prin intermediul a doi acumulatori. Brațul robotic este alimentat prin intermediul a doi acumulatori.
-===== Hardware Design =====+}===== Hardware Design =====
  
 Lista de piese: Lista de piese:
Line 30: Line 30:
 Schema electrica: Schema electrica:
 {{ :​pm:​prj2023:​ncaroi:​arduino_bb.png?​300 |}} {{ :​pm:​prj2023:​ncaroi:​arduino_bb.png?​300 |}}
 +{{ :​pm:​prj2023:​ncaroi:​schema.png?​300 |}}
  
 ===== Software Design ===== ===== Software Design =====
  
- 
-<note tip> 
-Descrierea codului aplicaţiei (firmware): 
-  * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi 
-  * (etapa 3) surse şi funcţii implementate 
-</​note>​ 
 <​note>​Mediul de dezvoltare folosit pentru realizarea proiectului a fost Arduino IDE.</​note>​ <​note>​Mediul de dezvoltare folosit pentru realizarea proiectului a fost Arduino IDE.</​note>​
 Librăriile folosite au fost: Librăriile folosite au fost:
Line 50: Line 43:
 //LCD// //LCD//
      ​LiquidCrystal_I2C mylcd(0x27,​16,​2);​      ​LiquidCrystal_I2C mylcd(0x27,​16,​2);​
- 
  
 //​Servomotoare//​ //​Servomotoare//​
 +     Servo myservo1;
 +     Servo myservo2;
 +     Servo myservo3;
 +     Servo myservo4;
  
----- +//variabile care rețin pozițiile servomotoarelor//​ 
-Servo myservo1; +     int pos1=90, pos2=90, pos3=90, pos4=90;
-Servo myservo2; +
-Servo myservo3; +
-Servo myservo4; +
-----+
  
 +//variabile care rețin poziția anterioară a servomotoarelor//​
 +     int prev_pos1=90,​ prev_pos2=90,​ prev_pos3=90,​ prev_pos4=90;​
 +     
 +//variabile care rețin mișcăriile joystick-urilor//​
 +     int x1,y1,z1;
 +     int x2,y2,z2;
 +     
 +//variabile care rețin ultima mișcare făcută de joystick-uri//​
 +     int last_x1, last_x2, last_y1, last_y2;
 +
 +Pentru a executa principalele mișcări ale brațului robotic, am împărțit implementarea în 4 funcții, care se ocupă fiecare de modificarea poziției unui servomotor.
 +
 +Funcția **claw()** se ocupă de cel de-al patrulea servomotor, care va deschide și închide cleștele de la capătul brațului robotic, în funcție de mișcările pe orizontală ale joystick-ului din stânga. Dacă joystick-ul este împins în stânga, cleștele se va închide, iar dacă este împins în dreapta se închide. Pentru a se asigura că cleștele nu se va deschide sau închide mai mult decât poate, se limitează unghiul de rotire al servomotorului.
 +
 +Funcția **turn()** va controla primul servomotor, transmițându-i acestuia unghiul la a cărui poziție va trebui să ajungă pentru a roti corpul brațului robotic, în funcție de mișcările pe orizontală ale joystick-ului din dreapta. Brațul se va roti în direcția în care este împins joystick-ul. Pentru a se asigura că rotația este limitată, unghiul de rotire al servomotorului va fi în intervalul [1, 180].
 +
 +Funcția **upper_arm()** va determina mișcarea de coborâre și urcare a brațului, fiind controlată prin cel de-al treilea servomotor, mișcările căruia vor fi preluate din citirea mișcării pe verticală a modulului joystick din stânga. Dacă joystick-ul este împins în jos, brațul coboară, urcând dacă e împins în sus.
 +
 +Funcția **lower_arm()** stabilește mișcarea de întindere și retragere a brațului, fiind controlată prin cel de-al doilea servomotor, mișcările căruia vor fi preluate din citirea mișcării pe verticală a modulului joystick din dreapta. Dacă joystick-ul este împins în jos, brațul se va trage înapoi, întinzându-se dacă e împins în sus.
 +
 +În funcția de **setup()** se setează lcd-ul și se aduce robotul în poziția inițială, afișându-se pe ecranul LCD un mesaj de început.
 +
 +în funcția de **loop()** se apelează funcțiile de mișcare ale brațului, și se afișează mesaje corespunzătoare dacă mișcăriile nu pot avea loc.
 +
 +<​note>​**Cod proiect: **{{:​pm:​prj2023:​ncaroi:​robotic_arm.zip|}}</​note>​
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
Line 69: Line 86:
 ===== Concluzii ===== ===== Concluzii =====
  
 +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. ​
 +
 +Cea mai grea parte a reprezentat-o cel mai probabil asamblarea scheletului și legarea firelor, deoarece a necesitat o foarte mare atenție,
 +dar și scrierea codului a fost destul de complicată întrucât nefiind foarte familiarizată cu librăriile am întâmpinat câteva bug-uri.
 +
 +Mi-ar plăcea să lucrez și la alte proiecte mai complicate, dar consider că este o muncă destul de dificilă atât proiectarea,​ cât și asamblarea unui asemenea proiect.
 ===== Download ===== ===== Download =====
  
 <note warning> <note warning>
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectuluisurse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +Arhiva conține
- +  codul sursă 
-Fişierele se încarcă pe wiki folosind facilitatea ​**Add Images or other files**. Namespace-ul în care se încarcă fişierele este de tipul **:​pm:​prj20??:​c?​** sau **:​pm:​prj20??:​c?:​nume_student** (dacă este cazul). ​**Exemplu:** Dumitru Alin, 331CC -> **:​pm:​prj2009:​cc:​dumitru_alin**.+  ​schema bloc 
 +  ​diagrama electrică 
 +  ​imagini cu brațul robotic
 </​note>​ </​note>​
 +
 +{{:​pm:​prj2023:​ncaroi:​331cc_ulariu_corina-elena.zip|}}
  
 ===== Jurnal ===== ===== Jurnal =====
Line 83: Line 110:
   * 05.05.2023 - scriere documentație   * 05.05.2023 - scriere documentație
   * 18.05.2023 - finalizarea părții hardware   * 18.05.2023 - finalizarea părții hardware
 +  * 23.05.2023 - finalizarea părții software
 +  * 24.05.2023 - finalizarea wiki
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
Line 89: Line 118:
     * https://​www.hackster.io/​Hack-star-Arduino/​learn-to-use-lcd-1602-i2c-parallel-with-arduino-uno-f73f07     * https://​www.hackster.io/​Hack-star-Arduino/​learn-to-use-lcd-1602-i2c-parallel-with-arduino-uno-f73f07
     * https://​microbotlabs.com/​arduino-joystick-servo-motor-robot-arm-control-tutorial.html     * https://​microbotlabs.com/​arduino-joystick-servo-motor-robot-arm-control-tutorial.html
 +  - Resurse Software:  ​
 +    * https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab4-2022
 +    * https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab5-2022
 +    * https://​ocw.cs.pub.ro/​courses/​pm/​lab/​lab6-2022
 +    * https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
 +    * https://​reference.arduino.cc/​reference/​en/​libraries/​liquidcrystal-i2c/​
 +
 <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​ <​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</​a></​html>​
  
pm/prj2023/ncaroi/robotic-arm.1684952582.txt.gz · Last modified: 2023/05/24 21:23 by corina_elena.ulariu
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