Pages: [1]   Go Down
Author Topic: Detecting specific motions using accelerometer  (Read 1793 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey all,

I am going to soon begin trying to recreate one of these: http://www.thewandcompany.com/ using an arduino. This is my first project with arduino, so I will be starting slow by first just creating a setup that can learn and reproduce IR signals. I feel like I can handle this part, but the accelerometer has been making me a little more nervous.

I want to have at least 5 basic motions, flip up (volume up), flip down (volume down), right flick (channel up), left flick (channel down), and flick up & down (power). Has anyone worked with detecting these motions? I do not have my arduino or components yet, but I am just thinking ahead of time.

Thanks.
« Last Edit: July 23, 2010, 01:27:33 pm by aboyne » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I don't know if I posted this in the wrong place, please let me know if I did. I have been thinking about this problem, and have a bit of an idea of what I want to do.

First step would be to detect the direction of a voluntary motion. To do this I was thinking of the following (in sudo code).
Code:
threshold = # (how much the force needs to change before it is considered voluntary)

vals = readSensor
init_x = vals[xforce]
init_y = vals[yforce]
init_z = valz[zforce]

vals = readSensor
x = vals[xforce]
y = vals[yforce]
z = valz[zforce]

diff_x = x-init_x
diff_y = y-init_y
diff_z = z-init_z

if(diff_x>threshold): #Moved right
if(dir_x<threshold*-1): #Moved  left
if(dir_y>threshold): dir = #Moved up
if(dir_y<threshold*-1): #Moved down
if(dir_z>threshold): #Moved forward
if(dir_z<threshold*-1): #Moved back

That is my basic idea for determining that there was a voluntary motion in a certain direction. From there, I would give an amount of time to wait for the next motion (milliseconds probably). Record the sequence of motions, and look to see if that sequence matched a pre-defined sequence. If it does, then fire a specific IR code.

I have never worked with accelerometers before, so I am sure I am missing something here. I realized the fact that the accelerometer sensor will detect gravity, but this should account for that. I might code this up for my phone soon to test it out.

I am interested in hearing opinions if anyone has them.

Thanks.
Logged

UK
Offline Offline
Sr. Member
****
Karma: 1
Posts: 491
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I've never done it myself (though it sounds a fun project) but there is some pseudo-code here http://www.codeshogun.com/blog/2009/04/17/how-to-detect-shake-motion-in-android-part-i/ and actual code here http://www.clingmarks.com/?p=25 that might help you.

Andrew
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I tried something fairly similar to that code, but gravity is kind of messing me up. I have some rotation when I am doing the motions, and that means that gravity starts to act on different axis in the middle of a motion. Back to the drawing board.
Logged

Pages: [1]   Go Up
Jump to: