Introduction: Triaxial Numechron Clock Updated Accurate Electronics

About: Professional electronic & coding engineer. Photographer of of both fine arts & on-location. Studied photography.


Planned updates coming soon:-

video link for guide on firmware and assembly

adding a case to hold new electronics.


Last update 07-12-2025

...........................................

The 3d printed Triaxial Numechron clock by Shiura is a wonderful and unique timepiece, which is easy to print & assemble and fascinating to watch.


However, it has two issues.

The original Arduino electronics do not keep accurate time, as the Arduino Nano used, does not have an accurate crystal oscillator.


The second is the stepper motor. It is very cheap and was never designed for accurate positioning. They are made by various different companies, which causes variations' within them.

The stepper-motor has 32 steps per revolution, fed through a gearbox with a nominal 1:64 reduction. Thus 2048 steps for one full rotation. However, it has been found that the the gearbox on some units is actually 1:63.682...... thus it can never position the minute dial accurately and slowly fall behind, misaligning the minute digits.

Note on my test unit, the motor was exactly 1:64 and when left running for six hours, it was found the digits were still correctly aligned.


The test code (detailed later on), will allow you to run the stepper and the clock, to see how accurate your individual stepper motor is.


So my aim was to design new electronics to correct these issues. The design brief should:-

1) New electronics should be simple, so those with limited electronics or Arduino (microcontroller) experience can build the upgrade without any more skill than that required for the original Arduino electronics.


2) The retrofit should not require modifications to, or re-printing of clock parts.

The original stepper motor is retained and the optional Hall sensor is mounted using an additional 3d printed bracket, which mounts using the existing stepper-motor mounting holes. Thus no new clock parts, or modification to it, is required.


About the new electronics.

The new electronics connect to the users home wi-fi to get the time and updates the internal Real Time Clock. It does this each hour.

Even with a break in internet connection, the internal Real Time Clock of the ESP32 will keep running accurately for months, to ensure the Triaxial clock shows the correct time.


Additional parts and functionality have been added, including a small oled display, to make setting and use of the clock more user-friendly. Full details can be found in the next step.


Link to original 3d printed Triaxial Numechron clock

Triaxial Numechron Clock : 10 Steps (with Pictures) - Instructables

Supplies

To keep things simple, the original stepper motor and driver board is used.

(Although it maybe a good idea to purchase a new set as they are so cheap.).


All of the supplies listed below come pre-made and soldered. So the builder just has to assemble them.

(Tinning the ends of the wires is a good idea if you have a soldering iron, but not mandatory).


The Arduino is replaced by an ESP32 (NodeMcu32 38 pin).

Whilst programmed in exactly the same way as the Arduino, using the same software (Arduino IDE), it has the advantage of a much faster processor, in-built Real Time Clock and wi-fi connection (which we use here, to set the time automatically).


A screw-terminal Expansion (breakout) board is used to mount the ESP32. This makes wiring easier and more robust than wiring directly to the ESP32.


Two buttons are added, one will creep the motion forward, to align the digits, whilst the second will advance the movement by one complete minute. This aids and simplifies setting the clock time.


Optionally, a small oled display is connected, which shows the local time and date. This is useful for setting the Triaxial clock.


A final option is the addition of a hall-sensor & magnets. This is used to sense the position of the 1-minute rotor. This gives positional feedback to the electronics, allowing them to set the minutes dial and correct for any step errors in the motor.


A selection box of JST XH connectors is used to complete the wiring.


The document (below) lists the parts and where possible, links to AliExpress.

Step 1: Wire the Parts Together

The parts are easily connected together using JST HX connectors. A kit of these connectors complete with wires is listed in the parts document.


The pdf wiring diagram (below) shows the colours and connections.


It is a good idea assemble and test the electronics before fitting them to the clock.

Using hot-glue or blue-tack to temporarily hold the parts in position on a piece of wood or plastic tea-tray, works well. Ensure you only use these in the corners of the pcb, to avoid damaging the copper tracks.


Things to note:-

The JST XH connector between the expansion board and the stepper board will only fit one way, due to limited space between it and the driver IC.

The plain back of the connector, which has the two raised mouldings, face towards the black IC and the side with the slots and silver connectors visible. This is the same orientation as the stepper-motor connector.


ONLY use the two GND terminals as shown on the wiring diagram. DO NOT be tempted to try the two unused GND terminals, as these are actually CMD and misprinted on the board.

Step 2: Load and Run the Test Code.


A test program has been written to ensure the electronics have been wired correctly.

You can skip this part if you like, but it will help diagnose any issues with the initial wiring.


Download the file Triaxial_initial_test.ino

and open this using the Arduino IDE program.

Connect your ESP32, via USB to your computer.

Within the Arduinio IDE program, you need to select the correct board type and com port. There is a box for this at the top of the program screen. For the board, select 'ESP32 Dev Module.

The blue circle with arrow pointing to the right is the upload button.

Press this and the code should upload to the ESP32.

Note:- The Arduino IDE may grumble if you have not previously loaded the AccelSteeper library.

If so, watch this video from the start until 45 seconds (not necessary to watch after this)

