Sampling Rate


I was wondering if anyone could help me out with finding an Arduino. I am going to be using the Arduino to read the output of an accelerometer from SparkFun (SparkFun Triple Axis Accelerometer Breakout - ADXL377 - SEN-12803 - SparkFun Electronics).

I am mounting the accelerometer to a vibratory roller, which has 8500 Vibrations Per Minute (VPM). The frequency is 141.67 Hz. The frequency and G force range for the accelerometer will suit the frequency and g force range of the roller.

Because of the frequency of the Roller, I need to be able to collect data from the accelerometer 1000 times/second. I need to be able to plot the points on a graph, and if I don't have enough points, the graph will be off.

Thanks for the help.

The rate for analog reads is around 10,000/second so you should be fine. You'd definitely be much better off using an accelerometer with a digital output, however, and it's important to note that the sample rate of the ADXL377 is 1000Hz.

This thread has analog to digital conversion times for many Arduino compatible boards using the standard analogRead function.

Per your requirement of 1000 samples per second for each of the three channels (x,y,z) of the accelerometer you need a sampling rate of at least 3000 samples per second, that is, a conversion time of less than 0.33 milliseconds. Any Arduino will do this, though you will also need the processor capacity to do whatever else your application requires such as output or format and display the results.

If you are new to Arduino, the Uno R3 is generally the recommended first board.

Thanks for the help.

I just purchased the Arduino Uno, and I went with the Ada Fruit ADXL377, which is the same as the spark fun accelerometer.

Does anyone has suggestions on how to code this? I have very little coding experience.


Follow the guidance in the AdaFruit Tutorial. They do a very nice job explaining how to get started with most of the peripherals they sell.

You also need to consider how fast you can send data to PC. If you do 115200, then you can send up to 10KB per second. For 1,000 data points (how many axes do you need?), it will be ~15 bytes per data point for all 3 axes, so 1.5ms is needed. You won't be able to do 1,000 points per second if you need more than 1.5ms to transfer data. You will have to use higher baud rate to make sure data transfer is not the bottleneck.