Using LIS331 with arduino MEGA

Hello,
My name is Tom, I am doing a project (high school- final project) that includes using an Arduino and some sensors. One of them is an Accelerometer. The project is about Parkinson's disease - I want to detect and monitor tremors with the Accelerometer....
I bought two products (both SparkFun) - LIS331 & MMA8452Q.
The LIS331 is working fine with a code that I found (which ill add).
The MMA8452Q isn't working - I hooked it up and found some codes but it never showed any values.

So I have several requests and questions :slight_smile:

  1. I do not know much about Arduino & sensors, therefore I would really appreciate if someone will post a good tutorial that explains how accelerometers work and specifically the one's I bought .....

  1. I used the following code:

#include <LIS331.h>
#include <Wire.h>

LIS331 lis;
int val;

void setup() {
Serial.begin(9600);
lis.begin();
}
void loop() {
val = lis.getXValue();
Serial.print(val);
Serial.print("\t");
val = lis.getYValue();
Serial.print(val);
Serial.print("\t");
val = lis.getZValue();
Serial.print(val);
Serial.println();
}

I understand how the code works but I honestly have no ideas what the values/output represents....
So if anyone knows what it means some guidance would really really help me :stuck_out_tongue:

*Ill include the file with the library


  1. If anyone knows a good code & hookup Guide for the MMA8452 that actually works :frowning:

Any help would be very much appreciated :slight_smile:
Thanks, Tom

LIS331.h (2.72 KB)

LIS331.cpp (5.83 KB)

AccelerometerValues.ino (334 Bytes)

The data sheet for the accelerometer will tell you what the measurements mean. For the LIS331, start by reading section 2.5.1.

For the MMA8452Q, post the code (using code tags) that doesn't work, and tell us how you wired it and what actually happens when you run the code.

When joining a new forum, it is always a good idea to read the "How to use this forum" post.

Hello,
My name is Tom, I am doing a project (high school- final project) that includes using an Arduino and some sensors - One of them is an Accelerometer. The project is about Parkinson's disease - I want to detect and monitor tremors with the Accelerometer....

I bought two products (both SparkFun) - LIS331 & MMA8452Q.
The LIS331 is working fine with a code that I found (which ill add).
The MMA8452Q isn't working - I hooked it up and found some codes but it never showed any values.

So I have several requests and questions :stuck_out_tongue:

  1. I used the following code for the LIS331:
#include <LIS331.h>
#include <Wire.h>

LIS331 lis;
int val;

void setup() {
  Serial.begin(9600);
  lis.begin();
}
void loop() {
  val = lis.getXValue();
  Serial.print(val);
  Serial.print("\t");
  val = lis.getYValue();
  Serial.print(val);
  Serial.print("\t");
  val = lis.getZValue();
  Serial.print(val);
  Serial.println();
}

*Ill include the library as an attachment

I understand how the code works but I honestly have no ideas what the values/output represents....
I even tried reading the datasheet and I still don't understand what I get from the code and how I can use it to detect movement.....

---------------------------------------------------------------------------------------------------------------------------

  1. I tried hooking up the MMA4852Q with the hooking up guide of sprakfun -

https://learn.sparkfun.com/tutorials/mma8452q-accelerometer-breakout-hookup-guide?_ga=1.26243133.1813833853.1450790034

/******************************************************************************
MMA8452Q_Basic.ino
SFE_MMA8452Q Library Basic Example Sketch
Jim Lindblom @ SparkFun Electronics
Original Creation Date: June 3, 2014
https://github.com/sparkfun/MMA8452_Accelerometer

This sketch uses the SFE_MMA8452Q library to initialize the
accelerometer, and stream values from it.

Hardware hookup:
  Arduino --------------- MMA8452Q Breakout
    3.3V  ---------------     3.3V
    GND   ---------------     GND
  SDA (A4) --\/330 Ohm\/--    SDA
  SCL (A5) --\/330 Ohm\/--    SCL

The MMA8452Q is a 3.3V max sensor, so you'll need to do some 
level-shifting between the Arduino and the breakout. Series
resistors on the SDA and SCL lines should do the trick.

Development environment specifics:
	IDE: Arduino 1.0.5
	Hardware Platform: Arduino Uno

This code is beerware; if you see me (or any other SparkFun employee) at the
local, and you've found our code helpful, please buy us a round!

Distributed as-is; no warranty is given.
******************************************************************************/
#include <Wire.h> // Must include Wire library for I2C
#include <SFE_MMA8452Q.h> // Includes the SFE_MMA8452Q library

// Begin using the library by creating an instance of the MMA8452Q
//  class. We'll call it "accel". That's what we'll reference from
//  here on out.
MMA8452Q accel;

