The Spice Must Flow Sand Table

A sand table project for the Milwaukee MakerFaire

Similar projects worth following
A 1.9x1 m table with a hidden corexy mechanism and a layer of "sand" through which the mechanism pulls a steel ball to create geometric patterns.

This started out as a cable driven mechanism, but I converted it to belt drive when I found cables to be a bit too troublesome.  It's a single level corexy mechanism with 3D printed motor mounts, pulley blocks, and Y axis bearing blocks.  The Y axis uses UHMW PE blocks riding in slots in the 45 mm square t-slot frame for guidance.  The X axis guide is a piece of 16 mm square aluminum tubing.  There's a 1" cube neodymium magnet that sits in a 3D printed carriage.

I used stacked F623 bearings for pulleys, but found there were some problems with the flanges being too small and the belt tends to climb and ride on them, so I'll be converting to some pulleys with much larger flanges.

Sand table printed parts
The printed parts of the mechanism are yellow. No fancy linear bearings or guide rails used- just the slots in the frame for the Y axis and a piece of square aluminum tubing for the X axis.  Belts are tightened by moving the motor mounts in the slots then tightening the bolts.

The top cover and base frame are made from 45 mm square aluminum t-slot picked up from a local scrap yard.  They are identical size, and the wood part of the table is designed slightly larger so that the top cover drops into the wood frame and the wood part drops onto the base frame.  I painted the wood parts flat black as this will be operating in a dimly lit room at the Milwaukee MakerFaire.  The "sand" will be about 50 lbs of sodium bicarbonate blasting media.  It's pure white and will provide great contrast with the flat black table.  It will be lit with red and blue LEDs.

The mechanism uses two NEMA-23 motors I had handy (NEMA-17 would easily provide the needed torque) with 40 tooth drive pulleys and 6 mm wide GT2 belt.  I copied the belt clamp on the magnet carriage from my 3D printer's Z axis- just a slot with a short piece of GT2 belt to engage the teeth.

magnet carriage for the sand table
This is the magnet carriage. The 1" cube magnet sits in the suqare hole, on top of a spring that sits in the round hole. The spring keeps the magnet pushed against the bottom of the table top.

I'm driving the mechanism with a smoothieboard controller I recently took out of my 3D printer when I installed a Duet board.  An SD card will be loaded with patterns to print that will just run continuously and overwrite each other.

