An fully working IMU-Filter and Sensor drivers for the 10DOF-Board over I2C. All in one simple class. Include, calibrate sensors, call read, get angles. (3D Visualisation code for Python also included) Sensors: L3G4200D, ADXL345, HMC5883, BMP085

Dependencies:   mbed

Committer:
maetugr
Date:
Thu Aug 29 13:52:30 2013 +0000
Revision:
4:f62337b907e5
Parent:
1:798db5deb8b9
The Altitude Sensor is now implemented, it's really 10DOF now ;); TODO: Autocalibration

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maetugr 1:798db5deb8b9 1 #include "IMU_10DOF.h"
maetugr 1:798db5deb8b9 2
maetugr 4:f62337b907e5 3 IMU_10DOF::IMU_10DOF(PinName sda, PinName scl) : Gyro(sda, scl), Acc(sda, scl), Comp(sda, scl), Alt(sda,scl)
maetugr 1:798db5deb8b9 4 {
maetugr 1:798db5deb8b9 5 dt = 0;
maetugr 1:798db5deb8b9 6 dt_sensors = 0;
maetugr 1:798db5deb8b9 7 time_for_dt = 0;
maetugr 1:798db5deb8b9 8 time_for_dt_sensors = 0;
maetugr 4:f62337b907e5 9
maetugr 4:f62337b907e5 10 angle = Filter.angle; // initialize array pointer
maetugr 1:798db5deb8b9 11
maetugr 1:798db5deb8b9 12 LocalTimer.start();
maetugr 1:798db5deb8b9 13 }
maetugr 1:798db5deb8b9 14
maetugr 4:f62337b907e5 15 void IMU_10DOF::readAngles()
maetugr 1:798db5deb8b9 16 {
maetugr 1:798db5deb8b9 17 time_for_dt_sensors = LocalTimer.read(); // start time for measuring sensors
maetugr 1:798db5deb8b9 18 Gyro.read(); // reading sensor data
maetugr 1:798db5deb8b9 19 Acc.read();
maetugr 1:798db5deb8b9 20 Comp.read();
maetugr 1:798db5deb8b9 21 dt_sensors = LocalTimer.read() - time_for_dt_sensors; // stop time for measuring sensors
maetugr 1:798db5deb8b9 22
maetugr 1:798db5deb8b9 23 // meassure dt for the filter
maetugr 1:798db5deb8b9 24 dt = LocalTimer.read() - time_for_dt; // time in s since last loop
maetugr 1:798db5deb8b9 25 time_for_dt = LocalTimer.read(); // set new time for next measurement
maetugr 1:798db5deb8b9 26
maetugr 1:798db5deb8b9 27 Filter.compute(dt, Gyro.data, Acc.data, Comp.data);
maetugr 4:f62337b907e5 28 }
maetugr 4:f62337b907e5 29
maetugr 4:f62337b907e5 30 void IMU_10DOF::readAltitude()
maetugr 4:f62337b907e5 31 {
maetugr 4:f62337b907e5 32 Alt.read();
maetugr 4:f62337b907e5 33 temperature = Alt.Temperature; // copy all resulting measurements
maetugr 4:f62337b907e5 34 pressure = Alt.Pressure;
maetugr 4:f62337b907e5 35 altitude = Alt.Altitude;
maetugr 1:798db5deb8b9 36 }