Differences

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

Link to this comparison view

pm:prj2024:avaduva:serban.ionescu0609 [2024/05/27 07:06]
serban.ionescu0609 [Hardware Design]
pm:prj2024:avaduva:serban.ionescu0609 [2024/05/27 22:43] (current)
serban.ionescu0609 [Rezultate Obţinute]
Line 17: Line 17:
 {{:​pm:​prj2024:​avaduva:​block_diagram_ionescu_serban.png?​600|}} {{:​pm:​prj2024:​avaduva:​block_diagram_ionescu_serban.png?​600|}}
 ===== Hardware Design ===== ===== Hardware Design =====
 +{{:​pm:​prj2024:​avaduva:​circuit_diagram.png?​600|}}
 Listă de piese pentru proiect: Listă de piese pentru proiect:
  
Line 23: Line 23:
   * Senzor ultrasonic HC-SR04   * Senzor ultrasonic HC-SR04
   * Modul urmărire linie cu 3 senzori(5V)   * Modul urmărire linie cu 3 senzori(5V)
-<​del> ​ ​* ​LM7805 Stabilizator de tensiune</​del>​+  * <​del>​LM7805 Stabilizator de tensiune</​del>​
   * Fire electrice   * Fire electrice
-<​del> ​ ​* ​Sursa de alimentare 12V</​del>​ +  * <​del>​Sursa de alimentare 12V</​del>​ 
-<​del> ​ ​* ​Switch cu 2 pozitii</​del>​+  ​* ​<​del>​Switch cu 2 pozitii</​del>​
   * Servomotor SG90, 180 grade   * Servomotor SG90, 180 grade
   * <​del>​2 *</​del>​ LN298N Punte H Dubla   * <​del>​2 *</​del>​ LN298N Punte H Dubla
   * 4 Motoare   * 4 Motoare
-**  * Sursa de alimentare 7.4V** +  ​* **Sursa de alimentare 7.4V** 
-**  * Sursa de alimentare 9V** +  * **Sursa de alimentare 9V** 
-**  * Breadboard**+  * **Breadboard** 
 + 
 +To Note: am decis in final sa folosesc 2 baterii, una pentru alimentarea Arduino-ului (9V) si una pentru alimentarea Motoarelor (7.4V), deoarece nu era recomandata alimentarea motoarelor cu mai mult de 6V.
  
  
 ===== Software Design ===== ===== Software Design =====
  
 +Pentru programarea plăcii am folosit Arduino IDE, evitând bibliotecile specifice Arduino și implementând funcții manual, folosind doar <​avr/​io.h>​ și <​util/​delay.h>​. Proiectul este axat pe integrarea și controlul senzorilor și motoarelor, utilizând tehnici de programare la nivel scăzut pentru a optimiza spațiul și eficiența. Am urmat principii și tehnici învățate în laboratoarele de GPIO și PWM pentru a asigura funcționarea corectă și eficientă a sistemului.
  
