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
Sudden Impact Wearables Design Challenge
  • Challenges & Projects
  • Design Challenges
  • Sudden Impact Wearables Design Challenge
  • More
  • Cancel
Sudden Impact Wearables Design Challenge
Blog Part3.1 - Head Impact Detection [ADXL377]
  • Blog
  • Forum
  • Documents
  • Polls
  • Files
  • Events
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: sunnyiut
  • Date Created: 5 May 2015 4:56 PM Date Created
  • Views 1755 views
  • Likes 1 like
  • Comments 11 comments
  • adxl377
  • sudden_impact
  • total_player
Related
Recommended

Part3.1 - Head Impact Detection [ADXL377]

sunnyiut
sunnyiut
5 May 2015

Title: Total Player Monitoring

By: Md. Kamrul Hussain

Project Category: Design Challenge

Project Name: Sudden Impact Wearables Design Challenge

Blog post: 08


Intro:


This is a short update on detecting head impact injury using ADXL377 3 axis accelerometer. The goal is to detect potential concussion type collisions during a game.


Components:



image


The sensor provides analog outputs for individual 3-axis which can be processed by PIC12F1840 microcontroller to detect the impact due to collisions. PIC12F1840 is a small [8 pins only], cost effective and low power Microcontroller with all the functions needed for this design. It has 4 channel 10 bit ADC for capturing analog data from ADXL377. The UART module is used to communicate with the BLE [RN4020]. It has internal oscillator up to 32MHz and XLP version ensures low power consumption [34uA @ 1MHz]. So, the full impact detection module can be constructed in a small circuit board and can be powered for long time without changing the Battery. This is necessary because I am going to mount it on a HEAD BAND, so it should be small and have long battery support.


In this short blog post I am just uploading the images of experimenting with the ADXL377 module. For demonstration purpose I am using Mikromedia dsPIC board from Mikroelektronika, to display the output of the ADXL377.


Setup:

imageimage

This setup is pretty straight forward. If the ADC reading exceeds a certain value then send impact data through BLE. Here, I'll just display the data on the TFT screen for demonstration.


Calibration:

After powering up the ADXL377 sensor, it has to be calibrated for 0g in each of the axis. In general, it produces around Vs/2 at 0g and varies up Vs and down to 0v respectively for positive and negative variation of acceleration value. It means, for 3.3v supply the 0g value would be around 1.65v or 512 ADC value. So, before taking actual measurements the controller takes 20 readings for each axis and averages the readings to get the ADC value for 0g state.

image


Output at stationary condition:


The calibrated values for each axis slightly vary from expected value [512]. It depends on the position of the sensor and the surface flatness where the sensor is placed.

For calculating the g value, I am simply counting the half value of the difference between ADC and calibrated value.

Vs = 3.3v

ADC resolution = 10bit -> 1024

So, each step = 3.2226 mV

Therefore, 2 steps = 6.445 mV ~= typical output voltage change of ADXL377 for per g variation.

image


Output at low impact:

image

By shaking the sensor with hand or hitting with a rubber pad it gives a low impact and the output stays below 10g. The helmet icon stays in green [lime green indeed]. But if the sensor experiences a free fall or hit by the rubber pad directly on to the sensor surface, the z-axis shows huge variation !!!!


Output at high impact:

image

For higher impact the helmet has changed its color into RED, which indicates an impact detection. I have placed a threshold value of 12g just for demonstration purpose.


But I have got unexpected output / behavior couple of times, where I hit the sensor not so hard but it showed higher values [no way I can produce -31g with that weak hit] image and still the helmet didn't change the color [stays green]!!!

It's weird.... I think it's a bug in my coding, but it's a simple code and if the sensor somehow shows higher values, the helmet has to change its color???? So, I'll try to figure it out later on. Hopefully it's a silly mistake image

image


Circuit Diagram:

image


next step - I'll make the board and mount it into a Head Band to check out the performance.

  • Sign in to reply

Top Comments

  • DAB
    DAB over 10 years ago +1
    Good post. I look forward to seeing your sensor in action. DAB
  • hlipka
    hlipka over 9 years ago in reply to Former Member +1
    Something in you numbers is wrong. The Z voltage is way off with 2V 8this would correspond to about 60g. And then you say the ADC result is the same as the others. Regarding the calibration: the sum of…
Parents
  • hlipka
    hlipka over 9 years ago

    Regarding the calibration: I wrote it for the PSoC4 BLE, and used a ADXL375. So maybe its not really useful to paste my code. The logic I used was:

    1. set the calibration values to 0
    2. read 1024 values for each axis and add them
    3. divide each result by 1024 (shift-left 10 bits) to get the average
    4. store the result in the calibration values
    5. afterwards, when reading values, substract the calibration values from the result
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
Comment
  • hlipka
    hlipka over 9 years ago

    Regarding the calibration: I wrote it for the PSoC4 BLE, and used a ADXL375. So maybe its not really useful to paste my code. The logic I used was:

    1. set the calibration values to 0
    2. read 1024 values for each axis and add them
    3. divide each result by 1024 (shift-left 10 bits) to get the average
    4. store the result in the calibration values
    5. afterwards, when reading values, substract the calibration values from the result
    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
Children
No Data
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