Aleph Clock

Designing and building a clock from scratch

It took me a while to get my head around the concepts behind making a gear train. During a bout of sleeplessness, I tried to get back to sleep by focusing on gear ratios, and how I could make a gear train. I finally got past my mental block (and got back to sleep), and the next day I diagrammed out a gear train.

In CAD I started to make gears, and tried to mesh them together.

I got the necessary values that I needed for the gears, but after a while, I realized I needed a different way to visualize the overlapping gears because they started running into each other. I made this map in Inkscape:

After a few more iterations, I realized that I needed a spreadsheet to keep track of the gears and their relationships.

I found that I could import a CSV file into Fusion 360, so that made it a lot easier to work on the gear train. After more iterations I came up with a couple of possible plans.

Right now, I’m working on trying to compact the gear train down rather than make it one long line of gears.

At first I thought I’d use a stepper motor. I got an Arduino and a motor shield and a small stepper motor just to see what it would take. It seemed overly complex, so I started casting around for a simpler solution. I thought I could use a synchronous AC motor that I could just plug into the wall, but I bought one that was supposed to be 1 RPM and it wasn’t even close to 1 RPM when I measured it. So, I went back to the idea of using a stepper motor.

I have a collection of electronic junk, and I found a power supply that has both 12 VDC and 5 VDC output, and enough amperage to power the motor and Arduino. I ordered a DS3231 RTC (real time clock) because I read that the Arduino’s internal time keeping is not really accurate enough for a clock.

Right now I’m working on programming the Arduino to advance the stepper and check the RTC to correct any inaccuracy.

//set Board to Arduino Uno
//set Port to SLAB_USB to UART

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include <arduino-timer.h>
#include "RTClib.h"

RTC_DS3231 rtc;
auto timer = timer_create_default();

// Create the motor shield object with the default I2C address
Adafruit_MotorShield AFMS = Adafruit_MotorShield(); 

// Connect a stepper motor with 200 steps per revolution (1.8 degree)
// to motor port #2 (M3 and M4)
Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);

long target_minute;
long target_minute_steps;
long target_hour;
long target_hour_steps;
long target_day;
long target_day_steps;
long total_steps = 0L;
long start_steps;
int interval = 150;

