就是这种小东西:
上面的截图来自:https://item.szlcsc.com/3600130.html
以前写过一篇介绍这种东西内部的结构原理:贴片微型滚珠振动开关的结构原理。就是有个小滚珠会接通开关两边的电极,振动时滚珠会在内部蹦跳,开关状态就会发生快速变化,从而检测振动。实测还是挺灵敏的,用逻辑分析仪记录了一段波形:
振动开关平放在测试用的电路板上,手拿着轻微移动就可以触发。测试电路很简单:
振动开关接通时输出低电平。不过电平信号不重要,因为初始电平是不确定的,需要关注的是变化。参考上面的波形图,每个脉冲的宽度在几十微秒到几毫秒,脉冲的间隔差不多几十毫秒以上,轻微的运动就足以触发十几个脉冲。这种波形和按键按下时的抖动很像,通常是要给它过滤掉的,但现在就得无损失的把信号送给单片机,不能添加电容滤波,不然会大大降低灵敏度。
可以考虑用引脚中断配合简单的软件滤波。比如,用引脚电平变化中断接收信号,中断函数记录一次抖动事件后关闭引脚中断,从而避免快速跳变让单片机卡在中断里,主函数可以在从容处理完别的任务后重启引脚中断。为了过滤掉随机一两次的抖动,可以给抖动计数,一段时间内记录到一定数量的抖动事件后确认发生了振动。或者每次采样一段时间的抖动,单片机比较闲的时候就启动引脚中断一段时间,持续记录抖动次数,之后再关闭引脚中断,去处理别的事。