Data Collection Firmware
The following is Code Written in C/C++ for the Arduino microcontroller to retrieve data from the IMUs on the belt.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_LSM9DS0.h>
#include <Adafruit_Sensor.h>
//#include "SD.h"
//#include "RTClib.h"
#define LSM9DS0_XC_CS1 22
#define LSM9DS0_GYRO_CS 23
Adafruit_LSM9DS0 lsm1 = Adafruit_LSM9DS0(LSM9DS0_XC_CS1, LSM9DS0_GYRO_CS);
#define LSM9DS0_XC_CS2 24
Adafruit_LSM9DS0 lsm2 = Adafruit_LSM9DS0(LSM9DS0_XC_CS2, LSM9DS0_GYRO_CS);
#define LSM9DS0_XC_CS3 26
Adafruit_LSM9DS0 lsm3 = Adafruit_LSM9DS0(LSM9DS0_XC_CS3, LSM9DS0_GYRO_CS);
void setupSensor1()
{
lsm1.setupAccel(lsm1.LSM9DS0_ACCELRANGE_2G);
lsm1.setupMag(lsm1.LSM9DS0_MAGGAIN_2GAUSS);
lsm1.setupGyro(lsm1.LSM9DS0_GYROSCALE_245DPS);
}
void setupSensor2()
{
lsm2.setupAccel(lsm2.LSM9DS0_ACCELRANGE_2G);
lsm2.setupMag(lsm2.LSM9DS0_MAGGAIN_2GAUSS);
lsm2.setupGyro(lsm2.LSM9DS0_GYROSCALE_245DPS);
}
void setupSensor3()
{
lsm3.setupAccel(lsm3.LSM9DS0_ACCELRANGE_2G);
lsm3.setupMag(lsm3.LSM9DS0_MAGGAIN_2GAUSS);
lsm3.setupGyro(lsm3.LSM9DS0_GYROSCALE_245DPS);
}
void setup()
{
Serial.begin(9600);
Serial.println(F("LSM9DS0 9DOF Sensor Test")); Serial.println("");
if(!lsm1.begin())
{
Serial.println(F("Ooops, no LSM9DS0 1 detected ... Check your wiring or I2C ADDR!"));
while(1);
}
else if(!lsm2.begin())
{
Serial.println(F("Ooops, no LSM9DS0 2 detected ... Check your wiring or I2C ADDR!"));
while(1);
}
else if(!lsm3.begin())
{
Serial.println(F("Ooops, no LSM9DS0 3 detected ... Check your wiring or I2C ADDR!"));
while(1);
}
Serial.println(F("Found all LSM9DS0 9DOF"));
setupSensor1();
setupSensor2();
setupSensor3();
}
void loop()
{
sensors_event_t accel1, mag1, gyro1, temp1;
sensors_event_t accel2, mag2, gyro2, temp2;
sensors_event_t accel3, mag3, gyro3, temp3;
lsm1.getEvent(&accel1, &mag1, &gyro1, &temp1);
lsm2.getEvent(&accel2, &mag2, &gyro2, &temp2);
lsm3.getEvent(&accel3, &mag3, &gyro3, &temp3);
//sensor1
Serial.print("Sensor1 Accel X: "); Serial.print(accel1.acceleration.x); Serial.print(" ");
Serial.print(" \tY: "); Serial.print(accel1.acceleration.y); Serial.print(" ");
Serial.print(" \tZ: "); Serial.print(accel1.acceleration.z); Serial.print(" \tm/s^2\t");
//sensor2
Serial.print("Sensor2 Accel X: "); Serial.print(accel2.acceleration.x); Serial.print(" ");
Serial.print(" \tY: "); Serial.print(accel2.acceleration.y); Serial.print(" ");
Serial.print(" \tZ: "); Serial.print(accel2.acceleration.z); Serial.print(" \tm/s^2\t");
//sensor3
Serial.print("Sensor3 Accel X: "); Serial.print(accel3.acceleration.x);Serial.print(" ");
Serial.print(" \tY: "); Serial.print(accel3.acceleration.y); Serial.print(" ");
Serial.print(" \tZ: "); Serial.print(accel3.acceleration.z); Serial.println(" \tm/s^2\t");
}