bool one_step(void *) {
  DateTime now =;

  myMotor->onestep(FORWARD, INTERLEAVE);   

  if (now.unixtime() == target_day) {
    target_day = now.unixtime() + 86400L;
    target_hour = now.unixtime() + 3600L;
    target_minute = now.unixtime() + 60L;
    target_day_steps = total_steps + (86400000/interval);
  if (now.unixtime() == target_hour) {
    target_hour = now.unixtime() + 3600L;
    target_minute = now.unixtime() + 60L;
    target_hour_steps = total_steps + (3600000/interval);
  if (now.unixtime() == target_minute) {
    target_minute = now.unixtime() + 60L;
    target_minute_steps = total_steps + (60000/interval);

  return true; // to repeat the action - false to stop

void time_check(int expected_steps) {
  int x;
  int steps;
  Serial.println("time check!");
  Serial.print("expected ");
  Serial.print("steps    ");
  Serial.println(total_steps - start_steps);

  steps = total_steps - start_steps;
  start_steps = total_steps;
  if (steps < (expected_steps)) {
    for (x = steps; x < (expected_steps); x++) {
      myMotor->onestep(FORWARD, INTERLEAVE);
  if (steps > (expected_steps)) {
    for (x = steps; x > (expected_steps); x--) {
      myMotor->onestep(BACKWARD, INTERLEAVE);

void setup() {
  Serial.begin(9600);  // set up Serial library at 9600 bps
  AFMS.begin();  // create with the default frequency 1.6KHz
  DateTime now =;

  // following line sets the RTC to the date & time this sketch was compiled
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

  // call the one_step function every n millis
  timer.every(interval, one_step);

  target_minute = now.unixtime() + 60L;
  target_minute_steps = total_steps + (60000/interval);
  target_hour = now.unixtime() + 3600L;
  target_hour_steps = total_steps + (3600000/interval);
  target_day = now.unixtime() + 86400L;
  target_day_steps = total_steps + (86400000/interval);


void loop() {

This is all still a work in progress. 🙂

Möbius Rollers, Blender 3D and Fusion 360

A bunch of Möbius Rollers

I think I was first introduced to the concept of a Möbius strip in high school. This simple yet weird thing that can be made from a single strip of paper, one end given a 180º twist, and then the ends taped together. If you trace the surface of the resulting object, it has only one continuous face, and there’s only one edge. There are also weird results when you cut it different ways.

A Möbius strip is actually an ideal mathematical construct, like a point, plane, or cube. One you make out of paper is a physical representation of that ideal construct, but paper actually has thickness. But, that’s interesting, because what you’ve actually done is made a long, thin rectangular solid into a Möbius cube, which has one surface, and one edge. I made the Möbius Roller to answer a question in my head: What would it look like to inflate the side (edge) of a Möbius strip? (Then I had to add the channel that follows the side with balls that roll in the channel – because it was cool 😀.)

What has that to do with Blender and Fusion? Well, I originally learned Blender in order to make this object. I don’t know if you can make it in Fusion. (I genuinely don’t know, I’d like to see how, if it’s possible.) Anyhow, it wasn’t too hard to find a tutorial for Blender that showed how to make something like this shape, and I adapted it.

Does that make Blender better than Fusion? No. There are advantages to each. For example, making an object from a dimensioned drawing (like an engineering or architectural drawing) is much easier in Fusion than in Blender.

If you’re interested buying one, contact me.

Möbius Roller Update

Part One Here

Finally realized that trying to cut or zip the channels open is just overly complicated, and that (although it seems a little less magical) I should just print in two pieces and glue together. There are multiple benefits:

  1. It looks better. Being able to control the edges of channel where it intersects the outside of the of the cube gives a very clean look, probably better than I’ll ever get trying to open it with mechanical means.
  2. Channel walls come out very smooth. This is mostly the result of the way the slicer processes the model when it’s when it’s a monolithic piece.
  3. Easier to model. There are a lot more considerations when trying to make internal structures in an enclosed piece.
  4. Easier to paint, especially on the inside curves. Although, I do have to take a different approach than primer/sand/spray, which was giving some really nice results.

It’s not done yet, though. As you can see in the picture of it being printed, I did not use supports, and that caused the channels on the top of the arcs to be distorted just enough that the bearings fall out. Reprinting with supports now, and that should add dimensional stability (along with my emotional stability). 🙂

Seeking the Perfect Möbius Roller

I’ve been trying to perfect the process of making these things that I call “Möbius Rollers”.

Issue #1—Painting:

On the top one I used multiple coats of filler primer, sanded it with 100 then 220 grit sandpaper, painted it blue, taped it, painted it green and removed the tape. The paint job came out looking great.

The second one, I used wood filler on the rough areas, which saved me a couple of coats of filler primer. Painted it green, then taped it. But, the tape strips were too small, and didn’t stick well in some areas, so some of the blue paint got under.

Issue #2—Cutting:

There is a channel with ball bearings that ride around inside. In order to get this to print, I have to make the channel just below the surface. Then, I just cut the top of the channel open, so you can see the balls roll around inside.

On the top one I tried different bits on my rotary tool, and when I tried the router bit, I thought it was working at first, but then it skipped all over, and tore the whole thing up.

The second one I tried a grinding wheel bit on a slow speed, and I got a cleaner cut, but it took a long time. Then, after it was open, I tried sanding the channel so the balls would roll smoothly, but I discovered that the channel is pinched in one area, and even a lot of sanding would not open it up. And, even still, I did not like the way the cut came out.

Issue #3—Model:

On my old printer the channels came out wide enough, I don’t know if it’s the slicer, or the printer, but I need to either figure out different print settings, or maybe modify the the model to make the channels bigger. Also, I want to find a way to make the plastic thin enough along the outside of the channel, so that I can pull it open like a zipper.

3D Printed Halftone

I had an idea to 3D print a halftone image by making a grid of holes where the larger holes would be brighter halftone pixels, and the smaller holes would be darker ones, and then I’d light it from behind. I tried several approaches, including one performed after I made this video, and they all failed. Blender 3D was not up to the task of doing a giant boolean operation, and the P5.js SVG library was not up to the task of drawing all the outline squares that I needed. So, I resorted to printing a background (just a large, white rectangular slab) and switching filaments to print the halftone pixels on top in a different color (black squares).

I have a lot of ideas for variations, like a non-solid background, and slicing a larger image and printing it out in pieces. Ultimately, I still want to try my original plan, so maybe Inkscape, or learn some Fusion 360 to see if it can do it, and then maybe openSCAD if that fails.

Here are the software tools I used:

Here’s the Javascript program, if you want to give it a try yourself:

Amazon Associate Link: Made with Hatchbox PLA

Golden Rectangle Icosahedron in Blender 3D for 3D Printing


I found this Golden Rectangle Icosahedron while reading about Icosahedrons on Wikipedia: Regular Icosahedron and wanted to make a 3D print of it. I realized that I could print it with a minimum of supports if I printed it standing on three corners.

Constructing the figure is super easy by making a golden rectangle, duplicating and rotating it two times. The problem that I encountered next was getting three corners resting on the XY plane. You’d think there’d be an easy to use tool or two, or maybe a plug-in, to do this in Blender, but haha–no. After a bunch of googling and wasting time trying to figure out how to do this with Blender tools, I landed on the idea of using duh-duh-duh MATH!

The process is simple, and can be generalized to any object. It requires only simple and familiar Blender tools: moving the origin of an object, translating the object, and rotating the object.

The basic steps are:

  • Move the origin of the object to one of the vertices
  • Move the object to 0,0,0
  • Get the coordinates of the next vertex and find the angle to rotate around the Z axis align it on one of the major axes
  • Get the coordinates of the vertex again and calculate the angle to rotate to the XY plane
  • Get the coordinates of the last vertex and find the angle to rotate around the axis in step three to the XY plane

I had a lot of trouble getting this to print on my new Prusa I3 MK3. Here’s some troubles I ran into, and how I resolved them:

  • After a week of printing fine, I started to notice that first layers were sometimes failing. The solution was to preheat the bed for just a couple of minutes before starting the print.
  • I never really had the Z-axis set correctly because the Prusa’s built-in first layer calibration routine is not good, and makes you guess too much. I used the instructions in this thread: life adjust Z – my way (sic), and everything was so much clearer and easier.

Once I had the printer dialed in, I had to experiment a lot with Slic3r settings. I think the most important three settings in getting this to work were enforcing support for the first 40 layers, setting the XY separation to 5%, and setting the infill speed to 375 mm/s².

Model on Thingiverse:

As far as the video itself goes: The Blender session was complete garbage, and I discovered that it’s really hard to edit that type of video. Also, voice overs are hard. Also, the painting was long and unnecessary (and badly done to boot!).