// The setup function simply starts serial and initializes the
//  accelerometer.
void setup()
{
  Serial.begin(9600);
  Serial.println("MMA8452Q Test Code!");
  
  // Choose your adventure! There are a few options when it comes
  // to initializing the MMA8452Q:
  //  1. Default init. This will set the accelerometer up
  //     with a full-scale range of +/-2g, and an output data rate
  //     of 800 Hz (fastest).
  accel.init();
  //  2. Initialize with FULL-SCALE setting. You can set the scale
  //     using either SCALE_2G, SCALE_4G, or SCALE_8G as the value.
  //     That'll set the scale to +/-2g, 4g, or 8g respectively.
  //accel.init(SCALE_4G); // Uncomment this out if you'd like
  //  3. Initialize with FULL-SCALE and DATA RATE setting. If you
  //     want control over how fast your accelerometer produces
  //     data use one of the following options in the second param:
  //     ODR_800, ODR_400, ODR_200, ODR_100, ODR_50, ODR_12,
  //     ODR_6, or ODR_1. 
  //     Sets to 800, 400, 200, 100, 50, 12.5, 6.25, or 1.56 Hz.
  //accel.init(SCALE_8G, ODR_6);
}

// The loop function will simply check for new data from the
//  accelerometer and print it out if it's available.
void loop()
{
  // Use the accel.available() function to wait for new data
  //  from the accelerometer.
  if (accel.available())
  {
    // First, use accel.read() to read the new variables:
    accel.read();
    
    // accel.read() will update two sets of variables. 
    // * int's x, y, and z will store the signed 12-bit values 
    //   read out of the accelerometer.
    // * floats cx, cy, and cz will store the calculated 
    //   acceleration from those 12-bit values. These variables 
    //   are in units of g's.
    // Check the two function declarations below for an example
    // of how to use these variables.
    printCalculatedAccels();
    //printAccels(); // Uncomment to print digital readings
    
    // The library also supports the portrait/landscape detection
    //  of the MMA8452Q. Check out this function declaration for
    //  an example of how to use that.
    printOrientation();
    
    Serial.println(); // Print new line every time.
  }
}

// The function demonstrates how to use the accel.x, accel.y and
//  accel.z variables.
// Before using these variables you must call the accel.read()
//  function!
void printAccels()
{
  Serial.print(accel.x, 3);
  Serial.print("\t");
  Serial.print(accel.y, 3);
  Serial.print("\t");
  Serial.print(accel.z, 3);
  Serial.print("\t");
}

// This function demonstrates how to use the accel.cx, accel.cy,
//  and accel.cz variables.
// Before using these variables you must call the accel.read()
//  function!
void printCalculatedAccels()
{ 
  Serial.print(accel.cx, 3);
  Serial.print("\t");
  Serial.print(accel.cy, 3);
  Serial.print("\t");
  Serial.print(accel.cz, 3);
  Serial.print("\t");
}

// This function demonstrates how to use the accel.readPL()
// function, which reads the portrait/landscape status of the
// sensor.
void printOrientation()
{
  // accel.readPL() will return a byte containing information
  // about the orientation of the sensor. It will be either
  // PORTRAIT_U, PORTRAIT_D, LANDSCAPE_R, LANDSCAPE_L, or
  // LOCKOUT.
  byte pl = accel.readPL();
  switch (pl)
  {
  case PORTRAIT_U:
    Serial.print("Portrait Up");
    break;
  case PORTRAIT_D:
    Serial.print("Portrait Down");
    break;
  case LANDSCAPE_R:
    Serial.print("Landscape Right");
    break;
  case LANDSCAPE_L:
    Serial.print("Landscape Left");
    break;
  case LOCKOUT:
    Serial.print("Flat");
    break;
  }
}

And it just showed nothing :

This is how I hooked it up:

*If you are wondering - I used two pairs of resistors (220 & 100 ohm each) because I didn't have a 330 ohm resistors.

Am I doing something wrong? because I am pretty hopeless......

Thanks in advance,
Tom

LIS331.h (2.72 KB)

LIS331.cpp (5.83 KB)

AccelerometerValues.ino (334 Bytes)

Do not double post.

I posted again because you said my post wasn't appropriate (not according to the forum rules) & because you said I should post pictures of my wiring.....

I really need help and I posted according to the rules :confused:

Continue the same thread, or edit a post.

Did you read the data sheet section explaining how to interpret the LIS331 data?

I read 2.5.1 (sensitivity) and I can't say I understood what it meant.
I can start by saying that I don't know what "gain" means....
however, I did understand that the value that they want me to find there ("sensitivity value" ?) can be achieved by noting the output of a certain axis when its pointed towards the earth and then the opposite. afterwards I should know the "sensitivity" by calculating the difference between the two values.

As I said, I still don't understand what it represents (the sensitivity) and how I can use it for my project.

thanks again :slight_smile:

If the Z axis is pointing straight down (for 1 g acceleration), and the Z value reads 497, then the sensitivity is 497 = 1g.

It shows -6000 (approximately) when I point the Z axis straight down......

This is the axis indicator:

This is how I pointed it:

*the picture is rotated but the Z axis points downwords

so it means that 6000 = 1g?
It doesn't sound right......

It doesn't sound right......

Why not?
What gain setting are you using?
What does the data sheet say?
What happens when you point other axes down, up, etc.?
In other words, use your head!