Pixel Art
Slide

Video
Machine Week — Fab Academy 2025 · Fablab KOCHI
A CoreXY bead-placement machine that translates digital pixel art into physical monochrome art. Machine moves a bead dropper over a perforated acrylic sheet, dropping black or white beads into a grid of holes , one bead per pixel.
Group Assignment:
- design a machine that includes mechanism+actuation+automation+function+user interface
- build mechanical parts and operate it manually
- document group project and your individual contribution
Team
| Member | Role | GitHub |
|---|---|---|
| Nadec Biju | Machine Gantry (CoreXY) | @NB6RULES |
| Kevin J Jijo | End Effector | @mrkubby |
| Merin | Electronics & Documentation | @merinmenamparambil |
| Architha B K | Firmware & Presentation | @architabk618-hue |
| Kurian | Interface & Fabrication | @appukurian |
Concept
Idea was to build a machine that could physically recreate pixel art, retro, grid-based aesthetic of early video game graphics, using real beads on an acrylic substrate. Instead of printing or drawing, machine places beads: each pixel in digital image becomes one physical bead dropped into a hole.
Perforated acrylic sheet acts as fixed grid. CoreXY gantry moves bead dropper to each hole position in sequence, activates correct feeder (black or white), drops one bead, and moves to next. Result: tactile, physical pixel art panel you can hold.
Early concept sketch, machine layout and bead-drop mechanism
Software pipeline: Image → Dithering / Thresholding → Grid Mapping → G-code → ESP32-GRBL → Machine
Design goals: 400 × 400 mm working area, configurable bead resolution (2–10 mm), open-source ESP32 firmware, and a browser-based interface so machine can be driven from any device over Wi-Fi without installing software.
Specifications
| Property | Value |
|---|---|
| Project Name | Pixel Art Machine |
| Machine Type | CoreXY bead-placement CNC |
| Build Area | 400 × 400 mm |
| Bead Diameter | 6.5 mm |
| Resolution | 6.5 mm per pixel (one bead per hole) |
| Color Mode | Monochrome — black & white beads |
| Frame | 2020 aluminium V-slot extrusion |
| Controller | ESP32 + grbl_esp32 |
| Motors | 2× NEMA17 stepper (CoreXY XY axes) |
| Belt | GT2 timing belt, 16T/20T pulleys |
| Substrate | Perforated acrylic sheet |
| Team | Nadec, Kevin, Merin, Architha, Kurian |
| Lab | Fablab KOCHI, Kerala, India |
Machine Breakdown
Core-XY Motion
By Nadec Biju
Motion system uses a CoreXY belt arrangement: two NEMA17 stepper motors mounted at back of frame, each driving a continuous GT2 belt. Both belts connect to same carriage. X motion = same direction; Y motion = opposite direction. This keeps moving mass low and enables fast diagonal moves.
Frame
Frame constructed from 2020 V-slot aluminium extrusion. V-slot wheels on carriage ride in profile grooves, providing smooth linear motion without separate linear rails. Corner brackets and printed motor mounts complete structure.
Key Components
| Component | Specification |
|---|---|
| Motors | 2× NEMA17 stepper |
| Belt | GT2 2 mm pitch timing belt |
| Pulleys | 16T / 20T GT2, 625 bearing idlers at corners |
| Frame | 2020 V-slot aluminium extrusion |
| Carriage | V-slot polycarbonate wheels + eccentric nuts |
| Work area | 400 × 400 mm |
3D Model
Full assembly was designed in SolidWorks. A first-draft 3D model available on Sketchfab:
References
- CoreXY.com — belt routing geometry and kinematics
- Jubilee (Machine Agency) — open-source CoreXY gantry reference
Electronics & Control Board
By Merin
Electronics based on an ESP32 development board running grbl_esp32. Stepper drivers: DRV8825 modules. Power comes from a 12 V supply via a barrel jack.
Bill of Materials — Electronics
| Component | Specification |
|---|---|
| Microcontroller | ESP32 development board |
| Stepper drivers | DRV8825 (×2 for XY) |
| Power supply | 12 V DC |
| Limit switches | ×2 (X, Y) |
| Feeder outputs | M3 (black), M4 (white) via spindle pins |
| Communication | USB serial & Wi-Fi (ESP32 native) |
ESP32's built-in Wi-Fi means G-code can be streamed wirelessly from interface — no USB cable needed during normal operation. NeoPI_Wireless approach used for wireless G-code streaming layer.

