DFROBOT SEN0405 LIS2DW12 三轴加速度计 产品资料 使用教程

您所在的位置:网站首页 jeep多轴加速传感器 DFROBOT SEN0405 LIS2DW12 三轴加速度计 产品资料 使用教程

DFROBOT SEN0405 LIS2DW12 三轴加速度计 产品资料 使用教程

#DFROBOT SEN0405 LIS2DW12 三轴加速度计 产品资料 使用教程| 来源: 网络整理| 查看: 265

三轴加速度计

产品简介

LIS2DW12三轴加速度计是一款超低功耗的线性加速度计,该传感器拥有两个独立的可编程中断及专用内部引擎,可实现超多功能,例如自由落体检测、纵向/横向检测、朝向(6D/4D)检测、可配置的单击/双击识别、运动检测、运动唤醒以实现高级省电等,我们为您提供了以上功能的示例程序,方便您在项目中轻松使用。 该传感器具有±2g /±4g /±8g /±16g的用户可选全刻度,并能够以1.6 Hz至1600 Hz的输出数据速率测量加速度,它内置多种带宽的多种运行模式,您可以按需选择合适的模式。

特性 可选量程:±2g /±4g /±8g /±16g 16位数据输出 两个独立的可编程中断 专用的内部引擎以实现丰富功能:自由落体检测、纵向/横向检测、6D/4D检测、可配置的单击/双击识别、运动检测、运动唤醒以实现高级省电等 技术规格 工作电压:3.3V 工作电流:50 nA(低功耗模式)/0.17mA(高性能模式) 接口方式:I2C/SPI I2C地址:0x19(默认地址)/0x18(可选:SDO引脚拉低选中) 可选标尺:±2g /±4g /±8g /±16g 16位数据输出 频率:1.6Hz~1600Hz 超低噪声:1.3 mg RMS(低功耗模式) 32级FIFO(先进先出缓冲区) 万克高抗撞击能力 ECOPACK®RoHS和“绿色”标准 工作温度:-40℃~+85℃ 模块尺寸:15 x 20(mm) 应用 自由落体检测 运动检测及记录 单击/双击检测 自平衡机器人 飞行器 人体动作识别 空气鼠标 游戏手柄 引脚说明

三轴加速度计 三轴加速度计

序号 丝印 功能描述 1 VCC 5V / 3V3 2 GND GND 3 SCL I2C时钟线 /SPI 时钟线 4 SDA I2C数据线 /SPI 数据线MISO 5 INT2 中断引脚2 6 INT1 中断引脚1 7 CS SPI 片选线 8 SDO I2C地址选择引脚 /SPI数据线MOSI

注意:

所有数据输出电压均为3.3V micro:bit(v1.5版本)的I2C地址与传感器I2C地址0x19冲突,所以请选择0x18 将SDO引脚拉低可切换I2C地址为:0x18

不同通信方式连线提示:

- I2C:0x19(默认)

- I2C:0x18

- SPI

- 中断引脚连接

主板 默认连接引脚 UNO/MEGA2560 D2 Leonardo D3 Micro:bit P0 ESP32/ESP8266/ARDUINO_SAM_ZERO D6 Raspberry Pi GPIO25 M0使用教程

请按接线图所示将传感器与M0(或其它主板)相连接即可。

准备 硬件 1 x Firebeetle Board-M0 1 x LIS2DW12三轴加速度计 若干 杜邦线 软件 Arduino IDE, 点击下载Arduino IDE LIS系列库文件和示例程序

关于如何安装库文件,点击链接

关于如何使用Firebeetle Board-M0,点击链接

样例代码

样例代码1-读取x,y,z轴加速度(getAcceleration.ino) 样例代码2-睡眠唤醒功能(wakeUp.ino) 样例代码3-敲击检测功能(tap.ino) 样例代码4-敲击中断功能(tapInterrupt.ino) 样例代码5-自由落体检测功能(freeFall.ino) 样例代码6-自由落体中断功能(freeFallInterrupt.ino) 样例代码7-运动检测功能(activityDetect.ino) 样例代码8-朝向检测功能(orientation.ino)

主要API接口函数列表

