lanselambor hace 10 años
padre
commit
1cdd2899c6

+ 2 - 0
README.md

@@ -7,6 +7,8 @@ Grove sensor 6 Axis Accelerometer And Gyroscope using LSM6DS3
 --------------------- | -------------
 HighLevelExample.ino  | Using class LSM6DS3
 LowLevelExample.ino   | Using class LSM6DS3Core
+Pedometer.ino         | A demo for making a pedometer 
+FreeFallDetect.ino    | Detect object free falling, like a falling football
 
 * API
 

+ 91 - 0
examples/FreeFallDetect/FreeFallDetect.ino

@@ -0,0 +1,91 @@
+/*****************************************************************************/  
+//  FreeFallDetect.ino
+//  Hardware:      Grove - 6-Axis Accelerometer&Gyroscope
+//  Arduino IDE:   Arduino-1.65
+//  Author:        Lambor 
+//  Date:          Nov,2015
+//  Version:       v1.0
+//
+//  Modified by: 
+//  Data:        
+//  Description: 
+//
+//  by www.seeedstudio.com
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+/*******************************************************************************/
+
+#include "SparkFunLSM6DS3.h"
+#include "Wire.h"
+#include "SPI.h"
+
+#define CLEAR_STEP      true
+#define NOT_CLEAR_STEP  false 
+
+//Create a instance of class LSM6DS3
+LSM6DS3 lsm6ds3( I2C_MODE, 0x6A );  //I2C device address 0x6A
+uint16_t detectCount = 0;
+
+void setup() {  
+  Serial.begin(9600);    
+  if( lsm6ds3.begin() != 0 ){
+    Serial.println("Device error");
+  }
+  else{
+      Serial.println("Device OK!");
+  }
+  
+  if(0 != config_free_fall_detect())
+    Serial.println("Fail to configure!");
+  else
+    Serial.println("Success to Configure!");
+}
+
+void loop()
+{
+  uint8_t readDataByte = 0;
+	//Read the wake-up source register
+	lsm6ds3.readRegister(&readDataByte, LSM6DS3_ACC_GYRO_WAKE_UP_SRC);
+	//Mask off the FF_IA bit for free-fall detection
+	readDataByte &= 0x20;	
+  if( readDataByte )
+	{   
+    detectCount ++;
+		Serial.print("Free fall detected!  ");        
+    Serial.println(detectCount);
+	}  
+  delay(10);  
+}
+
+int config_free_fall_detect(void)
+{  
+	uint8_t error = 0;  
+  uint8_t dataToWrite = 0;  
+  
+  dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_200Hz;
+  dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_2g;
+  dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_416Hz;
+  
+  error += lsm6ds3.writeRegister(LSM6DS3_ACC_GYRO_CTRL1_XL, dataToWrite);
+	error += lsm6ds3.writeRegister( LSM6DS3_ACC_GYRO_WAKE_UP_DUR, 0x00 );
+  error += lsm6ds3.writeRegister(LSM6DS3_ACC_GYRO_FREE_FALL, 0x33);
+  error += lsm6ds3.writeRegister( LSM6DS3_ACC_GYRO_MD1_CFG, 0x10 );
+	error += lsm6ds3.writeRegister( LSM6DS3_ACC_GYRO_MD2_CFG, 0x10 );
+  error += lsm6ds3.writeRegister(LSM6DS3_ACC_GYRO_TAP_CFG1, 0x01);
+  
+  return error;
+}
+

+ 1 - 1
examples/HighLevelExample/HighLevelExample.ino

@@ -1,5 +1,5 @@
 /*****************************************************************************/	
-//  BasicExample.ino
+//  HighLevelExample.ino
 //  Hardware:      Grove - 6-Axis Accelerometer&Gyroscope
 //	Arduino IDE:   Arduino-1.65
 //	Author:	       Lambor	

+ 106 - 0
examples/Pedometer/Pedometer.ino

@@ -0,0 +1,106 @@
+/*****************************************************************************/  
+//  Pedometer.ino
+//  Hardware:      Grove - 6-Axis Accelerometer&Gyroscope
+//  Arduino IDE:   Arduino-1.65
+//  Author:        Lambor 
+//  Date:          Nov,2015
+//  Version:       v1.0
+//
+//  Modified by: 
+//  Data:        
+//  Description: 
+//
+//  by www.seeedstudio.com
+//
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License, or (at your option) any later version.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+//
+/*******************************************************************************/
+
+#include "SparkFunLSM6DS3.h"
+#include "Wire.h"
+#include "SPI.h"
+
+#define CLEAR_STEP      true
+#define NOT_CLEAR_STEP  false 
+
+//Create a instance of class LSM6DS3
+LSM6DS3 pedometer( I2C_MODE, 0x6A );  //I2C device address 0x6A
+
+void setup() {  
+  Serial.begin(9600);    
+  if( pedometer.begin() != 0 ){
+    Serial.println("Device error");
+  }
+  else{
+      Serial.println("Device OK!");
+  }
+  
+  //Configure LSM6DS3 as pedometer 
+  if( 0 != config_pedometer(NOT_CLEAR_STEP) )
+  {
+    Serial.println("Configure pedometer fail!");
+  }
+  Serial.println("Success to Configure pedometer!");
+}
+
+void loop()
+{
+  uint8_t dataByte = 0;
+  uint16_t stepCount = 0;
+  
+  pedometer.readRegister(&dataByte, LSM6DS3_ACC_GYRO_STEP_COUNTER_H);
+  stepCount = (dataByte << 8) & 0xFFFF;
+  
+  pedometer.readRegister(&dataByte, LSM6DS3_ACC_GYRO_STEP_COUNTER_L);
+  stepCount |=  dataByte;
+  
+  Serial.print("Step: ");
+  Serial.println(stepCount);
+  
+  delay(500);
+}
+
+//Setup pedometer mode
+int config_pedometer(bool clearStep)
+{
+  uint8_t errorAccumulator = 0;
+	uint8_t dataToWrite = 0;  //Temporary variable
+
+	//Setup the accelerometer******************************
+	dataToWrite = 0; 
+  
+	//  dataToWrite |= LSM6DS3_ACC_GYRO_BW_XL_200Hz;
+	dataToWrite |= LSM6DS3_ACC_GYRO_FS_XL_2g;
+	dataToWrite |= LSM6DS3_ACC_GYRO_ODR_XL_26Hz;
+
+  
+	// Step 1: Configure ODR-26Hz and FS-2g
+	errorAccumulator += pedometer.writeRegister(LSM6DS3_ACC_GYRO_CTRL1_XL, dataToWrite);
+
+	// Step 2: Set bit Zen_G, Yen_G, Xen_G, FUNC_EN, PEDO_RST_STEP(1 or 0)
+  if(clearStep)
+    errorAccumulator += pedometer.writeRegister(LSM6DS3_ACC_GYRO_CTRL10_C, 0x3E);
+  else
+    errorAccumulator += pedometer.writeRegister(LSM6DS3_ACC_GYRO_CTRL10_C, 0x3C);
+  
+  // Step 3:	Enable pedometer algorithm
+	errorAccumulator += pedometer.writeRegister(LSM6DS3_ACC_GYRO_TAP_CFG1, 0x40);
+  
+  //Step 4:	Step Detector interrupt driven to INT1 pin, set bit INT1_FIFO_OVR
+	errorAccumulator += pedometer.writeRegister( LSM6DS3_ACC_GYRO_INT1_CTRL, 0x10 );
+	
+	return errorAccumulator;
+}
+