Current status is 90% complete.  I added a corrugated cardboard cover to the bottom of the mechanism to keep people's hands out of it.  Testing with media to begin in a day or two.

  • New, Improved! Faster! Quieter!

    Mark Rehorst06/02/2020 at 17:00 0 comments

    I made a new blog post on the sand table mechanism, now using servomotors.

    It dices! it slices! Makes Julienne fries in seconds! Finds that slipper that's been at large under the chaise lounge for several weeks! Hides embarrassing stains on contour sheets! It entertains visiting relatives! 

  • Vast Improvements!

    Mark Rehorst05/28/2020 at 22:17 1 comment

    The stepper motors in the sand table were always operating right at the limits of their performance and I had to run many different patterns and tweak the acceleration and jerk settings to ensure reliable operation, and even with all that testing, every once in a while I found a pattern that just pushed the motors over the edge and stalled them out making horrible noise and ruining the pattern drawn in the sand.  Also, the 3D printer pulleys with tiny bearings were squeaking a lot.

    I decided to try using servomotors in place of the steppers.  Servomotors have what seems to be low torque specs, but the torque is constant up to a few thousand rpm, which sounds perfect for a high speed sand table.  The servomotors also turn much smoother than steppers so there is liable to be less motor noise and vibration. 

    I ordered an expansion board for the Duet controller ($30) and a pair of 75W, iHSV42-40-07-24 NEMA-17 servomotors ($180) from China. and went to work on the table.  I redesigned the motor mounts, corner pulley blocks, and Y axis bearing blocks replacing the tiny-bearing 3D printer pulleys with stacked F625 bearings.  After a few tests I ended up using two 24V power supplies in the system- one rated for 150W connected to one motor and the other rated for 200W powering the other motor, the controller board, and the LED lighting.

    The motors I used are spec'd for constant 0.185 Nm torque up to 3000 rpm. I used 16 tooth drive pulleys so achieving the 500 mm/sec I used to use with the steppers requires spinning the servomotors at 957 rpm- well below their 3000 rpm spec.  

    I did some speed and acceleration tests using the bare mechanism without the sandbox and was impressed with the results.  

    The Spice Must Flow gets servomotors! from Mark Rehorst on Vimeo.

    Next , I added a Blue LED in place of the magnet and tried some light painting.

    LED, coin cell, and packing foam stuffed into the magnet carriage

    LED, coin cell, and packing foam stuffed into the magnet carriage

    Light painting with the corexy sandtable mechanism
    Light painting pattern took about 5 minutes to complete
    Another light painting
    This one took about 3 minutes
    One more light painting
    It seems my connections between the LED and battery were a little "iffy"...

    After playing with that for a while I decided it was time to draw some patterns in sand.  I put the sandbox back on the table and started searching for the speed and acceleration limits.  I haven't found them yet!  The video below is not sped up- it is real-time performance of the machine.

    The fastest sand table in the known universe! from Mark Rehorst on Vimeo.

    So far, the table can draw sand patterns at acceleration of 20,000 mm/sec^2 and 1500 mm/sec.  At more reasonable speeds and accelerations there are no longer any worries about the motors stalling out.  Also at the same speed and acceleration I used with the steppers, the servomotors are quieter.  At super high speeds and accelerations (and jerk speed of 200 mm/sec) the patterns lose some detail because the ball throws the sand around, but it's nice to know there's plenty of margin in the design.

    I'll be making a blog post soon with more details, more photos, and more video.

    I'm planning a total rebuild in a slightly smaller size to make transporting it easier, using a glass top, putting the top higher above the sand so that thrown sand is less likely to end up stuck to the glass, and hopefully, a more attractive appearance so it can be used like furniture.

    In the future I may try mounting an airbrush on the magnet carriage and use it to paint patterns on paper, walls, or floors.

  • Making the Table More Watchable

    Mark Rehorst12/05/2019 at 12:47 0 comments

    I've been using Sandifyto generate patterns to run on the table.  There's just one problem- my table is rectangular.  If I'm going to use the whole area of the table for the patterns, I have to generate patterns that are much larger than the table area.  The problem with that is that it creates a lot of excess motion along the edges of the table which is boring to watch.

    I needed a way to cut out the excess motion, so I thought about it for a while.  Then I thought about it some more.  Before I realized, months had passed and I was still thinking about it.  It seemed as though there were too many different transitions to watch out for and decide if they should be kept in the pattern file or deleted.  

    One day I tried manually editing a file.  I just looked for sequences of  lines containing motion along the Xmin edge, and removed everything except the first and last line in each sequence.  Notepad++ has a "mark all" function that makes it real easy to spot the sequences.  Then I did the same for the other edges and tried the pattern on the table.  It worked!  I wrote a Perl program to automate that process and it worked well.  It took me an hour to edit a file manually, but only a fraction of a second to do it with the Perl program (yay computers!).

    But there was still a problem.  Some patterns have the ball going around and around the table from corner to corner.  My program didn't get rid of that stuff.  So I thought about it for a little while - this time an hour or so, instead of months.  I added some code to my Perl program that looks for corner to corner sequences and optimizes them.  When I say optimizes those sequences, I mean it will eliminate unnecessary motion, and in the case of motion that is necessary, it substitutes the shortest path around the table for the longer path that was in the pattern file.  

    The result is a huge improvement in the "watchability" of the table because the patterns no longer waste a lot of time moving the ball around the edges of the table.  It also saves a lot of wear and tear on the mechanism.  Here's an example- this pattern, straight out of Sandify, took 2 hours to complete:

    It isn't hard to see why that pattern would take two hours- there's a huge amount of time wasted along the upper and lower edges of the table.

    Here's the same pattern after my Perl program ( has edited out the crud:

    The edited pattern, which creates the exact same drawing on the table, takes only 57 minutes to complete.   

    You can grab The Perl program "" here. Warning- this is the first code I have written in about 20 years, and the first Perl program I have ever written.  It works, but there's no error checking- if you give bad input it will do weird stuff.  You'll have to have a recent Perl install on your computer to use it.  Type "perl" to start the program and it will ask for the name of the file you want to process.  The output file will be stored with "_clean" appended to the filename you typed.  I used Strawberry Perl running in windows.  I haven't tested the program in linux, but I think it will work.

    There's a little more info on the algorithm on my blog, here.

    I have been communicating with Jeff Eberl, the author of Sandify, and he is now working on including the algorithm I used so that Sandify will generate clean patterns from the start.  Until then, FTW!

  • Making it run quietly

    Mark Rehorst09/19/2019 at 16:04 0 comments

    I wanted to make the mechanism run quietly even as it ran fast.

    Tests showed that even at high microstepping ratios, speeds much over 100 mm/sec resulted in objectionable motor noise.  Other sources of noise included the belt teeth hitting the smooth pulleys making a zipping sound.

    I did a few things- I stepped up the drive speed from the motors using 1:5 pulleys and loop belts.  That let the motors turn slowly even as the mechanism moved fast.  At 500mm/sec, the motors are only turning at 1.25 revs/sec.

    I installed a Duet WiFi controller board that drives the motors at 256:1 ustepping even at >500 mm/sec (thanks to the 1:5 step-up drive).  The motors now run quietly.  The wifi connection means I can generate patterns using sandify, transfer the gcode files to the table, and start them drawing, all without the computer having a physical connection to the table.  The controller can be hidden under the table.

    I also redesigned the Y axis pulley blocks with larger belt pass-through holes to allow twisting the belts so the smooth back side of the belt could ride on the smooth pulleys.  That eliminated the zipping noise.

    Remaining noise is from the UHMW bearings sliding along the X and Y axes (mostly the Y axis) and some clattering from the pulley bearings.  With the sand box on top of the table you can actually hear the quiet grinding of the ball pushing through the sand.

    quieter, at last from Mark Rehorst on Vimeo.

    New task:  redesign for a glass top that someone gave me and reduce friction in the X axis.

    More here:

  • A new magnet carriage

    Mark Rehorst11/09/2018 at 19:40 0 comments

    I emptied the sand and took the table home from the makerspace to work on it and when it was time to test it, I decided to see how my cat would like it.

    World's Greatest Cat Toy? from Mark Rehorst on Vimeo.

  • A new magnet carriage design

    Mark Rehorst11/04/2018 at 13:14 0 comments

    After the MakerFaire I opened up the table to check on the mechanism and found the magnet carriage badly worn.  The carriage was made of printed ABS and it was sliding on a powder coated aluminum X axis guide tube.  ABS/powder coating is not a good combo, and the ABS loses.

    Old magnet carriage design.
    Old magnet carriage worn bearing surface and cracked body.

    I have redesigned it to use a 1" square aluminum tube that fits over the 16 mm square X axis guide tube with room for UHMW bearings.  Milled slots in the carriage tube anchor the belts and hold the bearings in place. 

    In this design, the aluminum takes all the belt tension force, so there's none applied to printed parts.  The magnet box is held on with zip ties and can be changed easily to experiment with different magnets.  It may need some indexing to prevent it from twisting.  The fit is a little tight right now, but I intend to sand blast the powder coating off the X axis guide tube and I think that will loosen it up a bit.  If I have to I can sand the bearings down a little to loosen the fit.

    More details here...

    New magnet carriage design for the sand table. from Mark Rehorst on Vimeo.

  • It worked.

    Mark Rehorst10/04/2018 at 14:02 0 comments

    The sand table made its public debut at the Milwaukee MakerFaire last weekend and worked well.  It was very popular and I got a lot of nice comments about it.

    There were a few problems...

    The power cord got kicked out of the wall twice (how do you design against that?)

    I started off using ball switching which would work for the first few changes, but would jam up with sand and then stop working, so I removed the ball changer and let the thing run with just 1 ball.  I will have to review my ball changing technique and see if I can come up with a better way to do it.

    I tried to get Michael Dubno's RPi software working at the Faire and couldn't get it to run properly- I'll be revisiting that in the next few weeks because it generates really nice patterns and has a bunch of other great features and capabilities.  The problem seems to be in the communication between the RPi and the smoothieboard.

    I may redesign the motor mounts to allow NEMA-17 motors to be used and may switch the controller to a Duet board or one of the others that uses 256:1 ustepping drivers to reduce the noise level from the mechanism.

    The magnet sliding against the plywood creates some very fine dust that tends to accumulate on the X axis guide tube and can jam up the motion.  I had redesigned the magnet carriage with large holes to allow the sand to fall out, but I'm going to look at redesigning the X axis, milling a UHMW shoe for the magnet, and maybe applying a coat of polyurethane to the plywood to minimize dust generation.

  • Converted to stacked belts

    Mark Rehorst09/17/2018 at 17:09 0 comments

    There was too much belt wear at the corner pulleys due to the twist in the belts, and where the belts contacted each other at the twists, so yesterday I converted the mechanism to stacked belts.  I also installed some LED strips with 60 5050 LEDs per meter.  I'll be updating the CAD files with new details.  

    The new lighting uses red and blue 12V LED strips with buck converters to drive them from the 24V power supply.  I can adjust the voltages on the converters to control the relative brightness of the lights.  The LED strips are mounted on pieces of aluminum L stock to act as heatsinks and make it impossible to see the LEDs directly.  The way it is lighting the table is exactly how I wanted it to look.

    I recently made a tool to level the sand - just a piece of wood with screws near the ends.  I push the tools down until the heads of the screws are contacting the plywood, then just pull it across the table to level the sand.  I've done some experiments with the depth of the sand and it seems like having 1/3 or less than the ball diameter seems to work well and guarantees that the ball won't get stuck.

    The video doesn't have the contrast that the table has when you looking at it- the shadows are much darker so the red and blue really stand out.

    The mechanism seems to be finished from Mark Rehorst on Vimeo.

  • Installed LEDs, generated more patterns

    Mark Rehorst09/10/2018 at 01:39 0 comments

    I spent a lot of yesterday generating patterns for the table to run at the Milwaukee MakerFaire.  I ended up with about 30 different patterns and put them together into one gcode file.  It takes 2-3 hours for the entire sequence to run (at 500 mm/sec) before the patterns start repeating.  I put 6 copies of the sequence into the file, so I should be able to leave it running unattended at the MakerFaire.  I added a 60 second pause after each pattern is complete so people could admire it before the table starts overwriting it with a new one.  

    Someone at the Makerspace pointed out that when the machine stops running for 1 minute, a lot of people will walk away, and then when it starts running again, a new crowd will be able to get a good look at it.

    I installed some COB LEDs, blue on one side and red on the other.  Unfortunately, after about 10 minutes the red ones ran so hot they started burning up.  I'll be shopping for more LEDs tomorrow.

    I also tried running with a 15 mm ball instead of the 1" ball I was using.  It seems to go all the way to the bottom of the sand and leaves narrower tracks so the patterns appear sharper.  Here are a few more teasers:

    15 mm ball on sand table from Mark Rehorst on Vimeo.

    circles with 25 mm bal at 500 mm/sec from Mark Rehorst on Vimeo.

    Some of the nicest effects come from the patterns overwriting each other, especially when there are gaps between the lines in the new pattern.  

  • New patterns, more speed

    Mark Rehorst09/08/2018 at 03:33 0 comments

    I generated a bunch of patterns using sandify today.  The plan is to stack a bunch of patterns in a single gcode file and let it run on the machine during the Milwaukee MakerFaire, so that I can hopefully leave it unattended.

    Sandify shows where the patterns start and end using green and red dots.  I generated a bunch of patterns and initially put them into file folders labeled with the side of the table where the pattern starts.  Each file was named for the basic shape and where it ends.   I then made a list of patterns, starting with a wipe to overwrite whatever was on the table with parallel lines.  That pattern ended at the top right corner of the table, so the next pattern chosen started at the right side of the table and ended on the left side.  The next pattern started on the left and ended at the center, etc...  I stacked all the gcode in one file and then set a speed parameter with the first move command.

    I tested speed and acceleration in addition to generating patterns.  I pushed it all the way up to 500 mm/sec with acceleration at 1000 mm/sec^2.  I was very surprised it could run this fast- I was expecting for it to run at 30 mm/sec or so.  I may push it higher still...

    sand table 500 mm/sec test from Mark Rehorst on Vimeo.

    more 500 mm/sec from Mark Rehorst on Vimeo.

    The LEDs arrived today, so I'll test them tonight and mount them in the machine tomorrow.

