element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Detect oscillations
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 33 replies
  • Answers 1 answer
  • Subscribers 396 subscribers
  • Views 2657 views
  • Users 0 members are here
  • oscillations
  • processing
  • accelerometer
  • movement
  • algorithm
  • arduino
Related

Detect oscillations

kosme
kosme over 11 years ago

I'm trying to use an Arduino and a MMA8452Q accelerometer to sense movement and detect oscillations. What would be the best way to analyze and process the info to detect oscillations at a specific frequency range and act accordingly?

 

Edit 1:


Aswering Michael Kellett questions

Must you detect  a single frequency (known in advance) or a band of frequencies.

I must detect if the oscillation is in the 4-8Hz range.

 

Is the sampling rate under direct contorl of the Arduino or is it set by the accelerometer.

It is mostly under control of the Arduino. The accelerometer is set to sample at a certain rate but I can "miss steps" simply by reading the I2C interface at a much lower rate.

 

What is the range of frequencies and amplitudes you must detect.

I must detect if the oscillation is in the 4-8Hz range. The amplitude will be handled by the accelerometer but I expect it to be between ±4G's

 

Are there other signals present at the same time which you must ignore.

No, but it would be nice to be able to log the results.

 

How quickly must you reach a  decision when the signal appears.

I haven't decided that yet but the oscillation must persist for several seconds before action is taken. The exact number of seconds hasn't still been determined.

 

What accelerometer are you suing.

MMA8452Q I2C accelerometer

  • Sign in to reply
  • Cancel

Top Replies

  • michaelkellett
    michaelkellett over 11 years ago +1 suggested
    Hello Enrique, It makes it easier for people to follow the thread if you just add a new message rather than editing the original question. It seems that you want to detect energy in the band 4 - 8Hz, not…
  • D_Hersey
    D_Hersey over 11 years ago +1
    SO has just come down with Parky's, so I know of the characteristics of the tremors, they do seem to have a characteristic wave form, narrow fq, fairly constant amplitude between ramp-up and ramp-down…
Parents
  • ravi_butani
    0 ravi_butani over 11 years ago

    As you want to detect frequency between 4-8Hz u need to implement 4-8 Hz Bandpass filter. In Arduino U can do this by implementing LPF at 8Hz cutoff HPF having 4Hz cutoff freq. LPF: moving average LPF.... Its just like array work as fifo and average of array is your Low pass filtered output. Cutoff frequency of low pass filter is decided by length of array and sampling interval. Filtered stream of data consist signal less than 8 Hz frequency only.

    Now HPF: low pass filtered data stream is now stored in next fifo and you need to just consider difference between first and last sample in fifo... again Cutoff frequency of HPF is also decided by length of array and sampling interval. set to 4 Hz as in HPF by trial and error... Finally High pass filtered data store in next Fifo... average of third fifo with some threshold you can get to conclusion that 4-8Hz signal available in your data or not... Now if for certain time interval this final result remain above threshold can trigger your desired event. If you find problem in understand this then let me know I will be here with some  sample code...

    image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • ravi_butani
    0 ravi_butani over 11 years ago

    As you want to detect frequency between 4-8Hz u need to implement 4-8 Hz Bandpass filter. In Arduino U can do this by implementing LPF at 8Hz cutoff HPF having 4Hz cutoff freq. LPF: moving average LPF.... Its just like array work as fifo and average of array is your Low pass filtered output. Cutoff frequency of low pass filter is decided by length of array and sampling interval. Filtered stream of data consist signal less than 8 Hz frequency only.

    Now HPF: low pass filtered data stream is now stored in next fifo and you need to just consider difference between first and last sample in fifo... again Cutoff frequency of HPF is also decided by length of array and sampling interval. set to 4 Hz as in HPF by trial and error... Finally High pass filtered data store in next Fifo... average of third fifo with some threshold you can get to conclusion that 4-8Hz signal available in your data or not... Now if for certain time interval this final result remain above threshold can trigger your desired event. If you find problem in understand this then let me know I will be here with some  sample code...

    image

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • michaelkellett
    0 michaelkellett over 11 years ago in reply to ravi_butani

    Ravi - whilst the technique you suggest does make very rough and ready filters it is not an efficient use of processing power and may not give the filter characteristics required. There are free tools around which will design FIR or IIR filters and there are code samples around too.

     

    My suggestion to use MATLAB or similar is based on the OP''s need to work out exactly what sort of filter he needs first.

     

    The methodology to be followed for filter/alogrithm design for detecting some kind of event is always:

     

    acquire a reasonably large data set including events on either side of the boundary conditions (typically 100s of events)

    examine that data with some kind of tool like MATLAB (Maple, Octave etc will do just as well)

    design a set of filters/algorithms to detect the even

    test them on the data set

    refine them

    design the actual code to implement the filters/algorithm

     

    There are no short cuts and the code design is the smallest part of the task.

     

    MK

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube