Introduction: CYCLOTRON CLOCK 3D

This is a large, brutal industrial style Perpetual Motion clock with time displayed on four rotating digt modules.

Uses a wooden base, 3D printed parts and an ESP32 WROOM 32D module along with four 28BYJ-48 Stepper Motors.

Time is stored on a RTC and can be synchronized to a Master Clock if required.

The clock movement and electronics are housed in a 3D printed framed Perspex case.

Further build details if required can be found here http://www.brettoliver.org.uk/Cyclotron_Clock/Cyclotron_Clock.htm

3D parts CURA and Freecad can be downloaded here http://www.brettoliver.org.uk/Cyclotron_Clock/Cyclotron_Clock.htm#3Dprints




Supplies

You will need a lump of timber to make the base and frame.

The base is W480mm x D200mm x H48mm.

The frame is 2 off W417mm x D15mm x H13mm and 2 off W175mm x D15mm x H13mm

Support strip W380mm x D48mm x H10mm

Top Strip W375mm x D48mm x H8mm

3D filament PLA in White and Black

Assorted M3 and M2 screws - I buy a box of assorted lengths for each size

Vero Board 50 holes x 36 strips

Espressif ESP32 WROOM module

4 off 28BYJ-48 Stepper Motor and ULN2003 driver modules

1 off Latching Push Button Switch Diameter of Mounting Thread: 12mm/ 0.47in

2 off 10K Potensiometers linear

2 off Potentiometer knobs

1 off LM2596S

1 off 12v power supplly 1amp min

1 off RTC module DS3231 RTC Real Time Clock I2C compatible

4 off PCB mount micro switches

5 off Perspex sheet (cut to fit dust cover)

1 off Super Glue (cyanoacrylate) for bonding wood frame and 3D parts

2 off Wall brackets (if wall mounting) https://www.amazon.co.uk/gp/product/B08S3SSZ7L/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&th=1

4 off Double-Sided Rubber Sealed Deep Groove Ball Bearing Miniature Ball Bearings(625-2RS 5 × 16 × 5mm)

https://www.amazon.co.uk/gp/product/B07VH36HQ7/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1


Step 1: Design

Design

The digits in this clock are based on a perpetual calendar dating back to the early 1900s.

I liked the simplicity of the design, the clunking and clicking for the falling digits and the movement of the digit holder. I decided to make a clock using four of these digits driven by individual stepper motors.

To me it's the sound and movement of a clock that makes them more than just a timepiece.


Having never seen inside one I played around with how I thought it would work until I came up with a working version.

Note my digits are the reverse of the original with the display rotating bottom end towards you and the digits displaying at the bottom.

If you look from the back of my clock the digits would look the same as the original.


Case Design


I have always liked the harsh industrial look of old Barometer cases and have based my case around this look.

I have used a combination of wood for the base and a 3D printed black frame with sheet Perspex panes for the case.


The 3D printed frame has 30 individual parts with only the 4 centers spars glued together in the middle.

I have also added a wood plinth to the base and top of the digit modules tie two together visually.

Step 2: Features

Pic 1 Four large 2"/50mm digits make up the display in hours and minutes

Can be Synchronized to a Master Clock if required

Summertime and Wintertime buttons

Designed to be wall or desk mounted

Battery backed up Real Time Clock

Pic 2 RTC and display adjusted and set from the control panel

