Mi-am propus realizarea unui pen plotter — un dispozitiv robotic capabil să deseneze automat pe hârtie. Un pix, fixat într-un suport mobil, este ghidat de un sistem mecanic cu două axe (X și Y), permițând trasarea cu precizie a contururilor imaginilor sau a textelor furnizate de utilizator. Robotul poate desena o varietate de forme, fie geometrice, fie preluate din imagini digitale, precum și caractere sau simboluri.
Orice imagine se poate transforma într-un șir de vectori. Cu acest robot, practic, am simulat o imprimantă, capabilă să reproducă orice de la forme simple și imagini, până la scris de mână.
Se poate utiliza la orice proiect artistic, întrucât, acest robot este un Pablo Picasso al PM Fair.
Proiectul are ca și controller un Arduino Uno peste care este montat un CNC Shield V3.
Am utilizat următoarele concepte:
Pin Arduino | Componentă legată | Pin componentă | Protocol | Funcție |
---|---|---|---|---|
D2 | CNC Shield (X) | STEP_X | GPIO | Controlează pașii motorului X |
D3 | CNC Shield (Y) | STEP_Y | GPIO | Controlează pașii motorului Y |
D5 | CNC Shield (X) | DIR_X | GPIO | Controlează direcția motorului X |
D6 | CNC Shield (Y) | DIR_Y | GPIO | Controlează direcția motorului Y |
D8 | CNC Shield | EN | GPIO | Activează/dezactivează driverele de motor |
D9 | Endstop | X_MIN | GPIO | Detectează limita stânga X |
D10 | Endstop | Y_MIN | GPIO | Detectează limita jos Y |
D11 | Servomotor SG90 | IN | PWM | Controlează pixul (sus/jos) |
D12 | Buton | DOWN | GPIO | Comandă pix jos |
D13 | Buton | UP | GPIO | Comandă pix sus |
A3 | Buton | START | GPIO | Comandă de pornire desen |
Pin Shield | Componentă legată | Pin componentă | Protocol | Funcție |
---|---|---|---|---|
STEP_X | Arduino D2 | - | GPIO | Pași motor X |
DIR_X | Arduino D5 | - | GPIO | Direcție motor X |
STEP_Y | Arduino D3 | - | GPIO | Pași motor Y |
DIR_Y | Arduino D6 | - | GPIO | Direcție motor Y |
EN | Arduino D8 | - | GPIO | Activare/Dezactivare motoare |
Pin Servo | Conectat la | Protocol | Funcție |
---|---|---|---|
IN | Arduino D11 | PWM | Control poziție pix |
GND | GND | Power | Ground |
VCC | 5V | Power | Alimentare servo |
Pin componentă | Conectat la | Protocol | Funcție |
---|---|---|---|
X_MIN | Arduino D9 | GPIO | Detectează capătul stânga X |
Y_MIN | Arduino D10 | GPIO | Detectează capătul jos Y |
Buton UP | Arduino D13 | GPIO | Ridică pixul |
Buton DOWN | Arduino D12 | GPIO | Coboară pixul |
Buton START | Arduino A3 | GPIO | Pornește rutina de desenare |
Denumire Piesă | Magazin | Nr | Preț (RON) | Link |
---|---|---|---|---|
Rulment 8x15x45mm | ZYX3D | 2 | 18 | Rulment LMU8 8x15x45 |
Rulment 8x15x25mm | Optimus Digital | 1 | 4.04 | Rulment Liniar LM8UU |
Motor pas cu pas | Optimus Digital | 2 | 33.99 | Motor Pas cu Pas 17HS4401 (1.7 A, 40 N⋅cm) |
Roata dintata 5mm | Sigmanortec | 2 | 4.59 | Fulie dintata GT2 20 dinti, ax 5mm |
Fulie dintata 3mm | Sigmanortec | 1 | 10.71 | Fulie rola intinzatoare GT2 3mm, 20 dinti |
Fulie dintata 5mm | Sigmanortec | 1 | 10.71 | Fulie rola intinzatoare GT2, 20 dinti, 5mm |
Fulie rola fara dinti 3mm | Sigmanortec | 1 | 10.98 | Fulie rola intinzatoare GT2, fara dinti, tip 16, 3mm |
Curea 6mm | Sigmanortec | 4 | 6.46 | Curea GT2 6mm |
Servomotor | Sigmanortec | 1 | 12.67 | Servomotor SG90 360 grade, continuu |
Arduino Uno R3 compatibil | Sigmanortec | 1 | 30.42 | Placa dezvoltare UNO R3 Arduino Compatibil, ATmega328p, CH340G, cu bara pini |
Suruburi si piulite | emag | 1 | 83.29 | Set Suruburi si Piulite Autocise, Inox, Rezistenta la Coroziune, Argintiu |
Driver pentru motoare | Optimus Digital | 2 | 7.99 | Driver pentru Motoare Pas cu Pas A4988 Rosu CNC 3d printer StepStick Stepper |
Switch | Sigmanortec | 2 | 6.35 | Endstop mecanic SS-5GL2 |
Scut Arduino CNC | Optimus Digital | 1 | 21.5 | A4988 CNC Shield v3 for Arduino |
Ventilator 30mm 5V | Sigmanortec | 1 | 8.04 | Fan 5V Raspberry Pi, 3030 |
Axa ghidaj 8mm (35cm x 2, 5.5cm x 1) | Reprapmania | 1 | 40.8 | Axa ghidaj 8mm |
Ghidaj liniar imprimanta 400mm | Optimus Digital | 1 | 119 | Ghid Liniar MGN12H 400 mm |
Cabluri (10m x 6 culori) | Optimus Digital | 1 | 44.99 | Plusivo PVC Insulated Wire Kit (22AWG, 6 colors, 10m each) |
Conector banana | Optimus Digital | 1 | 0.99 | Famale Banana Plug For Panel ( Red) |
Conector 5.5 x 2.1 mama | Sigmanortec | 1 | 3.57 | Conector 5.5x2.1 Mama cu surub |
Conector 5.5 x 2.5 mama | Sigmanortec | 1 | 3.68 | Conector 5.5x2.5mm, cu surub, Mama |
Conector mama Jack | Optimus Digital | 1 | 1.49 | Conector DC Jack mama 2.1 mm x 5.5 mm |
Alimentare 12V, 2A | Optimus Digital | 1 | 24.99 | 12 V 2000 mA Stabilized Power Supply |
Panou lemn 60×60 | Smartplusdeco | 1 | 99 | Blat pentru masa 600x600 mm, Stejar Bardolino Natur H1145 ST10 |
Marker negru | Optimus Digital | 2 | 1.49 | Marker Permanent Negru |
Conector mama-mama (x40) | Sigmanortec | 1 | 7.6 | 40 fire Dupont 10cm, Mama-Mama |
Conector tata-mama (x40) | Sigmanortec | 1 | 7.6 | 40 fire Dupont 10cm, Tata-Mama |
Am folosit PlatformIO integrat în VS Code. Am folosit Arduino.h, Servo.h și Stepper.h ca biblioteci externe.
Am creat următorul API pentru deplasarea într-un sistem de coordonate xOy folosind motoarele, respectiv pentru acționarea pixului:
// mută pixul la coordonata x = 0 void move_till_X_is_pressed(); // mută pixul la coordonata y = 0 void move_till_Y_is_pressed(); // mută pixul la coordonatele (x, y), măsurate în milimetri void move_to(long x, long y); // pune pixul în contact cu hârtia void put_down(); // ridică pixul de pe hârtie void put_up();
De exemplu, o secvență de cod care desenează un pătrat ar arăta așa:
// poziționăm robotul la coordoatele (0, 0) move_till_X_is_pressed(); move_till_Y_is_pressed(); // ne mutăm într-un colț al pătratului moveTo(100, 100); delay(500); // punem pixul pe hârtie put_down(); delay(500); // desenăm prima latură move_to(100, 150); delay(500); // desenăm a doua latură move_to(150, 150); delay(500); // desenăm a treia latură move_to(150, 100); delay(500); // desenăm a patra latură move_to(100, 100); delay(500); // ridicăm pixul de pe hârtie put_up();
Pentru generarea unor imagini mai complexe, am folosit un script de python care convertește, folosind OpenCV, o imagine într-o serie de instrucțiuni de ”move”, ”up” și ”down”. Instrucțiunile sunt încărcate în flash, de unde sunt executate linie cu linie de către robot.
Un exemplu de astfel de secvență arată așa:
72 18 DOWN 78 5 80 6 72 18 UP 138 21 DOWN 139 21 UP 137 22
Mai jos avem un video demonstrativ:
În stânga avem imaginea de la care am pornit. Script-ul a convertit-o într-un set de 499 de comenzi. Rezultatul se află în dreapta:
De asemenea, putem observa pipeline-ul și pentru o poză cu mai multe detalii artistice:
Proiectul a demonstrat cu succes posibilitatea construirii unui pen plotter funcțional folosind componente accesibile și programare pe platforma Arduino. Prin controlul a două motoare pas cu pas și a unui servomotor, am reușit să obținem mișcare bidimensională și control asupra instrumentului de scris.
Dispozitivul este capabil să deseneze forme geometrice simple (pătrat, triunghi, cerc), demonstrând precizie și repetabilitate în execuție. De asemenea, a fost integrată o logică de calibrare automată prin endstop-uri, precum și control manual prin butoane.
Dragă jurnal, iată drumul meu spre exprimarea mea artistică: