一.震动传感器原理
原理:没有震动时,震动轴静止,导针A和导针B处于导通状态,平时任何角度开关都是接通状态,受到振动或移动时,震动轴会产生移动或振动,从而导致导针A和B会出现断开。
二.震动传感器接线图
三.arduino实现数据读入
int ledPin = 12; // 定义LED为 pin 12
int switch0 = 2; // 定义传感器 为 Pin2
void setup()
{
pinMode(ledPin, OUTPUT); // 设置数字端口12为输出模式
pinMode(switch0, INPUT); // 设置数字端口2为输入模式
}
void loop()
{
if(digitalRead(switch0)==HIGH)
{
digitalWrite(ledPin, HIGH); // 数字端口置高,LED亮
}
else
{
digitalWrite(ledPin, LOW); // 数字端口置低,LED灭
}
}
四.stm32实现数据读入
/**
* 函数功能: SW420震动模块传感器IO引脚初始化.
* 输入参数: 无
* 返 回 值: 无
* 说 明:引脚进行初始化
*
*/
void SW420_GPIO_Init(void)
{
/* 定义IO硬件初始化结构体变量 */
GPIO_InitTypeDef GPIO_InitStruct;
/* 使能(开启)SW420引脚对应IO端口时钟 */
SW420_RCC_CLK_ENABLE();
/* 设定SW420对应引脚IO编号 */
GPIO_InitStruct.Pin = SW420_GPIO_PIN;
/* 设定SW420对应引脚IO操作速度*/
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
/* 设定SW420对应引脚IO为浮空输入模式 */
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
/* 初始化SW420对应引脚IO */
HAL_GPIO_Init(SW420_GPIO, &GPIO_InitStruct);
}
/**
* 函数功能: 简单粗暴的延时函数
* 输入参数: time;延时时间设置
* 返 回 值: 无
* 说 明:软件消抖
*/
static void SW420_ScanDelay(void)
{
uint32_t i,j;
for(i=0;i<100;++i)
for(j=0;j<1000;++j){ }
}
/**
* 函数功能: 读取引脚的状态
* 输入参数:无
* 返 回 值: SW420_HIGH:有震动;
* SW420_LOW:无震动
* 说 明:无。
*/
SW420_State_TypeDef SW420_StateRead(void)
{
/* 读取模块输出信号,若此时输出的是高电平 ,则进入下一步判断*/
if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
{
/* 延时一小段时间,消除抖动 */
SW420_ScanDelay();
/* 延时时间后再来判断引脚状态,如果还是高电平那么确实就是高电平 */
if(HAL_GPIO_ReadPin(SW420_GPIO,SW420_GPIO_PIN)==SW420_ACTIVE_LEVEL)
{
/* 扫描完毕,确定有震动,返回震动状态(高电平) */
return SW420_HIGH;
}
}
/* 无震动,返回无震动状态 */
return SW420_LOW;
}