Firmware — grbl_esp32
By Architha B K
Machine runs grbl_esp32 by bdring — a port of original GRBL motion controller adapted for ESP32. It handles real-time step generation, acceleration planning, G-code parsing, and Wi-Fi communication out of box.
CoreXY Kinematics
grbl_esp32 supports CoreXY natively. Kinematic transform applied at firmware level — interface sends standard X/Y G-code and firmware resolves it to motor A/B steps:
steps_A = steps_X + steps_Y; // Motor A (left) steps_B = steps_X - steps_Y; // Motor B (right)
G-code Command Reference
| Command | Description |
|---|---|
| G21 | Set units to mm |
| G90 | Absolute positioning |
| G28 | Home all axes |
| G0 Xn Yn F3000 | Rapid move to hole position |
| G4 Pn | Dwell n ms — wait for bead to seat |
| M3 S100 | Black bead feeder ON (spindle CW) |
| M4 S100 | White bead feeder ON (spindle CCW) |
| M5 | Feeder OFF |
| M30 | End of program |
Feeder command only changes when bead color changes — unnecessary M3/M4 transitions skipped to keep G-code compact.
Bead Dropper End Effector
By Kevin J Jijo
End effector: bead dropper mechanism mounted on CoreXY carriage. It holds a hopper of beads (sorted by color) and releases one bead on command when carriage positioned over a hole.
Actuation via a servo or solenoid that gates bead channel. A short dwell (G4 Pn) after each move gives bead time to fall and seat in hole before carriage moves on.
Specifications
| Property | Value |
|---|---|
| Actuation | Servo / solenoid gate |
| Bead diameter | 6.5 mm |
| Bead colors | Black, white (monochrome) |
| Feeder trigger | M3 (black) / M4 (white) G-code commands |
| Substrate | Perforated acrylic sheet, hole pitch = bead size |
| Material | 3D-printed PLA mount + hopper |
Parametric design: bead size and hole pitch configurable — same end effector works with any bead diameter by reprinting channel insert. Interface's bead-size setting must match physical bead used.
Pixel Bead Placer — Web Interface
By Kurian
Kurian built a fully browser-based tool — no installation required. It provides a pixel canvas editor, an image importer, and a G-code generator that outputs GRBL 1.1 / grbl_esp32 compatible code.
Features
- Configurable bead size (1–200 mm) → recalculates grid automatically
- Pen (black) and eraser (white) tools for manual pixel editing
- Image import — any PNG/JPG auto-dithered to the grid resolution
- One-click G-code generation — downloads as bead_art.gcode
- Snake-path toolpath (even rows L→R, odd rows R→L) to minimise travel
- Feeder switching: only emits M3/M4 when color actually changes
G-code Output Structure
gcode G21 ; mm units G90 ; absolute positioning G28 ; home
; Row 0 (L→R) M3 S100 ; black feeder ON G0 X5.00 Y5.00 F3000 G4 P300 G0 X15.00 Y5.00 F3000 G4 P300 ... M5 ; feeders off G28 ; return home M30 ; end of program
Image Pipeline
js // Per-pixel luma threshold luma = 0.299 * R + 0.587 * G + 0.114 * B; bead = (luma < 128) ? BLACK : WHITE;

Timeline
| Date | Activity |
|---|---|
| Apr 09 | Initial discussion and team role allocation |
| Apr 10 | Concept sketch, gantry CAD start, interface design, first G-code tests |
| Apr 11 | End effector mechanism design and working structure |
| Apr 12 | End effector parametric sizing (bead measurements), electronics design |
| Apr 13 | G-code / gantry movement testing, firmware bring-up |
| Apr 15 | Fabrication and integration |
| Apr 20–21 | Video editing and presentation |
Downloads & Files
Repository
Mechanical
Electronics
- KiCad Schematic
- KiCad PCB
- Gerber Files
Firmware
- grbl_esp32 (upstream)
- Machine config file
Interface
Pixel Art Machine — Machine Week, Fab Academy 2025 · Fablab KOCHI
Nadec · Kevin · Merin · Architha · Kurian





