当前位置: 首页 > news >正文

LuatOS扩展库API——【exvib】震动检测

对于做 4G-Cat.1、MCU 等物联网终端开发的开发者而言,LuatOS 是一款值得了解的开发工具。它是面向物联网设备的轻量级嵌入式 Lua 脚本运行框架和实时系统,基于 Lua 5.3 完成深度优化,开发层面采用 Lua 脚本模式,核心为协程多任务设计,且拥有 70 余个核心库、20 余个扩展库和 1000 多个应用 demo 示例,可适配物联网开发的各类基础应用场景。

一、概述

1. exvib.lua可适用于合宙内部集成了G-Sensor加速度传感器DA221的模组型号

目前仅有Air8000A,Air8000D,Air780EGG,Air780EGP,Air8000U,Air8000N,Air8000DB,Air8000AB模组内置了DA221

2. DA221在Air8000A和Air8000D,Air8000U,Air8000N,Air8000DB,Air8000AB内部通过I2C0与之通信,并通过WAKEUP2接收运动监测中断

Air780EGG和Air780EGP内部通过I2C0与之通信,并通过WAKEUP2接收运动监测中断,

如您使用合宙其它型号模组外接DA221时,比如Air780EGH,建议与Air780EGG保持一致也选用I2C0和WAKEUP2

(该管脚即为Air780EGH的PIN79:USIM_DET),这样便可以无缝使用本扩展库

2.1 DA221作为加速度传感器,LuatOS仅支持运动检测这一功能,主要用于震动检测,运动检测,跌倒检测

搭配GNSS实现震动然后定位的功能,其余功能请自行研究,我们提供了三种应用场景,如果需要适配自己的场景需求,

请参考手册参数自行修改代码,调试适合自己场景的传感器值,我们不提供DA221任何其它功能的任何形式的技术支持;

关于exvib库的三种模式主要用于以下场景:

  • 微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面;加速度量程2g;
  • 运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测;加速度量程4g;
  • 跌倒检测,用于人或物体瞬间跌倒时的检测;加速度量程8g;

二、核心示例

1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;

2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;

3、更加完整和详细的 demo,请参考 LuatOS 仓库 中Air8000产品目录下的 demo/gsensor/vibration;

-- 用法实例exvib=require("exvib")localintPin=gpio.WAKEUP2--中断检测脚,内部固定wakeup2localtid--获取定时打开的定时器idlocalnum=0--计数器localticktable={0,0,0,0,0}--存放5次中断的tick值,用于做有效震动对比localeff=false--有效震动标志位,用于判断是否触发定位gpio.setup(164,1,gpio.PULLUP)-- air8000整机板需要大概该电源控制i2c上电 和音频解码芯片共用,自己设计可以忽略掉gpio.setup(147,1,gpio.PULLUP)-- air8000整机板需要大概该电源控制i2c上电 camera的供电使能脚,自己设计可以忽略掉--有效震动模式--tick计数器,每秒+1用于存放5次中断的tick值,用于做有效震动对比localfunctiontick()num=num+1end--每秒运行一次计时sys.timerLoopStart(tick,1000)--有效震动判断localfunctionind()log.info("int",gpio.get(intPin))ifgpio.get(intPin)==1then--接收数据如果大于5就删掉第一个if#ticktable>=5thenlog.info("table.remove",table.remove(ticktable,1))end--存入新的tick值table.insert(ticktable,num)log.info("tick",num,(ticktable[5]-ticktable[1]<10),ticktable[5]>0)log.info("tick2",ticktable[1],ticktable[2],ticktable[3],ticktable[4],ticktable[5])--表长度为5且,第5次中断时间间隔减去第一次间隔小于10s,且第5次值为有效值if#ticktable>=5and(ticktable[5]-ticktable[1]<10andticktable[1]>0)thenlog.info("vib","xxx")--是否要去触发有效震动逻辑ifeff==falsethensys.publish("EFFECTIVE_VIBRATION")endendendend--设置30s分钟之后再判断是否有效震动函数localfunctionnum_cb()eff=falseendlocalfunctioneff_vib()log.info("触发有效震动")--触发之后eff设置为true,30分钟之后再触发有效震动eff=true--30分钟之后再触发有效震动sys.timerStart(num_cb,180000)endsys.subscribe("EFFECTIVE_VIBRATION",eff_vib)--持续震动模式--持续震动模式中断函数-- local function ind()-- log.info("int", gpio.get(intPin))-- --上升沿为触发震动中断-- if gpio.get(intPin) == 1 then-- local x,y,z = exvib.read_xyz() --读取x,y,z轴的数据-- log.info("x", x..'g', "y", y..'g', "z", z..'g')-- end-- endlocalfunctionvib_fnc()-- 1,微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面;加速度量程2g;-- 2,运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测;加速度量程4g;-- 3,跌倒检测,用于人或物体瞬间跌倒时的检测;加速度量程8g;--打开震动检测功能exvib.open(1)--设置gpio防抖100msgpio.debounce(intPin,100)--设置gpio中断触发方式wakeup2唤醒脚默认为双边沿触发gpio.setup(intPin,ind)endsys.taskInit(vib_fnc)

三、常量详解

exvib扩展库没有常量。

四、函数详解

exvib.read_xyz()

功能

获取da221的xyz轴数据

