What it does

Zen table draws an image in the sand using a metal ball moved by a magnet. The table receives the pattern that will be carved into the sand from a mobile app.

Users can choose what pattern to appear in sand, by selecting one of the three different ways available in the mobile app:

  • Select an image
  • Draw a patterns using their finger
  • Select a mathematical equation

How we built it

1x1m custom wood table enclosure, supports, mounts

Step motors, permanent magnet, drive belts, guidelines

Arduino Uno board with hacked GRBL firmware connected w/ motors

Raspberry Pi3 board with Server written in Go Lang for API requests from mobile App and for sending G-Code to the Arduino board

Android App

Challenges we ran into

Choosing ball weight/size/material/friction and making it roll instead of drag

Generic Image rasterization not suitable for drawing without a mechanism for lifting the ball

Sand/Salt characteristics and interaction with wood board and metal/magnetic ball

Ball judder/jitter; wiggly magnet attachment on drive belt

Drawing line needs to be a continuous curve

Go lang serial communication issues

CNC Homing issues, alignment, soft/hard limits

Speed/acceleration/ tuning/adjustment

Arduino IDE library issues

Accomplishments that we're proud of

It works! Speed, very good positioning precision (except it’s somewhat offset by magnet on belt wiggle)

What we learned

A lot ;) (2D CNC, various material properties, magnetic forces interaction, G-Code, image processing, equation graphs, various coordinates systems)

What's next for Enter Zendman - Magnetica

en table can be further adapted to personalize a coffee table or to create timeless drawings that can be framed and then exposed.

Adding a Z-axis can enable creation of 3D models.

A further version can be developed that will be able to lift the ball in order to create any kind of drawing, with non-continuous lines.

Improvements can be made in order to roll the ball properly instead of roll/drag movement.

Complete implementation in order to send vectorized/post-processed image to Go server.

An automatic clearing/leveling of sand for an empty “canvas”.

Share this project: