Refrigerator Magnet Clock




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

This is an entry in the
Make it Move Contest 2020

Be the First to Share


    • Mason Jar Speed Challenge

      Mason Jar Speed Challenge
    • Bikes Challenge

      Bikes Challenge
    • Remix Contest

      Remix Contest

    78 Discussions


    12 days ago

    Great project, great implementation, would have copied it, Unfortunately I can't load the code onto the RobotDyn, could you please explain this for a beginner, thanks

    Reply 12 days ago

    Can you load other code onto the RobotDyn? If not you probably just have the wrong board type. In the Arduino IDE under Tools -> Board Type select "Arduino M0 Pro (Native USB port)"

    If that option does not appear then go to the top of the Board Type list and select "Boards Manager", type m0 in the search bar of the Boards Manager and install the "Arduino SAMD Boards (32-bits ARM Cortex-M0+)" package.


    Reply 11 days ago

    Have a nice day, thanks for the quick answer, yes, I chose the settings that way and can also play other sketches, the problem is already during the compilation, the uploading no longer occurs. I've attached a picture.
    thank you

    Reply 10 days ago

    Thanks for your help, but unfortunately I am not able to install the code, still great idea and implementation.

    Reply 1 day ago

    I also have added the binary to the github repository so that might be another option.


    Reply 12 hours ago

    Thank you very much, I will test and report as soon as I have the time, thank you again

    Question 7 days ago on Step 9

    How long does it take to make this?


    Answer 7 days ago

    It took me 3 months. LOL.

    Most of the time is going to be spent 3D printing the parts. There are 38 3D printed parts so that will probably take about a week depending upon your printer.

    Cutting the wood and acrylic is fairly quick, took 30 mins on the CNC and laser cutter, so probably 2 hours by hand.

    Assembly is a few hours, and the electronics is another couple of hours.

    So 3D printing time + a half day.


    Reply 7 days ago

    That is a really long time.


    Reply 6 days ago

    I realized I may have misunderstood your original question. I thought you were asking how long would it take someone to recreate it, not how long it took me to make it.


    10 days ago on Step 2

    As I posted on thingiverse.
    Thank you for posting the schematics. We now have all the parts and are starting to build.
    But after scouring the school and searching online, we haven't been able to find any suitable magnetic numbers.
    You mentioned that you printed yours.
    Is there any chance you could post the STL's on your numbers.


    Reply 9 days ago

    Never mind. I found them in the complete download zip file from thingiverse.
    Thank you


    Reply 9 days ago

    I forgotten them on Thingiverse and added them after your post there.

    Let me know if you have any other issues.

    BTW, where are you located?


    Reply 8 days ago

    Hawaii, I teach 3D design and printing at a small K-8 school on Ohau.


    10 days ago

    Great project Craig!
    May I please give some suggestions before I start building -
    The 12:00 hrs clock problem -
    # You are from Sunnyvale, CA and so it is natural that your clock is a 12 hrs clock, but I am missing the 'am' & 'pm' indicators....
    # I am from Vienna, Austria and in Europe we usually have 24 hrs clocks, is there any chance that you make a code for a 24 hrs clock, that would be great!
    # Reading though most of the comments and this being my own preference, I am already retired ;-) would it be possible to get a 5 minute time change (i.e.: 09;00 - 09:05 - 09:10....)?
    Keep up the great work, looking forward to V2.0!
    Best, Eduard


    Reply 8 days ago

    I figured there was no need for AM/PM unless I lived in a bunker. Analog clocks don't have AM/PM. I can look out the window and figure it out. :)

    A 24-hour version could be done. Would need to shift the home positions of some of the numbers to make room for the new 2 digit. There is one spot available on the right side, but would want to make it be on the left side close to it's destination. The code keeps time in 24-hour format internally and converts to 12-hour just before display, so commenting out a couple of lines will make it do 24-hour.

    Same issue with a 5 minute time change. There is a routine called HasAMinute passed, just need to change that to check for 5 mins changing.

    Those sound like exercises for the reader. :)
    Seriously, those changes are not something I'm going to put into my release code, but I will help you make the changes if necessary.


    11 days ago

    It has been a long time since I've seen a truly original variety of clock and you reset that counter. Bravo!! :-) I absolutely love it. How could I not since it involves both clocks and magnets, two of my most favorite things. ;-)


    12 days ago

    You're quite inventive ! What a clever idea with a smart developpement, all what I love. Inspiring as well, thx.