注意事项

读取x,y,z轴的数据,需要注意的是,x,y,z轴数据在静止状态下,因为数据有噪声,所以x,y,z轴数据不会为固定值,数据会有微小的变化,所有传感器都有噪声,这个是无法避免的。

参数

返回值

local x,y,z = exvib.read_xyz()

x

-- 参数含义:x轴数据;-- 数据类型:number;-- 取值范围:无特别限制;-- 注意事项:无;

y

-- 参数含义:y轴数据; -- 数据类型:number; -- 取值范围:无特别限制; -- 注意事项:无;

z

-- 参数含义:z轴数据;-- 数据类型:number;-- 取值范围:无特别限制;-- 注意事项:无;

示例

localx,y,z=exvib.read_xyz()--读取x,y,z轴的数据,需要注意的是,x,y,z轴数据在静止状态下,因为数据有噪声,所以x,y,z轴数据不会为固定值,数据会有微小的变化,所有传感器都有噪声,这个是无法避免的。log.info("x",x..'g',"y",y..'g',"z",z..'g')

exvib.open(mode)

功能

打开da221三轴加速度传感器

注意事项

提供了三种应用模式,可以根据自己的应用场景进行选择,也可以自己对扩展库的值进行修改。

参数

mode

参数含义:加速度传感器的应用模式; 数据类型:number; 取值范围:1-微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面,加速度量程2g;2-运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测,加速度量程4g;3-跌倒检测,用于人或物体瞬间跌倒时的检测,加速度量程8g; 是否必选:是; 注意事项:作为必需参数,若不提供会导致错误; 示例代码:exvib.open(1)

返回值

示例

localintPin=gpio.WAKEUP2--中断检测脚,内部固定wakeup2--持续震动模式--持续震动模式中断函数localfunctionind()log.info("int",gpio.get(intPin))--上升沿为触发震动中断ifgpio.get(intPin)==1thenlocalx,y,z=exvib.read_xyz()--读取x,y,z轴的数据log.info("x",x..'g',"y",y..'g',"z",z..'g')endend-- 1,微小震动检测,用于检测轻微震动的场景,例如用手敲击桌面;加速度量程2g;-- 2,运动检测,用于电动车或汽车行驶时的检测和人行走和跑步时的检测;加速度量程4g;-- 3,跌倒检测,用于人或物体瞬间跌倒时的检测;加速度量程8g;--打开震动检测功能exvib.open(1)--设置gpio防抖100msgpio.debounce(intPin,100)--设置gpio中断触发方式wakeup2唤醒脚默认为双边沿触发gpio.setup(intPin,ind)

exvib.close()

功能

关闭da221三轴加速度传感器

注意事项

暂无

参数

返回值

示例

五、产品支持说明

Air8000A,Air8000D,Air780EGG,Air780EGP支持exvib扩展库

今天就分享到这里啦~~~

http://www.jsqmd.com/news/646573/

相关文章:

  • Mac 终端进阶:Ln 指令的软硬链接实战指南
  • OBS Studio下载中文版
  • 爬取七猫中文网小说
  • GPT-6震撼来袭!OpenAI能否在AI巨头环伺中夺回王座?这场发布会,注定改变未来!
  • AI Agent Harness Engineering 能源领域应用:智能电网调度、节能优化与新能源管理
  • React Fiber 异步调度实现
  • 开发者抗压手册:7招避免Burnout
  • 集合幂级数笔记
  • 新手也能搞定的微信小程序逆向:用unveilr工具拆解某盾blackbox生成逻辑
  • AI知识管理:Notion模板实战——软件测试从业者的效率革命
  • Windows系统优化实战指南:WinUtil工具箱深度解析与高效应用方案
  • ESP32搭配INMP441麦克风:从接线到串口打印音频数据的保姆级教程
  • OpenHarmony开发必备:巧用DevEco Studio的PCID导入,快速搞定新设备适配
  • 缺省源
  • Windows系统精简优化终极指南:告别臃肿,重获流畅体验
  • Ubuntu Autoinstall Generator:三步快速上手自动化部署工具
  • RBAC机制与角色及绑定关系
  • 【ROS2实战笔记-3】RViz2图形底层与调试暗坑
  • Cesium for Unity 安装避坑指南
  • Go语言的context.WithDeadline截止时间实现与时钟漂移补偿在分布式
  • 避坑指南:在ultralytics YOLO中集成Mamba-2或Vision Mamba时,如何搞定那个烦人的CUDA张量检查报错
  • 2026届最火的五大AI科研神器推荐榜单
  • Halcon实战:5分钟搞定工业视觉直线度检测(附完整代码)
  • 企微获客数据可视化——无工具数据黑盒vs工具化数据追溯的技术实现
  • 单细胞分析实战:sctransform标准化避坑指南(附Seurat代码)
  • MIPI CSI-2 信号完整性实战:从波形抓取到问题定位
  • 2025届最火的十大AI科研神器推荐榜单
  • 【ROS2实战笔记-4】Gazebo:从通信桥接到性能瓶颈相关技术梳理
  • 为什么92.3%的设计团队在3个月内弃用AI助手?奇点大会闭门论坛首曝失败归因矩阵
  • 手把手教你用奥比中光Astra-Mini实现ROS下的3D手势识别(含rviz可视化教程)