2
\$\begingroup\$

I need to detect shaking (not just vibration or small movements but significant horizontal rocking movement)! (its a long story)

I have an Arduino already in place, controlling some other stuff. I've tried a couple of simple methods with gyroscopes and pendulum like shake sensors and like, but they are either too sensitive or to hard to calibrate.

Mostly I need to detect horizontal plane movements.

Any suggestions? Anyone had done anything like this?

\$\endgroup\$
  • \$\begingroup\$ Maybe a very primitive (/ completely off-the-mark) suggestion, and also not RoHS compliant. Could those mercury switches used a decade ago in cordless phone be used for this ? For horizontal planar motion, if the motion is usually along a single axis, such a switch sould be making rapid make-breaks, easily detected at very low cost, with Arduino on an input digital pin. \$\endgroup\$ – icarus74 Jan 8 '12 at 16:19
  • \$\begingroup\$ @icarus74 The RoHS alternative to a Mercury tilt switch is a steel ball-bearing in a tube. Imagine a copper tube, with a loose fit ball-bearing in, and an insulated end cap, with a conducting pin in it. \$\endgroup\$ – Tom O'Connor Jan 8 '12 at 20:11
  • \$\begingroup\$ Thanks @TomO'Connor. Does these steel ball-bearing in a tube, work as well as the mercury tilt-switches ? Any chance that mercury's liquid state and surface tension might cause it to exhibit a slightly different behavior which a solid metal ball might not correctly emulate ? \$\endgroup\$ – icarus74 Jan 10 '12 at 4:57
  • \$\begingroup\$ @icarus74 Almost certainly. The only other option I can think of might involve something like salty water.. But that scares me slightly. (Massively). I wonder whether you might be able to do something with a weighted magnet, suspended on springs inside a group of coils of wire. \$\endgroup\$ – Tom O'Connor Jan 10 '12 at 11:09
4
\$\begingroup\$

You have to decide what exactly you are trying to detect. You say "horizontal rocking" which implies a pivoting motion, but then "horizontal plane movements" which is something else. You need to make up your mind. I would detect these two differently.

Also, what exactly is "movement". Do you need to know the distance your object has moved, it's speed, or will acceleration do?

Acceleration is the easiest of these to measure with small and cheap off the shelf sensors. A number of companies, including Freescale and Analog Devices, make MEMS accelerometers. These come in flavors that either put out a analog signal proportional to acceleration, or also digital. You can use two single-axis accelerometers, or it may be more convenient to use one two-axis chip to detect motion in a plane. With the two axes aligned along the plane, the total acceleration magnitude is the square root of the sum of the squares of the individual acceleration signals. If you're just looking for some threshold, then you can square the individual signals, add them, and compare that to the square of the acceleration threshold.

You can do limited itegration of such acceleration signals. There is enough offset and hysteresis in cheap MEMS accelerometers that inertial navigation for more than a second or two becomes so inaccurate as to be unusable for most purposes.

| improve this answer | |
\$\endgroup\$
  • \$\begingroup\$ there's usually only one 'L' in acceleration and accelerometer. +1 anyway, just to show you i'm not trying to be a jerk about it. \$\endgroup\$ – JustJeff Jan 8 '12 at 16:41
  • \$\begingroup\$ @Just: Now fixed. \$\endgroup\$ – Olin Lathrop Jan 8 '12 at 17:14
4
\$\begingroup\$

Inertial Accelerometers are your friend.

I have recently hooked some up to an Arduino, and here is my writeup of it:

http://hacking.majenko.co.uk/node/32

The ones I have used are ±18g, which equates to ±176.58m/s² acceleration.

With the addition of a capacitor on the output you can reduce the sensitivity to high frequency vibration.

| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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