First of all, excuse my little knowledge, I'm a computer programmer by trade and unfortunately have very little knowledge of physics, engineering, DSP but I'm willing to learn.

I would like to measure the quality of a road surface when riding on it on a skateboard. Basically I'd be interested in the smoothness of the road. For "smoother" roads, there should be little vibration, for less smooth roads there should be more.

Ideas I had so far is strapping the TI SensorTag 2 (CC2650) to the skateboard and recording the accelerometer graph during a ride and then taking those frequencies (fourier transform). Unfortunately, the maximum sampling frequency I can get from the SensorTag seems to be 10 Hz which seems way too little. My uninformed back of the envelope calculation is that I kind of need to detect 1cm large "potholes" and that I'm going about 10 km/h. So the frequency I need detect needs to be at least 277 Hz (10 km/h / 1 cm). Also I believe to derive the "degree of vibration" from that I need the velocity that I'm traveling. The question is where I'd get that from... Sure, I could integrate the acceleration data but that seems like it'd be quite imprecise. Also I could use the GPS on my phone for that but that seems rather imprecise too.

A friend of mine proposed a potentially simpler approach of recording the sounds the wheels create while riding. And then derive the degree of vibration from that. But I'd also need the travel velocity for that, right?

Does this make any sense? And if yes, what could be a good approach?

Many thanks!

  • $\begingroup$ Speed will affect the result. The faster the speed the smoother the surface may appear to be, because the readings could be taken at the high points of roughness - much like riding the crest of waves without traversing the troughs. $\endgroup$
    – Fred
    Commented Dec 14, 2016 at 2:43
  • $\begingroup$ It doesn't sound as though the OP is interested in the actual surface roughness of the surface, just in the surface as it affects the skateboard, but you are right that speed will affect the apparent smoothness, as will the diameter of the skateboard wheel and the durometer of the wheel compound and depending on the placement of the sensor, the properties of the skateboard deck itself. $\endgroup$
    – DLS3141
    Commented Dec 16, 2016 at 16:54
  • $\begingroup$ Just curious, do you want to convert the signals that you have measured to an audio sound? An alternative to the accelerometer solution is a sound analyzer. needs a microphone and processing power. $\endgroup$ Commented Dec 18, 2016 at 10:53

3 Answers 3


While the acoustic analysis idea may* work, I think the accellerometer data would be much easier to analyze. If you are looking for something that can give you better rates of data, try looking into other accellerometers. This one from Adafruit has a maximum rate of 800 Hz(datasheet). According to your calculations, this should be enough.

You could log this data with something like an arduino to be analyzed later (I haven't looked into how quickly that will be able to gather/process data). A module like the raspberry pi zero should have enough processing power to sort through the accellerometer data in real time.

As for measuring the speed of the skateboard, a common, cheap, and fairly easy route is to use a hall effect sensor on a wheel. This will give you the angular velocity of the wheel (rpm/rps) and from there you use rpm times the circumference of the wheel (say in centimeters) to give you the speed in cm/min. Convert appropriately for your program.

*I'm sure given enough time, trial and error, it could work, I am doubtful using sound to analyze the road would be worth the effort.

  • $\begingroup$ The output of a Hall effect sensor on a wheel is not the speed, it simply generates a pulse each time the magnet passes the sensor. The rotational speed is 1/ the time between pulses. $\endgroup$
    – DLS3141
    Commented Dec 17, 2016 at 22:24

As suggested I would try to use accelerometer. Below you will find a link to source code that might be helpful. I used a ADXL 345 accelormeter in combination with a TIVA ARM Cortex M4 Microcontroller. You are welcome to fork the source code


First, a bit of background. I spent 6 years running a packaging test lab here in the U.S. and part of my job was collecting shock and vibration data from the field for different transportation modes (semi tractor/trailers, TOFC, railcar, delivery trucks, ships...etc) around the world, then using that data to develop and/or validate lab test protocols. I've also done vibration measurement and analysis on rotating machinery and vehicles. So, not exactly what you're doing, but pretty close.

For measurements, I've typically used self contained "black box" data recorders from IST, but these recorders cost about $10k each and are probably out of your budget. They do rent equipment, so it might be worth looking into and maybe there's an affordable equivalent wherever in the world you are.

If you decide you want to homebrew your own hardware, I would be cautious about mounting an Arduino or Ras-Pi to a skateboard without taking steps to protect it, they're simply not ruggedized for the dynamic environment. That, and you'll have real problems sampling data fast enough to avoid aliasing. The typical rule of thumb is that the sampling rate should be 10 the highest frequency of interest. Proceed at your own risk.

If I were doing this, I'd look for a way to rent/borrow a real portable dynamic signal analyzer...something like this Crystal Instruments Spyder-20 . I'd setup a hall sensor or small optical sensor to use as a tach input (0-5V pulse train). Then a miniature accelerometer like this one from PCB mounted to the skateboard truck to detect vibration vertically. Setup the DSA to trigger data collection when it senses input from the tach. Put the DSA in your backpack and go skate on different streets/surfaces.

Since your speed will vary, there's probably not much value in comparing acceleration vs time data or histograms between data collected on different surfaces except as maybe a gut check. I would take the data and process it into different waterfall plots the first plotting time vs frequency vs intensity like this:

Time v Freq v Intensity

and another with speed vs frequency vs intensity, like this:

Speed v Freq v Intensity

You might want to look at other things for the Z axis, but in general this would be a good start and you can narrow in on specific areas of interest.

You should also look at the fundamental frequencies that will be created by the bearings in your skateboard wheels and apply some filtering to remove that from your data as well.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.