产品简介
H3LIS200DL三轴加速度计是一款低功耗低噪声的高性能线性大量程加速度计,该传感器具有超低功耗工作模式,模块的智能睡眠唤醒功能可以实现高级省电,且该传感器内置2个独立的可编程中断发生器,用户可自定义中断事件实现中断唤醒等。该传感器可选量程为±100g和±200g,并能够以0.5 Hz至1 kHz的输出数据速率测量加速度。
特性
- 可选大量程±100g/±200g
- 两个独立的可编程中断
- 智能的睡眠唤醒功能可实现高级省电
技术规格
- 工作电压:3.3V
- 工作电流:最低10uA(低功耗模式) / 0.3mA-0.4mA(正常模式)
- 接口方式:I2C/SPI
- I2C地址:0x19(默认地址)/0x18(可选)
- 可选标尺:±100g/±200g
- 频率:0.5Hz~1KHz
- 8位数据输出
- 睡眠唤醒功能
- 万克高抗撞击能力
- ECOPACK®RoHS和“绿色”标准
- 工作温度:-40℃~+85℃
- 模块尺寸:15 x 20(mm)
- 安装孔尺寸:内径3.1mm/外径6mm
应用
- 自由落体检测
- 冲击检测及记录
引脚说明
序号 | 丝印 | 功能描述 |
---|---|---|
1 | VCC | 5V/3V3 |
2 | GND | GND |
3 | SCL | I2C/SPI 时钟线 |
4 | SDA | I2C/SPI 数据线 |
5 | INT2 | 中断引脚2 |
6 | INT1 | 中断引脚1 |
7 | CS | SPI 片选线 |
8 | SDO | I2C 地址选择引脚/SPI 数据线 |
注意:
- 所有数据输出电压均为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(M0) | D6 |
Raspberry Pi | GPIO25 |
M0使用教程
请按接线图所示将传感器与M0(或其它主板)相连接即可。
准备
- 硬件
- 1 x Firebeetle Board-M0
- 1 x H3LIS200DL三轴加速度计
- 若干 杜邦线
- 软件
- Arduino IDE, 点击下载Arduino IDE
- LIS系列库文件和示例程序
关于如何安装库文件,点击链接
关于如何使用Firebeetle Board-M0,点击链接
-
样例代码
-
主要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,/<int1 >/
eINT2,/<int2>/
* @param event Interrupt event selection
eXLowerThanTh ,/<The acceleration in the x direction is less than the threshold>/
eXHigherThanTh ,/<The acceleration in the x direction is greater than the threshold>/
eYLowerThanTh,/<The acceleration in the y direction is less than the threshold>/
eYHigherThanTh,/<The acceleration in the y direction is greater than the threshold>/
eZLowerThanTh,/<The acceleration in the z direction is less than the threshold>/
eZHigherThanTh,/<The acceleration in the z direction is greater than the threshold>/
*/
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 ,/<The acceleration in the x direction is less than the threshold>/
eXHigherThanTh ,/<The acceleration in the x direction is greater than the threshold>/
eYLowerThanTh,/<The acceleration in the y direction is less than the threshold>/
eYHigherThanTh,/<The acceleration in the y direction is greater than the threshold>/
eZLowerThanTh,/<The acceleration in the z direction is less than the threshold>/
eZHigherThanTh,/<The acceleration in the z direction is greater than the threshold>/
* @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 ,/<The acceleration in the x direction is less than the threshold>/
eXHigherThanTh ,/<The acceleration in the x direction is greater than the threshold>/
eYLowerThanTh,/<The acceleration in the y direction is less than the threshold>/
eYHigherThanTh,/<The acceleration in the y direction is greater than the threshold>/
eZLowerThanTh,/<The acceleration in the z direction is less than the threshold>/
eZHigherThanTh,/<The acceleration in the z direction is greater than the threshold>/
* @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 ±100g or ±200g
* @n When using SPI, chip select pin can be modified by changing the value of macro H3LIS200DL_CS
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli](li.feng@dfrobot.com)
* @version V1.0
* @date 2021-01-16
* @get from https://www.dfrobot.com
* @https://github.com/DFRobot/DFRobot_H3LIS
*/
#include <DFRobot_LIS.h>
//When using I2C communication, use the following program to construct an object by DFRobot_H3LIS200DL_I2C
/*!
* @brief Constructor
* @param pWire I2c controller
* @param addr I2C address(0x18/0x19)
*/
//DFRobot_H3LIS200DL_I2C acce(&Wire,0x18);
DFRobot_H3LIS200DL_I2C acce;
//When using SPI communication, use the following program to construct an object by DFRobot_H3LIS200DL_SPI
#if defined(ESP32) || defined(ESP8266)
#define H3LIS200DL_CS D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define H3LIS200DL_CS 3
#elif (defined NRF5)
#define H3LIS200DL_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_H3LIS200DL_SPI acce(/*cs = */H3LIS200DL_CS);
void setup(void){
Serial.begin(9600);
//Chip initialization
while(!acce.begin()){
Serial.println("Initialization failed, please check the connection and I2C address settings");
delay(1000);
}
//Get chip id
Serial.print("chip id : ");
Serial.println(acce.getID(),HEX);
/**
set range:Range(g)
eH3lis200dl_100g,/< ±100g>/
eH3lis200dl_200g,/< ±200g>/
*/
acce.setRange(/*Range = */DFRobot_LIS::eH3lis200dl_100g);
/**
Set data measurement rate:
ePowerDown_0HZ = 0,
eLowPower_halfHZ,
eLowPower_1HZ,
eLowPower_2HZ,
eLowPower_5HZ,
eLowPower_10HZ,
eNormal_50HZ,
eNormal_100HZ,
eNormal_400HZ,
eNormal_1000HZ,
*/
acce.setAcquireRate(/*Rate = */DFRobot_LIS::eNormal_50HZ);
Serial.print("Acceleration:\n");
delay(1000);
}
void loop(void){
//Get the acceleration in the three directions of xyz
long ax,ay,az;
//The measurement range can be ±100g or ±200g set by the setRange() function
ax = acce.readAccX();//Get the acceleration in the x direction
ay = acce.readAccY();//Get the acceleration in the y direction
az = acce.readAccZ();//Get the acceleration in the z direction
//acce.getAcceFromXYZ(/*accx = */ax,/*accy = */ay,/*accz = */az);//The second method to obtain acceleration in three directions
//Print acceleration
Serial.print("x: ");
Serial.print(ax);
Serial.print(" g\t y: ");
Serial.print(ay);
Serial.print(" g\t z: ");
Serial.print(az);
Serial.println(" g");
delay(300);
}
结果
样例代码2-睡眠唤醒功能(wakeUp.ino)
- 选择wakeUp.ino
- 烧录程序
/**!
* @file wakeUp.ino
* @brief Use wake-up function
* @n Phenomenon: To use this function, you need to turn the module into low-power mode first, and the measurement rate will be
* @n very slow at this time. When an interrupt event set up before occurs, the module will enter normal mode, in which the measurement rate
* @n will be accelerated to save power and provide sampling rate.
* @n When using SPI, chip select pin can be modified by changing the value of macro H3LIS200DL_CS.
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli](li.feng@dfrobot.com)
* @version V1.0
* @date 2021-01-16
* @get from https://www.dfrobot.com
* @https://github.com/DFRobot/DFRobot_LIS
*/
#include <DFRobot_LIS.h>
//When using I2C communication, use the following program to construct an object by DFRobot_H3LIS200DL_I2C
/*!
* @brief Constructor
* @param pWire I2c controller
* @param addr I2C address(0x18/0x19)
*/
//DFRobot_H3LIS200DL_I2C acce(&Wire,0x18);
DFRobot_H3LIS200DL_I2C acce;
//When using SPI communication, use the following program to construct an object by DFRobot_H3LIS200DL_SPI
#if defined(ESP32) || defined(ESP8266)
#define H3LIS200DL_CS D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define H3LIS200DL_CS 3
#elif (defined NRF5)
#define H3LIS200DL_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_H3LIS200DL_SPI acce(/*cs = */H3LIS200DL_CS);
//Interrupt generation flag
volatile bool intFlag = false;
void interEvent(){
intFlag = true;
}
void setup(void){
Serial.begin(9600);
//Chip initialization
while(!acce.begin()){
delay(1000);
Serial.println("Initialization failed, please check the connection and I2C address settings");
}
//Get chip id
Serial.print("chip id : ");
Serial.println(acce.getID(),HEX);
/**
set range:Range(g)
eH3lis200dl_100g,/< ±100g>/
eH3lis200dl_200g,/< ±200g>/
*/
acce.setRange(/*Range = */DFRobot_LIS::eH3lis200dl_100g);
/**
“sleep to wake-up” need to put the chip in low power mode first
Set data measurement rate:
ePowerDown_0HZ = 0,
eLowPower_halfHZ,
eLowPower_1HZ,
eLowPower_2HZ,
eLowPower_5HZ,
eLowPower_10HZ,
eNormal_50HZ,
eNormal_100HZ,
eNormal_400HZ,
eNormal_1000HZ,
*/
acce.setAcquireRate(/*Rate = */DFRobot_LIS::eLowPower_halfHZ);
/**
Set the threshold of interrupt source 1 interrupt
threshold:Threshold(g)
*/
acce.setInt1Th(/*Threshold = */6);
//Enable sleep wake function
acce.enableSleep(true);
Serial.println("sleep");
/*!
Enable interrupt
Interrupt pin selection:
eINT1 = 0,/<int1 >/
eINT2,/<int2>/
Interrupt event selection:
eXLowerThanTh ,/<The acceleration in the x direction is less than the threshold>/
eXHigherThanTh ,/<The acceleration in the x direction is greater than the threshold>/
eYLowerThanTh,/<The acceleration in the y direction is less than the threshold>/
eYHigherThanTh,/<The acceleration in the y direction is greater than the threshold>/
eZLowerThanTh,/<The acceleration in the z direction is less than the threshold>/
eZHigherThanTh,/<The acceleration in the z direction is greater than the threshold>/
*/
acce.enableInterruptEvent(/*int pin*/DFRobot_LIS::eINT1,/*interrupt event = */DFRobot_LIS::eZHigherThanTh);
#if defined(ESP32) || defined(ESP8266)||defined(ARDUINO_SAM_ZERO)
attachInterrupt(digitalPinToInterrupt(D6)/*Query the interrupt number of the D6 pin*/,interEvent,CHANGE);
#else
/* The Correspondence Table of AVR Series Arduino Interrupt Pins And Terminal Numbers
* ---------------------------------------------------------------------------------------
* | | DigitalPin | 2 | 3 | |
* | Uno, Nano, Mini, other 328-based |--------------------------------------------|
* | | Interrupt No | 0 | 1 | |
* |-------------------------------------------------------------------------------------|
* | | Pin | 2 | 3 | 21 | 20 | 19 | 18 |
* | Mega2560 |--------------------------------------------|
* | | Interrupt No | 0 | 1 | 2 | 3 | 4 | 5 |
* |-------------------------------------------------------------------------------------|
* | | Pin | 3 | 2 | 0 | 1 | 7 | |
* | Leonardo, other 32u4-based |--------------------------------------------|
* | | Interrupt No | 0 | 1 | 2 | 3 | 4 | |
* |--------------------------------------------------------------------------------------
*/
/* The Correspondence Table of micro:bit Interrupt Pins And Terminal Numbers
* ---------------------------------------------------------------------------------------------------------------------------------------------
* | micro:bit | DigitalPin |P0-P20 can be used as an external interrupt |
* | (When using as an external interrupt, |---------------------------------------------------------------------------------------------|
* |no need to set it to input mode with pinMode)|Interrupt No|Interrupt number is a pin digital value, such as P0 interrupt number 0, P1 is 1 |
* |-------------------------------------------------------------------------------------------------------------------------------------------|
*/
attachInterrupt(/*Interrupt No*/0,interEvent,CHANGE);//Enable the external interrupt 0, connect INT1/2 to the digital pin of the main control:
//UNO(2), Mega2560(2), Leonardo(3), microbit(P0).
#endif
delay(1000);
}
void loop(void){
//Get the acceleration in the three directions of xyz
//The mearsurement range is ±100g or ±200g, set by setRange() function.
Serial.print("Acceleration x: ");
Serial.print(acce.readAccX());
Serial.print(" g \ty: ");
Serial.print(acce.readAccY());
Serial.print(" g \tz: ");
Serial.print(acce.readAccZ());
Serial.println(" g");
delay(300);
if(intFlag == 1){
Serial.println("wake up");
intFlag = 0;
}
}
结果
样例代码3-外部中断功能(interrupt.ino)
- 选择interrupt.ino
- 烧录程序
/**!
* @file interrupt.ino
* @brief Interrupt detection
* @n In this example, the enable eZHigherThanTh interrupt event means when the acceleration in the Z direction exceeds the
* @n threshold set by the program, the interrupt level can be detected on the interrupt pin int1/int2 we set, and the level change on the
* @n interrupt pin can be used to determine whether the interrupt occurs. The following are the 6 settable interrupt events:eXHigherThanTh,
* @n eXLowerThanTh, eYHigherThanTh, eYLowerThanTh, eZHigherThanTh, eZLowerThanTh. For a detailed explanation of each of them,
* @n please look up the comments of the enableInterruptEvent() function.
* @n This example needs to connect the int2/int1 pin of the module to the interrupt pin of the motherboard. Default UNO(2), Mega2560(2),
* @n Leonardo(3), microbit(P0),FireBeetle-ESP8266(D6),FireBeetle-ESP32((D6),FireBeetle-M0(6)
* @copyright Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
* @licence The MIT License (MIT)
* @author [fengli](li.feng@dfrobot.com)
* @version V1.0
* @date 2021-01-16
* @get from https://www.dfrobot.com
* @https://github.com/DFRobot/DFRobot_LIS
*/
#include <DFRobot_LIS.h>
//When using I2C communication, use the following program to construct an object by DFRobot_H3LIS200DL_I2C
/*!
* @brief Constructor
* @param pWire I2c controller
* @param addr I2C address(0x18/0x19)
*/
//DFRobot_H3LIS200DL_I2C acce(&Wire,0x18);
DFRobot_H3LIS200DL_I2C acce;
//When using SPI communication, use the following program to construct an object by DFRobot_H3LIS200DL_SPI
#if defined(ESP32) || defined(ESP8266)
#define H3LIS200DL_CS D3
#elif defined(__AVR__) || defined(ARDUINO_SAM_ZERO)
#define H3LIS200DL_CS 3
#elif (defined NRF5)
#define H3LIS200DL_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_H3LIS200DL_SPI acce(/*cs = */H3LIS200DL_CS);
//Interrupt generation flag
volatile bool intFlag = false;
void interEvent(){
intFlag = true;
}
void setup(void){
Serial.begin(9600);
//Chip initialization
while(!acce.begin()){
delay(1000);
Serial.println("Initialization failed, please check the connection and I2C address settings");
}
//Get chip id
Serial.print("chip id : ");
Serial.println(acce.getID(),HEX);
/**
set range:Range(g)
eH3lis200dl_100g,/< ±100g>/
eH3lis200dl_200g,/< ±200g>/
*/
acce.setRange(/*Range = */DFRobot_LIS::eH3lis200dl_100g);
/**
Set data measurement rate:
ePowerDown_0HZ = 0,
eLowPower_halfHZ,
eLowPower_1HZ,
eLowPower_2HZ,
eLowPower_5HZ,
eLowPower_10HZ,
eNormal_50HZ,
eNormal_100HZ,
eNormal_400HZ,
eNormal_1000HZ,
*/
acce.setAcquireRate(/*Rate = */DFRobot_LIS::eNormal_50HZ);
#if defined(ESP32) || defined(ESP8266)
//The D6 pin is used as the interrupt pin by default, and other non-conflicting pins can also be selected as the external interrupt pin.
attachInterrupt(digitalPinToInterrupt(D6)/*Query the interrupt number of the D6 pin*/,interEvent,CHANGE);
#elif defined(ARDUINO_SAM_ZERO)
//The pin 5 is used as the interrupt pin by default, and other non-conflicting pins can also be selected as the external interrupt pin.
attachInterrupt(digitalPinToInterrupt(5)/*Query the interrupt number of the pin 5*/,interEvent,CHANGE);
#else
/* The Correspondence Table of AVR Series Arduino Interrupt Pins And Terminal Numbers
* ---------------------------------------------------------------------------------------
* | | DigitalPin | 2 | 3 | |
* | Uno, Nano, Mini, other 328-based |--------------------------------------------|
* | | Interrupt No | 0 | 1 | |
* |-------------------------------------------------------------------------------------|
* | | Pin | 2 | 3 | 21 | 20 | 19 | 18 |
* | Mega2560 |--------------------------------------------|
* | | Interrupt No | 0 | 1 | 2 | 3 | 4 | 5 |
* |-------------------------------------------------------------------------------------|
* | | Pin | 3 | 2 | 0 | 1 | 7 | |
* | Leonardo, other 32u4-based |--------------------------------------------|
* | | Interrupt No | 0 | 1 | 2 | 3 | 4 | |
* |--------------------------------------------------------------------------------------
*/
/* The Correspondence Table of micro:bit Interrupt Pins And Terminal Numbers
* ---------------------------------------------------------------------------------------------------------------------------------------------
* | micro:bit | DigitalPin |P0-P20 can be used as an external interrupt |
* | (When using as an external interrupt, |---------------------------------------------------------------------------------------------|
* |no need to set it to input mode with pinMode)|Interrupt No|Interrupt number is a pin digital value, such as P0 interrupt number 0, P1 is 1 |
* |-------------------------------------------------------------------------------------------------------------------------------------------|
*/
attachInterrupt(/*Interrupt No*/0,interEvent,CHANGE);//Open the external interrupt 0, connect INT1/2 to the digital pin of the main control:
//UNO(2), Mega2560(2), Leonardo(3), microbit(P0).
#endif
/**
Set the threshold of interrupt source 1 interrupt
threshold:Threshold(g)
*/
acce.setInt1Th(/*Threshold = */6);//Unit: g
/*!
Enable interrupt
Interrupt pin selection:
eINT1 = 0,/<int1 >/
eINT2,/<int2>/
Interrupt event selection:
eXLowerThanTh ,/<The acceleration in the x direction is less than the threshold>/
eXHigherThanTh ,/<The acceleration in the x direction is greater than the threshold>/
eYLowerThanTh,/<The acceleration in the y direction is less than the threshold>/
eYHigherThanTh,/<The acceleration in the y direction is greater than the threshold>/
eZLowerThanTh,/<The acceleration in the z direction is less than the threshold>/
eZHigherThanTh,/<The acceleration in the z direction is greater than the threshold>/
*/
acce.enableInterruptEvent(/*int pin*/DFRobot_LIS::eINT1,/*interrupt event = */DFRobot_LIS::eZHigherThanTh);
delay(1000);
}
void loop(void){
//Get the acceleration in the three directions of xyz
//The mearsurement range is ±100g or ±200g, set by setRange() function.
Serial.print("Acceleration x: ");
Serial.print(acce.readAccX());
Serial.print(" g \ty: ");
Serial.print(acce.readAccY());
Serial.print(" g \tz: ");
Serial.print(acce.readAccZ());
Serial.println(" g");
delay(300);
//The interrupt flag is set
if(intFlag == true){
//Check whether the interrupt event is generated in interrupt 1
if(acce.getInt1Event(DFRobot_LIS::eYHigherThanTh)){
Serial.println("The acceleration in the y direction is greater than the threshold");
}
if(acce.getInt1Event(DFRobot_LIS::eZHigherThanTh)){
Serial.println("The acceleration in the z direction is greater than the threshold");
}
if(acce.getInt1Event(DFRobot_LIS::eXHigherThanTh)){
Serial.println("The acceleration in the x direction is greater than the threshold");
}
intFlag = false;
}
}
结果
树莓派使用教程
准备
-
硬件
- 树莓派4代B型(或类似)主控板 x 1
- H3LIS200DL三轴加速度传感器 x 1
- 若干杜邦线 x 1
-
软件
接线图
- 将模块与树莓派按照连线图相连。I2C地址默认为0x19
安装驱动
- 启动树莓派的I2C接口。如已开启,可跳过该步骤。
打开终端(Terminal),键入如下指令,并回车:
sudo raspi-config
然后用上下键选择“ 5 Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。
- 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
在终端中,依次键入如下指令,并回车:
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus git
- 下载LIS系列驱动库。在终端中,依次键入如下指令,并回车:
cd Desktop
git clone https://github.com/DFRobot/DFRobot_LIS
样例代码
样例代码1-读取x,y,z轴加速度(get_acceleration.py)
- 在终端中,键入如下指令并回车,运行样例代码:
cd DFRobot_LIS/python/raspberrypi/examples/H3LIS200DL
cd get_acceleration
python get_acceleration.py
结果
- 晃动传感器结果如图
- 注意:若出现如图所示情况,请检查I2C地址是否正确。
样例代码2-睡眠唤醒功能(wake_up.py)
- 在终端中,键入如下指令并回车,运行样例代码:
cd home/pi/Desktop/DFRobot_LIS/python/raspberrypi/examples/H3LIS200DL
cd wake_up
python wake_up.py
结果
样例代码3-外部中断功能(interrupt.py)
- 在终端中,键入如下指令并回车,运行样例代码:
cd home/pi/Desktop/DFRobot_LIS/python/raspberrypi/examples/H3LIS200DL
cd interrupt
python interrupt.py
结果
常见问题
如果有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。