DFRobot_LIS(); /** * @brief Initialize the function * @return true(Succeed)/false(Failed) */ bool begin(void); /** * @brief Get chip id * @return 8 bit serial number */ uint8_t getID(); /** * @brief Enable interrupt * @param source Interrupt pin selection eINT1 = 0,// eINT2,// * @param event Interrupt event selection eXLowerThanTh ,// eXHigherThanTh ,// eYLowerThanTh,// eYHigherThanTh,// eZLowerThanTh,// eZHigherThanTh,// */ void enableInterruptEvent(eInterruptSource_t source, eInterruptEvent_t event); /** * @brief Set measurement range * @param range Range(g) eH3lis200dl_100g, //±100g eH3lis200dl_200g, //±200g eLis331hh_6g = 6,//±6g eLis331hh_12g = 12 //±12g eLis331hh_24g = 24 //±24g @return true(Set successfully)/false(Set failed) */ bool setRange(eRange_t range); /** * @brief Set data measurement rate * @param rate rate(HZ) ePowerDown_0HZ //Measurement off eLowPower_halfHZ //0.5 hz eLowPower_1HZ eLowPower_2HZ eLowPower_5HZ eLowPower_10HZ eNormal_50HZ eNormal_100HZ eNormal_400HZ eNormal_1000HZ */ void setAcquireRate(ePowerMode_t rate); /** * @brief Set data filtering mode * @param mode Four modes eCutOffMode1 = 0, eCutOffMode2, eCutOffMode3, eCutOffMode4, eShutDown, no filering eg: Select eCutOffMode1 in 50HZ, and the filtered frequency is 1HZ *|---------------------------High-pass filter cut-off frequency configuration-----------------------------| *|--------------------------------------------------------------------------------------------------------| *| | ft [Hz] | ft [Hz] | ft [Hz] | ft [Hz] | *| mode |Data rate = 50 Hz| Data rate = 100 Hz | Data rate = 400 Hz | Data rate = 1000 Hz | *|--------------------------------------------------------------------------------------------------------| *| eCutOffMode1 | 1 | 2 | 8 | 20 | *|--------------------------------------------------------------------------------------------------------| *| eCutOffMode2 | 0.5 | 1 | 4 | 10 | *|--------------------------------------------------------------------------------------------------------| *| eCutOffMode3 | 0.25 | 0.5 | 2 | 5 | *|--------------------------------------------------------------------------------------------------------| *| eCutOffMode4 | 0.125 | 0.25 | 1 | 2.5 | *|--------------------------------------------------------------------------------------------------------| */ void setHFilterMode(eHighPassFilter_t mode); /** * @brief Set the threshold of interrupt source 1 interrupt * @param threshold The threshold we set before is within measurement range(unit:g) */ void setInt1Th(uint8_t threshold); /** * @brief Set interrupt source 2 interrupt generation threshold * @param threshold The threshold we set before is within measurement range(unit:g) */ void setInt2Th(uint8_t threshold); /** * @brief Enable sleep wake function * @param enable true(enable)\false(disable) * @return false Indicate enable failed/true Indicate enable successful */ bool enableSleep(bool enable); /** * @brief Check whether the interrupt event'event' is generated in interrupt 1 * @param event Interrupt event eXLowerThanTh ,// eXHigherThanTh ,// eYLowerThanTh,// eYHigherThanTh,// eZLowerThanTh,// eZHigherThanTh,// * @return true This event generated false This event not generated */ bool getInt1Event(eInterruptEvent_t event); /** * @brief Check whether the interrupt event'event' is generated in interrupt 2 * @param event Interrupt event eXLowerThanTh ,// eXHigherThanTh ,// eYLowerThanTh,// eYHigherThanTh,// eZLowerThanTh,// eZHigherThanTh,// * @return true This event generated false This event not generated */ bool getInt2Event(eInterruptEvent_t event); /** * @brief Get the acceleration in the x direction * @return acceleration from x */ int32_t readAccX(); /** * @brief Get the acceleration in the y direction * @return acceleration from y */ int32_t readAccY(); /** * @brief Get the acceleration in the z direction * @return acceleration from z */ int32_t readAccZ(); /** * @brief Get the acceleration in the three directions of xyz * @param accx Store the variable of acceleration in x direction * @param accy Store the variable of acceleration in y direction * @param accz Store the variable of acceleration in z direction * @return true(Get data successfully/false(Data not ready) */ bool getAcceFromXYZ(int32_t &accx,int32_t &accy,int32_t &accz); /** * @brief Get whether the sensor is in sleep mode * @return true(In sleep mode)/false(In normal mode) */ bool getSleepState(); /** * @brief Set the sleep state flag * @param into true(Flag the current mode as sleep mode) false(Flag the current mode as normal mode) */ void setSleepFlag(bool into); 样例代码1-读取x,y,z轴加速度(getAcceleration.ino) 选择getAcceleration.ino