How to Add Library in Arduino IDE


When the code has successfully loaded, the stepper motor should make one full turn counter-clockwise, pause and repeat.


Pressing the nudge or minute button will illuminate the blue LED on the ESP32 board.


If the optional Hall sensor has been fitted, moving a magnet towards the sensor will turn on the LED on the sensor board and also the LED on the ESP32.

Note the magnet must be moved towards the front of the sensor, this is the part with the writing on it.

The Hall sensor only reacts to the South pole of the magnet, so if it does not react, or the magnet has to be very close, try the other side of the magnet.

It is a good idea to mark the South pole of the magnet with an indelible marker, which will make it easier to fit later on.


(To simplify things, the oled clock will not function yet).


A 3d printed pointer file has been included, to fit onto the stepper-motor. This can be used as an indicator, helping to see the stepper-motor shaft rotating.


If the 'Serial Monitor' is opened within Arduino IDE and the set the baud rate to 115200. The screen will show a count of the revolutions.


Note:- You should not run this code when the stepper is mounted in the clock.

Step 3: Print & Fit the Hall Sensor Mounting (Optional)

An optional step is to fit a Hall sensor.

This gives positioning feedback to the electronics, so it knows the position of the minute rotor.

The electronics, now knowing the position of the minute rotor, can set the minutes automatically and also adjust them periodically, should the stepper motor be running fast or slow. Further details below.


The 3d print file, Triaxial_photo_bracket.3mf, contains the file to print the bracket mount assembly.

Print these first. (archive fusion file is also included, Triaxial_photo_bracket.f3d to make it easier if people want to modify the print file).


Download and install the new code into the ESP32

Triaxial_clock_hall_sensor_set.ino


The enclosed document gives a pictorial step-by-step guide to assembling and fitting the hall sensor to the clock and is also summarised below.


The Hall sensor module fits into the holder,

The rectangular block fits on top of the module, covering the top two pcb holes.

The three parts are held together with two 3mm x 2mm screws to secure the three parts together, inserted from the rear.

The Hall sensor legs should be bent so the sensor itself is flat against the block.


The holder is now attached to the long bracket.

The oval block fits on the front of the mounting bracket and two 10mm X 2mm fit into the holes of the oveal block, through the slot in the bracket and into the holder.

The slot allows for adjustment of the holder, to ensure it detects the magnet at the correct position.


The completed assembly is now fitted to the clock.

To fit the hall sensor assembly and magnets, the left-hand frame and hour rotor should now be removed by undoing the fixing screws in the base of the clock and the side screw.


Remove the two screws securing the motor and place the bracket on the back of the motor and secure it and the motor with 2mm screws using the existing motor screw holes.

Note you may need to use slightly longer screws.


Fit two magnets to the minute rotor.

On the back of the minute rotor, behind the number '8' is a triangular wedge, which is the 10-minute advance lever.

The upper mounting hole for the number '8' will be seen.

One magnet, with S facing towards you must be glued over this hole. The magnet should be glued so it's top surface is flush with the back of the rotor

Hot-glue works well, as it is easily removed if repositioning is required and allows the magnet to be set at the correct height.

On top of this magnet, place a further magnet.


Test for clearance.

Without the left frame, it is easier to rotate the minute rotor.

Ensure the 10-minute advance lever does not touch the Hall sensor as it passes.

Ensure the magnets pass through the 10-minute rotor without catching.


Reassemble the Clock.

The hours wheel and left frame can now be reassembled onto the clock. Do not forget the side screw.


Adjust the Hall sensor.

The new code loaded will only drive the stepper-motor if one of the two buttons are pushed,

Nudge will move it a little and the Minute button will advance the minute rotor by one complete minute.


Using the minute & nudge button, rotate the minute rotor until '3' is in central the display window.


With the Hall sensor at the highest position, move it down slowly until the LED lights and then tighten the fixing screws.


The Hall sensor has now been set in the correct position.

To test:-


The minute button can now be used to turn the minute rotor so '2' is shown in the display window.


Using the nudge button, advance the rotor until the LED on the sensor module lights and immediately release the button.


The number '3' should be centred in the viewing window.


If '3' is too high, it means the magnet was sensed too early. Loosen the sensor holder screws and move it up slightly. Conversely, if the number '3' is too low, lower the sensor holder slightly.


Repeat the above until you are happy with the alignment.


Step 4: Run a Simulation to Fine-tune

An optional simulation code can be run.

This will allow you to fine-tune your stepper motor.


The simulation will advance the minute rotor, but without waiting a minute, will advance again...and again....


It will run a simulation of 10 minutes (one complete minute-dial revolution), pause,

continue to a simulation of 1 hour, pause again

and then continue to run, completing a simulation of 12 hours.

In real time this will take approximately 30 seconds, 3 minutes and 36 minutes.


The 'Triaxial_clock_simulation' code must be loaded to the ESP32.


Download and load the firmware into your ESP32 in the same way you did for the other codes.


Open the 'serial monitor' function in Arduino IDE,

press the reset button on the ESP32.

(reset button is bottom left on the ESP32 board)


The Arduino IDE Serial Monitor will show a set of instructions to follow, summarised below:-