-<note tip> +==== Implementarea functionalitatilor ==== 
-Descrierea codului aplicaţiei (firmware)+=== Senzorul de linie === 
-  * mediu de dezvoltare ​(if any) (e.gAVR StudioCodeVisionAVR) +Pentru senzorul de linie, am utilizat manipularea directa a registrelor pentru a initializa si citi starea senzorului
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) + 
-  * algoritmi şi structuri pe care plănuiţi să le implementaţi +Am setat pinul corespunzator ca intrare si am activat rezistenta pull-up interna. 
-  * (etapa 3) surse şi funcţii implementate +Citirea starii pinului se face prin verificarea valorii in registrul PIN. 
-</​note>​+=== Senzorul ultrasonic === 
 +Senzorul ultrasonic a fost initializat si utilizat fara biblioteci Arduino, prin manipulari directe ale registrelor si prin functii de delay: 
 + 
 +Am setat pinul de declansare ​(TRIGca iesire si pinul de ecou (ECHO) ca intrare. 
 +Am implementat functii pentru trimiterea unui puls de declansare si pentru masurarea duratei raspunsului,​ calculand astfel distanta. 
 +=== Controlul motoarelor === 
 +Controlul motoarelor se realizeaza prin setarea directa a pinilor de control si utilizarea PWM pentru ajustarea vitezei: 
 + 
 +Am definit pinul de control pentru fiecare motor si am implementat functii pentru miscarea inainteinapoi, rotirea la stanga si la dreapta, si oprirea motoarelor. 
 +PWM este utilizat pentru a controla viteza motoarelor prin pinii de enable
 +=== Controlul servomotorului === 
 +Pentru servomotor, am folosit functii de manipulare directa a pinilor pentru a genera semnalul PWM necesar:
  
 +Am implementat o functie care roteste servomotorul intre 0 si 180 de grade, ajustand incrementul si delay-ul pentru a controla viteza rotatiei.
 +
 +=== Intrerupere bucla principala ===
 +De asemenea, pentru a nu folosi delay() in bucla principala, am ales sa folosesc o intrerupere. For performance reasons.
 +==== Logica principala ===
 +Codul principal include:
 +
 +Initializarea componentelor (senzori, motoare, servomotor).
 +Citirea si afisarea distantei masurate de senzorul ultrasonic la intervale regulate.
 +Verificarea senzorului de linie si numararea detectarilor consecutive.
 +Implementarea unei miscari alternative dupa 10 minute de functionare initiala.
 +Controlul miscarilor robotului pentru a evita obstacolele si a detecta linii.
 +Aceste implementari au fost realizate pentru a optimiza utilizarea resurselor si a imbunatati eficienta codului, oferind in acelasi timp un control precis asupra hardware-ului. Design-ul software urmeaza principiile de programare la nivel scazut pentru a maximiza performanta si a minimiza utilizarea memoriei.
 +
 +In concluzie, am folosit doar GPIO, PWM si Intreruperi pentru controlul senzorilor si motoarelor.
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
-<note tip> +{{:​pm:​prj2024:​avaduva:​ionescu_serban_picture_robot_under.jpg?​200|}} 
-Care au fost rezultatele obţinute în urma realizării proiectului vostru+{{:​pm:​prj2024:​avaduva:​ionescu_serban_picture_robot_above.jpg?200|}} 
-</​note>​+{{:​pm:​prj2024:​avaduva:​ionescu_serban_picture_robot_front.jpg?​200|}} 
 +{{:​pm:​prj2024:​avaduva:​ionescu_serban_picture_robot_diagonal.jpg?​200|}}
  
 +In final am obtinut un robot care se descurca cu deplasarea printr-o incapere.
 +Un rezultat negativ este faptul ca am un container pentru dezinfectant cu un arc prea puternic, si servomotorul nu poate de fiecare data sa pulverizeze eficient.
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Proiectul isi atinge majoritatea obiectivelor. Robotul se poate deplasa printr-o cladire fara a se lovi de obstacole, iar in cazul unei blocari, acesta isi poate reveni de unul singur. De asemenea, dupa terminarea curateniei, robotul nu va stationa in mijlocul drumului pentru a incurca trecatorii. O functionalitate la care inca trebuie lucrat ar fi modul de pulverizare cu solutie dezinfectanta. Solutia ar fi gasirea unui recipient cu un pulverizator mai fin, pentru a fi operat de servomotor. Proiectul a fost facut si cu intentia de a lucra cu functionalitati low-level ale arduino-ului,​ lucru care a fost obtinut prin controlul senzorilor si servomotorului in acest mod.
  
 ===== Download ===== ===== Download =====
  
-<note warning>​ +{{:pm:prj2024:avaduva:ionescu_serban.zip|}}
-O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului:​ surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună ;-). +
- +
-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**. +
-</​note>​ +
 ===== Jurnal ===== ===== Jurnal =====
  
Line 70: Line 99:
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
  
-<​note>​ +https://ocw.cs.pub.ro/courses/​pm/​lab/​lab2-2023  ​
-Listă cu documente, datasheet-uri,​ resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. +
-</note>+
  
-<​html><​a class="​media mediafile mf_pdf"​ href="?​do=export_pdf">​Export to PDF</a></html>+https://ocw.cs.pub.ro/​courses/​pm/​lab/​lab3-2023-2024  ​
  
 +https://​ww1.microchip.com/​downloads/​en/​DeviceDoc/​Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf
pm/prj2024/avaduva/serban.ionescu0609.1716782761.txt.gz · Last modified: 2024/05/27 07:06 by serban.ionescu0609
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