I'm doing a school project in which I will need to determine the "rpm" that someone is paddling at in a kayak and present that number, and don't know how to approach it.
Would a accelerometer be the best option to achieve this? If not any other ideas?
And how would I be able to make the data from that sensor into a number of strokes per minute?
Begin by figuring out how you would determine when a minute has elapsed or even a second, 1/60 of a minute.
Where would you place an accelerometer and connect it to your Arduino?
So much engineering needs to be done on your project, long before writing any code for your Arduino.
An accelerometer usually detects movements in both X, Y and Z direction. It's hard to filter the data and find what You want. I suggest a pressure/force sensor in the handle of the paddle. The lower hand grip applies the highest force. It can be done using "long cables" and placing the controller inside the kayak. More sophisticated designs could be a self running and registering device on the paddle using a memory card. But.... being dropped into the water the unit is gone....
Yes, place Arduino board with accelerometer like a wrist band on your arm.
Measure permanently the acceleration (in X, Y, Z direction) and try to figure out if the sequence of measurement results "look" like a circle.
Find the repeating "circle pattern" ("gesture") and measure the time when a circle has completed.
Now you have "RPM" (just to recognize the "circle gesture based on accelerometer data stream is tricky). How do you know he is not shaking/waving hands to other paddlers or drinking a beer?
You might need a large sequence of accelerometer values, just to "predict" it "looks like a circle" done.
To simplify: you can also mount a magnet on kayak, wrist band with Hall Sensor (or a compass sensor): when arm is on lower position, moving closely over the magnet - you get a pulse and you have "RPM" (elapsed time between two pulses/rotations).
And a gyro sensor might be able to do a similar job.
I'd recommend looking at x,y,z plots - at least one of them should have rather clear sinusoid-like pattern when paddle makes a full cycle. If it really is there - then find out two thresholds, one at bottom 1/3 of the sinusoid, another at top 1/3. When value gets below 1/3 one, set cycle_start variable to 1. When value gets above 2/3 one, check if cycle_start is equal to 1, if yes - set it to 0 and trigger function that processes new paddling cycle (updates speed, displays something etc)
Pattern recognition is never easy, nothing for new people. Could You come up with a more close strategy? How to find out where the circle, sinus, ..... is?
It likely needs an advanced controller with quite some memory and computing power.
Sensing the force in the hand points of the paddle ought to be the easiest. It shows power, no power, power.... Almost like a reed relay in RPM measuring.
Not sure it will be much simpler than tracking acceleration: force will vary quite a lot, and similar kind of rule will be needed there anyway - without it, random variations would lead to a lot of false detections. Plus force sensing adds mechanical complexity and waterproofing issues.
Also I don't consider this type of rules as something difficult - I've outlined the whole algorithm in a single statement which involves only if operators and one state variable. If that's too complex already - then this project is too complex anyway