Grupa: 332CA
Odată cu explozia în popularitate a Formulei 1 de acum câțiva ani, am început și eu să urmăresc acest sport. Încă de la început m-a atras echipa McLaren și în special Lando Norris, care, deși nu câștiga curse atunci când am început eu să urmăresc F1, a reușit între timp să urce pe prima treaptă a podiumului. Chiar dacă McLaren nu era cea mai puternică echipă în acea perioadă, am rămas un fan al lor.
În 2022, LEGO a lansat un set Technic cu monopostul McLaren de Formula 1, la scară 1:8, semi-funcțional, în stilul clasic Technic. Am economisit bani, iar spre finalul anului am reușit să-l cumpăr. Asamblarea a durat două zile (cu tot cu pauze), urmate de săptămâni întregi în care pur și simplu am admirat cum o echipă de ingineri a reușit să creeze acest model de la zero, DIN LEGO.
Dar încă din secunda în care am terminat construcția, m-am gândit: „Are suspensii, volan funcțional, motor V6 care învârte roțile… Scheletul e acolo, ar fi mișto să o pot conduce!” Din păcate, am rămas mult timp doar cu gândul acesta, fiind descurajat de lipsa experienței în „ingineria adevărată”. Știam să scriu cod, dar nu aveam nicio idee cum să transform această idee în realitate.
Și aici intervine materia PM. Când am aflat că trebuie să realizăm un proiect cu un microcontroller și că avem libertatea să alegem orice temă, atâta timp cât îndeplinește cerințele minime, am știut imediat ce voi face. A sosit momentul să-i dau viață mașinii.
Acum că știți povestea din spatele deciziei, e timpul să vedem și implementarea.
Proiectul are ca și controller un ESP32-S3-N16R8, care va avea următoarele funcții:
Comunicația se va face astfel:
Din moment ce comenzile utilizatorului vor genera schimbări de stare, vom folosi și întreruperi.
Astfel, conceptele din laborator utilizate sunt:
Piesele au fost alese cu urmatoarele caracteristici in gand:
Astfel, inainte sa detaliem piesele pe care le-am achizitionat, hai sa detaliem putin cu ce lucram
Avem aici 2 zone in care putem lucra:
(In functie de nevoie, putem alege intre verde si albastru ca spatiu (ambele sunt valide in situatia de fata)
Specificatii Lego:
Ca sa stabilim viteza cu care ar trebui sa se invarta motorul am facut urmatoarele calcule
Totusi, viteza motorului nu este totul, ne trebuie si destul cuplu cat sa putem pleca de pe loc
Piesa | Cantitate | Pret | Link |
---|---|---|---|
ESP32-S3-N16R8 | 1 | 5.75 (96% off) | AliExpress |
Driver de motor TB6612FNG | 1 | 24.99 | Optimus Digital |
Modul DC-DC Step-Down LM2596 | 1 | 16.49 | Optimus Digital |
Motor brushless FK-180SH-3244 | 1 | 14.99 | Optimus Digital |
Servomotor MG90S | 1 | 19.33 | Optimus Digital |
Suport de Baterii 2 x 18650 | 1 | 3.99 | Optimus Digital |
18650 LI-ION 3450mA 8A | 4 | 26.18 * 4 | eMAG |
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 |
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 |
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)
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)
Codul a fost dezvoltat in Arduino IDE.
Am folosit urmatoarele biblioteci:
Am creat o pagina web destul de elementara, care are doua slidere:
Flow-ul programului:
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.
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)
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:
21.05.2025 - Am gasit urmatoarele solutii:
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
29.05.2025 - Update-uri la cod, pagina, si finalizare proiect pentru prezentare