This shows you the differences between two versions of the page.
pm:prj2025:atoader:alexandru.stefan03 [2025/05/12 05:32] alexandru.stefan03 |
pm:prj2025:atoader:alexandru.stefan03 [2025/05/28 02:06] (current) alexandru.stefan03 [Concluzii] |
||
---|---|---|---|
Line 28: | Line 28: | ||
* **Modul SD + Card SD (SPI)** | * **Modul SD + Card SD (SPI)** | ||
- | - Stochează fișierele cu modelele de desen. | + | - Stochează timestamp-uri pentru desen. |
- Arduino accesează datele prin SPI. | - Arduino accesează datele prin SPI. | ||
Line 56: | Line 56: | ||
=== Listă de piese === | === Listă de piese === | ||
- | * Arduino UNO | + | * Arduino UNO R3 |
- | * Driver motoare | + | * Driver motoare ULN2003 |
- | * 2x motoare | + | * 2x motoare stepper 28BYJ-48 |
* Modul SD Card + card microSD | * Modul SD Card + card microSD | ||
- | * Display | + | * LCD 1602 cu I2C |
- | * 2-3 butoane | + | * 1 buton |
* Breadboard | * Breadboard | ||
* Fire de legătură | * Fire de legătură | ||
Line 73: | Line 73: | ||
* Magneti neodim pentru controlul bilei | * Magneti neodim pentru controlul bilei | ||
+ | {{:pm:prj2025:atoader:poza_hard_bubu.jpeg?300|}} | ||
+ | ==== Bill of Materials (BOM) ==== | ||
+ | ^ Nr. ^ Componentă ^ Descriere | | ||
+ | | 1 | Arduino UNO R3 | Microcontroller principal | | ||
+ | | 2 | 2x 28BYJ-48 + 2x ULN2003 Driver | Motoare pas cu pas + drivere ULN2003 | | ||
+ | | 3 | LCD 1602 I2C | Display pentru afișare moduri desen | | ||
+ | | 4 | Micro SD Card Adapter | Modul scriere fișiere pe Micro SD | | ||
+ | | 5 | Buton push | Selectare mod desen | | ||
+ | | 6 | Breadboard 800 puncte | Pentru conexiuni temporare | | ||
+ | | 7 | Fire (40 bucăți) | Conexiuni între componente | | ||
+ | | 8 | Sursă alimentare 5V | Alimentare pentru Arduino | | ||
+ | | 9 | Bila metalică + magnet neodim | Componente mecanice pentru desen | | ||
+ | |||
+ | | ||
+ | |||
+ | ==== Funcționalitate hardware ==== | ||
+ | |||
+ | Dispozitivul se bazează pe un Arduino UNO, care controlează două motoare pas cu pas 28BYJ-48, fiecare legat la un driver ULN2003. Cele două motoare mișcă un magnet într-un plan XY sub o tavă cu nisip, ghidând o bilă metalică pentru a desena modele. | ||
+ | |||
+ | LCD-ul 1602 comunică cu Arduino prin interfață I2C și afișează modul curent de desen. | ||
+ | |||
+ | Modulul SD este conectat prin interfață SPI și scrie fișiere `.TXT` pe un SD Card log-urile. | ||
+ | |||
+ | Butonul permite utilizatorului să schimbe între diverse moduri de desen. | ||
+ | |||
+ | ==== Pini folosiți (Arduino UNO) ==== | ||
+ | |||
+ | ^ Componentă ^ Pin Arduino ^ Tip conexiune ^ Detalii tehnice ^ | ||
+ | | Stepper 1 | D8-D11 | PWM| Control IN1-IN4 prin ULN2003 | | ||
+ | | Stepper 2 | D4-D7 | PWM| Control IN1-IN4 prin ULN2003 | | ||
+ | | LCD I2C | A4 (SDA), A5 (SCL) | I2C | Comunicare I2C standard la 0x27 | | ||
+ | | CH376S | D0 (RX), D1 (TX) | SPI| Comunicarea SPI pentru citirea SD Card | | ||
+ | | Buton | D12 | Digital Input | | ||
+ | |||
+ | |||
+ | {{:pm:prj2025:atoader:screenshot_2025-05-20_005906.png?600|}} | ||
- | Aici puneţi tot ce ţine de hardware design: | ||
- | * listă de piese | ||
- | * 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 | ||
===== Software Design ===== | ===== Software Design ===== | ||
+ | |||
+ | ==== Descrierea codului aplicației (firmware) ==== | ||
+ | |||
+ | * **Mediu de dezvoltare:** Arduino IDE, programarea s-a realizat în limbajul C/C++ specific platformei Arduino. | ||
+ | | ||
+ | * **Librării și surse 3rd-party:** | ||
+ | * `Stepper.h` – folosită pentru controlul motoarelor pas cu pas 28BYJ-48 prin driverele ULN2003. | ||
+ | * `LiquidCrystal_I2C.h` – pentru controlul unui ecran LCD 1602 prin interfața I2C (cu backlight). | ||
+ | * `SPI.h` și `SD.h` – pentru inițializarea și operarea modulului de card microSD pe magistrala SPI. | ||
+ | | ||
+ | * **Algoritmi și structuri implementate:** | ||
+ | * Mișcare sincronă a celor două motoare folosind funcția personalizată `stepTogether`, care calculează pașii proporțional în funcție de traiectoria dorită. | ||
+ | * Funcții abstracte `stepX` și `stepY` pentru a naviga în planul X/Y, care țin cont de limitele de mișcare și actualizează poziția curentă. | ||
+ | * Implementare a două moduri de desen: **zigzag** și **spirală**, selectabile cu un buton și afișate pe ecranul LCD. | ||
+ | * Algoritm PWM software (cu `digitalWrite` și `delayMicroseconds`) pentru controlul vizual pe un LED conectat la pin analogic. | ||
+ | * Comenzi seriale interpretate în `loop()` pentru a permite controlul manual al brațului desenator din tastatură (WASD și alte shortcut-uri). | ||
+ | | ||
+ | * **Funcții implementate principale:** | ||
+ | * `drawZigZag(int size)` – desenează modelul zigzag pe întreaga suprafață. | ||
+ | * `drawSquareSpiral(int size)` – desenează o spirală pătrată cu pasul specificat. | ||
+ | * `stepX(int steps)` și `stepY(int steps)` – mută bila în plan pe axele X/Y. | ||
+ | * `center()` și `goHome()` – repoziționează bila în centrul sau la originea suprafeței. | ||
+ | * `logFile = SD.open(...)` – scrie un log cu tipul desenului și timpul de execuție în milisecunde. | ||
+ | |||
+ | ---- | ||
- | <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> | ||
===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
- | <note tip> | + | * [[https://youtube.com/shorts/D8XvRboe0RU|Desenare (Sand Drawing)]] |
- | Care au fost rezultatele obţinute în urma realizării proiectului vostru. | + | * [[https://youtube.com/shorts/DJ0Bj3kJju0|Selectare moduri]] |
- | </note> | + | * [[https://youtube.com/shorts/nIZXOoKpGAE|Control PWM pe LED]] |
+ | |||
+ | |||
===== Concluzii ===== | ===== Concluzii ===== | ||
- | ===== Download ===== | + | Proiectul „Sand Drawing Machine” a fost o oportunitate excelentă de a combina partea de hardware cu cea software într-o aplicație creativă și interactivă. Utilizând un Arduino Uno, două motoare pas cu pas 28BYJ-48 și un ecran LCD cu interfață I2C, am reușit să construiesc un dispozitiv care poate desena modele precum spirale și zigzaguri într-un strat de nisip, cu ajutorul unei bile metalice ghidate magnetic. |
- | <note warning> | + | Pe parcursul dezvoltării am întâlnit provocări legate de sincronizarea motoarelor, controlul precis al poziției, citirea de pe cardul SD și afișarea informațiilor pe LCD, dar toate acestea au fost depășite prin testare și implementarea unor soluții personalizate. |
- | 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**. | + | Funcționalitățile software, precum controlul PWM al LED-ului, salvarea logurilor pe cardul SD și comutarea modurilor prin buton, au adus un plus de interactivitate proiectului. Am învățat importanța gestionării resurselor hardware limitate ale microcontrollerului, precum și avantajele modularizării codului în funcții clare. |
- | </note> | + | |
+ | Consider că proiectul poate fi extins în viitor prin adăugarea unor senzori pentru auto-calibrare, integrarea unei aplicații mobile pentru control de la distanță sau adăugarea unor modele mai complexe citite de pe fișiere externe. | ||
+ | |||
+ | **În concluzie**, Sand Drawing Machine demonstrează cu succes cum pot fi combinate cunoștințele de electronică, programare și design pentru a crea un sistem funcțional, estetic și educativ. | ||
+ | |||
+ | ===== Download ===== | ||
- | ===== Jurnal ===== | + | {{:pm:prj2025:atoader:cod_sand_drawing.zip|}} |
- | <note tip> | ||
- | Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului. | ||
- | </note> | ||
- | ===== Bibliografie/Resurse ===== | ||
- | <note> | ||
- | 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> | ||