2D Plotter

Introducere

Proiectul constă în dezvoltarea un plotter 2D care translatează fișiere bitmap în trasee vectoriale și, ulterior, în cod G‑code executat fizic pe două axe X și Y. Ansamblul realizează mișcarea plană cu două motoare pas‑cu‑pas NEMA 17 și două drivere DRV8825 montate pe un Arduino Uno ce rulează firmware GRBL 1.1. Ridicarea și coborârea instrumentului de scris sunt gestionate de un servo MG90S, iar alimentarea întregului sistem se face dintr‑un adaptor de 12 V / 2 A.

Scopul practic al dispozitivului este producerea rapidă și ieftină de desene liniare, șabloane tehnice, etichete sau semnături mecanizate. Utilizatorul poate obține contururi precise, fără a apela la imprimante specializate sau la echipamente CNC de gabarit mai mare.

Ideea de pornire a fost realizarea unui echipament minimal XY care să convertească direct fișiere grafice în mișcări controlate pentru a oferi o soluție de trasare precisă destinată aplicațiilor de uz laborator: desenarea măștilor PCB cu marker rezistent la acid, generarea de șabloane tehnice sau contururi de piese, etc.

Descriere generală

                     ┌────────────────────┐  USB‑Serial  ┌────────────────────┐
   PNG / SVG / G‑code│        APP         │─────────────►│   Arduino Uno      │
 conversie & control │  (vectorizare +    │              │                    │
                     │  generare G‑code)  │              └─────────┬──────────┘
                     └────────────────────┘                        │
                                                                   │step/dir
                                                                   ▼
                                                      ┌─────────────────────────┐
                                                      │  DRV8825 (axa X)        │──► NEMA 17 X
                                                      ├─────────────────────────┤
                                                      │  DRV8825 (axa Y)        │──► NEMA 17 Y
                                                      └─────────────────────────┘
                                                                   │PWM
                                                                   ▼
                                                       Servo MG90S (pen up/down)
                     ┌────────────────────┐                        ▲
                     │  End‑stop‑uri X,Y  │──────digital───────────┘
                     └────────────────────┘
                     12 V / 2 A adaptor ───────────────► Magistrală 12 V (DRV8825, Servo)

  • Modulul software de pe PC realizează întregul lanț de procesare al imaginilor: încarcă fișierul PNG, îl vectorizează, filtrează nodurile inutile și convertește traseele obținute în comenzi G‑code. Aceleași utilitare trimit apoi fluxul de G‑code prin interfața USB către microcontroler.
  • Pe Arduino Uno rulează firmware‑ul GRBL 1.1, care primește instrucțiunile, calculează planul de accelerație și generează impulsurile STEP și semnalele DIR pentru fiecare axă. Axa X și axa Y sunt acționate de cele două drivere DRV8825; fiecare driver convertește semnalele logice pentru motoarele pas‑cu‑pas NEMA 17. Pe ieșirea PWM se furnizează un semnal proporțional, folosit aici pentru deplasarea servo‑ului MG90S care ridică și coboară instrumentul de scris.
  • Toate elementele de putere — driverele, motoarele și servo‑ul — sunt alimentate dintr‑un adaptor stabilizat de 12 V, în timp ce logica Arduino este alimentată prin magistrala USB.

PNG → SVG → G‑code → GRBL → STEP/DIR → mișcare fizică.

Hardware Design

Aici puneţi tot ce ţine de hardware design:

Software Design

Codul aplicației se împarte în două module:

  • Preprocesarea datelor
    • citeşte un fişier G-code
    • converteşte mişcările G0/G1 în paşi pe X şi Y;
    • generează un fişier CSV/stream serial cu triplete dir_x, dir_y, delay_us;
    • inserează comenzi speciale „8,8,8” = PEN DOWN şi „9,9,9” = PEN UP.
  • Embedded code
    • citeşte tripletele prin UART (115 200 baud);
    • setează direcţiile pe driverele de pas (X_DIR, Y_DIR);
    • emite impulsuri STEP de 8 µs pe axele X/Y;
    • comută servomotorul (0° = UP, 90° = DOWN);

Pentru generare fisierelor G-code din imagini, folosesc GRBL Plotter v1.7.5.3

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

Concluzii

Download

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.

Jurnal

13 MAI 2025

Progres

HARDWARE

  • Am finalizat proiectarea si printarea 3D a pieselor:
    1. Doua suporturi pentru profilul de aluminiu
    2. Doua suporturi pentru prinderea motoarelor
    3. Doua suporturi pentru prinderea scripetelor
    4. Doua cadre pentru intersectia celor doua profile (Ox si Oy)
    5. Suportul pentru prinderea placutei Arduino
    6. Sistemul de prindere si manevrare a uneltei de scris + servomotor
  • Am fixat cele doua profile de aluminiu
  • Am prins stepperele NEMA-17 si scripetii de suporturile printate
  • Cu ajutorul unor piulite pentru canal T am fixat suporturile de profilul de aluminiu
  • Am fixat provizoriu benzile dintate cu elastice
  • Am conectat shield-ul, stepperele si driverele de motor pe placuta

SOFTWARE

  • Nu am implementat nimic software, insa am decis sa renunt la GRBL si sa implementez propriul cod de acceleration ramping si generare de semnale STEP/DIR pentru fiecare axa
  • Pentru vectorizarea imaginilor voi folosi cel mai probabil InkScape + un algoritm de optimizare a traseelor vectoriale:
    1. Eliminare puncte redundante (ex. cele coliniare)
    2. Eliminare linii foarte mici/nesemnificative
    3. Combinarea liniilor continue

20 MAI 2025

Progres

HARDWARE

  • Am facut stepperele functionale prin modificarea Vref-ului de pe drivere (Vref = Imax/2, in cazul meu Vref=0.85) si prin a face switch intre bobinele de la bornele sale (au venit inversate din fabrica).
  • Am facut jumper enable pe toate cele 3 perechi de pini de sub driverele DRV8825 pentru a putea face pasi 1/32 lipind cate un picior de rezistor intre fiecare 2 pini. (nu aveam jumpere asa ca am improvizat un pic:-P)

SOFTWARE

  • Am implementat codul pentru vecrtorizarea si crearea path-ului pentru imagini:
    1. extrag toate punctele;
    2. curat duplicatele;
    3. scalez si pun offset-uri pentru margini
    4. fac conversie din puncte → pasi
    5. generez comenzile pentru a calcula rampe trapezoidale
    6. export intr-un csv: [dix_x:{0-down;1-up}, dir_y:{0-down;1-up}, delay_us]
  • Am implementat codul embedded pentru plotter:
    1. citesc serial din monitor csv-ul
    2. creez impulsurile pentru motoare in functie de datele citite

Bibliografie/Resurse

Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe Resurse Software şi Resurse Hardware.

Export to PDF

pm/prj2025/rnedelcu/sebastian.hutanu.txt · Last modified: 2025/05/28 15:41 by sebastian.hutanu
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