烧录程序 /**! * @file getAcceleration.ino * @brief Get the acceleration in the three directions of xyz, the range can be ±2g, ±4g, ±8g or ±16g, set by the setRange() function * @n In this example, the continuous measurement mode is selected by default -- the acceleration data will be measured continuously according to the measuring rate. * @n You can also use the single data conversion on demand mode 1. You need to select a suitable conversion mode in the setPowerMode() function * @n 2. Fill in the setDataRate() function with the eSetSwTrig parameter * @n 3. Request a measurement by the demandData() function * @n When using SPI, chip select pin can be modified by changing the value of LIS2DW12_CS * @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com) * @licence The MIT License (MIT) * @author [fengli]([email protected]) * @version V1.0 * @date 2021-01-16 * @get from https://www.dfrobot.com * @https://github.com/DFRobot/DFRobot_LIS */ #include //When using I2C communication, use the following program to construct an object by DFRobot_LIS2DW12_I2C /*! * @brief Constructor * @param pWire I2c controller * @param addr I2C address(0x18/0x19) */ //DFRobot_LIS2DW12_I2C acce(&Wire,0x18); DFRobot_LIS2DW12_I2C acce; //When using SPI communication, use the following program to construct an object by DFRobot_LIS2DW12_SPI #if defined(ESP32) || defined(ESP8266) #define LIS2DW12_CS D3 #elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO) #define LIS2DW12_CS 3 #elif (defined NRF5) #define LIS2DW12_CS 2 //The pin on the development board with the corresponding silkscreen printed as P2 #endif /*! * @brief Constructor * @param cs Chip selection pinChip selection pin * @param spi SPI controller */ //DFRobot_LIS2DW12_SPI acce(/*cs = */LIS2DW12_CS,&SPI); //DFRobot_LIS2DW12_SPI acce(/*cs = */LIS2DW12_CS); void setup(void){ Serial.begin(9600); while(!acce.begin()){ Serial.println("Communication failed, check the connection and I2C address setting when using I2C communication."); delay(1000); } Serial.print("chip id : "); Serial.println(acce.getID(),HEX); //Chip soft reset acce.softReset(); //Set whether to collect data continuously acce.continRefresh(true); /**! Set the sensor data collection rate: eRate_0hz // eRate_1hz6 // eRate_12hz5 // eRate_25hz eRate_50hz eRate_100hz eRate_200hz eRate_400hz // eRate_800hz // eRate_1k6hz // eSetSwTrig // */ acce.setDataRate(DFRobot_LIS2DW12::eRate_50hz); /**! Set the sensor measurement range: e2_g // e4_g // e8_g // e16_g /< ±16g>/ */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Filter settings: eLPF (Low pass filter) eHPF (High pass filter) */ acce.setFilterPath(DFRobot_LIS2DW12::eLPF); /**! Set bandwidth: eRateDiv_2 // eRateDiv_4 /* eRateDiv_10 // eRateDiv_20 /< Rate/20 (HP/LP)>/ */ acce.setFilterBandwidth(DFRobot_LIS2DW12::eRateDiv_4); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setFilterBandwidth(DFRobot_LIS2DW12::eRateDiv_4); /** Wake-up duration: when using the detection mode of eDetectAct in the setActMode() function, it will collect data at a normal rate after the chip is awakened. Then after a period of time, the chip will continue to hibernate, collecting data at a frequency of 12.5hz. dur (0 ~ 3) time = dur * (1/Rate)(unit:s) | An example of a linear relationship between an argument and time | |------------------------------------------------------------------------------------------------------------------------| | | | | | | | Data rate | 25 Hz | 100 Hz | 400 Hz | = 800 Hz | |------------------------------------------------------------------------------------------------------------------------| | time |dur*(1s/25)= dur*40ms| dur*(1s/100)= dur*10ms | dur*(1s/400)= dur*2.5ms | dur*(1s/800)= dur*1.25ms | |------------------------------------------------------------------------------------------------------------------------| */ acce.setWakeUpDur(/*dur = */2); //Set wakeup threshold, when the acceleration change exceeds this value, the eWakeUp event will be triggered, unit:mg //The value is within the range. acce.setWakeUpThreshold(/*threshold = */0.2); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit // */ acce.setRange(DFRobot_LIS2DW12::e2_g); /**! Set power mode: eHighPerformance_14bit // eContLowPwr4_14bit // eContLowPwr3_14bit // eContLowPwr2_14bit /


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3