Skip to content

ZenXY v2


Inspired by the awesome Sisyphus Table by Bruce Shapiro,, Zen gardens that my mom loves, and the crazy CoreXY belting system.

This is my second attempt at an automated Zen Garden (or whatever you might call it).

!ZenXY v2 Render

Rendered Animation

Pattern Software

Sandify !Sandify

Amazing patterns are easily possible by using, the back end is here Sandify on GitHub, This table would be nothing without this tool! (feel free to show some appreciation for this amazing free piece of software).

Karl’s EstlEgg-ify Karl’s way allows for some custom vector graphics to be easily drawn. Here in the Forum.

Bill of Materials

Printed Parts Sets

Printed Parts QTY.
Truck 1A 1
Truck 1B 1
Truck 2A 1
Truck 2B 1
Power Corner Main 1
Power Corner 2 1
Cross Corner 1A 1
Cross Corner 1B 1
Cross Corner 2A 1
Cross Corner 2B 1
Zen Center 1
Tension Block 1
Trigger 1


The spacers are optional and only needed if your glass mounting hardware protrudes. The STL files are 1mm thick and can easily be scaled in the Z direction only up to about 7mm before the 12.7mm magnet might start to pose an issue. If needed, one magnet spacer and two of each corner spacer are used, all scaled to the same Z dimension.

If you glass is not mounted planer to your corners you can use a second magnet and stack them to reach your glass.

Insert Picture of mounted glass

Printing Recommendations

Most any semi-rigid material will work for printing these parts. PLA or PETG are highly recommended for accuracy, durability, and overall ease of use. 25% infill. No support should be needed for any part I have designed.

Files can be found at
GitHub + Step Files PrusaPrinters Thingiverse

Hardware & Components kits are available in the shop.

Hardware QTY.
M5 x 0.8 x 30mm Phillips Pan Head 34
M5 Locknut 9
M3 x 0.5 x 10mm Phillips Pan Head 6
M2.5 x 12mm Phillips Pan Head 6
Y Rail Larger Diameter Calc 2
X Rail Smaller Diameter Calc 2
Components QTY.
½” x ½” Magnet 1
½” Steel Ball 1
Mini V Wheel 19
GT2 10mm 16 Tooth Pulley 2
GT2 10mm 20t Idler 8
GT2 10mm Belt Calc
NEMA 17 Stepper 22mm shaft (min) 2
Optical Endstop 2

Control Board

There are a lot of options.

Any board with two drivers or more with firmware capable of running CoreXY, and TMC silent stepper drivers are highly recommended.

TMC2209 Pen/Laser Controller - by Bart Dring, seems to be a perfect match for the Zen. This board has the silent 2209 drivers, and the esp32 has a built-in web interface for wireless control and file transfer. You can sign in from any device that is within its WiFi range or add it to your own network for remote control.


This is running CoreXY belting and requires homing Y before X, as set in the firmware. All firmware will also need the exact size of your build to be input before compiling as well.

Here is an example Marlin firmware Firmware link

Here is an example TMC2209 Pen/Laser Controller Pre-Compiled Bin File or Pre-Configured GitHub Repo.


The stepper with the endstops on the same block gets plugged into the “X” port on the control board. If it does not move correctly, power down unplug and flip them both over, or flip just one over. It is more confusing than the regular Cartesian troubleshooting. Guess and check seems to be the best way.

The Y endstop is triggered along the larger dimeter tube. The X is the other one 😄.

Example table


!Fusion CAD Render

Basic CAD file, Fusion 360 version.

Example Starting Gcode

When using Sandify, or any other software you need to set the starting or homing Gcode. You can cut and paste what is below and adjust for your specific build’s offset. This table uses hard mounted endstops and endstop triggers, so you need to home Y first and typically add some offsets to get to the starting point just where you want it.

For GRBL you can use

G92 X0 Y0
G0 Y-18.5
G92 X0 Y0
G0 X-28
G92 X0 Y0
G1 X2 F2000

For Marlin it would be

G28 Y
G92 X0 Y0
G0 Y-18.5
G92 X0 Y0
G28 X
G0 X-28
G92 X0 Y0
G1 X2 F2000
Here is a Human readable version of that
Move the Y axis all the way to the trigger.
Set the current location of X and Y to be zero.
Move The Y axis in 18.5mm closer, past the flag.
Move the X axis until it triggers.
Move the X axis in 28mm further in past the flag.
Set the current location to X=Zero and Y=Zero.
Move out 2mm in the X axis direction at 2000mm/min (33mm/s). This is just in case you forget to set a speed in your Gcode, this assures the machine moves at a safe speed.


CC BY-SA 4.0

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.