Triaxial Numechron Clock Updated Accurate Electronics

by billbill100 in Circuits > Clocks

2629 Views, 26 Favorites, 0 Comments

Triaxial Numechron Clock Updated Accurate Electronics

F9880I4LOCWUUA1.jpg
20251118_192511.jpg
20260120_160737.jpg

Updates:-

10/04/2026

Hall Sensor +V moved from 3v3 to 5V to avoid issues with low current PSU.

wiring diagram & PDF updated.


05/04/2026

Email address added for help & support (because github has no contact & instructables comment section is poor)

bill bill git hub at gmail dot com (remove the spaces change 'at' to '@' and 'dot' to '.'


04/04/2026

User instructions updated for new firmware

Firmware 2.04 added 04/04/2026

Added option of setting wifi credentials and location string via web page.

Changed behaviour of buttons for rest.


27/03/2026

Firmware 2.0.3 added


25/03/2026

Firmware 2.0.2 added

Centred day & month in oled

oled timeout after 5 mins (user selectable)

general code tidy


parts doc updated 24/03/2026

slimline box added 24/03/2026

re-designed box added 24/03/2026

Latest firmware added. 2.0.0 22/02/2026

Multi-language support added.

Start-up oled display properly aligned

oled running screen added day, date & month.

Hour hand sweeps.

calibrated stepper motor value saved to EEPROM

EEPROM can be reset to default by holding minute button during wi-fi start-up

Tweaks to calibration.

More annotations added to code, making it easier to follow.


Case 3d print file modified for better fit of screen & stepper board 20/01/2026

Added missing Triaxial_clock_hall_sensor_set.ino file 20/01/2026

Added a case to hold new electronics - 12/12/2025

added 80% Hall sensor bracket - 14/12/2025

added modified 10-min adjuster - 14/12/25


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

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


3d print files in this Instructable are supplied as .3mf files, ready for slicing in your printer software.

Additionally, some Fusion archive design files, f3d, have been included, to allow the 3d print files to be edited and adapted, should you need to.


pdf files are included for documentation, e.g parts list and wiring diagram.


If making this project PLEASE ensure you hit the 'I made it button' and also send me a message with your thoughts and feedback. This is very much appreciated.


Link to original 3d printed Triaxial Numechron clock

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

Supplies

20251119_154707.jpg

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


Other than the buttons, all of the supplies listed below come pre-made and soldered. So the builder just has to assemble them.

(Tinning the ends of the with a soldering iron is a good idea, 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.

Wire the Parts Together

TriaxialClock_bb.jpg
20251119_154716.jpg
20260120_143552.jpg

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 a plastic tea-tray, works well. Ensure you only glue 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.

This is the same orientation as the stepper-motor connector.


ONLY use the GND terminals as shown on the wiring diagram.

DO NOT be tempted to try the GND terminal above the 5V terminal as this is actually CMD and misprinted on some boards.


The wiring diagram/schematic has been updated with the Hall Sensor now connected to 5V.

As it did not reliably work when connected as in the previous diagram.

Load and Run the Test Code.

20251118_205511.jpg
20251118_205505.jpg
triaxial_initial_ide.JPG


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.

Note, ESP32 board has a usb interface ic on it. If using the suggested esp32 board with CP2102 ic, the driver is normally already installed on Windows.

If you are having problems connecting, check windows 'Device Manager' to ensure it is connected to the usb port of the ESP32.

If using an ESP32 board with a different usb interface ic, cH340, for example, the driver will require installing manually.


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.


(Note: 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.

Print & Fit the Hall Sensor Mounting (Optional)

Triaxial_photo_bracket v27.jpg
20251207_150258.jpg
20251207_150946.jpg
20251207_151445.jpg

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


The attached 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.



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

You can skip this part if you like, but it helps align the Hall sensor, rather


than doing whilst the clock is running.


Download and install the new code into the ESP32 (optional)

Triaxial_clock_hall_sensor_set.ino


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

Run a Simulation to Fine-tune

20251118_192511.jpg
20251118_205511.jpg
20251118_205505.jpg


A test program has been written which simulates the clock running..

You can skip this part if you like, but it shows if the stepper motor is stepping at exactly 1/64

and can be used to make fine adjustment to the 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 and the set the baud rate to 115200.

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 on the ESP32.


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

Load the Running Clock Code


For the clock to work correctly, it must know your home wifi name (ssid) and password.

Additionally, a timezone string for your your location is required


1) Go to this web address, 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

Add your home wifi ssid name and password to your notepad file.


2) Download the code Triaxial_clock_running.ino and open it in Arduino IDE.


3) You now have two options a or b.


3a) Hard code your wifi name, password and location string.

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

To do this, change the line in the code as below, to enter these parameters.


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"; // add your country string found between the quotes.


Using this method, on power-up, the clock will look for the hard-coded wifi network. Once found, it will connect and the clock will start. If wifi is lost whilst the clock is running, "!" will show on the oled and the on-board LED will light. The clock will still run using it's own internal clock. The clock will periodically attempt to reconnect to wifi.


3b) Connect to the ESP32 via wifi, to set the wifi name, password and location string on a web page.

This has the advantage of not needing to reload the firmware if you change your wifi name, or build the clock as a gift. However, it does take a few extra steps.


i) Email your wifi and timezone credentials from notepad and to yourself.

ii) Open the email on your smart phone. This saves having to type in the credentials manually.

iii) Find the line in the code that says

bool wifimanager = false; and change this to:- bool wifimanager = true;

to enable wifi setup.


AFTER the running code has been loaded, below are the instructions for setting the wifi & timezone credentials

When the clock is first powered up, the clock will show its network name 'TriaxialClock' and an ip address.

Using a smartphone, open wifi settings and find the networck called 'TriaxialClock and connect to it.

No password is required.


Open a browser on the phone and type the ip address shown on the screen (192.168.4.1)

If successful, a web page will open. Select the 'configure wifi' button.

A list of networks will be shown. Tap your home network and the ssid box should populate.

Copy your password from the email and paste it into the password box.

Copy your timezone string from the email and past it into the timezone box.

(Do not put quotes around these credentials. You can of course manually type in the credentials)

Press 'update'


If all works, the ESP32 will reconfigure itself, connect to your home wifi, update the time and start to run.

If wifi is lost whilst the clock is running, "!" will show on the oled and the on-board LED will light. The clock will still run using it's own internal clock. The clock will periodically attempt to reconnect to wifi.

If wifi is not available on power-up (after a power cut for example and home router has not yet recovered) It will try to connect for a time & if unsuccessful will go back to 'AP' mode asking to connect via a phone app.

When wifi is restored, re-power the clock and it should start working normally again.

----End wifi credentials----------------------------------------------------


Optional Configuration Settings

In the top portion of the code, there are additional settings that will change the behaviour of the clock.


To change to a different language, remove '//' in front of your chosen language and add '//' in front of the one you do not want,

For example, to change from the default English, to French, change the code to look like this

//#define LANG_ENGLISH // change to your language (german, french, english)

#define LANG_FRENCH


The next lines of code allow changing of the motor parameters, max speed, acceleration etc.

These should not be altered.


Below this, the stepsPerMin parameter can be changed (default value should be fine)

The hallSensor parameter selects if you have the hall sensor fitted (true) or false if you do not.

The oledSaver parameter selects if the oled turns off after 5 minutes.


int stepsPerMin = 1537; // default value

bool hallSensor = true; // change to false if sensor not fitted

bool oledSaver = true; // turns oled off after 5 mins. change to false to keep oled always on


(To wake the oled up, press the minute or nudge button, the minute button will not advance the clock if oled is off)


The code can now be loaded into ESP32.

The first time you try this, it will fail, if you are missing libraries.

These will most likey be wifimanager and Preferences.

Load these using Arduino Library Manager, in the same way you did

(If it grumbles about a missing library, the missing library can be added following the same process as detailed for the Accelstepper library further up this instructable).


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


The stepsPerMin parameter is stored in eeprom and is read back during power-up, allowing for quicker calibration

The original stepsPerMin value can be reset, by holding the minute button during power-up.



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, moving the Hall sensor slightly (as described elsewhere) can be used to correct this.


If the 'Serial Monitor' is opened within Arduino IDE, the set the baud rate to 115200. The screen will show a details of what the code is doing.


Button functions

During normal operation, pressing the minute button will advance the movement by 1 minute.

Pressing the nudge button will slowly move the minute rotor until released. This allows the minute number to be aligned in the window.


During power up, when the firmware version is shown, if setting wifi via the web (wifiManger = true) option was selected, pressing BOTH buttons will clear all entered data.

During power up, when the firmware version is shown, if the nudge button is pressed, the calibrated stepsPerMin is reset to it's default value.



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.


The latest version 2_0_2 of the running code is included here.

and a slightly updated 2_0_3 (not fully tested). This version also accelerates the stepper during an automatic nudge. Which may stop the issue of some users finding the auto-nude at the three minute mark, not running smoothly.

Print a Box (Large)

Triaxial_box v24.jpg
20260322_161849.jpg

Files to print a box to house the electronics can be found below.


There are two versions, this the larger one, where the oled faces the same direction as the mechanical clock-face and a narrower one, where the oled is on the side.


The latest updates to these boxes now include a slot & recess for the cables, allowing the box to be mounted right up to the clock frame.


Mounting the box to the clock has been left up to the user. Hot glue does not work well, however double-sided tape applied to the base and uprights of the clock frame hold the enclosure quite securely.

It can also be screwed in place.


The ESP32 expansion board is secured in the box using screws.

Align the expansion board so the USB socked is central in the slot.

Using an awl (sharp pointy object) mark the four screw holes into the raised bars in the box and fix with screws.


Oled is mounted with 3mm bolts, or can be glued in place, using the four plastic mounts are included within the print file.

These can be inserted in the front of the box, through the mounting holes in the oled and glued at the rear. (blob of hot-glue works well).


It is important not to overtighten the oled fixings, to prevent screen damage.


The stepper board is affixed using screws into the pre-made holes.


Ensure screws used are not too long. This is especially important if using the smaller enclosure.


Holes for 12mm buttons in the large box and 7mm in the small box are pre-made.

The holes may need to be opened out slightly for the buttons to fit.


Wires will require soldering to the buttons. Be careful not to overheat the connectors as it is easy to melt the plastic housing.

Print a Box (smaller)

TriaxialClock80 v24.jpg
20260322_triaxilBoxSmall.jpg
triaxial80Complete1.JPG

This box is slightly narrower than the one above and works well with the 80% version of the clock.


The width has been reduced by moving the oled to the side (in the box lid)


It requires 7mm buttons and smaller screws.


Other than this, assembly is the same as described for the larger box.

Extras

20251213_201810.jpg

3d print files for the Hall sensor bracket assembly, to fit the 80% model are added below.

Note - these should be printed at normal 100% size.


I found the 10 min adjuster to have the axle diameter way too small, so it wobbled in the frame.

also the claw did not hold the vanes very well. These two issues made the 10 min rotor not always align correctly.

Modified file below, which has a better fit and an extended claw.

These are printed at 100%, or 80% for the smaller clock.


I also glued a metal bolt to the end of the 1 minute adjuster and 1 hour adjuster. The extra weight helps keep the digits aligned.