Created
June 20, 2015 14:18
-
-
Save pingud98/2f859cd9a8e740ceec1d to your computer and use it in GitHub Desktop.
Cosmic Pi 10DOF IMU + Temp/Humidity combined readout
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// HTU21D-F is on Arduino Due I2C Bus 2, followed the guidance on forum.arduino.cc/index.php?topic=216359.0 to make it work | |
//modifications to HTU21DF.h and .cpp not included in this file. Also commented out delay.h as it's AVR not ARM. | |
#include <Adafruit_Sensor.h> | |
#include <Adafruit_L3GD20_U.h> | |
#include <Adafruit_BMP085_U.h> | |
#include <Adafruit_LSM303_U.h> | |
#include <Adafruit_10DOF.h> | |
#include <Adafruit_HTU21DF.h> | |
#include <Wire.h> | |
/* Assign a unique ID to the sensors */ | |
Adafruit_10DOF dof = Adafruit_10DOF(); | |
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(30301); | |
Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(30302); | |
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(18001); | |
Adafruit_HTU21DF htu = Adafruit_HTU21DF(); | |
/* Update this with the correct SLP for accurate altitude measurements */ | |
float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA; | |
/**************************************************************************/ | |
/*! | |
@brief Initialises all the sensors used by this example | |
*/ | |
/**************************************************************************/ | |
void initSensors() | |
{ | |
if(!accel.begin()) | |
{ | |
/* There was a problem detecting the LSM303 ... check your connections */ | |
Serial.println(F("Ooops, no LSM303 detected ... Check your wiring!")); | |
while(1); | |
} | |
if(!mag.begin()) | |
{ | |
/* There was a problem detecting the LSM303 ... check your connections */ | |
Serial.println("Ooops, no LSM303 detected ... Check your wiring!"); | |
while(1); | |
} | |
if(!bmp.begin()) | |
{ | |
/* There was a problem detecting the BMP180 ... check your connections */ | |
Serial.println("Ooops, no BMP180 detected ... Check your wiring!"); | |
while(1); | |
} | |
if (!htu.begin()) { | |
Serial.println("Couldn't find HTU21DF sensor!"); | |
while (1); | |
} | |
} | |
/**************************************************************************/ | |
/*! | |
*/ | |
/**************************************************************************/ | |
void setup(void) | |
{ | |
Serial.begin(115200); | |
Serial.println(F("Adafruit 10 DOF Pitch/Roll/Heading Example with Humidity")); Serial.println(""); | |
/* Initialise the sensors */ | |
initSensors(); | |
} | |
/**************************************************************************/ | |
/*! | |
@brief Constantly check the roll/pitch/heading/altitude/temperature | |
*/ | |
/**************************************************************************/ | |
void loop(void) | |
{ | |
sensors_event_t accel_event; | |
sensors_event_t mag_event; | |
sensors_event_t bmp_event; | |
sensors_vec_t orientation; | |
/* Calculate pitch and roll from the raw accelerometer data */ | |
accel.getEvent(&accel_event); | |
if (dof.accelGetOrientation(&accel_event, &orientation)) | |
{ | |
/* 'orientation' should have valid .roll and .pitch fields */ | |
Serial.println("Data dump from raw sensors"); | |
Serial.print(F("Roll: ")); | |
Serial.print(orientation.roll); | |
Serial.print(F("; ")); | |
Serial.print(F("Pitch: ")); | |
Serial.print(orientation.pitch); | |
Serial.println(F("; ")); | |
Serial.print("GravX:"); | |
Serial.println(accel_event.acceleration.x); | |
Serial.print("Gravy:"); | |
Serial.println(accel_event.acceleration.y); | |
Serial.print("Gravz:"); | |
Serial.println(accel_event.acceleration.z); | |
} | |
/* Calculate the heading using the magnetometer */ | |
mag.getEvent(&mag_event); | |
if (dof.magGetOrientation(SENSOR_AXIS_Z, &mag_event, &orientation)) | |
{ | |
/* 'orientation' should have valid .heading data now */ | |
Serial.print(F("Heading: ")); | |
Serial.print(orientation.heading); | |
Serial.println(F("; ")); | |
Serial.print("Magx:"); | |
Serial.println(mag_event.magnetic.x); | |
Serial.print("Magy:"); | |
Serial.println(mag_event.magnetic.y); | |
Serial.print("Magz:"); | |
Serial.println(mag_event.magnetic.z); | |
} | |
/* Calculate the altitude using the barometric pressure sensor */ | |
bmp.getEvent(&bmp_event); | |
if (bmp_event.pressure) | |
{ | |
/* Get ambient temperature in C */ | |
float temperature; | |
bmp.getTemperature(&temperature); | |
/* Convert atmospheric pressure, SLP and temp to altitude */ | |
Serial.print(F("Alt: ")); | |
Serial.print(bmp.pressureToAltitude(seaLevelPressure, | |
bmp_event.pressure, | |
temperature)); | |
Serial.println(F(" m; ")); | |
/* Display the temperature */ | |
Serial.print(F("Temp1: ")); | |
Serial.print(temperature); | |
Serial.println(F(" C")); | |
Serial.print("Temp2: "); Serial.println(htu.readTemperature()); | |
Serial.print("Hum: "); Serial.println(htu.readHumidity()); | |
} | |
Serial.println(F("")); | |
delay(1000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment