Sand Table

55,131

849

59

Introduction: Sand Table

Introduction:

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

Electronics:



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



Optional:

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.

    country=US
    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    network={
       ssid="<Network Name>"
       psk="<Network Password>"
       key_mgmt=WPA-PSK
    }



    Clone the Sand-Table GitHub repository:

    git clone <a href="https://github.com/RGroza/Sand-Table.git" rel="nofollow"> https://github.com/RGroza/Sand-Table.git</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>/run.py &
    (sleep 15; python <INSERT FILE PATH>/send_info.py)&



    "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 "read_files.py" 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 (sandify.org) 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

      Recommendations

      • Pi Day Speed Challenge

        Pi Day Speed Challenge
      • Trash to Treasure Contest

        Trash to Treasure Contest
      • Microcontroller Contest

        Microcontroller Contest

      59 Comments

      0
      Zaloha11
      Zaloha11

      Question 5 days 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!

      Tomas

      0
      ryckmans_t
      ryckmans_t

      Question 4 weeks ago

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

      0
      gmartonic
      gmartonic

      2 months ago

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

      0
      BigAndRed
      BigAndRed

      5 months ago

      neat
      but
      WHY?

      1
      gmartonic
      gmartonic

      Reply 2 months ago

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

      1
      jeanniel1
      jeanniel1

      Reply 5 months ago

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

      0
      silkier
      silkier

      Reply 5 months ago

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

      Nonetheless a nice build.

      0
      Roberto Groza
      Roberto Groza

      Reply 5 months 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.

      0
      twit7503
      twit7503

      Reply 5 months ago

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

      0
      nils2u
      nils2u

      Reply 5 months 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....!

      1
      Amateur1929
      Amateur1929

      3 months 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 "send_info.py". Is there a separate email generated from the SendGrid account, or do we use the email address we signed up with? When running the "send_info.py", 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: https://www.amazon.com/gp/product/B00QSHPIHE/ref=o...
      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!!
      0
      Psilocide
      Psilocide

      Question 4 months ago

      Looks amazing - below you said that the noise is less than the testing video, but can you tell me about how loud it is in final form?

      2
      tin.poc3008
      tin.poc3008

      4 months ago

      Hello!
      Could you please give us the sketch of the magnet holder that you printed? It would help us out a lot. Thanks!

      0
      philpp
      philpp

      Question 5 months ago on Step 7

      I am a Mac user do you know if I may run into trouble with running / generating code?

      0
      Roberto Groza
      Roberto Groza

      Answer 4 months ago

      Running code should not be an issue since most of it will be run on the raspberry pi. It can also be run on Mac with a Python interpreter (like "Anaconda").

      0
      LennartW1
      LennartW1

      Question 4 months ago on Step 5

      Hi

      The V-slot Linear Actuator is avaiable in different length... wich shoul I buy?
      Regards

      Lennart

      0
      Roberto Groza
      Roberto Groza

      Answer 4 months ago

      It depends what size sand table you want to build. I cut my V-slot extrusion to about 26.5" so that it was about 8" larger than the radius of the table. Get one that is at least a few inches larger than the radius.

      2
      k-ganguly
      k-ganguly

      4 months ago

      hi roberto
      awesome build
      could you share the details/dimensions of the v-belt pulley you used in the base above the flange. Also, i would lie to know the type of stepper motor brackets you used since they are not visible clearly in the photos. I'm planning to make one exactly as yours using arduino. would love some suggestions on how to go about the software too.

      0
      Wrrr 10-G
      Wrrr 10-G

      5 months ago

      Wow.. just wow.
      Can't wait to see this 'structable completed, but it is already a.w.e.s.o.m.e. in its current state.
      Thank you, master Groza.

      0
      MattGyver92
      MattGyver92

      5 months ago

      Yayyyy. I've always been fascinated by Sisyphus sand tables and now I can just follow your build to finally have my own! :)

      Incredible build!

      -MG