DIY Kinetic Sand Art Table

I forget exactly how, but one day browsing the internet I came across the kickstarter for the sisyphus table, and was blown away. This is the first time I had seen something so captivating that I immediately wanted one. Checking their page, I was disheartened by the prices of the full wooden coffee tables, but I still considered it. I decided to try and see if anyone had built a DIY version of this table that I could perhaps take on myself before dropping thousands of dollars.

Eventually I stumbled upon a UK Engineer named Rob Dobson’s personal blog page. He had created a smaller version of with a similar mechanism. This looked promising. I saw he re-designed his whole bot and the mechanism to a new SCARA type robot. He had the 3D model and all the stl files ready for 3D printing, so I decided to start my journey of creating my own table from these plans.

As a side note – during my research I learned about all the CoreXY tables that have been doing similar things for years. I stumbled across the very nifty Sandify tool as well, which generates pattern gcode. I entertained the idea of a CoreXY table, but I had my mind set on a round coffee table after seeing the beautiful sisyphus tables, so the XY machines just wouldn’t fit my needs.

Rob’s blog gives a good idea of how to go about assembling everything, so I will just go over my differences here.

I don’t have a laser cutter – so I decided to 3D print everything out, not just the 3D printed parts.

I think the easiest think to do here is link my build album, because it shows the progress of the build. I wanted to build an actual piece of furniture for this table, to sit in our sitting room, so it had to look nice.

Sand Table Build Album

Some highlights

First working protoype of the robot


Table Design.. on the fly!


LED circuit design


Initial App development (Still under development….)

Close to final table design




3D printed LED holders


Veneer Glue-up.. ugh


Final Assembly


Neoprene only – no sand


First Run! Spreading out the sand




Some takeaways..


Furniture Building

Building a round table is hard!  I used 2.5mm underlayment plywood cut into strips to build the round structure around my table frame.  Using ratchet straps, I was able to clamp the wood good enough to make a decent structure. I then decided to glue maple veneer on the outside of the table for finishing.  This was a nightmare.  Trying to use ratchet straps on the veneer just created a whole new set of problems with bubbling because the veneer is so thin.  It’s not really noticeable, but in my final table, there are noticeable bubbles in the veneer. Oh well.


I tried many different types of material for the “sand”. After researching for a while I couldn’t find any specific link to anything that I could actually buy. Some people recommended shuffleboard wax.. Some people said baking powder.. I tried them all. I finally settled on the hamster bathing sand. This is the finest sand I could find, while still able to maintain the peaks needed for nice shadows


THR Support

With some coaxing, I was able to get Rob to add support for .thr files (Theta Rho), which are the native files for the sisyphus table, so now we can take advantage of the sisyphus pattern designer’s hard work and use these patterns on this custom table.  There are still some kinks with thr support, but the majority of the files work correctly and look great!  The sisyphus subreddit is a great place to find custom files. 

Here is my table drawing the hosta pattern from that subreddit


Micro SD Card Support

Rob and I worked hard on this, and in the end the only thing we could get to actually work was the Adalogger feather wing with SD Card in it. We tried external card readers (My PCB is wired for one), but couldn’t get anything to work reliably. Even with the feather wing, I had serious problems getting it to recognize a micro sd card. I had to try about 5 before I could finally get a 1GB micro SD card to be recognized.  I used the official SD card formatter app in windows and various filesystems before this was successful. I think working SD card support is vital for having an interesting table. Without it you can only store a few smaller thr files, however you can fit many parametric patterns.


Custom PCB

While Rob’s PCB does work – I found it very confusing at first. It is designed for more than one application, so I figured I would create a single purpose PCB for the sole reason of powering a sand table.  The project can be found at Easy EDA, and the PCBs can be ordered through JLCPCB.  My version 1.5 has everything needed for a functioning sand table and allows either RGB (Signal/+/-) LED control or White LED dimming control (- PWM). I have only used (And the firmware only supports) White dimming LEDs. The board also has a socket for a light sensor, which at some point will auto dim the LEDs. I wasn’t happy with my implementation of the dimming algorithm, so auto dimming is currently not supported in the firmware either.

Here is my custom PCB outfitted with everything but the drivers and processor. I’ve also included vias for probing and debugging if necessary.

