This shows you the differences between two versions of the page.
pm:prj2025:mdinica:razvan.baldovin [2025/05/25 19:38] razvan.baldovin Update descriere generala |
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 42: | Line 42: | ||
===== 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 | + | Astfel, inainte sa detaliem piesele pe care le-am achizitionat, hai sa detaliem putin cu ce lucram |
- | * rezultatele simulării | + | |
- | </note> | + | {{ :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.g. AVR Studio, CodeVisionAVR) | + | [[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 3) surse ş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 elementara, care 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 79: | 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 ===== |