跳转至

作者:孟伟 | 最后修改:2026-04-13

一、exvib1 震动传感器概述

exvib1 是 LuatOS 的震动传感器扩展库,专门用于检测和处理震动事件,该功能基于滚珠震动传感器,能够准确检测各种震动信号。

1.1 传感器介绍:

BL_2529:是一款物理的震动传感器,触发震动后会产生一个脉冲信号。

触碰一下波形如下:

连续多次触碰波形:

1.2 exvib1 有什么用?

exvib1 扩展库主要功能包括:

1,震动事件回调:当检测到震动时,会触发回调函数,在回调函数中可以进行相应的处理,例如打印日志、控制其他设备等。

2,震动事件计数:在回调函数中可以统计检测到的震动次数,例如用于记录用户操作次数、触发报警等。

3,震动事件过滤:可以设置过滤参数,例如设置最小震动时间间隔,避免重复触发回调。

二、演示功能概述

本教程将使用 Air8000 核心板搭配 AirVIBRATING_1000 震动小板,演示 exvib1 震动传感器的核心功能,主要包括:

(1)震动事件检测与回调处理

(2)震动脉冲计数统计

(3)事件过滤参数配置

(4)实时震动监控

三、准备硬件环境

硬件清单:

  • Air8000 核心板一块
  • AirVIBRATING_1000 震动小板一块
  • TYPE-C USB 数据线一根

硬件连接:

  • 电源连接:

  • 震动小板 VCC 引脚 → 核心板 VDD_EXT 引脚

  • 震动小板 GND 引脚 → 核心板 GND_EXT 引脚
  • 信号连接:

  • 震动小板 INT_BL2529 引脚 → 核心板 GPIO20 引脚

  • 供电配置:

  • Air8000 核心板通过 TYPE-C USB 口供电

  • 核心板拨钮开关拨到 USB 供电位置

四、软件环境

在开始实践本示例之前,先筹备一下软件环境:

1.烧录工具: Luatools 工具

2.内核固件:本demo开发测试时使用的固件为Air8000 V2018 版本固件,本demo对固件版本没有什么特殊要求,所以你如果要测试本demo时,可以直接使用最新版本的内核固件;如果发现最新版本的内核固件测试有问题,可以使用我们开发本demo时使用的内核固件版本来对比测试;

3.LuatOS 需要的脚本和资源文件

脚本和资源文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/gsensor/vibration1

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8000 核心板中。

五、API 接口说明

详细 exvib1 API 文档请参考:https://docs.openluat.com/osapi/ext/exvib1/

六、代码示例介绍

6.1 功能测试核心代码

6.1.1 exvib1 扩展库核心功能:

核心功能

1、GPIO 中断检测:通过配置的 GPIO 引脚检测震动传感器产生的脉冲信号。

2、双重消抖机制:

IO 中断硬件消抖 (gpio.debounce())。

时间窗口检测:在指定的时间窗口 (time_window) 内统计有效的脉冲数量。

3、阈值触发:当统计的脉冲数超过设定的阈值 (pulse_threshold) 时,触发用户自定义的回调函数。

4、脉冲超时机制:在检测状态下,如果超过 pulse_timeout 时间没有新的脉冲产生,则提前结束当前检测周期并判断是否触发回调,提高响应速度。

状态机工作流程

1、IDLE 状态:等待第一个有效脉冲。

2、DETECTING 状态:进入检测窗口,统计脉冲数量。

3、触发条件:

时间窗口结束。

脉冲空闲时间超过设定的脉冲超时时间。

4、结果判断:脉冲数 ≥ 阈值则调用用户回调函数。

6.1.2 exvib1 扩展库使用:

--加载exvib1扩展库
local exvib1= require "exvib1"

-- 震动事件回调
local function vibration_cb(pulse_cnt)
    log.info("VIB", "detected! pulses =", pulse_cnt)
end
--演示最简单的使用方法,都使用默认配置
exvib1.open({
    gpio_pin = 20,
    on_event = vibration_cb,
    })

6.2 功能验证

将硬件连接好后,把 demo 代码烧录到核心板中,轻敲或震动传感器,观察输出日志,在 luatools 可以看到如下日志:

[2025-09-09 13:51:51.417][000000000.584] I/user.Vibration start on gpio 20
[2025-09-09 13:51:56.331][000000005.954] I/user.VIB detected! pulses = 7
[2025-09-09 13:51:56.811][000000006.444] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:00.039][000000009.664] I/user.VIB detected! pulses = 5
[2025-09-09 13:52:01.226][000000010.854] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:02.640][000000012.274] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:03.793][000000013.424] I/user.VIB detected! pulses = 3
[2025-09-09 13:52:04.858][000000014.484] I/user.VIB detected! pulses = 4

验证要点

  • 事件响应:震动时能及时触发回调函数
  • 脉冲计数:脉冲数量与实际震动强度相符
  • 稳定性:长时间运行无异常重启或内存泄漏
  • 灵敏度:能检测到不同强度的震动事件

七、总结

至此,本教程详细介绍了 exvib1 震动传感器模块的使用方法。该模块为物联网设备提供了可靠的震动检测能力,在实际使用中可以根据需求调整参数,适用于多种应用场景。

exvib1 关键特性:

  • 简单易用的 API 接口
  • 可配置的灵敏度参数
  • 可靠的去抖和过滤机制

可应用场景:安防报警系统、设备状态监控等场景