View all 13 project logs

Enjoy this project?



Jeffeb3 wrote 09/06/2018 at 21:11 point


  Are you sure? yes | no

Mark Rehorst wrote 09/07/2018 at 00:57 point

been there, done that!

  Are you sure? yes | no

Ryan wrote 09/06/2018 at 16:59 point

You should try baking soda. It gives really sharp peaks and is less "crunchy", very little grinding noise as the ball gets dragged through it.

  Are you sure? yes | no

Mark Rehorst wrote 09/07/2018 at 00:55 point

I used baking soda...

  Are you sure? yes | no

Ryan wrote 09/07/2018 at 01:20 point

I assumed blasting media was more coarse, sorry. My peaks are much crisper for some reason with arm and hammer.

  Are you sure? yes | no wrote 09/06/2018 at 13:32 point

How does your 'sand' react to black lights?

  Are you sure? yes | no

Mark Rehorst wrote 09/06/2018 at 14:03 point

It reflects it (lights up blue) but doesn't fluoresce.  I'll be experimenting with adding chemicals to make it fluoresce over the next few weeks.  I'm not sure that fluorescence is desirable for this- if it fluoresces there won't be any shadows and that will make the patterns in the sand less visible.  I'm planning to light if from a low angle in red on one side and blue on the other to create shadows that enhance the appearance of the patterns in the sand.

  Are you sure? yes | no wrote 09/07/2018 at 00:11 point

That lighting sounds cool. In 3D...

  Are you sure? yes | no

Mike Szczys wrote 09/05/2018 at 15:35 point

This came out great, well done! Now I really need to make sure I make it to Milwaukee Maker Faire this year to see it in person.

  Are you sure? yes | no

Mark Rehorst wrote 09/06/2018 at 13:59 point

Thanks, but it isn't quite finished yet.  I'll be adding red and blue LEDs in a few days, and have some other tweaking to do.  I'll see you at the MakerFaire!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates