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:

Mechanical design

A sketch of the initial design of the Atlas mechanism.
A sketch of the initial design of the Atlas mechanism.

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.

A side view of the assembled tower mechanism.
A side view of the assembled tower mechanism.

Electronic design

To control the robot a number of components are required:

These components were quite simply connected to each other. Small capacitors were put between the motor power supply Vin and GND, and a diode was placed on the positive in of the DC-DC converter to stop dirty power interfering with motor drivers. The stepper driver's step size, step and direction pins were connected to digital I/O pins on the controller as are the the two end-stop's outputs.

Atlas' electronics on a prototype board.
Atlas' electronics on a prototype board. The end-stops not connected. FLTR: Controller, 2x motor driver, DC-DC converter.

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.

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.

A time-lapse of the assembly of the system.
A time-lapse of the assembly of the system.

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.

Atlas' homing procedure.

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.

Atlas moving a metal ball around the plate guided by user input. Sent websocket messages are displayed in the bottom console on the screen.

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.