Serial out enabled from control panel (press & hold "Set Disp" then pess "RST"

Program enable switch on back of clock

Dual Wood and 3D printed construction

 

Pic 3 The base and cover support are constructed from wood and have cutouts for the controls in the front and the Vero Boards in the rear

Pic4 This is a large clock and weighing in at 10.5lbs (4.76kg) it is no lightweight.

Dimensions are Width 480mm, Depth 200mm and Height 235mm (includes feet).


ESP32 WROOM 32D module 

Pic 5 This clock uses an Espressif ESP32D module and uses all the available pins but not the WIFI.


Step 3: 3D Printed Digit Module

Pic 1 There are four 3D printed digit modules Hours Tens, Hours Ones, Minute Tens & Minute Ones. All are the same apart from the Tens and Units have the stepper motor on opposite sides and have different internal dividers.

 

Hours Tens comprises 5 double sided digits, two of which are blank.

Hours Units comprises 5 double sided digits and no blanks.

Minutes Tens comprises 5 double sided digits, two of which are blank. There are 2 sets of identical digits 0,1 & 2.

Minutes Units comprises 5 double sided digits and no blanks.

Pic 2 Digit operation


Pic3 The Min and Hrs tens digits have some blank digits inserted


Loading Digits

Pic 4 Digits are printed as 2 halves and 2 layers using the "Pause at Layer" script on CURA.

The rear digit it rotated so it is upside down and then glued to the back of the other digit.


Pic 5 Completed 7 and 2 digit used in the hours units and minutes units module.


Pic 6 The 2 halves are "Super Glued" together with the rear digit printed upside down according to the table below.

Pic 7 The completed digits are loaded into the digit case by removing the front cover.

Pic 8 The case has a lower and upper tray with a divider slotted in the middle.


Pic 6 Using the Hour and Ones digit modules as an example an example.

The table for these digit modules shows the following.

Starting on the lower tray insert digit 7/2 with 7 facing out and should be upright (the digit 2 behind will be facing back and upside down.

Next load digit 9/4 and then 1/6 to the same tray.

Then load the upper tray digits starting with 5/0.

As per the lower tray 5 will face and is upright out and 0 will be upside down facing back.

Finish with digit 3/8 and then replace the cover ensuring the square digit cutout is downwards.

Pic 9 Completed hour/Mins units module ready for the cover to go back on.

Note the Hours Tens/Mins Tens digit module contain blanks.

These blanks are double sided and square so can be inserted anyway round.


Pic 10  Digit Module Bearing & Stepper Motor connection minutes and hours units.

Note Minutes & hours tens will be the reverse of this.

The bearing is pushed into the hole on the digit module case with the bearing spigot pushed through the bearing center.

The bearing spigot also goes through the stepper bearing mount and then into the matching bearing of the tens digit.






Step 4: Controls

Pic 1 The main control panel is on the fron of the clock with a single slide switch for programming nn the rear of the clock on the main Vero Board.

Power

Turns all power to the clock off.

Note when using the serial port to power/program the clock the Power button should be off.

 

Select

This is an analogue control and selects the digit to apply the selected "SET VALUE" to.

During normal clock running this must be set pointing down to "SELECT".

This control can also select Summer and Winter time change.

 

Set Value

An analogue control to select a value 0-9 to send to the RTC digit or Rotary display digit according to the "Select" control.

 

Set RTC

Sets the time of the RTC.

Sends the value from the combination set by "SELECT" & "SET VALUE" controls to the RTC.

 

 

Set Disp

Rotates the digit selected by the "SELECT" control the number of times set by the "SET VALUE" control.

Used to set the correct time on the rotary digits.

 

RST

Resets the ESP32 module

 

Sync

Manually synchronizes the RTC clock seconds to 30.

 

Special Functions

There are a few special functions built into the control panel.

Enable the serial port

With the "SELECT" control turned to "SELECT" hold down the "SET DISP" and press the "RST" button.

Serial mode is indicated by the colon on the main display flashing green.

To turn off press "RST" the colon illumination will stop flashing Green.

With the serial port enabled the RTC time can be checked and the analogue values of the "SELECT" & "SET VALUE" controls can be seen.

 

Reset seconds to 0

With the "SELECT" control turned to "SELECT" press the "Set RTC" button to reset the RTC seconds to 0.

 

 

 

 

 

Program Switch

Pic 2 As all the pins are used on the clock a couple of the pins unless disconnected with prevent the ESP32 module from being programmed.

Pic 3&4 On the rear of the clock on the main Vero Board slide the switch to the program position while uploading code.

Note if you forget to slide the switch back to the normal position the clock will run but the "Set RTC" and "Set Disp" buttons will not function correctly.



Step 5: Setting the RTC

The RTC should be set before making any changes to the display.

The RTC is set digit by digit e.g. Hrs10, Hrs1, Min10 and Min1 and must be carried out in that order as changing Min1 updates the RTC for all the values.

The digit to be changed is set by the "SELECT" control and the digit value by the "SET VALUE" control.

The digit is saved when the "SetRTC" button is pressed until the colon flashing Off.

 

Example Setting the RTC to 23:48

When setting the RTC it is best to set the time in the minute preceding that time. If you are setting the RTC to 23:48 set it when it is 23:47 and a few seconds to allow you time to set all the values.

 Turn "SELECT" to the Hrs10 position.

As soon as the "SELECT" control moves off the SELECT position to any other setting the displays stop changing to the RTC (the RTC keeps running).

The colon will also illuminate green to indicate the "SELECT" control is off normal and the clock has stopped updating.

   Once on the Hrs10 position move the "SET VALUE" control to 2 and then press the "Set RTC" button until the colon flashes Off. 

 

  Move the "SELECT" control to Hrs1 position. 

  Move the "SET VALUE" control to 3 and then press the "Set RTC" button until the colon flashes Off. 

 

  Move the "SELECT" control to Min10 position. 

  Move the "SET VALUE" control to 4 and then press the "Set RTC" button until the colon flashes Off. 

 

  Move the "SELECT" control to Min1 position. 

  Move the "SET VALUE" control to 8 and then wait for the time to reach 23:48 exactly and then press the "Set RTC" button until the colon flashes Off. 

The RTC is programmed on pressing the "Set RTC" on the Min1 position only.

 

  Return the "SELECT" control to the SELECT position (the colon illumination will go off) and the clock returns to normal mode. 

 

Now follow the instructions below "setting the display" to set the display to your RTC time.

 

Summer/Winter Correction

Summertime and Wintertime correction when selected sets the RTC and rotates the hours digits to correct the time.

 

Summertime

To set the clock to summertime

Turn "SELECT" to the "Sum" position then press the "Set RTC" button until the hours min digit starts to change.

Return the "SELECT" control to the SELECT position.

The hour digits and RTC are now an hour ahead.

 

Wintertime

To set the clock to wintertime

Turn "SELECT" to the "Win" position then press the "Set RTC" button until the hour min digit starts to change.

Return the "SELECT" control to the SELECT position.

The hour digits and RTC are now an hour back .

Note you may have to correct the minutes digits after the the hours digits have completed their correction.




 

Setting the RTC with Serial Monitoring on your PC

The RTC can be set without the serial monitor connected however, it can be easier to see the actual changes being made.

The clock works by default with serial turned off as the colon illumination LED is connected to the TXD pin and would flash on and off during normal clock operation.

Note do not connect your PC to the ESP32 module serial port until the power has been turned off at the power button.

After turning off the power plug your PC USB into the ESP32 module USB socket.

Load your serial monitor program (I use the Arduino IDE).

Select your clocks serial port and enable serial on the clock.

Serial is enabled when the clock is running by pressing and holding the "Set Disp" button and then pressing and releasing the "RST" button.

Serial mode is indicated by the colon flashing to the serial port.

 

You can now see the RTC time, "SELECT" & "SET VALUE" settings and the time changes on your serial monitor as you set the RTC using the method above.

 

Once the RTC is set unplug the USB cables before pressing the power button on the clock.

The RTC has a backup battery and remembers the time even when the clock is powered off.

 

Now follow the instructions below "setting the display" to set the display to your RTC time.


 

Step 6: Setting the Display

The displays are set by rotating a selected digit a number of times until it shows the current value.

The number of rotations is set by the "SET VALUE" control.

Due to the blanks in the 2nd digit of the hours and minutes modules the number of rotations is not straight forward.

Pic 2 To select the correct number of rotations for "SET VALUE" use the tables below.

 

Select the table for the digit you are changing.

The digit displayed is the START NUMBER in the table.

Go to the start number on the left column and read across to the number you want to set in the END NUMBER row.

e.g. if you want to change the minutes 2nd digit from 1 to 2

 Go to table 2 below and select 1 in the START NUMBER column.

Follow along the row until you get to the number 2 under end number and read off the rotations in this case 3.

To set this digit turn "SELECT" to the MIN10 position.

As soon as the "SELECT" control moves off the SELECT position to any other setting the displays stop changing to the RTC (the RTC keeps running).

The colon will also illuminate green to indicate the "SELECT" control is off normal and the clock has stopped updating.

Once on the Min10 position move the "SET VALUE" control to position 3 and then press the "Set Disp" button until the MIn10 digit starts moving.

The Min10 digit will rotate 3 times then stop.

If the minutes units have not updated in this time then just return the "SELECT" control to SELECT the colon will stop illumination and the clock will now update as the RTC changes.

If the minutes have changed while updating the display you may need to change the minutes 1st digit as well using table 1.


Tables are stored under the clock on pull out drawers.

 

Pic 3 The right hand drawer holds the Hrs1 & Min1 tables.


Pic 4 The left hand drawer holds the Hrs10 & Min10 digit tables.


Pic 5 Table drawer locations under the clock.



Step 7: Modification of DS3231 AT24C32 I2C Precision Real Time Clock Module to Allow Use of Non Rechargeable Batteries

My clock uses a DS3231 AT24C32 I2C Precision Real Time Clock Module.

The module comes supplied with a Lithium-Ion rechargeable battery.

There are many discussions online about the fire risk of rechargeable Lithium-Ion batteries using this circuit design so I have just cut the recharge part out and fitted a non rechargeable battery instead.

Pic 1 shows R5 in place and Pic 2 shows it removes (just break it off).


Step 8: Timber Parts

Pic 1 I have used wood from an old mahogany outdoor step.

Rough dimensions Pic 2.

Pic 3 Wooden Top Bar Dimensions

Pic 4 Vero Board Cutout dimensions.

Holes in the back are for the wires to the control panel.





Step 9: Schematic

Full size schematic available here http://www.brettoliver.org.uk/Cyclotron_Clock/images/Schematic.jpg

The circuit is designed to move 1 digit at a time. This keep current draw 4 times lower as only 1 steper motor is moving at a time.

The clock draws around 65mA and this rises for around 8 seconds every minute to 170mA. The length of time drawing 170mA will vary depending on the time. At 19:59 to 20:00 time change the click will draw 170mA for 1 minute and 10 seconds.

Using all available pins on the ESP32 WROOM32D mean there is a program switch to enable programing of the device.

Time is stored on a RTC and if that is not procise enough you can sync the clock to a masterclock on 30 seconds.

Note due to the 5v regulator on the ESP32 needing over 5v to run I am overdriving the stepper motors by 2v.

I have found that the 28-BYJ48 quality is quite erratic and differnet suppliers produce motors with different torque values. This extra 2 volts ensures the motors do not drop any steps causing a gradual miss-alignment of the motors.

Step 10: Vero Boards

I have designed the circuit on Vero Boards and have enclosed the board layouts.

There are 3 boards in total all shown on a single layout.

Board 1 is the main board housing the ESP32.

Board 2 is the power board with fuse and voltage regulator.

Board 3 is a connection interface board for the control panel wiring and mounts vertically between boards 1 and 2.

Step 11: Dust Cover Construction

Pic 1 The dust cover has a wooden base, 3D printed frame and Perspex sheet panes.

The wooden base is made from 4 off 15mm x 13mm strips cut from a block of hardwood I had in my workshop.

The wood strips are glued together on all four corners and also held by screws from the 3D printed frame.

The 3D printed frame has 30 individual parts with only the 4 centers spars glued together in the middle.

The 3D printed frame is fixed to the wooden base for support using M2 screws.


Dust Cover Removal

The Dust cover is a snug fit over the modules and is removed in a set way.

Pic 2 Shows the top view with the cover in place.

Pic 3 To remove the dust cover has to be lifted slightly to clear the four Dust Cover Location Brackets then rotated to position the protruding stepper motor bodies into the corners.

Pic 4 The Dust cover can now be lifted and removed.

Step 12: Dust Cover Construction -Top Perspex Sub Frame

Pic 1 The top Perspex sub frame is shown below in black.

The sub frame made up of 8 GlassBeadGroove parts surrounds the top Perspex sheet and is fixed at the 2 sides to the Glass Frame Bars and 1 end Glass Bar.

The Perspex sheet is slid into the fixed GlassBeadGroove frame with unfixed end just clipped in place over the end of the Perspex sheet.

Parts

The sub frame is made up of 4 different parts 2 off each is required.

Each part has a mortise and tenon end so they can slot together.

Pic 2 GlassBeadGroveTopLefRightEnds

This part are fitted to both ends of the Perspex sheet.


Pic 3 GlassBeadGroveTop

Fitted in the center of the side of the Perspex sheet these parts connect to and in the middle of the GlassBeadGroveTopEnd and GlassBeadGroveTopEnd


Pic 4 GlassBeadGroveTopEnd

Fitted to the GlassBeadGroveTop tennon and GlassBeadGroveTopLefRightEnds mortice end


Pic 5 GlassBeadGroveTopEndB

Fitted to the GlassBeadGroveTop tennon and GlassBeadGroveTopLefRightEnds mortice end




Step 13: Dust Cover Construction -End Frame Panels

Pic 1 End Frame Panels inblack.

There are 2 end frame panels each made up of 5 3D printed parts.

The Perspex end panels sit against the GlassFrameEnds165x155 and are held in place by 3D printed beading on all four sides.

The lower beeding is screwed trough the GlassFrameEnds165x155 and into the wooden dust cover base.

Note space must be left all round the Perspex sheet for the GlassFrame bars mortises to slot in.


Pic 2 GlassFrameEnds165x155 - 2 off

Looking at the inside of the Frame End showing the recessed corners for the glass frame bars

Pic 3 GlassBeadLower x 2 off

Fits to the lower part of the lower part of the frame end against the Perspex sheet and is screwed in place into the wooden dust cover base through the frame end

Pic 4 GlassBeadTop x2 off

Friction fit between the side glass beads. Note 1 bead left or right has the top Perspex sheet screwed to it.

Pic 5 GlassBeadSide x 4 off

Friction fit between the top and bottom glass beads





Step 14: Dust Cover Construction -Side Frame Panels

Pic 1 Side Frame Panels in black

Four pairs of Glass Frame bars make up the left and right side panel frames.

Each bar has 2 different parts GlassFrameBarTypeA and GlassFrameBarTypeB

Pic 2 GlassFrameBarTypeA

Pic 3 GlassFrameBarTypeB

Pic 4 The Glass bar Type A to B joining method.

The A & B parts are glued at the joining ends and clipped together.


The 2 remaining ends are clipped into the GlassFrameEnds165x155. This is repeated for the 3 other bars.

The joint will be strengthened when the GlassBeadGroove parts are screwed along it's length.

 

Pic 5 Top view of A & B bars showing hidden holes in the Perspex Glass Slot. Either of these holes can be used depending on the position of the wooden dust cover base below.



Step 15: Dust Cover Construction -Dust Cover Corner Bracket

Pic 2 Screwed to the wooden base these four bracket provide a location point for the dust cover.

DustcoverBracket 4 off


Pic 1 Dust cover brackets (3 shown) in place on the wooden base.

The brackets have oversized holes and are designed to be screwed down with a washer on top to give some adjustment.



Step 16: Mounting Boards and Modules

All boards and modules except the RTC are mounted in the recess of the wooden base on a series of 3D printed mounts. The RTC is mounted on the wooden base itself on a 3D printed support

Pic 1 shos fitting layers.

The VeroMount is screwed to the wooden base with the

VeroBoardSpacerMain and Power on top.



The main and power Vero Boards are fixed through both of these with M2 nuts and bolts.

M2 holes will need to be drilled through all 3 with the Vero Boards used as a guide.



The VeroBoardSpacerConnector screws to the baseboard above

the VeroBoards and between the DriverHolderMount.



DriverHolderMount sits on the VeroBoardSpacerConnector

and is fixed in place to the wooden base by 2x M2 screws.



The DriverHolder has the four ULN2003 boards screwed to it

and is then fixed to the DriverHolderMount with 4 M2 screws.


Pic 2 RTC Mount

3D printed RTC Mounting bracket fixed via the 3 holes in the RTC PCB through the mount into the wooden base.

The RTC is fixed battery holder downwards.



Details of the mounts can be seen in Pic 3

The ESP module USB connector has been extender out using a right angle connector for easy access for programming.


Step 17: Digit Modules - Case

Pic 1 Digit modules are arranged in opposite pairs


Pic 2 Two of these pairs make up the display.

There are 3 types of module 0 to 9, 0 to 5 and 0 to 2

0 to 9 is used on the minutes and hours units.

0 to 5 is used on the minutes tens.

0 to 2 is used on the hours tens.


Pic 3 Display with stepper motor locations shown.


Note to make sure this clock runs reliably all faces that contact digits must be completely smooth with no sharp edges.

Each module pair contains the following

Pic 4 CaseFront 2 off

Fixed to the CaseRearHoursUnits & Tens by M2 screws

Pic 5 CaseRearMinsHoursUnits 1 off

The image shows two views (left and right) of the CaseRearMinsHoursUnits.

This module has the stepper motor on the right and bearing on the left of the case.

Pic 6 CaseRearHoursMinsTens 1 off

The image shows two views (left and right) of the CaseRearHoursMinsTens.

This module has the stepper motor on the left and bearing on the right of the case.


Pic 7 The front and rear case parts fit together with the square cutouts at opposite ends.


Pic 8 Digit Divider

DividerMinsHoursTens5mm026_5mmgap 4 off

The divider fits into the two slots in the middle of the rear case with the large cutout facing forwards.

The part can be filed as required to allow the digits to pass through easily.

Note when inserted in the rear case the two gaps front and back gap must be bigger than the depth of a digit but no bigger than 2 digits depths.



Step 18: Digit Modules Brackets & Frame

Pic 1 Bracket End supports

BracketEnds 12 off

Each pair of digit modules will need 6 of these supports.

These supports fix to the ends of the StepperMount and StepperBearing mounts and secure them to the wooden base at one end and either the TopBarLeft or TopBarRight depending on position.


Pic 2 Stepper Motor Mounts

StepperBearingMount 2 off

The stepper Bearing Mount has a hole in for the Stepper Bearing Spigot to fit.


Pic 3 Stepper Bearing Spigot

StepperBearingSpigot 2 off

The StepperBearingSpigot fits into the hole in the StepperBearingMount and the stepper bearing fitted on the side of the rear case.

The spigot fits into the rear case bearings on both side of the mount.


Pic 4 Stepper Mount Bracket

StepperMount 4 off

Recessed on one side for the stepper motor body and countersunk bolt holes on the other.

Both sides of the bracket shown and will need to be reversed depending on what digit module it is fitted to.




Step 19: Digits

Pic 1 & 2 Digit Build

Digits are printed as 2 halves and 2 layers using the "Pause at Layer" script on CURA.

Note the digits 0 to 9 are printed single sided at 2.5mm and the blanks are printed 5mm.

Digits 0 to 9 are glued together back to back to make inverted pairs according to the setup tables.

To make sure this clock runs reliably all digits must be completely smooth with no sharp edges.


Pic 3 The rear digit it rotated so it is upside down and then glued to the back of the other digit.

Pic 4 Completed 7 and 2 digit used in the hours units and minutes units module


Pic 5 NumberPlateHoursUnits 0 to 9 & NumberPlateBlank5mm for quantities see tables.

Note digits 0 to 9 are 2.5,, high and blanks are 5mm high as digits are glued back to back in pairs according to the setup tables.




Step 20: Digit Order

Digit order

The 2 halves are "Super Glued" together with the rear digit printed upside down according to the following tables and pics.

Pic 1 Hours & Units Ones

Pic 2 Units Tens

Pic 3 Hours tens


Step 21: Number of Rotations Table Drawers

When setting the digits it can be handy to know the number of rotations needed to correctly set a digit. This is not straitforward due to some module having blank digits inserted.

Sets of tables are provided for each module in drawers under the clock.

Pic 1 shows drawers pulled out. The drawer pulls out and if wall mounted also drops down.

Pic 2 DrawerTray. This is the drawer tray for the hour and minutes Units digit table.

Pic 3 DrawerTray60mm

This is the drawer tray for the hour and minutes tens digit tables.


Drawer Frame

These frames clip into the Drawer Trays over the printed tables and hold them in place.

 

Pic 4 DrawerFrame

This is the drawer frame for the hour and minutes Units digit table.

Pic 5 Drawer Frame 60mm

This is the drawer tray for the hour and minutes Tens digit table.


Pic 6 Drawer Pull

DrawerPull 2 off

Fitted to both drawer fronts with a 2mm screw and glue


Pic 7 Drawer Runner

DrawerRunner 4 off

Screwed to the underside of the wooden base to allow the drawer trays to slide in and out.

Note right side shown but left side printed mirrored in CURA


Pic 8 Showing how a pair of drawer runner are printed on CURA with one drawer runner mirrored.



Pic 9 Shows drawer tray locations on underside of the clock base.


Step 22: Colon

Pic 1 The colon digit separator fits between the hours and minutes digits.

Printed in dual layers using "Pause at Layer" script on CURA. as per the digits the white layer allows the colon to be illuminated by a single LED for various clock state indications.

The colon is mounted on the 2 central stepper motor mount via a pair of colon_support brackets.

The colon is screwed to the colon_support brackets which are in turn glued to the stepper mounts.

 

Pic 2 colon01 1 off


Pic 3 Colon Support

Holds the colon to the bearing mounts at an angle to match the digits.

colon_support 2 off


Pic 4 Blanking Panel

Fits above the colon to the center stepper mounts with 4 M2 screws.

ControlPanel02a 1 off


Pic 5 LED Mount Panel

Screwed to the central stepper mounts behind the colon this panel provides a mount for the 10mm LED which illuminates the colon.

ControlPanelRear01 1 off


Pic 6 The white LED Mount Panel with LED can be seen on the rear view below- screwed behind the colon.

Step 23: Control Panel

Pic 1 ControlPanel03 1 off

Fixes directly to the wooden base with M2 screws.


Pic 2 Micro Switch Spacer

Spaces the control panel away from the micro switches to allow correct location of micro switch buttons through the control panel.

Fixed to the Control panel and Vero Board with a single M2 nut and bolt.

SwitchSpacer 1 off


Pic 3 The micro switch spacer in location between the Vero Board and control panel.






Step 24: Cyclotron Name

CYCLOTRON top name

Pic 1 These letters are individually glued to the top of the wooden bar on top of the clock digits and are printed as loose letters.

See CYCLOTRON.3mf CURA project file

Pic 2 Individual letters.


Pic 3 Cyclotron Front Name Plate

Fixed with a single M2 screw through a hole drilled through the middle "O" of the nameplate and through the name plate spacer

NamePLateCyclotron03 1 off

Pic4 Name Plate spacer

Mounted behind the nameplate to raise it out from the edge of the top bar.

CyclotronLableSpacer 1 off


Top Support Bar

Pic 5 These bars fit on top of the digit modules and are fixed via M2 nuts and bolts to the bracket end supports of the digit modules.

 

TopBarRight 1 off


Pic 6 TopBarLeft 1 off


Pic 7 Left & Right Top Bars fixed in position to the 6 bracket end supports

Pic 8 Top Bar & Wooden Top Bar Spacer

Simple spacer to allow space for the bolt heads on the top bar so the wooden top bar can be bolted in place.

The Wooden Top Bar is fixed to the 3D printed Top Bar by 3 off M3 nuts and bolts (holes drilled by hand).

WoodSpacerTop 3 off


Pic 9 Wooden and 3D printed top bar fixing detail.

Step 25: Feet & Wiring Cover

Pic 1 Feet are fitted to the wooden base with M4 screws and allow clearance for the drawers.

Pic 2 Foot01 6 off


Pic 3 Wiring/Cable Cover

Pic 4 Simply screws of the exposed wiring in the channel in the wooden base of the clock to keep it tidy when wall mounted.

 

WiringCover 1 off


Step 26: 3D Printed Parts

3D Printer Files

Files included for CURA and FreeCad so you can modify the parts as required.



Step 27: Code

Note set board in Arduino IDE to "ESP32 Dev Module" you may need to install the ESP32 on the Arduino IDE first.

Download the code in a zip file

 

TombolaClockMain40

Code notes

This clock uses 28-BYJ48 Stepper Motors with ULN2003A drivers.

Quality and therefore torque does seem to vary depending on manufacturer so you will want to carry tests on each digit to make sure the stepper is not dropping steps.

The best way to do this is to set the digit in position and then selct the digit using the "SELECT" control and then set it to rotate 9 times using the "SET VALUE" control.

Press "SET DISPLAY" and let the digit rotate 9 times. Repeat this several times.

If the digit fails to return to the exact start location then it is missing steps.

You will need to calibrate each digit by changing the settings in the following functions.

RotateHrsTen()

RotateHrsOne()

RotateMinTen()

RotateMinOne()

 

Here is the code for RotateMinOne

//----------------------------------------------------------------------------------------------------------------

//Mins1

void RotateMinOne()

{

//turn min 1 motor

stepperMinsUnits.enableOutputs();

// Set the current position to 0:

stepperMinsUnits.setCurrentPosition(0);


// Run the motor backwards at "setspeed" steps/second until the motor reaches "currentPosition"

while (stepperMinsUnits.currentPosition() != -2786) { //3036

stepperMinsUnits.setSpeed(-400);

stepperMinsUnits.runSpeed();



}



// Reset the position to 0:

//Serial.println("position reset to 0");

stepperMinsUnits.setCurrentPosition(0);

delay(200);

// Run the motor forwards at "setspeed" steps/second until the motor reaches "currentPosition"


while (stepperMinsUnits.currentPosition() != 738) { //988

stepperMinsUnits.setSpeed(400);

stepperMinsUnits.runSpeed();

}


stepperMinsUnits.disableOutputs();


delay(200);

//end turn min1 motor

}



//----------------------------------------------------------------------------------------------------------------


All the steps together +ve & -ve must equal 2048.

In the code on the left the motor turns -2786 and then 738.

When you add the steps together the total is 2048.

A full digit rotation is 4096 but as we are in half step mode so we turn the digit in total half a turn.

The digits are always turned backwards and as alternate digits have left or right mounting backwards can be a -ve or +ve number depending on the digits.

Units digits start with a -ve step and tens digits start with a +ve.


The first step number in this example turns the digit from it's start position (slightly facing up) for over half a turn to almost the horizontal position.

while (stepperMinsUnits.currentPosition() != -2786){


at speed stepperMinsUnits.setSpeed(-400);


This is to ensure when the new digit drops into position and it also slides back against the rear digit.

All lower digits must be slide hard back against the case or when the digit module rotates the rear digit at the top of the module will slide down the back preventing the new digit sliding down the front.


The next step take the module back to the start position that is exactly 180° backwards from where it started.

while (stepperMinsUnits.currentPosition() != 738) {


at speed stepperMinsUnits.setSpeed(400);


The speed must be adjusted so no steps are missed. This will vary for each stepper motor and should be as fast as possible.


Note the change from 19:59 to 20:00 takes 55 seconds using speed 400. If your steppers take longer than 60 seconds then an extra minute rotation will need to be added as it is at midnight.

 When changing settings above make sure the change at 19:59 to 20:00 takes less than 60seconds.