Schematic (minus the external card reader)

PCB Components

Everything you need to purchase to populate the PCB

Since my PCB has a different pinout than Rob’s, the robot configuration will be different. This is the robot configuration I use for my setup.

	"robotType": "SandTableScaraMatt",
	"cmdsAtStart": "",
	"webui": "SandUI",
	"evaluators": {
		"thrContinue": 0
	"robotGeom": {
		"model": "SingleArmScara",
		"homing": {
			"homingSeq": "FR10;A+10000N;B-10000;#;A+5000n;B-5000;#;B+10000N;#;B+5000n;#;A=h;B=h;$",
			"maxHomingSecs": 120
		"blockDistanceMM": 1,
		"allowOutOfBounds": 0,
		"stepEnablePin": "12",
		"stepEnLev": 0,
		"stepDisableSecs": 10,
		"axis0": {
			"maxSpeed": 9,
			"maxAcc": 50,
			"maxRPM": 2,
			"stepsPerRot": 9600,
			"unitsPerRot": 628.318,
			"maxVal": 185,
			"stepPin": "14",
			"dirnPin": "32",
			"endStop0": {
				"sensePin": "36",
				"actLvl": 0,
				"inputType": "INPUT_PULLUP"
		"axis1": {
			"maxSpeed": 9,
			"maxAcc": 50,
			"stepsPerRot": 9600,
			"unitsPerRot": 628.318,
			"maxRPM": 2,
			"maxVal": 185,
			"stepPin": "27",
			"dirnPin": "15",
			"endStop0": {
				"sensePin": "39",
				"actLvl": 0,
				"inputType": "INPUT_PULLUP"
	"fileManager": {
		"spiffsEnabled": 1,
		"spiffsFormatIfCorrupt": 1,
		"sdEnabled": 1,
		"sdMOSI": "18",
		"sdMISO": "19",
		"sdCLK": "5",
		"sdCS": "21"
	"wifiLed": {
		"hwPin": "14",
		"onLevel": 1,
		"onMs": 200,
		"shortOffMs": 200,
		"longOffMs": 750
	"ledStrip": {
		"ledPin": "4",
		"sensorPin": "34"

Improving the Robot

After running my completely 3D printed robot for over a year, I could tell that it was getting really sloppy.  Homing wasn’t consistent, and patterns weren’t ending where they should.  Graciously, Rob had sent me some laser cut acrylic top and bottom plates a while back, so I got the making a second robot that would hold tighter tolerances.  These were the major improvements I thought I needed.

I’ve uploaded all my 3D models for printing on my github. The SandTableScara model is a direct import of Rob’s original model, so that I could extend the arms.

Belt Tensioning

While the tensioning system Rob devised does work, I wasn’t happy with the tension I was getting on any of my belts. I don’t think the motors were secured strong enough to put enough tension on the drive belts. I believe this was due to my 3D printed plates, and the plastic just deforming over time.  I devised a system of 3D printed tubes to help me ensure the new plates would be perfectly parallel to each other.  These are secured with nylock nuts, so they aren’t going to be loosening up

The long arm belt was just floppy after a year of running.  I think this is due to trying to tension a belt that wasn’t the correct size. After some trial and error I decided to print arms the exact length I needed in order to put the perfect amount of tension on a new belt of 488mm. I found that for my 3ft table and a bit less of drawing area, I needed new arm lengths of 184.5mm exactly to give me the perfect tension on the 488mm belt.  I printed the bottom arm of near solid PLA, and the top arm of PETG to give me flex.

Magnetic End Stops

I believe my sloppy homing was due to the inconsistency of the magnets and hall effect sensors when dealing with different amounts of friction due to how much sand the ball is dragging around during homing.  I decided to migrate to optical end stops, and designed and printed out a new concentric gear lock and elbow gear lock that allowed me to mount optical end stop sensors to track the rotational movement.

Best shot I could get of the concentric sensor

Elbow Sensor

New Sand Bed Surface

I originally started with a plywood sand surface, with the bottom coated with urethane and polished as smooth as I could get it. After I saw how uneven this surface was, I migrated to a piece of hardboard, with the smooth end down. I think this still provided too much friction and contributed to some of the inconsistencies.

I finally ponied up the money for a 3ft by 3ft piece of acrylic to cut a new table bed out of. This stuff isn’t cheap. I used 3/16″ acrylic, and there seems to be little sag to it.  The magnets I use hold strong through it. Now I’m just waiting for a few more tests before covering it. PSA – drilling holes in acrylic cracks it a lot easier than I expected… Although milling it to shape with a double fluted spiral bit went much easier than expected with a hand router.


Magnet Friction

Initially, I used a piece of felt to decrease the friction between the magnet and wood sand base. I think this worked OK, but it needed to be better. I started now by polishing the acrylic’s underside with Optimum Hyper Polish and finished it up with some Optimum Spray Wax. Just by feel alone I could tell the surface was much smoother than stock acrylic. It felt slick to the touch

I also purchased some mouse skates to put on the magnet. I am hoping this further decreases the friction of the magnet on the acrylic bed

I had to cut these down to size so there was no lip around the skate, but I think this is working out well. Make sure there is no dirt on the skate.. otherwise it will start scratching the underside of the bed… Ask me how I know!

New Sand Bed Underlayment

The underlayment is necessary for dampening the sound the ball makes while riding over the sand. Otherwise it sounds like sand crunching all the time, which isn’t pleasant.

In my original build, I used some neoprene as sand underlayment. While this worked great, I noticed the sand seemed to be disappearing! To my surprise, neoprene is quite porous and can trap a TON of sand in the fabric itself.  This provided a much harder surface full of sand to drag the ball around on.  After looking at quite a few different types of fabric, I settled on buying some velvet. The soft side has a bit of pile to it, so this should dampen the sand sound pretty well.

New velvet underlayment spray glued to the acrylic bed.


Spreading the sand out with the new velvet. Pretty quiet!


Only time will tell how these new improvements hold up. We shall see!


(Incomplete) List of purchases for this project:


Qty Product Price Notes
1 Custom Sand Table PCB $7  


Qty Product Price Notes
1 Engineers Precision Crimping Pliers Pa-09 $42.90  
1 TroySys Glass Table Top: 36″ Length, 1/4″ Thick, Flat Edge, Tempered Glass $74.95  
1 120V AC to 12V DC Transformer, 36W Power Supply $12.99  
1 Adafruit Panel Mount Extension USB Cable $4.84  
1 PGN – 5/8″ Inch (0.625″) Precision Chrome Steel Bearing Balls $12.45  
1 binifiMux 10-Pack M6x150mm Half Thread Phllips Furniture Bunk Beds Bolts $11.23  
1 Sun-Glo Twin Pack of 2 Speed Shuffleboard Powder Wax $15.82  
1 Maple Wood Veneer Sheet Plain Sliced 4’x10′ $81.40  
1 uxcell M6x50mm 304 Stainless Steel Hex Key Bolt Socket Head Cap Screws $6.30  
1 HitLights Warm White LED Light Strip, Premium 2835-16.4 Feet, 300 LEDs, 3000K $25.99  
1 SenMod 5PCS Micro SD Card Adapter Reader Module for Arduino $14.95 Used for testing – Not used in final table
1 Espressif Genuine (not a Clone) ESP32 ESP32-DEVKITC $14.95 Used for testing – Not used in final table
2 Adafruit HUZZAH32 – ESP32 $19.83  
1 Adafruit PCF8523 Real Time Clock $8.55 Used for testing – Not used in final table
2 Adalogger FeatherWing – RTC + SD Add-on $34.95  
1 ESP32-EVB development board for Espressif ESP32 $34.95 Used for testing – Not used in final table
5 Hamster Bathing Sand $12.99  
1 Soldering Flux Pen $7.99  
4 STEPPERONLINE 17HS13-0404S1 Stepper Motor $10.99  
2 15x21x4mm Precision Ball Bearings $10.98  
1 Maxmoral 4pcs Mechanical Endstop $7.99  

3 thoughts on “DIY Kinetic Sand Art Table”

  1. Hi Matt

    Your sandtable post does not have a comment session so I’m hijacking this post, sorry for that 🙂

    Would it be possible for you to share the CAD files of your updated table design? 3d models instead of STL would be much better so I can modify them if needed.



Leave a Reply