BeoTac, a tachometer for the Beogram 4000 series

This article aims at describing the process of developing and implementing an Arduino-based tachometer. This should make it possible to measure the performance and stability of the motor in a Beogram 4000 series turntable. The main concept of this system is a tachometer which uses interrupts to calculate the RPM of the turntable and sends the measurements to a connected PC via a serial interface.


It is crucial and of the utmost importance that the turntables I restore are stable, accurate and durable. Minor fluctuations in the stability of the RPM can seriously harm the user experience when listening to one’s favourite music and since the motors are over 40 years old this is often the case. 

Therefore I needed a way to verify that the motors I restored were performing as expected over a longer period of time. I’ve found two possible solutions to this problem, namely the AR926 and BeoloverRPM (from 2016) as seen in Figure 1.
Figure 1: The AR926 compared to the BeoloverRPM

After multiple investigations, I ended up with the advantages and disadvantages of the existing solutions discussed below.

Digital Tachometer, AR926




With the previously mentioned advantages and disadvantages, I decided to develop my own implementation called BeoTac which enables me to do adequate performance and stability tests over a longer period of time since none of the solutions seems to solve my problem completely. My goal was to create an implementation a lot like Rudys but with the following improvements:

Optimized design

Extended software


My initial idea was to create my own circuit with an IR-transmitter and receiver connected to an ATMega 328p microprocessor. I tried to measure the analogue values, but this proved inaccurate and difficult to control which is why I opted to use a digital circuit. To digitize the output from the IR emitter my idea was to include an OP-AMP comparator circuit (LM358).
Figure 2: An early-stage prototype with the LM358.

After tinkering around with the circuit for some time I decided to simplify the process and decided to use an Arduino Nano in combination with an IR sensor module instead. 
This would make it easier for me to create an MVP as fast as possible and verify that the idea was possible. 
I 3D printed a minimal base, attached the IR sensor module and connected it to the Arduino Nano. The LED’s was bent downwards to pick up the black bars.
Figure 3: An early-stage 3D printed part used to verify the idea.

Figure 4: First readings when switching from 33RPM to 45RPM, using Arduinos Serial Plotter with a Baud Rate of 38400 Bd.

With a minimal codebase, the MVP verified that BeoTac solved my issues and made it possible for me to test the stability and performance of the motor.
I designed the BeoTac casing from my blueprint to which the SSD1306 OLED display was later added. The sampling time was adjusted to one second since the Arduino would be exhausted by updating the screen and handle interrupts at the same time.
Figure 5: Second iteration with the IR sensor attached.

Figure 6: Early prototype casing without the OLED screen attached.

The software was written from scratch and internally uses interrupts on PIN2 to increment a counter every time a black bar is registered by the IR receiver. Each second the RPM is calculated and sent to the PC via the serial connection and via I2C to the OLED screen.

The OLED screen shows the current RPM fixed with two decimals and a “checkmark” if the speed is ~33.33RPM or ~45RPM. Otherwise, it shows an “X” which could indicate that the motor is in need of restoration. 

I also started using SerialPlot which enables me to take larger data samples, e.g. 24 hours, since Arduinos Serial Plot is limited to ~500 seconds. The screenshot below shows a sample of data for ~1 hour.
Figure 7: SerialPlot, plotting data for 1 hour.

Figure 8: Prototyping requires a lot of testing.

Figure 9: Testing the screen.

Figure 10: Finished product compared to the early prototype.

The casing as seen in figure 11 worked as expected but after some field testing, I’ve addressed a couple of issues which improved the overall experience.
Instead of using four screws to attach the bottom, I’ve changed the design to use a single screw which is indented such that the screws doesn’t scratch the base of the turntable.
Figure 11: Optimized the bottom design and added a single indented screw to remove the risk of scratching the surface of the Beogram.

Figure 12: A 3D model which compares the two different bottom designs.

The base for the OLED screen was originally glued to the case but since glue an unsustainable solution I’ve updated the design and added screws instead. In this way, I am sure that the screen will never fall off.
Figure 13: Second iteration of the finished model with screws attaching the screen instead of glue.

The software was also updated with a new feature enabling the use of the BeoTac on other turntables than the Beogram 4000 series. With a single command, it is possible to tell BeoTac how many bars it should react on. This makes it possible to print a white piece of paper with a single black bar on and add it to any type of turntable.

Below is a 3D image of my initial blueprint (right) and the finished model (left).
Figure 14: First design prototype to the right, and the second iteration of the finished product to the left.

Figure 15: 3 different prototypes compared next to each other.

For those interested the complete component list is below.
Hardware components


Hand tools and fabrication machines

Below you’ll find some images of the final product.

Thanks for reading. I would be happy to receive some feedback. You can send me an email or use my contact form :)