Sand Table




Introduction: Sand Table


The Kinetic Sand Table is a project that I worked on at home and in my high school engineering course. I started it with a group of students in 9th grade, and after we built the first prototype, which was mostly made out of 3D-printed plastic and didn't have too much functionality. The project was dormant for a few months until I decided to make my own improved version that is redesigned from the ground-up. It has a Raspberry Pi CNC controlled arm mechanism to move the magnetic ball bearing to create intricate designs on the surface of the sand. It is also constructed out of laser-cut legs, and hand-milled pieces of wood that I assembled and stained in my garage. I am now a high school senior after about 3 years of learning and developing this project into its final form. Here is some documentation of how I constructed this project. I will be continuing to add more things to this Instructables in the near future. Ask me any question that you have!

Step 1: Items List


Mechanism Hardware:

For the linear slide mechanism, I found the parts separately on OpenBuilds, but I would suggest using the V-Slot linear actuator kit, since it has all of the parts necessary as well as assembly instructions.

  • 1/2" wood base for the mechanism
  • Flange bearing with 1" inner diameter
  • 4x Larger screws and nuts for securing the flange bearing to the base (I found these at my local hardware store)
  • 1" steel pipe
  • 1" right angle adapter
  • Drop in T-nuts (I would suggest definitely getting some M5 T-nuts and any other sizes that you want)
  • Large washers or shims (for balancing the flange)
  • Any other wood/machine screw necessary for securing components

Wood Table Hardware:

  • 1/2" and 1/4" pieces of plywood, birchwood, etc. (refer to the table design)
  • 31" (or any other dimension) circular tempered glass
  • Router power tool
  • Circular router jig


