Differences

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

Link to this comparison view

pm:prj2025:mdinica:razvan.baldovin [2025/05/05 12:20]
razvan.baldovin Added name of the project, my credentials and a short introduction
pm:prj2025:mdinica:razvan.baldovin [2025/05/30 09:37] (current)
razvan.baldovin Update software
Line 2: Line 2:
  
 <note tip> <note tip>
-Nume: Baldovin-Răzvan-Mihai-Marian+Nume: Baldovin Răzvan-Mihai-Marian
  
 Grupa: 332CA Grupa: 332CA
Line 22: Line 22:
 ===== Descriere generală ===== ===== Descriere generală =====
  
-<note tip> +{{ :​pm:​prj2025:​mdinica:​schemabloc.png?300 |}}
-O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează.+
  
-Exemplu de schemă blochttp://www.robs-projects.com/​mp3proj/​newplayer.html +Proiectul are ca și controller un **ESP32-S3-N16R8**,​ care va avea următoarele funcții: 
-</note>+  * Va prelua comenzi de la utilizator (precum înainte, înapoi, stânga, dreapta) 
 +  * Va comunica cu servomotorul,​ acționând comenzile de direcție (stânga și dreapta) 
 +  * Va comunica cu driverul de motor, acționând comenzile de propulsie (înainte și înapoi) 
 + 
 +Comunicația se va face astfel: 
 +  * ESP32 -> driver de motor (GPIO + PWM) 
 +  * ESP32 -servomotor (PWM) 
 +  * driver de motor -> motor (PWM) 
 + 
 +Din moment ce comenzile utilizatorului vor genera schimbări de stare, vom folosi și întreruperi.
  
 +Astfel, conceptele din laborator utilizate sunt:
 +  * GPIO
 +  * Întreruperi
 +  * PWM
 ===== Hardware Design ===== ===== Hardware Design =====
  
-<note tip> +Piesele au fost alese cu urmatoarele caracteristici in gand
-Aici puneţi tot ce ţine de hardware design+  * Dimensiunea spatiului util 
-  * listă de piese +  * Caracteristicile Lego-ului ​(pentru a putea misca Lego-ul)
-  * scheme electrice ​(se pot lua şi de pe Internet şi din datasheet-uri, e.g. http://​www.captain.at/​electronic-atmega16-mmc-schematic.png) +
-  * diagrame de semnal  +
-  * rezultatele simulării +
-</​note>​+
  
 +Astfel, inainte sa detaliem piesele pe care le-am achizitionat,​ hai sa detaliem putin cu ce lucram
 +
 +{{ :​pm:​prj2025:​mdinica:​lego_under.png?​500 |}}
 +
 +Avem aici 2 zone in care putem lucra:
 +  * Rosu - 10.4 x 5.5 x 3.2 cm (lungime x latime x inaltime)
 +  * Verde - 10.4 x 4.0 x 6.0 cm
 +  * Albastru - 8.0 x 5.5 x 6.0 cm
 +
 +(In functie de nevoie, putem alege intre verde si albastru ca spatiu (ambele sunt valide in situatia de fata)
 +
 +{{ :​pm:​prj2025:​mdinica:​lego_side.jpeg?​700 |}}
 +
 +Specificatii Lego:
 +  * Dimensiuni: 65.0 x 27.0 x 13.0 cm
 +  * Greutate: 1.4kg
 +  * Diametru roti: 8.0 cm
 +
 +Ca sa stabilim viteza cu care ar trebui sa se invarta motorul am facut urmatoarele calcule
 +
 +  - Calculam circumferinta rotii
 +    * circumferinta = π * diametru = π * 0.08 m = 0.2513 m
 +  - Calculam numarul de rotatii per minut al rotii
 +    * Presupunem o viteza de 10km/h
 +    * 10 km/h = 2.78 m/s
 +    * RPS roata = viteza / circumferinta = 2.78 m/s / 0.2513 m ≈ 11.06 RPS
 +    * RPM roata = RPS roata * 60 s = 11.06 * 60 = 664 RPM
 +  - Calculam numarul de rotatii per minut al motorului
 +    * Observam ca o rotatie a axului de motor reuseste sa invarta aproximativ jumatate de roata
 +    * RPM motor = RPM roata * 2 = 664 RPM * 2 = 1328 RPM
 +
 +Totusi, viteza motorului nu este totul, ne trebuie si destul cuplu cat sa putem pleca de pe loc
 +
 +  - Calculam forta de rezistenta la rulare
 +    * F rezistenta = coef de rezistenta la rulare * masa * gravitatia = 0.01 * 1.4kg * 9.81m/s^2 = 0.137N
 +    * coeficientul de rezistenta la rulare pentru cauciuc am gasit sa fie 0.01
 +  - Calculam Cuplul minim necesar
 +    * cuplu = F rezistenta * raza rotii = 0.137N * 4cm = 0,0055 N*m
 +    * transformam din N*m in kg * cm
 +    * 0.0055 N*m ≈ 0.056 kg * cm
 +  - Luam ca marja de eroare un factor de 4x, care sa tina cont de flexarea, rezistenta si frecarea pieselor Lego
 +    * cuplu final = cuplu minim * 4 = 0.056 kg * cm * 4 ≈ 0.2 kg * cm
 +
 +==== Bill of Materials ====
 +
 +^ Piesa                          ^ Cantitate ^ Pret           ^ Link ^
 +| ESP32-S3-N16R8 ​                | 1         | 5.75 (96% off) | [[https://​www.aliexpress.com/​item/​1005008089716920.html?​spm=a2g0o.order_list.order_list_main.5.5c1c18028T4YqN | AliExpress]] |
 +| Driver de motor TB6612FNG ​     | 1         | 24.99          | [[https://​www.optimusdigital.ro/​ro/​drivere-de-motoare-cu-perii/​134-tb6612fng-dual-motor-driver-1-a.html?​search_query=+Driver+de+Motoare+Dual+TB6612FNG+%281+A%29+&​results=1 | Optimus Digital]] |
 +| Modul DC-DC Step-Down LM2596 ​  | 1         | 16.49          | [[https://​www.optimusdigital.ro/​ro/​surse-coboratoare-reglabile/​805-modul-dc-dc-lm2596-cu-afisaj-de-tensiune.html?​search_query=+Modul+DC-DC+LM2596+cu+Afisaj+de+Tensiune+&​results=1 | Optimus Digital]] |
 +| Motor brushless FK-180SH-3244 ​ | 1         | 14.99          | [[https://​www.optimusdigital.ro/​ro/​motoare-fara-perii/​2364-motor-fara-perii-de-mare-viteza-fk-180sh-3244-13000-rpm-la-37-v.html?​search_query=FK-180SH-3244&​results=1 | Optimus Digital]] |
 +| Servomotor MG90S               | 1         | 19.33          | [[https://​www.optimusdigital.ro/​ro/​motoare-servomotoare/​271-servomotor-mg90s.html?​search_query=MG90S&​results=1 | Optimus Digital]] |
 +| Suport de Baterii 2 x 18650    | 1         | 3.99           | [[https://​www.optimusdigital.ro/​ro/​suporturi-de-baterii/​941-suport-de-baterii-2-x-18650.html?​search_query=+Suport+de+Baterii+2+x+18650+&​results=13 | Optimus Digital]] |
 +| 18650 LI-ION 3450mA 8A         | 4         | 26.18 * 4      | [[https://​www.emag.ro/​acumulator-18650-li-ion-3450ma-8a-samsung-lincr18650-35e-tp/​pd/​DWVV74MBM/?​ref=history-shopping_421527723_8383_1 | eMAG]] |
 +
 +==== Wiring ====
 +
 +{{ :​pm:​prj2025:​mdinica:​wiring.png?​700 |}}
 +
 +==== Pinout ====
 +
 +=== ESP32 ===
 +
 +^ Pin ESP ^ Componenta legata ​    ^ Pin componenta ^ Protocol ^ Functie ​                       ^
 +| 5Vin    | Modul DC-DC Step-Down | Vout+          | Power    | Sursa de 5V                    |
 +| GND     | Modul DC-DC Step-Down | Vout-          | Power    | Ground ​                        ​| ​
 +| GPIO10 ​ | Servomotor ​           | IN             | PWM      | Controleaza servomotorul ​      |
 +| GND     | Servomotor ​           | GND            | Power    | Ground ​                        |
 +| GPIO4   | Motor Driver ​         | AIN2           | GPIO     | Controleaza directia motorului |
 +| GPIO5   | Motor Driver ​         | AIN1           | GPIO     | Controleaza directia motorului |
 +| GPIO6   | Motor Driver ​         | PWMA           | PWM      | Controleaza viteza motorului ​  |
 +| GPIO7   | Motor Driver ​         | STBY           | GPIO     | Activeaza motor driverul ​      ​| ​
 +| GND     | Motor Driver ​         | GND            | Power    | Ground ​                        ​| ​
 +
 +=== Motor Driver ===
 +
 +^ Pin driver ^ Componenta legata ​    ^ Pin componenta ^ Protocol ^ Functie ​                       ^
 +| PWMA       | ESP32                 | GPIO6          | PWM      | Controleaza viteza motorului ​  |
 +| AIN2       | ESP32                 | GPIO4          | GPIO     | Controleaza directia motorului |
 +| AIN1       | ESP32                 | GPIO5          | GPIO     | Controleaza directia motorului |
 +| STBY       | ESP32                 | GPIO7          | GPIO     | Activeaza motor driverul ​      ​| ​
 +| GND        | ESP32                 | GND            | Power    | Ground ​                        |
 +| VM         | Modul DC-DC Step-Down | Vout+          | Power    | Alimentare motor               |
 +| VCC        | Modul DC-DC Step-Down | Vout+          | Power    | Alimentare logica ​             |
 +| A1         | Motor                 | VCC            | Power    | Activeaza motorul ​             |
 +| A2         | Motor                 | GND            | Power    | Ground ​                        |
 ===== Software Design ===== ===== Software Design =====
  
 +Initial am vrut sa fac o aplicatie mobila pentru a utiliza BLE (care este ceva mai responsiv), insa avand acces doar la iPhone si neavand Mac, nu am putut gasi metode "​oficiale"​ de a dezvolta aplicatii (deoarece, din cate am gasit pe net, iti trebuie Xcode care se gaseste doar pe sisteme MacOS)
  
-<note tip> +Astfel, am ales sa folosesc a doua cea mai buna optiune, care este spre norocul meu si universala, un web server hostat local care controleaza masina ​(design-ul a fost creat cu urmatorul gand, ca sa controlezi masina trebuie sa o vezi/​urmaresti,​ deci ar avea mai mult sens sa fie orientata catre un telefon, in loc de laptop) 
-Descrierea codului aplicaţiei ​(firmware): + 
-  * mediu de dezvoltare (if any) (e.gAVR StudioCodeVisionAVR) +[[https://​github.com/​2amazing4me/​Lego-Technic-RC-mod | Link GitHub]] 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib+ 
-  * algoritmi şi structuri ​pe care plănuiţi să le implementaţi +Codul a fost dezvoltat in Arduino IDE. 
-  * (etapa 3surse şi funcţii implementate + 
-</note>+Am folosit urmatoarele biblioteci
 +  * ESP32Servo.h - Pentru a controla servomotorul prin functii predefinite 
 +  * WiFi.h - Pentru a permite conexiunea la Wi-Fi 
 +  * WebServer.h - Pentru a crea un server web local 
 + 
 +Am creat o pagina web destul de elementaracare are doua slidere: 
 +  * Cel din stanga are rolul unui volan, astfel se ocupa de virat stanga-dreapta 
 +  * Cel din dreapta are rolul de a propulsa/​opri masina ​(inainte-inapoi) 
 + 
 +Flow-ul programului:​ 
 +  * Se initializeaza conexiunea WiFi 
 +  * Se initializeaza serverul web (pe o adresa locala, deci trebuie sa ne aflam in aceeasi retea) 
 +  * Asteapta input de la utilizator prin serverul web 
 +  * Comenzile, sunt transformate in semnale PWM catre componentele respective:​ 
 +    * Slider stanga -> servomotor ​(intre 0 si 180
 +    * Slider dreapta -motor (intre -255 (maxim inapoi) si 255 (maxim inainte))
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
Line 67: Line 176:
 ===== Jurnal ===== ===== Jurnal =====
  
-<note tip> +24.04.2025-26.04.2025 - Am inceput researchul, cautand piese potrivite pentru proiect. Am pornit cu aproape 0 cunostinte despre proiectul pe care vreau sa il fac asa ca a trebuit sa fac ore intregi de research (cateva dintre calculele si gandurile importante sunt reprezentate in sectiunde de Hardware Design) 
-Puteți avea și o secțiune ​de jurnal în care să poată urmări asistentul ​de proiect ​progresul ​proiectului+ 
-</​note>​+26.04.2025 - Am dat comanda finala ​de piese 
 + 
 +07.05.2025 - Au ajuns toate piesele 
 + 
 +08.05.2025 - Cu ajutorul unui prieten, am printat 3D niste conectori servomotor-Lego axle si motor-Lego axle 
 + 
 +18.05.2025 - Folosind diverse datasheet-uri si videouri pe youtube, am reusit sa prototipez hardwareul ​care va da viata masinii. Am creat un cod simplu care ruleaza un PWM de la 0 la 255 ca sa verific, si am decis sa sudez majoritatea circuitului pentru a ma asigura ca nu voi pierde ​progresul ​facut
 + 
 +19.05.2025 - Am incercat sa conectez hardware-ul la masina din Lego, siii.... nu a functionat :( 
 + 
 +19.05.2025 - Am identificat urmatoarele probleme: 
 +  * Servomotorul (SG90) nu era destul de puternic pentru steering 
 +  * Motorul se rotea in gol, deoarece conectorul nu statea fix pe acesta 
 +  * Devboard-ul este prea mare ca sa incapa in Lego 
 + 
 +21.05.2025 - Am gasit urmatoarele solutii: 
 +  * Am achizitionat un servomotor mai puternic (MG90S) 
 +  * Am printat un conector 3D reglabil, pentru a putea strange mai mult ca motorul sa poata transmite putere la Lego 
 +  * Daca scot ESP32-ul din Devboard, si schimb din fire tata-tata in fire tata-mama, poate incapea totul 
 + 
 +23.05.2025 - Din cauza unei singure piese din Lego, nu incapea motorul cu noul conector, am stat undeva la 2 ore pentru a desface masina (si documenta, pentru a o reface la loc :)) ), urmata de a muta piesa mai in spate pentru a crea spatiu, iar apoi reasamblat. 
 + 
 +23.05.2025 - Din nou, am observat ca motorul se invarte in gol, chit ca am strans mai mult piesa 3D. 
 + 
 +24.05.2025 - Am incercat sa adaug diferite bucati subtire de material intre motor si conector ca sa incerc sa conectez mai bine si sa adaug frecare (poate-poate merge). Din pacate nu a mers, tot se invarte in gol. 
 + 
 +28.05.2025 - Am desfacut lipiturile vechi pentru a putea inlocui cu fire tata-mama pentru a putea scapa de dev board. 
 + 
 +28.05.2025 - Am incercat sa actionez MG90S, dar nu am avut succes, am schimbat temporar inapoi la SG90 pana gasesc o solutie mai buna 
 + 
 +29.05.2025 - Am incercat sa mai printez inca un conector pentru motor. (fara succes, problema finala este puterea :( ) 
 + 
 +29.05.2025 - Am folosit un alt motor (TT motor), si ARE DESTULA PUTERE SA MISTE MASINA :-D 
 + 
 +29.05.2025 - Update-uri la cod, pagina, si finalizare proiect pentru prezentare
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
pm/prj2025/mdinica/razvan.baldovin.1746436818.txt.gz · Last modified: 2025/05/05 12:20 by razvan.baldovin
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