跳到主要内容

振动/敲击检测传感器(AD电压)

一、传感器介绍

  • 工作电压:3 - 5V
  • 接口类型:AO:模拟信号输出 DO:数字信号输出(这里暂时不用)
  • 工作温度:-10度 ~ 70度
  • 电路尺寸: 20mm X 20mm
  • 工作原理:通过振动检测头中的陶瓷压电片检测振动或敲击,然后传感器模块将陶瓷压电片产生的电信号的经过处理后通过AO引脚输出电压,振动强度越大电压值越高。

product

这里我们只采用AO输出的电压模拟量信号,因为该电压信号可以反映振动的强度大小。对于DO引脚则使用起来更简单,通过传感器模块电路板上的电位器调整好灵敏度后,就可以用Core提供的GPIO库函数来实现对DO信号高低电平的检测,这里就不涉及了。

二、接线图

layout

三、材料清单

名称推荐购买链接(或者您可以自己制作)
压电式振动传感器模块模块购买链接
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

四、完整代码

--配置Core的USB口以虚拟串口模式工作,这样print()输出的内容就可以在电脑串口终端上显示了
LIB_UsbConfig("CDC")
--配置AD电压采集功能,最大值采样值4096对应3.6V输入电压
--当通道采集满1个点时缓存满,每个点的采集时间间隔为300ms
LIB_ADConfig(1,300000)
--开始大循环
while(GC(1) == true)
do
--每隔300ms查询A0通道是否转换完成
--开发者也可以将传感器接至A1-A3中的任一通道,也可以多个通道接多个传感器,用法都和下面一样
LIB_DelayMs(300)
A0_full_flag, A0_buf = LIB_ADCheckBufFull("A0")
if A0_full_flag == 1 then
--打印输出A0通道的AD采样值以及对应的电压值
print(string.format("A0=%04d Voltage=%.2fv", A0_buf[1], A0_buf[1]*3.6/4096.0))
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

注意:上面的代码中将AD采样间隔设置为300ms是为了不让print()打印太快,实际应用中为了及时检测到振动和敲击,您应当将这个时间设置为1ms ~ 10ms内的值更为合适。

五、实验过程及结论

步骤一:当传感器静置时

static

static

此时传感器输出的电压值在0.02V左右

步骤二:当手指轻敲击传感器时

knock

knock

手指轻敲传感器探头检测到的电压为0.19V

步骤三:将传感器探头稍用力敲向桌面时

heavy_knock

heavy_knock

可以看到传感器此时的输出电压为1.29V,1.52V

结论:

通过上面实验可以看出,振动或敲击的强度越高传感器输出的电压越大。