Introduction: Refrigerator Magnet Clock

About: Board President at Maker Nexus a Maker Space in Sunnyvale, CA

I've always been fascinated by unusual clocks. This is one of my latest creations that uses refrigerator alphabet numbers to display the time.

The numbers are placed on a piece of thin white Plexiglas that has thin sheet metal laminated to the back. There are small magnets in each of the numbers that cause the number to cling to the sheet metal when they are not being moved.

The numbers are moved using CoreXY mechanism that moves a carriage behind a number, it then engages two magnets which attract the magnets on the number and allows the number to follow the carriage movement. Once at it's destination the carriage magnets are disengaged and the number will stay in place because of the thin sheet metal backing the Plexiglas.


  • 1 x RobotDyn SAMD21 M0-Mini
  • 1 x Adafruit PCF8523 RTC1
  • 1 x Kingprint CNC ShieldStepper Motor Shield
  • 2 x A4988 Motor Driver
  • 2 × Usongshine Stepper Motor 42BYGH
  • 1 x Servo Motor
  • 2 × GT2 Timing Belt Pulley, 16 teeth, 5mm width
  • 2 × GT2 Idler Pulley, 5mm Bore, Toothless
  • 2 × Lever Microswitch with roller
  • 6 × GT2 Idler Pulley, 5mm Bore, 20 Teeth
  • 1 × GT2 Timing Belt, 8m5
  • 54 × 6x2mm Brushed Nickel Refrigerator Magnets
  • 2 × 10x3mm Brushed Nickel Refrigerator Magnets
  • 2 × 8mm x 600mm Guide Rod
  • 2 × 8mm x 500mm Guide Rod
  • 1 × LM7805, 5v voltage regulator
  • 1 × 12V, 10A Power Supply
  • 1 x 1/16" thick white Plexiglas, 21"x19"
  • 1 x36ga sheet metal, 20"x18"
  • 1 x3/4" Plywood, 24"x24"
  • Miscellaneous Hardware

Step 1: Build the Frame

The frame consists of 3/4" plywood with 1/16" white acrylic mounted into a opening in the plywood.

The opening is 16"x20" with a 17"x21"x1/16" rabbet around the edge so the acrylic sheet fits flush with the surface of the plywood. I used a gel super glue to attach the acrylic to the plywood.

I used a CNC router to cut the plywood, but it could be done with a jigsaw and a router. Because the CNC router leaves rounded corners (1/8" in my case), I used a Laser Engraver to cut the acrylic to match.

Step 2: 3D Print the Parts

I designed and 3D printed all of the parts needed to hold the motors and gears for the CoreXY mechanism. I use PETG material but PLA should work fine.

There are 11 parts total, 9 unique. The files can be found on Thingiverse.

  • Stepper motor mount x 2
  • Corner bracket x 2
  • Upper Carriage
  • Lower Carriage
  • Magnet Carriage
  • Magnet Holder
  • Screw
  • Gear
  • Microswitch Bracket

I 3D printed all of the numbers used in the clock. There are are 10 digits for the minutes and hours (0-9), 6 digits (0-5) for the tens of minutes, and 1 digit (1) for the tens of hours. These were printing using various PLA colors to add variety.

Step 3: Assemble the CoreXY Mechanism

Details about how a CoreXY design works can be found at

Building the magnet carrier
The magnet carrier is what is on the backside of the clock, it is positioned behind a given number and the magnets on the carrier are lowered to make a magnetic connection between the carrier and the number. The number can then be moved to a new position and the magnets on the carrier are raised to disengage and leave the number at it's new position.

Sidenote: I had originally planned to use electromagnets to engage and disengage with the number. For some reason I abandoned that idea early in the design process. I can't remember why. I plan to test electromagnets and may end up replacing this carriage in the future.

The magnets are raised and lowered using a screw and a servo. The screw has a very coarse thread so that a half turn of the screw will raise the magnets approximately 4mm which is enough to disengage the connection to the numbers.

Assembling the CoreXY components

  1. The first step is to attach the Beta stepper motor bracket (the bottom motor). I placed it so that the edge of the bracket was flush with the edge of the plywood.
  2. Add the idler gears to the lower and upper carriages and the corner brackets.
  3. Slide the lower carriage onto the guide rod and then attach the corner bracket.
  4. I 3D printed an alignment tool to make sure the lower guide rod was parallel to the edge of the plywood. I used it to determine where to screw the down the corner bracket.
  5. Add the vertical guide rods, the magnet carrier, and then repeat the above steps for the upper carriage and Alpha motor.
  6. To align the upper guide rods I took a piece of plywood and put a screw in one end. I then adjusted the screw so that it just touched the rod at the motor end. I then slide it to the other end and screwed in corner guide.
  7. Mount the stepper motors and drive gears
  8. Thread the timing belt and attach to the magnet carrier

Step 4: Add the Home Switches

The CoreXY needs to calibrate itself after every power cycle to know where the coordinates 0,0 are located. It does this by moving towards the upper left (0,0) until it triggers two micro-switches that indicate the home position. The position where these switches is not critical, they just need to be placed close to the corner so that both the upper carriage and the magnetic carriage depress the switch during the homing cycle.

Step 5: Electronics

The schematic shows the necessary connections between the M0-mini, the RTC, and the CNC Shield. The stepper motors plug into the CNC shield.

The CNC shield power that goes to the stepper motors comes from a 12v, 10A power supply. This 12V is also feed through a LM7805 voltage regulator that can be used to supply power to the M0-mini and RTC.

The X and Y Zero microswitches are wired directly to the M0-mini board.

Step 6: Add Sheet Metal

I had difficulty sourcing a large sheet of 36 gauge steel so I used 10"x4" sheets that were available from multiple sources. To attach them to the acrylic I used 3M Polyester Double Sided Film Tape, 1/2" wide placed along seams. This resulted in a smooth steel surface.

Step 7: Software

The software consists of multiple modules

  • RTC interface
  • Motor acceleration/deceleration done using timers and interrupts
  • CoreXY functionality used to move to a given set of coordinates
  • The Clock - this determined how to move the numbers from their home position to the clock position and back.

All source code can be found on Github

Step 8: Preparing the Numbers

Each number has two 6x2mm magnets glued to the back. These were attached using gel super glue.
It is important that all of the magnets face in the same direction. I made sure the magnets had the north pole facing up. It doesn't matter which pole faces up it just has to be the opposite of the magnets on the CoreXY carrier so the numbers are attracted to the carrier.

Step 9: Initializing the Clock

The initial placement of the numbers is done the first time the clock is run. The CoreXY carriage moves to an empty position near the middle of the face and engages it's magnets.

The user places a number opposite the carrier and tells the software what number and whether it is a minute, tens of minutes, hour, or tens of hour number. The software will then store the number in it's home position. This is repeated until all 27 numbers have been placed.

At that point the clock can be started and the software will move the appropriate numbers to display the time.

Note: this initialization has to be done one-time only. Once the numbers are in the position the software knows where they are even if there is a power cycle.

Make it Move Contest 2020

Grand Prize in the
Make it Move Contest 2020