You are asked to set the hours and minutes of the clock to 11:5? (the final minute does not matter).

Then, after pressing the minute button to confirm.....

You are asked to use the nudge button to move the minutes dial round till the clock reads 12.00

Note the button must be held for the dial to rotate and once released, one cannot restart it, so get it right or you have to go back to the first step by pressing the reset button.


Now one must add a witness mark to the clock. Use a small piece of masking tape, draw a line on it and stick close to the number 8, as shown in the photo.

Cut a small piece of card and fold to make an 'L' and put a line on it. This fits under the clock and align with the masking tape line, as shown in the photo. Ensure the card will not foul the numbers as they rotate.


Press the minute button again and the clock will now start it's simulation.

The simulation starts by running one complete loop of the minute rotor (10 minutes) but as it does not wait one minute between each movement, it is completed in 30 seconds.


It will pause after one full rotation for you to see if the witness marks align.


It will then start again and run a simulation of one hour (actually takes 3 minutes to run), again pausing.


The clock will now continue to run for a simulated 12 hours. (The actual time this takes is 33 minutes).

The clock will now stop and remain in this position.


The witness lines should be perfectly aligned.


In the Arduino code, the line that controls number of steps the stepper motor makes per minute is

'const int stepsPerMin = 1537;'


The calculated value should be 1536, however, I found this made my movement slow by 1 1/2 minutes on a 12 hour run, as shown in the photo of my clock showing 11:58 with the 8 only halfway into the display area.

I found a value of 1537 worked for my clock, giving an almost spot-on result.


On no account must the movement be running fast after a full simulation.

The witness line on the minute dial MUST be on or to the right of the static line.

It is better to be slightly slow than fast.

If you movement runs slow, increase the stepsPerMin value.

If you movement runs fast, lower the stepsPerMin value.

Then reload the code into your ESP32 and try another simulation.


Step 5: Load the Running Clock Code


The running code requires some parameters to be set, before loading into the ESP32.


First, go to this web address and find your local timezone and copy it to notepad or similar.

https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv

For example Sydney Australia is AEST-10AEDT,M10.1.0,M4.1.0/3


Now download the codeTriaxial_clock_running.ino and open it in Arduino IDE.

Near the top of the code you will find space to add your wi-fi ssid, wi-fi password and your timezone.

You can also change the stepsPerMin value, to that which you set in the simulation code.

It should look this the below:-


const char* ssid = "wi-fi name"; // change to your wi-fi name between the quotes

const char* wifipw = "password"; // change to your wi-fi password between the quotes

const char* myTimezone = "GMT0BST,M3.5.0/1,M10.5.0"; // change to country string found from link below

const int stepsPerMin = 1536; // increase value if min clock display falls behind. No quotes.


The code can now be loaded into ESP32.

(If it grumbles about a missing library, the library it is grumbling about can be added following the same process as before).


You should be good to go, On power up, the ESP32 will connect to your wi-fi and get the global internet time and set the ESP32 internal real-time-clock to local time, using the time-code string as it's reference.


The oled display and serial monitor show the progress. Note the program will not continue until connection to the internet has been established.


The code will check the accuracy and alignment of the minute wheel every 10 minutes, at 3, 13, 23, 33, 43, 53 minutes. If the alignment is incorrect, it will try to realign the minute wheel. The LED will flicker if the code is making auto-adjustments to the mechanical clock movement.


The code monitors the number of adjustments it has to make, fast or slow and will automatically adjust the stepsPerMin parameter. So over time, the clock should regulate it's own movement.


If you want to prove this & have time to waste, set the stepsPerMin value one or two digits lower than was found to be accurate, reload the code and set the clock time.

Now open Serial Monitor in the Arduino IDE. Timing data will be displayed and at each 10 minute time. A counter shows the number of positive or negative adjustments made over time. As the code autocorrects, this figure should drop and ideally end up at 0 if no further adjustment is required.


When setting the time on the clock, the hours and tens of minutes need to be adjusted manually

You do not need to set the single minutes, the code will detect it is incorrect and automatically rotate the minute rotor the correct position. It will do this at the 3, 13, 23 etc time.

Note that as the minute rotor only rotates clockwise, so if going past 0 to set the minutes, it will increase the tens of minutes display.


You can of course also set the minutes rotor by using the minute and nudge buttons.


Every hour, the program checks internet time and syncs the internal clock. If internet is lost, the internal clock will maintain accurate time until internet access is re-established. The blue LED will light to notify wi-fi has been lost.


The electronics do not know the physical location of the digits, only the position of the magnets sensed by the Hall sensor.


So if the minute digits are always slightly high or always slightly low, then moving the Hall sensor slightly (as described further up) can be used to correct this.



Ideally, if designing from scratch, one would have a larger minute rotor with index marks at every minute for a photo-interrupter, or even a photo-interrupter on every wheel. However this project is designed to retrofit accurate electronics to the existing clock, without invasive modifications or new clock parts. So to keep things simple and avoid reworking the 3d print files, we have to accept some compromise.

Step 6: Print a Box

To come, a box will be designed, to house the electronics and added here.