Aleph Clock

Designing and building a clock from scratch

Gears
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.

Motor
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 = rtc.now();

  myMotor->onestep(FORWARD, INTERLEAVE);   
  total_steps++;

  if (now.unixtime() == target_day) {
    target_day = now.unixtime() + 86400L;
    target_hour = now.unixtime() + 3600L;
    target_minute = now.unixtime() + 60L;
    time_check(target_day_steps);
    target_day_steps = total_steps + (86400000/interval);
  }  
  if (now.unixtime() == target_hour) {
    target_hour = now.unixtime() + 3600L;
    target_minute = now.unixtime() + 60L;
    time_check(target_hour_steps);
    target_hour_steps = total_steps + (3600000/interval);
  }
  if (now.unixtime() == target_minute) {
    target_minute = now.unixtime() + 60L;
    time_check(target_minute_steps);
    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.println(expected_steps);
  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
  Wire.begin();
  rtc.begin();
  AFMS.begin();  // create with the default frequency 1.6KHz
 
  DateTime now = rtc.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);

  delay(3500);
}

void loop() {
  timer.tick();
}

This is all still a work in progress. ūüôā

Impatience

Got into one of those wars with myself today. Nothing seemed to be going right on a project, and at first I was working through and around the problems. But, problem after problem kept piling up. It also didn’t help that it’s a gazillion degrees in the shop. Then I started to get frustrated and impatient, and started trying to force things to be the way I wanted them to be, and damaged something I had been working on all day. The trick is to quit before getting to that state. When will I ever learn?

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.

Pentaflake Tabletop

Sanded and Varnished

I’m still working on the video, but I wanted to get something up on HipNerd.com about finishing this project, since I already posted to social media about it.

I had more trouble with the Maslow, but finally got a good cut.

Pentaflake pattern being cut into plywood by Maslow CNC.

Pentaflake pattern being cut into plywood by Maslow CNC.

The bit was dull from the tests I ran previously, so I changed bits halfway through, then re-ran the program to clean up the hairy stuff from the dull bit. Finally, something worked in my favor, and it cleaned up well.

Before and after changing bits.

Before and after changing bits.

I sanded the insides of the cutouts by cutting up a sanding sponge, folding it over and zip-tying it to a dowel, then putting the dowel in my drill.

I cut the tabletop into a circle using a router on a jig.

Cutting the circle using a router on a jig.

Cutting the circle using a router on a jig.

I painted a coat of clear epoxy resin into the cutouts to seal, then poured the the colored epoxy using condiment dispensers.

Tabletop with Seal Coat and Colored Epoxy

Tabletop with Seal Coat and Colored Epoxy

I sanded off the excess epoxy with 80 grit sandpaper, working in sections.

Sanding in progress

Sanding in progress

I sanded everything smooth, working my way to a final 400 grit hand sanding. I put some edge banding on to hide the plywood edge. Then, I put on three coats of varnish.

Sanded and Varnished

Sanded and Varnished

I’m really happy with the way this came out, and looking forward to some more projects with my Maslow.