Introduction
I wanted to try my hand at robotics for the first time, and saw a video about an interesting project: the Sisyphus table. It works by moving a metal ball through a layer of sand using a magnet underneath a plate. The magnet is being moved by some sort of mechanism. I thought it looked like a fun project to get my hands dirty with robotics and decided to design and build a similar sand-table, this time named after the titan holding up the world: Atlas.
Requirements
The system should meet the following requirements:
- To keep cost of a prototype down:
- use stepper motors rather than servos;
- use components often used in 3D printers (these are cheap);
- design the mechanism so that no rotating contact is required;
- use 3D-printed parts where possible.
- To meet functional requirements, the system must:
- have two degrees of freedom, being able to move a magnet on a plane bounded by a circle;
- be able to be contained beneath a flat circular plate;
- be wi-fi enabled to allow for control from an external device;
- be small enough to be operated on a table-top.
Mechanical design

From these requirements I decided on a base design. A stepper motor mounted on a base plate would rotate a lazy-susan/slew bearing. A second stepper motor would be mounted in the middle of this bearing, the wires routed through the hole of the bearing eliminating the need for a rotating contact at the cost of slightly more complex kinematics. A hollow tower is then mounted on the slew bearing with a diameter large enough to encompass the inner assembly. On top of this, an arm will be mounted with a rack that will be moved by a pinion gear on the inner stepper motor. To prevent unwanted extension or retraction of the arm the controller will rotate the inner pinion to compensate for rotation of the tower component. Two end-stops will be mounted on the inner tower to home the mechanism.

Electronic design
To control the robot a number of components are required:
- Power supply - As this is the only component working at a relatively high voltage I used a quality Meanwell power supply unit. I used a 12V - 3A power supply I had lying around but a higher voltage would work.
- DC-DC converter - A converter with sufficient range to step down the higher voltage used for the stepper motors to 5V for the electronics. I used a cheap LM2596.
- Motor drivers - To control the stepper motors A4988 motor drivers were used.
- Controller - The cheap wi-fi enabled ESP8266 was chosen as the main controller. Alternatively, a raspberry pi could be used, but this would be more expensive and less robust. An added benefit was that this means I get to practice embedded development.
- End-stops - "Opto" optical end-stops were chosen for being able to let a rotating components pass through them unhindered when not homing the device.
- Stepper motors - Nema 17 (17HS13-0404S1) motors were chosen, which are cheaply available due to their mass use in 3D printers.

Manufacturing
After the rough design, the components were designed one-by-one. The parts are 3D printed allowing for rapid prototyping and iteration. Most components were not altered form their initial design.
- Table gear - Attached to the slew bearing and used for the rotation of the table. A double-herringbone was chosen to create smooth motion without inducing lateral forces.
- Table driver - The gear driving the table gear at a 3:1 ratio and the support for the stepper motor.
- Inner tower - The inner tower holds up the stepper motor driving the arm, and the two end-stop sensors used in homing the mechanism.
- Outer tower - The tower that supports the arm that rotates around the inner tower. It is mounted atop the table. It also has a small protrusion that passes through the homing sensor on every rotation.
- Arm - The rack that holds the magnet and is driven by the pinion atop the inner tower. A lip at the end allows for the mounting of a small arm that is designed to trigger the second end-stop when the arm is fully extended in the table's zero-position.
- Loader - A bearing pressing down on the rim of the table gear. Compensation for the poor quality of the bearing to reduce play in the assembly.
- Supports - Supports holding up the sand table.
Assembly
The entire system is assembled on an old cutting-board, to guide the wires for the center tower underneath the bearing care must be taken to assemble in the right order.

Operation
The controller has the task of receiving the desired position of the system and changing the system towards this desired state. It must also initialise the system to a known position to home the system.
Homing
To home the system, the table is rotated until the end-stop registers the small fin mounted in the outer tower has triggered it. The table position is then set to 0. At this point the table rotates a fixed number of steps to a position where the arm is in line with the second end-stop. The arm is then extended until it is detected by the end stop. The arm position is then set to full extension and homing has completed.
Control
After initialisation the system enters control mode.
The current position of the table and arm are stored as integer numbers. These are between 0 and 1200 for the table (the stepper motor takes 400 half-steps per rotation, and this is transferred across a 1:3 gear ratio) and 2400 for the arm. The two are independently controlled.
A simple web-page is served from the controller's built-in web-server. A circle representing the table is drawn on an html canvas, and a websocket connection is established to the websocket server running on the controller. When a click or touch is registered the angle and arm length between the touch (or click) and the center point are calculated using simple trigonometry, and then translated to coordinates Atlas understands. A message is then sent over the websocket connection containing these coordinates. When the main control loop on the controller services the websocket server, all messages but the last are discarded, and the last coordinates are copied into the desired position.
The system's main control loop continuously compares the desired position of the table and the arm with their actual positions, and takes steps to unite the latter with the former.
First the table position in evaluated. A calculation is done to determine whether the desired position is less than half the maximum rotation away in the clockwise and counter-clockwise direction. The system then takes a step in the direction that will get it to the desired position the quickest. If the table rotated clockwise and is now beyond the maximum position, the position is reset to zero (i.e. from 360 degrees to 0). If it is rotating counter-clockwise and is now 0 it is reset to the maximum (i.e. from 0 to 360 degrees). Finally, because the rotation of the table causes the arm to retract or extend, the arm position is increased or decreased by one.
Then the arm is moved. Where the table is moved at a ratio of 1:3, the arm is directly driven. That means that one step on the table moves the arm as much as 3 steps of the pinion. As such, the arm pinion is always rotated by 3 steps.
First the position of the arm is compared to the desired position. If the difference is at least three (otherwise it may move back-and-forth endlessly to get to a position the resolution of the pinion can't resolve). If the desired position is greater than that of the arm it is extended by three steps. Otherwise it is retracted.
Next steps
The next steps in the project are to create a barrier on top of the circular plate to contain the sand. Then a means of drawing patterns will be developed. This will either be settings functions for the table and arm to follow, or a program to upload to the controller for it to play. Finally an LED-strip will be mounted on the inner edge of the table to highlight the patterns drawn in the sand. The brightness will be controlled using a PWM signal from the controller (via a MOSFET).
The table driver may be redesigned to use a higher quality slew bearing as the current one causes a lot of noise from rattling around due to the large amount of play in the bearing. The loaders have reduced this noise slightly, but the system is still very loud. The extension and retraction of the arm is quiet in comparison.
I will update this page as I progress on the project.