Step 2: Building the Base of the Arm Mechanism

    1. I used a 1/2" piece of MDF wood to act as a strong, heavy base for the arm mechanism. Any 1/2" thick wood could be used for the base (not necessarily MDF). I used a jigsaw (before I bought a woodworking router for better cuts) to cut the MDF board into a rough circle and sanded the edges. Make sure you mark the center of your square before cutting it into a circle.

    2. I bored a 1/2" hole in the center of the circle for the slip ring, and drilled 4 other holes for the screws that will secure the flange bearing to the base. Before securing the flange, you need to insert the slip ring in the 1/2" hole and secure it with wood screws so that the flange and the free-spinning node is facing upwards.

    3. After securing the flange, insert the metal pipe in the ball bearing and check if the pipe is perpendicular to the base. When I tested this, I found that I needed to insert large washers in different locations under the flange to ensure that it was perpendicular.

    4. I cut the metal pipe to the length that I needed and drilled a hole through the pipe in the location where I was going to mount the main timing belt pulley.

    Step 3: Building the Slide Mechanism

    If you have acquired the OpenBuilds V-Slot kit or bought part that are similar, use the assembly resources from their website as a good guide for assembling the slide. I bought my parts separately so that I could have a "40x20" V-Slot rail laid horizontally instead of the vertical 20x40 arrangement that the OpenBuilds kit suggests using.

    Using a horizontal V-Slot arrangement would allow for a slightly stronger attachment point to the metal pipe rotation axis, but it forces you to design the timing belt system on top of the belt. I will go more in depth to how I designed my custom linear slide, but if you choose to use the V-Slot kit from OpenBuilds, you will have to follow their guide for more information.

    After choosing and cutting the length for my "40x20" V-slot, I began mounting the necessary hardware for gantry plate slide:

    1. I made mounting locations for the one of the pulleys that support the timing belt by drilling a hole close to on end of the slide, between the two V-Slot channels. I then used an M2.5 brass standoff with a threaded screw extension and a lock nut to secure a mounting location for the pulley that is elevated off the V-Slot. I used Loctite glue for added strength to the connection, since this pulley will have a fixed location on the slide. Then, it's as simple as mounting the ball bearing pulley with screw on to the standoff (make sure that you don't tighten it too much).
    2. The second pulley will be mounted to the stepper motor on the other side of the slide. I bought a separate flat aluminum bracket that was compliant with my "40x20" setup for mounting the stepper motor on the slide. I mounted the bracket with 2 drop in T-nuts and mounted the motor to the bracket. I used a 1/16" rubber sheet that I cut to the profile shape of the motor to insulate the vibrations from the motor, making the motor quieter.
    3. I bought four separate gantry wheels and a larger gantry plate to be compliant with my "40x20" setup. I mounted the gantry plate in the same way that it's mounted on the 20x40 V-Slot in the OpenBuilds kit. I made sure to adjust the spacing of the wheels by turning the eccentric spacers on 2 of the wheels until the gantry plate firmly secured and would start gliding when the V-Slot was tilted to one side.
    4. The timing belt that I used was a roll of GT2 timing belt (not a loop) that cut to the length that I needed. I mounted 3 more pulleys on to the gantry plate using a different length brass standoff in a V-pattern to maintain the tension in the timing belt. To secure the timing belt to the gantry plate, I used a 1" right-angled piece of scrap aluminum that I cut to about 50 mm in length. I drilled a hole to the same level as the pulleys and used a timing belt fixing bracket to clamp down the two ends of the cut timing belt. I then used belt torsion springs when necessary to increase the tension of the belt.
    5. I mounted the 2 end-stop switches to each ends of the slide by 3D printing a mounting bracket that is compliant with the V-Slot channels. I also 3D printed some bumpers for the gantry plate that extend over the edge of the plate, so that they will contact the switch first.

    Step 4: Laser Cutting the Table Legs

    I chose to laser cut the legs to be able to design a particular shape for the table. I wanted them to have a wide base and a shape that flares outward to form a cone-shaped table. I also chose laser cutting to be able to have plenty of mounting holes and connecting braces to make the structure of the table sturdy. I used Fusion 360 to model the structure of the table with the laser cut parts for the legs. I used the laser cutter that I had access to from my local university to make these parts out of 1/4" plywood. I have laid out the necessary parts for 1 leg assembly in the model that can be used to laser cut the parts from a 1/4" 12"x24" piece of plywood.

    Step 5: Building the Table Surface

    Bottom surface (holding the sand):

    The bottom surface consists of two 1/8" thick sheets of wood that will be separately cut and glued together.

    1. Cutting with a router:

    • Drill a hole for the circular jig metal pin in the approximate center of each 1/8" sheet.
    • Choose a diameter size on the jig for the outer edge of the table surface and cut out a circle from each 1/8" sheet with the router power tool.

    2. Gluing the two pieces together:

    I decided to use 2 separate 1/8" sheets so that I can glue them together while putting pressure on the center to "bow it upwards" to create a dome-shaped sheet. The two dome-shaped 1/8" sheets would be able to resist the weight of the sand better than a flat 1/4" sheet.

    • Saturate the surface of one 1/8" sheet with wood glue and line up the second sheet on top. Then place the center of the stacked sheets on an object and place weights on the edges to bow the sheets of wood.

    3. Mill the circular channels:

    • Mill one 1/4" wide channel on the edge of the stacked sheets that is 1/4" deep. Choose a diameter size that is at least 1-2" larger than that of the glass for the second channel which will hold the inner-wall enclosing the sand.

    Top surface (holding the glass):

    The top surface consists of one 1/2" sheet and one 1/4" sheet of wood that will be cut into different shapes and glued together. I added some diagrams for a better visualization of the milled cuts and channels.

    1. Cutting shape and channels:

    • Cut a circle in the 1/2" sheet that is the same diameter as the bottom surface.
    • On one side of the 1/2" sheet, mill the same channels that were milled on the bottom surface (these channels are where the circular walls will be glued to).
    • Cut a circle in the 1/2" sheet with a diameter that is 1" less than the diameter of the glass (in my case it would be 30"). Make sure that you account for the size of the router bit that is being used for an accurate cut.
    • Cut a circle in the 1/4" sheet that is the same diameter as the bottom surface, and cut another circle that is 1" larger than the inner diameter of the 1/2" sheet, to create a ring.

    2. Glue the two rings together with the channels facing outwards.

    Circular walls (attaching the two surfaces):

    • Cut two strips from a 1/4" sheet of wood, that are as long as the circumference of the table surface.
    • I used the steam from a hot iron to bend these strips of wood into a circle.
    • Glue the strips into the channels of one surface, and use clamps to hold them in place while they dry.
    • Glue the walls to the other channels to attach the two surfaces together.

    I covered the seems of the outside wall by gluing a thin wood sheet, but this can also be done with wood filler and sanding.

    Installing LED Strip:

    I used a sealed LED strip with an adhesive back surface to line the top of the inside wall with the strip. I soldered a connector to the end and drilled a hole through the inner-wall and between the channels on the bottom surface to route the wiring.

    Sanding and Painting:

    I sanded all of the edges of the table surface. I then applied a dark-wood stain on the outside, which I decided to sand-down and spray paint over. I spray painted the inside with a light-gray color to better reflect the light from the LEDs.

    Step 6: Wiring the Electronics

    After installing the Raspberry Pi Stepper HAT, I used the wiring schematic to see which GPIO ports were still available for the other hardware components. For the arm stepper motor and the limit switches, I had to solder the GPIO connections to the 12-wire slip ring to be able to wire those components. I used a GPIO pin breakout module (the board with the green connectors) to make sure my connections were secure.

    Step 7: Configuring the Software and Open-source Code

    Sand-Table code on GitHub

    Raspberry Pi Headless Setup:

    1. Download the latest version of Raspbian on your computer, and download Etcher for flashing the Raspbian image onto your Micro-SD card.

    2. In Etcher, select the Raspbian image that your saved and click flash.

    3. In the SD card's directory, create a file called "ssh" (or create a text file and rename it to "ssh"). Then create another file called "wpa_supplicant.conf". Copy the text from below and paste it into the file.

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
       ssid="<Network Name>"
       psk="<Network Password>"

    Clone the Sand-Table GitHub repository:

    git clone <a href="" rel="nofollow"></a>

    Receive IP Address from Raspberry Pi:

    Follow this guide on GitHub that I created for setting up an automatic IP address emailer.

    Setup on the Raspberry Pi:

    1. Enable I2C and SPI protocols in the Raspi-config:

    sudo raspi-config

    2. The only library that you should need is the "rpi_ws281x" for LED strip. Install the library onto the Raspberry Pi by using:

    sudo pip install rpi_ws281x

    Start Program On-boot:

    1. Edit the "rc.local" file by entering:

    sudo nano /etc/rc.local

    2. Add the following 2 lines before the END token:

    python3 <INSERT FILE PATH>/ &
    (sleep 15; python <INSERT FILE PATH>/

    "Movement Plans":

    For the generating and feeding the designs to the Sand Table to draw them, I started out by making my own "movement plans" by hand. I used some movement plans that were generated by Tom Dilatush in his GitHub project JSysiphus. The Sand Table uses (theta, rho) coordinates for movement, so I converted .thr files to .txt and placed all of the files in the "pending" folder of the repository, so that python can easily read them. The "" program then converts the coordinates to simple number of steps and speed commands for the stepper motors to perform.

    I was recently contacted by the owner of Sandify ( who introduced me to an excellent web-interface tool for creating and exporting movement plans. I suggest you check this great tool for visualizing and creating movement plans!

    Step 8: 3D-Models

    Here is my GitHub repository for Sand Table 3D-models that has most of the STL files for the things that I printed, as well as other models of things that were assembled.

    Be the First to Share


      • Science Fair Challenge

        Science Fair Challenge
      • Woodworking Contest

        Woodworking Contest
      • Origami Speed Challenge

        Origami Speed Challenge



      2 months ago

      What a great project! Your instructions are amazing, too!


      5 months ago

      Great project, Robert. Dumb question: what and where did you get the sand and ball bearing you used with this table.?


      5 months ago

      Buenas noches Roberto...
      I do like the whole project, from the hardware (lotsa cutting!) to the software for the rasberry pi interface and coding.
      Thing is, I have a Roland DX90 Plotter that, if you can get one, and, by using HPGL, would offer a whole bunch of HPGL commands that would, not only simplify the Pi code (through HPGL calls), but extend the sand process to , as an example, print a circuit board in sand.
      And, having done that (bottom layer is a black base, top layer is white, the stylus displaces the white (as you can do with your existing code (with minor code/physical tweeks, of course, depending on resolution) to expose the circuit traces (use green sand with a copper coloured base; your call).
      Now, think of having two layers of sand (a double-sided circuit board, that would be neat!
      Plotters use an up/down pen (solenoid). Replacing the solenoid with a linear actuator that would control the depth into the two-colour sand (top,white or green, for the PCB base, top PCB layer(second layer of red sand, with the bottom layer, a blue base) for the board could yield a double-sided PC board.
      Wouldn't that be awesome?!
      But, using a stylus thingie in the double sided case (good for single-side PC boards) would not work (on-off never works well in touchy work). maybe replace it with a wee custom-designed controlled vacuum stylus (large size hypo needle point, say, 1mm+ (depending on the grit size)) device that , with, with a controlled "topside or bottomside" depth coding could really create a 21st century zen garden, melding the traditional Zen sand design with 21th century technological beauty...
      Just a thought...


      5 months ago

      AWESOME!!! If I had the space, and money I would totally make one. Great time lapses, I could watch them all day. & congrats on the feature.


      1 year ago



      Reply 5 months ago

      Hi Big, not sure you posted because you were joking or not so I will think you are joking, or you can't wrap your head around this build. The answer to your question not in a snarky way is "Why NOT". It is people like Roberto that give us things that propel us forward as human beings. He may be the next person to develop artificial limb for us that articulates very similarly to a real limb or and eye that can see just as well if not better than a real eye for those that are blind. What you may see as frivolous and of no worth can turn into anything. This is what makes us great as human beings our ability to create beyond the normal. Where would we be if all the inventions that have come along such as telephones and tv and prosthetics, computers and ships to the moon were greeted to WHY? I hope my answer has at least made you pause and think twice and maybe say OK I understand. It really looks like Roberto may have both Linear and Non Linear thinking to our benefit.


      Reply 1 year ago

      didnt you mother tell you....."IF YOU DONT HAVE SOMETHING NICE TO SAY......THEN DONT SAY ANYTHING AT ALL"'s another............DONT GO AWAY MAD......JUST GO AWAY.......


      Reply 1 year ago

      Because. Just because! Ha ha - isn't it the same reason you're reading this. Out of curiosity and tickle the mind?


      Reply 1 year ago

      Same thing occurred to me. It would be more acceptable if it was quieter too.

      Nonetheless a nice build.

      Roberto Groza
      Roberto Groza

      Reply 1 year ago

      Thank you!

      The recorded audio from the videos make the mechanism sound much louder than it actually is. Also, the last video ("Sand Table Testing") was actually from an earlier version before I tuned the motor step delays and step sizes to reduce this noise.

      I also added rubber sheets between where the motors contacted the rest of the mechanism to reduce the amplified resonance vibrations.


      Reply 1 year ago

      just hmmmm disappear? negativity is so cheap and unnecessary. learning and growing is what this site is all about.


      Reply 1 year ago

      If you have to ask this question, why are you here?
      The idea is just as cool as building a clock that writes the time in sand every minute, or a Raspi that controls a pen on a chain to draw pictures on a wall, or any of another 1000 posts here.
      It’s cool, aesthetically more than pleasing, well done and might inspire someone to try to build it too, but different, or make something completely unrelated yet, just because something in this post served as an inspiration to get creative....

      I personally read through it and constantly thought about how I’d try to solve all the problems -> many thanks to the author for the great time!

      ....and I’m really thinking of building my own version, just for the fun of it! The idea is so cool....!


      5 months ago

      Hi Roberto, I have seen these sold on very high end websites. You didn't show the end result with a cabinet such as a coffee table, but I am sure you did a beautiful look with that . Thank you for sharing your project. You have a a wonderful future in your chosen profession. Stopping and starting a project to the end is not an easy thing to do and that is a great trait to have in your personality. Good luck :)


      10 months ago

      Roberto, can you please answer DM i wrote you? Thank you.


      Question 11 months ago

      I have two questions. If you were to need everything on this build list, what are you looking at as far as the estimation of the cost? Second question, has anyone built one that they are looking to sell?


      Tip 1 year ago

      I'm building something similar, although I'm using a SCARA arm instead of a linear actuator. Some tips I've found so far:

      - Avoid DRV8825 like the plague. They're the cause of nearly all the noise here. I'm using a TMC2208 instead and it's created a silent table

      - Ball size is very important. For me the sweet spot was 3/4"-7/8"

      - Get a magnet with a good ratio of strength to diameter. I initially used very strong but wide magnets and it makes for wavy lines and uneven motion. Do not get a magnet with a hole in the centre for attachment.

      - Probably not applicable to this polar style of table, but with my SCARA style you must add counterweights to each arm. It doesn't have to be perfectly balanced, but getting it close goes a long way

      - I went 60:1 ratio for driving the main axis and I regret it. 24:1 to 40:1 would likely result in better speed while still having enough torque

      - Hamster sand or reptile sand is the ideal mix of fineness but still with sharp enough grains to make shapes

      - Don't build a SCARA arm unless you love programming. A polar table would "just work" with the existing Sisyphus tracks with minimal configuration

      - If you go for white LED accents, pick a strip that lets you change the colour temp via the RPI. A more yellow light is really nice at night vs. a more white light during the day

      - I don't have access to anything CNC, including 3d printers. This would be so much easier with a printer or a laser cutter, so look around to see if your town has these for public use

      - Choose the diameter of your main axis support tube carefully. I chose 1/2 inch and it's very hard to find round tube with a 1/2" OD or a compatible flange. 3/4" is a safer bet since many more machine shops carry 3/4" stock


      Question 1 year ago

      Hi Roberto,

      I saw couple of sand table projects and your looks definitely the best, congrats! I would like to ask you for few tips regarding wiring of electronic, as this is not really clear from your description.

      First of all I would like to ask you for all the parts which are included in the final product. In your listing you recommend Stepper motor shield and also 2x DRV8825 stepper motor driver. But if I understand correctly the description of product the stepper motor shield already has integrated motor drivers and I can connect the motors directly to this part, is that correct? I also found in many forums that the final noise is caused not by the motor but by motor driver, is it possible to use any driver?

      In step 6 you have schematic picture of cable connection. I suppose on the picture is GPIO of Raspberry PI, bud it is little bit confusing for me. Do you have some detailed schema or photo of final wiring? Thank you in advance for you help!



      Question 1 year ago

      Hello, could you please comment on the wheel you use to rotate the 1 inch tube? Does it have teeth?


      1 year ago

      Saying this is nice would be an understatement.......the led's are a must


      1 year ago

      Hi Roberto, Absolutely amazing work! With some extra time on my hands due to the Pandemic, I'm going to give this a try and will post my results (with some questions along the way :)) The woodworking and hardware setup is in my wheelhouse, but the coding is not. No 3D printer for me, everything will by purchased. In going through your instructions, I have a couple of initial questions:

      (1) In your "Pi_Wifi_Info" instructions, you instruct us to create a SendGrid account. We then insert our email address and API into the "". Is there a separate email generated from the SendGrid account, or do we use the email address we signed up with? When running the "", exactly how long should it take to receive a response and again - which email account is it?

      (2) Prior to connecting any hardware and setting up the program to run on boot, should there be a terminal window running upon rebooting so that we know the program is in fact working, or does it run in the background of the desktop and we just have to connect everything to see it?

      (3) Items List - Electronics
      a) I'm assuming that older Raspberry Pi 3B's won't be a problem?
      b) For the "12-Wire-Slip Ring", your link is broken. Adafruit has a 6-wire slip ring here:
      Is this alright to use, or do we need something that accommodates 12 wires of a certain gauge? Is this won't work, can you please provide an updated link?

      (4) Items List - Mechanism Hardware
      a) The Linear Actuator that you provide a link to has the option to include a NEMA 17 Stepper Motor. In the Electronics section, you state that 2 are required. Are you saying that we will need 3 in total, or can I can 1 with the Actuator and one separately? Is there a difference in compatibility with the NEMA's purchased with the actuator vs. the other's you provided a link for?

      (5) Step 3 - Building the Slide Mechanism
      You say to use the "assembly resources" from the Open Build V-Slot website as a guide. As an amateur with putting code to hardware, which assembly resources/accessories specifically do we need to purchase? You go on to mention pulley's, timing belts & torsion springs, but do not provide a detailed list of assembly instructions. Can you please provide them?

      Thanks for your help, and I look forward to completeing this project!!