Things used in this project

Hardware components:
Photon new
Particle Photon
Adafruit ADXL377
12002 04
Breadboard (generic)
11026 02
Jumper wires (generic)
Hand tools and fabrication machines:
09507 01
Soldering iron (generic)


Adxl377 circuit 6uj16idw7j
You could setup this circuit using any Digital Pin that you want with an external LED and Resistor.
Led circuit mx8ubcw9y6


This powers the sensor and takes data to compare between each other to find specific values.
// Make sure these two variables are correct for your setup
int scale = 200; //200 (±200g) for ADXL377
boolean micro_is_5V = false; // Set to true if using a 5V microcontroller such as the Arduino Uno, false if using a 3.3V microcontroller, this affects the interpretation of the sensor data
float magnitude = 0; // defined variables
float xtermb,xterma;
float ytermb,yterma;
float ztermb,zterma;
float magxyzb,magxyza;
float magdiff,actualmagdiff;

#include "math.h" // to use special math functions

void setup()
  // Initialize serial communication at 115200 baud

// Read, scale, and print accelerometer data
void loop()
  // Get raw accelerometer data for each axis
  int rawXb = analogRead(A0);
  int rawYb = analogRead(A1);
  int rawZb = analogRead(A2);
  // Scale accelerometer ADC readings into common units
  // Scale map depends on if using a 5V or 3.3V microcontroller
  float scaledXb, scaledYb, scaledZb,scaledmagnitudeb; // Scaled values for each axis
  delay(1);// Allows a reference data tobe obtained
  // Get raw accelerometer data for each axis after delay to compare data
  int rawXa = analogRead(A0);
  int rawYa = analogRead(A1);
  int rawZa = analogRead(A2);
  // Scale accelerometer ADC readings into common units
  // Scale map depends on if using a 5V or 3.3V microcontroller
  float scaledXa, scaledYa, scaledZa,scaledmagnitudea; // Scaled values for each axis
  if (micro_is_5V) // Microcontroller runs off 5V
    scaledXb = mapf(rawXb, 0, 675, -scale, scale); // 3.3/5 * 1023 =~ 675
    scaledYb = mapf(rawYb, 0, 675, -scale, scale);
    scaledZb = mapf(rawZb, 0, 675, -scale, scale);
  else // Microcontroller runs off 3.3V (For this particular experiment)
    scaledXb = mapf(rawXb, 0, 4095, -scale, scale); // Before Hit Comparsion Data
    scaledYb = mapf(rawYb, 0, 4095, -scale, scale);
    scaledZb = mapf(rawZb, 0, 4095, -scale, scale);
    // This is to find magnitude Before Hit
    xtermb= (scaledXb*scaledXb); 
    ytermb= (scaledYb*scaledYb);
    ztermb= (scaledZb*scaledZb);
    magxyzb= (xtermb+ytermb+ztermb);
    scaledmagnitudeb= sqrt(magxyzb);
    scaledXa = mapf(rawXa, 0, 4095, -scale, scale); // After Hit Comparsion Data
    scaledYa = mapf(rawYa, 0, 4095, -scale, scale);
    scaledZa = mapf(rawZa, 0, 4095, -scale, scale);
    // This is to find magnitude After Hit
    xterma= (scaledXa*scaledXa);
    yterma= (scaledYa*scaledYa);
    zterma= (scaledZa*scaledZa);
    magxyza= (xterma+yterma+zterma);
    scaledmagnitudea= sqrt(magxyza);
   // Print out scaled X,Y,Z accelerometer readings Before Hit
  Serial.print("X Vector Before: "); Serial.print(scaledXb); Serial.println(" g");
  Serial.print("Y Vector Before: "); Serial.print(scaledYb); Serial.println(" g");
  Serial.print("Z Vector Before: "); Serial.print(scaledZb); Serial.println(" g");
  Serial.print("Magnitude Before: "); Serial.print(scaledmagnitudeb); Serial.println(" g"); // Calculate Before Magnitude
  // Print out scaled X,Y,Z accelerometer readings After Hit
  Serial.print("X Vector After: "); Serial.print(scaledXa); Serial.println(" g");
  Serial.print("Y Vector After: "); Serial.print(scaledYa); Serial.println(" g");
  Serial.print("Z Vector After: "); Serial.print(scaledZa); Serial.println(" g");
  Serial.print("Magnitude After: "); Serial.print(scaledmagnitudea); Serial.println(" g"); // Calculated After Magnitude
  magdiff=(scaledmagnitudeb-scaledmagnitudea); // This takes difference in two readings
  if ( magdiff < 0 ) // Loop gives absolute of reading, this is final magnitude
  actualmagdiff = -magdiff;
  actualmagdiff = magdiff;
  // Prints out Final or Actual Mantiude difference
  Serial.print("Actual Magnitude: "); Serial.print(actualmagdiff,5 ); Serial.println(" g");//calculated magnitude
    if ( actualmagdiff > 98 ) // This sets G-Force Threshold to compare and publish

  Particle.publish("516Shoemake318", String(actualmagdiff)); // Publishes data
  delay(1000); // Delays to prevent crash
  actualmagdiff = actualmagdiff; // Just a way to end loop
  delay(3); // Minimum delay before comparsion loop starts over

// Same functionality as Arduino's standard map function, except using floats
float mapf(float x, float in_min, float in_max, float out_min, float out_max)
 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
This Photon code is meant to alert coaches for injury by flashing a LED.
int led= D7; // Picks LED Pin

void setup() {
    pinMode(led, OUTPUT); // Pin starts out off
    digitalWrite(led, LOW);
    Particle.subscribe("516Shoemake318", impact); // Subscribe if event happens when threshold is met


void impact(const char *event, const char *data) // Tells LED to light up for 3 seconds and turn off
    digitalWrite(led, HIGH);
digitalWrite(led, LOW);


Timothy Shoemake
1 project • 0 followers
Andrew Saville
1 project • 0 followers


Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback


Add projectSign up / Login