Skip to content

Instantly share code, notes, and snippets.

@pingud98
Created June 20, 2015 14:18
Show Gist options
  • Save pingud98/2f859cd9a8e740ceec1d to your computer and use it in GitHub Desktop.
Save pingud98/2f859cd9a8e740ceec1d to your computer and use it in GitHub Desktop.
Cosmic Pi 10DOF IMU + Temp/Humidity combined readout
// 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