Idea: Arduino Based BPM counter

I was thinking about my turntables that I have and about spinning trance and thought to myself that I don’t have any way to tell what the BPM is of the song, there are mixers that have this built in and I have seen rack mount stand alone units but nothing small and portable. My device would be handheld with stereo jack and rca jacks for input. Knowing that all analog music is just a wave form, why not measure the wave of a specific frequency (e.g. bass) using a band pass, then calculate when the peaks hit and get the BPM.

This seems like a very simple thing to do but wont know till I start putting something together.

parts that I will need:

  • Arduino or other ATmega chip
  • RCA connections
  • Darlington transistor pair (chip or separate transistors)
  • a few LEDs
  • Resistors asst
  • 2x 7 or 8 segment display or serial LCD module
  • maybe more parts, odds and ends

This could be made into a kit or a sellable project. Hopefull in Jan I will be able to start putting this together for my proof of concept and show it off….


Just thinking on how would i calculate BPM, so I started with Google….didnt get very many specific code, alot of applications that do it for you but no real source code to extract the equation from so i kept looking, and found this

He explains on how to calculate the delay time between beats

* Delay time for crotchet in ms = 60000/BPM (Beat Per Minute)
* Delay time for Quaver in ms = 60000/BPM/2 (Beat Per Minute)
* Delay time for Semi-Quaver in ms = 60000/BPM/4 (Beat Per Minute)

so I used my Horrible math skills and came up with

BPM= 60K/Delay , then so on and so fourth.

so now the hard part pattern recognition, The tactile Metronome project seems to be the closest on what I want to create there project is here , This should give me a good start on my project/

4 Responses to Idea: Arduino Based BPM counter

  1. Hi,
    I’m also trying to create a BPM counter with an Arduino.
    Have you managed to build this project?

    • Hello, thanks for visiting. yes I have made proggress on the BPM counter but it was very inaccurate. Currently I am trying to learn fft to make it solid.
      If you are trying with an Arduino you may want to create a low pass filter to pass anything under 1khz. then use one of the tap bpm counters code.and modify it so instead of a buttonyou use the adc, and when it reaches the threshold it counts as a button press.

      I wish I still had a working Arduino to help . Good luck and If you still having trouble contact metheough my contact page.

      • Avatar Nathan Reeves
        Nathan Reeves says:

        Why not use a button instead. might avoid the whole audio detection mess. You can use a button and based on the number of taps (say 8 taps to get the bpm) you can get the BPM using your own user input, not on some audio algorithm…or riddim! 😛

        • I have done the tap counter, but i want something that does it automatically, no user input, just plug in your source and go.