Toby from Norwich Hackspace has been busy with his Classic Mini and wanted to share his progress with us. Toby demonstrates how his skills with engineering, design, coding and 3D Printing all come together to help with this project.

I have a classic Mini that has been extensively modified by several different owners. The list of mods is long but the most significant is an engine swap to a Rover 1.8 vcc K-series engine. This chucks out about 3 times what the original engine would output and is somewhat lighter.

When I took ownership the interior was pretty bad. The seats were very uncomfortable bucket racing seats and the dash was made up from the donor car. The gauges had literally been hacksawed out of the donor car and bolted behind some MDF. 


The fuel dial never showed more than half full, the temperature gauge always sat at 90C (even when I drag raced it at Santa Pod) and the speedo was typically 10-20% over-generous. So I started a project to replace the dashboard… in about 2010

I found a great fibreglass dash piece that fitted the look of the car and so started to look for new gauges to put in it. Temperature and rev counter was no problem and I quickly found some cheap but good looking gauges that worked without much bother. Then came the speedo. The speed is calculated by the ECU using a sensor on the gearbox case but it assumes certain metrics like wheel diameter. This is why the old speedo was always over-keen compared to what it thought the speed was. What I needed was a speedo that can be programmed to fit the vehicle. Now these do exist but are not cheap so I set about making one.

X25/X27 Switec automotive stepper motor

Most modern cars use a high precision stepper motor to drive the gauges and these can be very expensive although now you can buy them for a couple of pounds each. They have 315 degrees of rotation in 1/3 degree increments and can run off 5-12v.

My first success was to drive it directly off the Arduino output pins and using the standard stepper motor library. The movement wasn’t very smooth and lots of people warned about fly back current damaging the Arduino. If you spin a stepper motor it will generate current which can flow back up and damage control circuits. Obviously you just need a simple diode to protect against this.

After some serious Googling about I found Guy Carpenter’s blog on his Gaugette project and he wrote a great library for the X25

This fixed all of my crude code and I got some great movement as seen in his videos.

Measuring speed

So obviously the ECU has a speedo data feed that is currently out of adjustment but I was sure if I could capture the data with an Arduino I could make an adjustment before sending to the X25 gauge. The tachometer (rev counter) signal coming out of the ECU is a square wave that changes frequency as the revs change. My multi-meter has a frequency feature and it was easily confirmed that booting the throttle increased the frequency. You can use the Arduino interrupt pin to make a simple frequency counter and with a voltage divider I built a simple setup that did indeed measure the revs.

I was hopeful that the speed signal would be the same but alas it did not behave the same way. At this time I cannot find any documentation as the Rover ECU is proprietary and one day hope to crack this puzzle. I need an oscilloscope or logic analyser to get any further. If anyone has any clues on this then please let me know.

So plan B is to use GPS, which has the benefit of being more accurate (some of the time) and auto calibrating. I went for the Adafruit Ultimate GPS logger shield as it is a very sensitive unit with 10Hz update rate and 66 channels. I also liked the fact it had onboard SD card for data logging.


I wanted something retro to fit in with the classic Mini style. I found something at a car boot, which turned out to be from old Austin A30/40 car.


I liked the style and that it was an all in one unit. I removed the internals and started thinking about how to mount the stepper motor board. It needed to be quite a precise distance from the metal top plate. I started off with some Meccano because that is what was on my desk but it became clear this was job for the Ultimaker 2 3D printer.


I grabbed some calipers and started drawing 2d shapes in Sketchup. The base oval was a 75mm square with two semi-circles attached to each end. I started with the square and used the arc tool to round off the ends.

A hole was needed for the top right and this was very tricky to measure. I made a couple of prints just a few layers thick until I had this dialled in enough so it would fit.


I then extruded the whole shape up to around 15mm which is what I had calculated to be the thickness I needed to get the gauge needle in the right place. I added a small recess to accommodate the board and some holes for the mounting screws.


I then extruded the whole shape up to around 15mm which is what I had calculated to be the thickness I needed to get the gauge needle in the right place. I added a small recess to accommodate the board and some holes for the mounting screws.

Next job was real world testing and so I thought I had better put the Arduino in a case so I headed over to Thingiverse and found a nice snug case. This is where a 3D printer becomes really useful and the Ultimaker 2 gave me good quality prints. Buying a case would cost at least £10 and take a day or two even if I could find the exact one I wanted. I could browse several designs and files for different cases. I picked the one most suited to the job and in less than an hour the Arduino was inside and attached to the back of the speedo. 

Finally a quick video of the startup and the GPS getting a fix

Welcome, visitor. Files are available to download with this content. Please sign up to Download. Sign up or Login