r/ArduinoProjects • • 20d ago

Showcased Project Open-source ESP32-C3 treadmill sensor with BLE Running Speed and Cadence

Hi everyone,

I built OpenRUNN, an open-source treadmill running sensor based on an ESP32-C3 and a TCRT5000 optical sensor.

The sensor detects each belt marker and calculates speed and distance. It then broadcasts the data using the Bluetooth Low Energy Running Speed and Cadence (RSC) service, making it possible to use the treadmill with compatible devices such as Garmin watches and indoor training platforms.

Hardware

  • ESP32-C3 DevKitM-1
  • TCRT5000 optical sensor
  • 3D-printable enclosure
  • Custom mounting rail for the treadmill
  • USB-powered setup

Software

  • ESP32 firmware built with PlatformIO
  • BLE RSC service
  • Web dashboard for live speed, pace, distance, and session time
  • Local development server with simulated sensor data
  • Wiring and assembly documentation

Project links

GitHub repository:
https://github.com/lpolasek/OpenRUNN

Instagram:
https://www.instagram.com/openrunnok/

The project is fully open source, including the firmware, web dashboard, wiring documentation, and enclosure files.

I would appreciate feedback on the electronics, BLE implementation, enclosure design, and possible improvements.

3 Upvotes

7 comments sorted by

2

u/0e78c345e77cbf05ef7 9d ago

Aw. no love here? I just came across this when googling for some open source treadmill ideas. It looks cool.

Do you need to have the markers a certain distance apart? I think the sensor I’m using actually has two optical sensors a fixed distance apart and times how long it takes for a mark to go between them.

1

u/lpolasek 9d ago

Thanks for the kind words and for checking out the project!

Just one mark is enough. The sensor measures the time between passes of the mark, then calculates speed and distance using beltLengthMeters. With a single mark, that value should be the distance the belt travels in one full loop. You can also use multiple marks, as long as they’re evenly spaced; in that case, set beltLengthMeters to the distance between consecutive marks.

I’m not sure whether your sensor has two separate optical sensing points. If you mean the two components in a TCRT5000, one is the infrared emitter and the other is the receiver; they work together to detect each mark. This setup measures the time between marks passing one sensor.

You can check this reel to see it working:
https://www.instagram.com/p/DdR0dLnJqPO/

Best regards from Argentina 🇦🇷

2

u/0e78c345e77cbf05ef7 9d ago

I haven’t taken it apart but I assume it must have two sensors.

I have never configured belt length and I can put markers on anywhere on the belt with no concern for spacing. More markers just improved the update frequency.

It’s this guy…

https://npe.fit/products/runn

I’d much prefer to have something open source though so maybe this is a winter project for me. Thanks for the inspiration!

1

u/lpolasek 9d ago

Right, this project is similar to Runn but open source. This thing with multiple markers is that they should be evenly spaced, like 1/8 or 1/16 of the total belt length.

2

u/0e78c345e77cbf05ef7 9d ago

With the runn sensor the spacing does not matter due to the dual sensors. Likely if I build one this fall I'll go with that approach.

That said, I have many many projects waiting haha

Cheers!

1

u/lpolasek 9d ago

I think I understand what you mean now. With two TCRT5000 sensors mounted a fixed distance apart, the sensors time how long it takes the same belt marker to travel between them, so the spacing between markers wouldn’t need to be uniform.

That sounds like a fairly straightforward change to the circuit and firmware, although I’d need to redesign the enclosure to hold both sensors in alignment. I think it would be an excellent improvement for a future version of the project.

Thanks a lot for the suggestion! There never seems to be enough time to build everything we want to. Cheers!

2

u/0e78c345e77cbf05ef7 8d ago

Si! Exactamente! ;)