====== LSM6DS3 IMU ====== このページではLSM6DS3というIMU利用した6軸ジャイロによる姿勢検出を行います. 具体的には下記ページのDocumentationに従ってください. * https://github.com/sparkfun/SparkFun_LSM6DS3_Arduino_Library * データシート:https://cdn.sparkfun.com/assets/learn_tutorials/4/1/6/DM00133076.pdf ===== Madgwick ===== MadwickのFilterを利用するととても簡単にデバイス角度計算ができます. - Arduinoのライブラリ管理から,madgwickと検索しMadgwick: Helpers for MadgwickAHRS algorithmをインストールする. - Exampleに追加される,Madgwick->Visualize101をまずは確認する. ===== Low Power Mode ===== この6軸センサは基本的にスリープで消費電力を落とす,という考えではなく, * Hi performance mode(1.2mA) * normal mode(300,400uA) * low power mode(30-40uA) の状態を分けることで消費電力を落としています.なので例えばデバイスをスリープさせたいときには,6軸センサをlow powerモードにして interruptをONにして,それ以外の機能を寝かせる.という段取りになります. //Error accumulation variable uint8_t errorAccumulator = 0; errorAccumulator += imu.writeRegister(LSM6DS3_ACC_GYRO_CTRL6_G, 0b00010000); errorAccumulator += imu.writeRegister(LSM6DS3_ACC_GYRO_CTRL7_G, 0b10000000); // //Now, write the patched together data // 10h errorAccumulator += imu.writeRegister(LSM6DS3_ACC_GYRO_CTRL1_XL, 0b00010000); // 11h errorAccumulator += imu.writeRegister(LSM6DS3_ACC_GYRO_CTRL2_G, 0b00010000); //Set the ODR bit /* uint8_t dataToWrite; errorAccumulator += imu.readRegister(&dataToWrite, LSM6DS3_ACC_GYRO_CTRL4_C); Serial.println(dataToWrite, BIN); dataToWrite &= ~((uint8_t)LSM6DS3_ACC_GYRO_BW_SCAL_ODR_ENABLED); Serial.println(dataToWrite, BIN); */ // Enable tap detection on X, Y, Z axis, but do not latch output errorAccumulator += imu.writeRegister( LSM6DS3_ACC_GYRO_TAP_CFG1, 0x0E ); // Set tap threshold // Write 0Ch into TAP_THS_6D errorAccumulator += imu.writeRegister( LSM6DS3_ACC_GYRO_TAP_THS_6D, 0x03 ); // Set Duration, Quiet and Shock time windows // Write 7Fh into INT_DUR2 errorAccumulator += imu.writeRegister( LSM6DS3_ACC_GYRO_INT_DUR2, 0x7F ); // Single & Double tap enabled (SINGLE_DOUBLE_TAP = 1) // Write 80h into WAKE_UP_THS errorAccumulator += imu.writeRegister( LSM6DS3_ACC_GYRO_WAKE_UP_THS, 0x80 ); // Single tap interrupt driven to INT1 pin -- enable latch // Write 08h into MD1_CFG errorAccumulator += imu.writeRegister( LSM6DS3_ACC_GYRO_MD1_CFG, 0x08 );