Project Overview
In 2008 I started building a mechanized sand table that was directly inspired by the artwork of Bruce Shapiro. My goal was to turn his artistic medium into a functional piece of furniture that could serve as both an input and output device for networked information. This project was developed as part of my Master’s degree in the Arts Computation Engineering program at the University of California, Irvine.
I started building my project from pieces of a large-format printer, without any knowledge of CNC devices. Based on a few images I had seen of Sisyphus tables, I started building a radial plotter design. My approach required a slip ring and unfortunately I wasn’t able to fabricate or source one at that time. My attention turned to finishing the written portion of my thesis, and I never completed my table.
I kept my incomplete work, always hoping to have the opportunity to resume the project. Between 2008 and 2018 many advances were made in electronics, noteably Arduino boards and the Raspberry Pi, as well as knowledge-sharing platforms like YouTube.
In 2016 Bruce ran a very successful Kickstarter campaign to turn his Sisyphus table into a consumer-oriented furniture piece. I actually didn’t learn about the Sisyphus Kickstarter campaign until May of 2018. It motivated me to start looking into what it would take to resume my project and that’s when this iteration of the project was born.
Goals For This Project:
- Build a working plotter into my existing table
- Create algorithmic sand patterns and open source the code used for creating them
- Create a public web site that allows visitors to send patterns to the table to be drawn
- Link static and/or dynamic patterns to represent dynamic data sources (part of the original vision for Gravitable)
- Add LED lighting to the table
- Share my research and development process along the way
Since resuming my work I have found many other sand table builds, and if there’s one thing that’s certain, it’s that there is no single way to build one. Everyone has access to different budgets, supplies and tools. I’ve seen tables made from 3D printed parts and others made from balsa wood and hot glue. With limited access to machining tools, it’s important for my project to use as many pre-fabricated components as possible. Additionally, I prefer to use supported and well-documented components over inexpensive, undocumented ones, so I have prioritized those over cheapers options.
Components
Plotting Mechanism
In my research I’ve come across 3 main different types of plotting mechanisms: XY/Rectangular/Cartesian, Radial/Polar, SCARA.
The Sisyphus table by Bruce Shapiro uses a polar plotting mechanism which they call the Sisbot.
The Sandsara table by Ed Cano uses a SCARA mechanism.
My build uses an XY Plotter, primarily because I have very limited machining resources. In fact I was able to build mine with only a few cuts through extruded aluminum beams.
Within the XY plotter family there are some options for drive configurations. I used a belt-drive for the X-axis and a lead screw drive for the Y-axis. I made this choice because I came to the build with no experience and wanted to try out each type of linear actuator.
Here’s a great Instructables project for creating a DIY linear actuator.
Another XY plotter configuration uses the Core XY layout. The primary advantage to this design is that the motors are mounted in such a way that they aren’t required to move, resulting in the ability to rapidly move the plotting head.
- Core XY design ideas on Open Builds
Stepper Motors
Behind every design that I’ve come across is the the use of high-precision Stepper Motors.
For now, here are some great introductory articles on Stepper Motors. However, in the end you will want to use a Motor Driver so that you aren’t directly coding the voltage level changes required to drive the motors.
- Arduino Stepper Library Tutorial
- Concepts by Tom Igoe
- Driving a Stepper by Adafruit
- Stepper Motor Quickstart Guide by Sparkfun
- Misconceptions about Stepper Motors Explained
- Controlling Stepper Motors using Python with a Raspberry Pi
- How to Run a Stepper Motor with an Arduino + L293D IC
- Step Motor Basics
- Step Timing
Motor Controllers
As mentioned above, stepper motors are great, but they require specific voltage levels, and a motor driving circuit and firmware simplifies this tremendously.
- Big Easy Driver
- Adafruit Motor Driver Shield - Drives 2 stepper motors
- DQ542MA Stepper Motor Driver
- Arduino + DQ542MA Video
- Step Size Calculator
Future research: Arduino AccelStepper Library
CNC (Computer Numeric Control)
Now that you have a motorized plotter, you need a way to turn paths into instructions for the motor drivers. This is where the concept of Computer Numeric Control (CNC) comes in.
One of the most universally popular CNC languages is G-code, and this is what my build uses with the help of the GRBL G-code parser specially designed for use with Arduino.
- Official GRBL Site
- GRBL Overview
- GRBL Shield
Control Software
Besides the hardware, you’ll need a software interface for sending the G-Code file to the CNC machine. During my process I relied heavily on Universal Gcode Sender for testing, but in order to control your device remotely from the command line you’ll need to write your own software for sending the commands.
Image Printing
Once your machine is built and controllable using a CNC interface, you’ll need a path to plot. There’s a variety of tools for this that are covered in this section.
Converting Image and Vector Artwork to G-code
####### Vector Artwork
- Convert your SVG files to CNC cutting paths with this tool
- PyCam - STL, DXF, SVG Files to G-Code
- CNCJS - A web-based interface for CNC milling controller
- G-Code Q’n’dirty toolpath simulator
- Inkscape Gcodetools plugin
- Image to Vector to G-CODE Playlist on YouTube
####### Bitmap (Pixel) Images
Sand Table Interface
Magnet
https://www.kjmagnetics.com/selectasize.asp
-
Mounting/Cup Magnets (https://www.kjmagnetics.com/blog.asp?p=mounting-magnets)
Sand
- Type
- Shuffle Board Wax (https://robdobson.com/2017/02/a-line-in-the-sand/#comment-48467)
-
https://www.sandtastik.com
Weight: 1.465 oz per volumetric oz.
- Baking Soda (https://www.v1engineering.com/forum/topic/does-this-count-as-a-build/page/5/#post-37253)
-
Depth
- Area is PI * (25.5/2)^2) = 510.71 square inches
- Depth of 0.25” = 510.71 * 0.25 = 127.68 cubic inches = 70.75 fluid oz.
Steel Ball
- 1/4”
- 1/2”
- 3/4”
- 1”
Lighting
Adafruit Dotstar LED Strip
- https://learn.adafruit.com/circuitpython-essentials/circuitpython-dotstar
- https://learn.adafruit.com/adafruit-dotstar-leds/python-circuitpython
- https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi
Original Drawing Creation
Pattern Generators
- My Own Sand Table Pattern Generator
- Sandify
- Sisyphus for the Rest of Us and here
- JSisyphus
- Python Turtle
Line Drawings
- http://sunnybala.com/2018/09/10/python-etch-a-sketch.html
- https://create.arduino.cc/projecthub/iot_lover/arduino-drawing-via-web-using-step-motor-controller-cb5f33
-
https://mathematica.stackexchange.com/questions/133280/draw-image-as-a-continuous-line-drawing
- Travel Salesman Problem (TSP) Art
- http://www2.oberlin.edu/math/faculty/bosch/making-tspart-page.html
Patterns
- https://en.wikipedia.org/wiki/Parametric_equation
- http://mathworld.wolfram.com/Spirograph.html
- http://www.mathematische-basteleien.de/spirographs.htm
- Hypotrochoid
- https://www.openprocessing.org/sketch/677658
- https://c.ymcdn.com/sites/www.amatyc.org/resource/resmgr/Summer_Reading_2015/Hypocycloids-Sept2014.pdf
- http://math.hws.edu/lasseter/teaching/S14/CPSC120/assign/hw5.html
2D Curves - http://www.2dcurves.com
50 Famous Curves - https://elepa.files.wordpress.com/2013/11/fifty-famous-curves.pdf Curve Family Tree - http://xahlee.info/SpecialPlaneCurves_dir/Intro_dir/familyIndex.html#Curve%20Family%20Tree
https://www.desmos.com/calculator/qf1zfdjewu https://www.desmos.com/calculator/3plby3pgqv
Cycloids/Roulettes/Guilloches http://2008.sub.blue/blog/2008/10/10/guilloche.html https://www.cnccookbook.com/guilloche-rose-engines-jeweling-engine-turning-artistic-machining/
Drawing Machine Simulator https://krazydad.com/blog/2015/07/12/cycloid-drawing-machine-simulation/ https://wheelof.com/sketch/
Rotate a Sine wave https://math.stackexchange.com/questions/852530/whats-the-intuition-behind-the-2d-rotation-matrix https://processing.org/discourse/alpha/board_Contributions_Beyond_action_display_num_1112719128.html
Other Documented Builds
Throughout my build I’ve found many other sand tables documented across the Internet. I’ll list these here at the top of my documentation as a jumping-off point.
- Sandsara Table by Ed Cano
- V1 Engineering Zen XY
- Mark Rehorst’s Build
- Michael Dubno’s Build
- Rob Dobson’s
- Sand Plotter by The Mechatronics Guy
- MakrToolbox Build
- Always Tinkering
- Arduino Sand Table
Forums
Videos
Here’s a playlist of sand table videos I’ve discovered throughout my research
Other Related Projects
- Sahara Table
- Mechanised Chess Board
- iBoardbot
- Simon Hallam’s Zen Table on Kickstarter
- Python Etch-a-sketch
- Arduino networked drawbot
- CoreXY Drawbot build
- Laser Engraver Build
- Arduino CNC Projects