一、传感器原理
震动传感器是将接收到的机械量转换成与其成正比的电压值的一种机电转换装置,所以我们有时也称它为换能器、振动拾音器等。
震动传感器并不直接将原始的被测机械量转换为电信号,而是将原始的被测机械量作为震动传感器的输入量,再由机械接收部分接收,形成另一个适合的机械量为转型。最后由机电转换部分转换成电能。因此它的工作性能取决于机械接收部分和机电转换部分的工作性能。震动传感器实物图如图1所示。
该模块的工作参数如下:
- 采用LM393比较器输出,信号干净,波形好,驱动能力强;
- 工作电压3.3V~5V;
- 输出形式: 输出数字量开关0和1;
- 产品用途:各种震动触发作用,比如防盗报警等;
- 产品不震动时开关闭合输出低电平,震动时输出高电平;
震动传感器的内部构造如下图2所示。
工作原理说明:在传感器没有震动时,震动轴静止,导针A和导针B处于导通状态,平时任何角度开关都是接通状态,受到振动或移动时,震动轴会产生移动或振动,从而导致导针A和B会出现断开。
这种开关的特点是平时一般处于导通状态耐振动时会短暂断开,所以它的灵敏度很高,同时没有震动时电路导通,所以他是常闭式震动传感器。
二、传感器驱动
当我们需要驱动震动传感器时,一般只需要监测传感器模块DO(Digit Output)输出的电平信号,因此我们只需要编写代码读取传感器的电平信号,驱动代码如下:
驱动C源文件:
/**********************************************************************
* 文件名称: shock.c
* 作 者: JJ-KING
* 版 本 号: V1.0.0
* 创建日期: 2023-02-07
* 模块描述: 震动传感器模块配置
* 其他说明:
* 修改记录: <作者> <时间> <版本号> <描述>
**********************************************************************/
/*----------------------------------------------------------------------------
更新日志:
2023-02-07 V1.0.0: 初始版本
----------------------------------------------------------------------------*/
/* 包含的头文件 --------------------------------------------------------------*/
#include "shock.h"
/* -------------------------- 传感器引脚定义 ----------------------- */
#define SHOCK_GPIO_CLK RCC_APB2Periph_GPIOC
#define SHOCK_GPIO_PORT GPIOC
#define SHOCK_GPIO_PIN GPIO_Pin_0
#define SHOCK_PIN_STATUS GPIO_ReadInputDataBit(SHOCK_GPIO_PORT, SHOCK_GPIO_PIN)
/* 定义软件延时 */
static void delay_ms(unsigned short time)
{
unsigned short i=12000;
while(time --){ while(i--); }
}
/* 震动传感器 IO初始化 */
void shock_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(SHOCK_GPIO_CLK, ENABLE); /* 使能端口时钟 */
GPIO_InitStructure.GPIO_Pin = SHOCK_GPIO_PIN; /* 端口配置 */
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* 浮空输入 */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(SHOCK_GPIO_PORT, &GPIO_InitStructure); /* 根据设定参数初始化GPIO */
}
/* 震动检测 */
unsigned char shock_check(void)
{
if(SHOCK_PIN_STATUS == 1) {
delay_ms(10);
if(SHOCK_PIN_STATUS == 1)
return SHOCK_STA_EN;
}
return SHOCK_STA_NO;
}
驱动H源文件:
/**********************************************************************
* 文件名称: shock.h
* 作 者: JJ-KING
* 版 本 号: V1.0.0
* 创建日期: 2023-02-07
* 模块描述: 震动传感器模块配置
* 其他说明:
* 修改记录: <作者> <时间> <版本号> <描述>
**********************************************************************/
#ifndef _SHOCK_H
#define _SHOCK_H
#include "stm32f10x.h"
typedef enum {
SHOCK_STA_NO, /* 未震动 */
SHOCK_STA_EN /* 震动中 */
} ENUM_SHOCK_STA_TYPEDEF;
/* ---------------------- 函数清单 -------------------------- */
void shock_init (void);
unsigned char shock_check (void);
#endif