Table of Contents

Picasso - The Robotic Reincarnation

Introducere

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.

Descriere generală

Proiectul are ca și controller un Arduino Uno peste care este montat un CNC Shield V3.

Am utilizat următoarele concepte:

Hardware Design

Pinout

Arduino Uno

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

CNC Shield V3

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

Servomotor SG90

Pin Servo Conectat la Protocol Funcție
IN Arduino D11 PWM Control poziție pix
GND GND Power Ground
VCC 5V Power Alimentare servo

Endstop-uri & Butoane

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

Bill of materials

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

Wiring

Software Design

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

Rezultate Obţinute

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:

Concluzii

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.

Github

https://github.com/deniscovei/arduino_pen_plotter/

Jurnal

Dragă jurnal, iată drumul meu spre exprimarea mea artistică:

Bibliografie/Resurse

Corelația pinilor pe CNC shield cu Arduino: