来这里发现更多有趣案例

HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution

跌倒检测系统

   下图是本案例除硬件连线外的 3 步导学,每个步骤中实现的功能请参考图中的说明。

简介

   据 Forbes 报道,到 2050 年,全球 60 岁以上的人口预计将达到 20 亿。根据美国疾病控制与预防中心的数据,每年有近四分之一的老年人跌倒,而跌倒是老年人因创伤入院的主要原因。跌到检测系统能够第一时间检测到老人跌到的情况并及时报警,配合及时的救治措施能很大程度降低老人收到的伤害。本案例通过 MPU 传感器采集到的惯性数据来检测老人跌倒时的位姿,来实现非接触、非隐私的跌倒检测并及时报警。

背景知识

   本系统的核心在于如何确定老年人的跌倒状态,并及时通知给家人或亲戚朋友。

   MPU6886(6-Axis IMU Unit)是一款 6 轴姿态传感器,可以获取器件当前的三轴加速度分量和三轴旋转角速度。由于其体积小巧,功能强大,精度较高,适合集成到跌倒检测系统中,用于检测老人行走过程中的位姿。此外,依靠 IoT Studio 的 业务逻辑 开发工具,可以及时把跌倒状态通知给家人或亲戚朋友的钉钉账号,实现对老人跌倒的远程监控。

   三轴加速度:加速度计的三轴分量 ACC_X、ACC_Y 和 ACC_Z,均为 16 位有符号浮点数,分别表示器件在三个轴向上的加速度,取负值时加速度沿坐标轴负向,取正值时沿坐标轴正向。

   三轴角速度:绕 X、Y 和 Z 三个坐标轴旋转的角速度分量 GYR_X、GYR_Y 和 GYR_Z,均为 16 位有符号浮点数。从原点向旋转轴方向看去,取正值时为顺时针旋转,取负值时为逆时针旋转。

准备

   M5StackCore2 开发板一套,已内置 MPU6886 传感器,无需外接传感器。

物联网平台开发

开通公共实例

   对于第一次使用物联网平台的读者,需要开通实例以使用物联网平台的功能。这里可以使用免费的公共实例进行开发。

   在物联网平台中,左上角选择“华东 2-上海”,点击“公共实例”,即可开通。

   开通物联网平台功能之后,需要完成下面的 3 个步骤完成云端设备的创建:

  1. 创建云端产品
  2. 创建产品属性(物模型)
  3. 创建云端设备(获取三元组)

创建云端产品

   点击上图中的“公共实例”,即可进入控制台进行产品创建。然后,点击 创建产品 按钮,如下图所示。

   在新建产品设定页面按照下图所示,设定“产品名称”,选择所属的“自定义品类”(自定义品类的物模型为空,需要自己创建,也可以通过导入外部物模型的方式导入),节点类型选择“直连设备”,联网方式选择“Wi-Fi”,数据格式选择“ICA 标准数据格式”,检验类型和认证方式选择默认设定即可。还可以根据开发者自己的需求在“产品描述”页面添加针对此产品的描述。

   选择之后,点击“确认”按钮,即可完成产品创建。返回“产品”页面之后可以看到产品类表中会出现刚刚创建的“fall_detection”的产品,如下图所示。

创建产品属性(物模型)

   点击上图中的“查看”按钮,即可看到产品信息,Topic 列表,功能定义,数据解析等跟产品相关功能的设定。点开“功能定义”标签页,可以看到设备物模型定义。

   标识符是设备端上报设备属性状态的消息中需要使用的标识符,并且只有在设备上报的属性内容符合数据定义中的数据取值范围的时候才会被物联网平台记录,否则会被物联网平台认定为非法属性而过滤掉。

   本节我们选择创建自定义物模型的方式来创建此系统需要的物模型信息,点击上图中的”编辑草稿“按钮。然后按照下图的步骤,选择添加自定义功能。

   然后按照下图添加“跌倒状态属性”。

   物模型添加成功之后可以看到网页出现了我们刚才创建的物模型属性。其中 isFall 代表跌倒状态的属性,数据类型为 int32 整数型。此时点击“发布”按钮,按照系统提示一步一步进行下去就可以将刚刚创建的物模型属性发布到产品中。功能定义完成后点击 发布 按钮完成发布。

   产品及其物模型创建完成后就可以创建这个产品的设备了。

创建云端设备(获取三元组)

   在产品列表页面中,点击 fall_detection 后的 管理设备,就会进到设备管理页面。

   在“设备”页面点击“添加设备”按钮,如下图所示。

   在“添加设备”页面中设定“deviceName”,这里开发者可以自己填入自己想设定的设备名称(这里我们填入设备名称 fall_detection),也可以不填任何内容让系统自动生成设备名称,如下图所示。

   点击 确认 后弹出下面的“添加完成“提示框,点击 前往查看 按钮就可以看到此设备端详细信息了。

   设备信息中有两个信息需要和设备端开发相匹配:

  1. 三元组(点击下图中的“查看”及可看到三元组信息)
  2. 物模型属性信息

获取设备三元组

   如上图所示,点击“查看”按钮,就可以看到设备的三元组信息(如下图所示),三元组是物联网设备端和物联网云端设备相关联的唯一标识符,在设备端连接云端的时候会使用三元组信息和云端进行鉴权,鉴权通过之后云端会认为设备已激活并上线。

查看设备属性信息

   设备详情信息页中的“物模型数据”标签页中可以看到设备的所有属性信息、设备事件上报情况及设备服务调用情况,如下图所示。待物联网设备按照设备属性对应的标识符上报设备属性的时候,本图片中的“跌倒状态“属性值就会显示设备最新的属性信息。

创建产品和设备的过程是按照面向对象的思想进行设计的,其中创建产品可以看成是新建一个类,其中的物模型则是类的对象,创建设备则是进行类的实例化。

配置业务逻辑

   接下来就是配置业务逻辑,以便将设备端发送到物联网平台的数据通过钉钉的方式发送给疫情监控人员。这里我们采用物联网业务逻辑开发工具

   物联网应用开发(IoT Studio)提供了物联网业务逻辑的开发工具,支持通过编排服务节点的方式快速完成简单的物联网业务逻辑的设计。具体细节可以参考物联网应用开发中的业务逻辑章节。

1. 创建钉钉机器人

   点击钉钉头像,在弹出的对话框中点击设置按钮

   点击 机器人管理按钮

   在机器人管理页面点击 自定义按钮

   点击 确定按钮

   输入机器人名称及机器人想要添加的钉钉群组(如果没有可以自行创建),在安全设置一项添加"自定义关键词"。

   需要注意的是:自定义关键词用来过滤向钉钉群推送的信息,只有包括了该关键词的推送信息才会在群里显示,不包含该关键词的推送信息会被过滤掉。可以定义多个关键词,只要推送的信息中有一个词跟关键词匹配即可被群接收并显示。这里我们定义"发生跌倒"关键词,也就是说后续的推送信息里面必须包含"发生跌倒"这个词语。

   点击 完成按钮

   创建完成后会弹出提示框,点击``复制``按钮复制Webhook地址,使用该地址可以向钉钉群推送消息。点击完成。

配置 IoT Studio 物联网

   登录IoT Studio平台,在左侧的侧边栏点击项目管理,在项目管理页面点击新建项目按钮。

   在新建项目页面点击创建空白项目

   弹出新建空白项目页面,输入项目名称及描述后点击确定按钮。

   项目创建完成后会自动导航到新创建的项目,新项目需要关联产品,设备,并创建业务逻辑,以实现云端上报信息到钉钉的信息推送。

   点击左侧的产品侧边栏,点击关联物联网平台产品,在弹出的窗口中选择之前创建的产品并关联。

   点击左侧的设备侧边栏,点击关联物联网平台设备,在弹出的窗口中选择关联产品下的设备。

   点击左侧的主页侧边栏,在弹出的项目详情页选择业务逻辑,点击新建按钮,在弹出的下拉框选择新建空白业务服务

   在新建业务服务窗口输入业务服务名称及描述后点击确定按钮。

   业务服务创建完成后自动导航到业务逻辑开发页面。点击“节点”按钮显示所有原子功能,并以此拖住设备触发条件判断钉钉机器人到右侧的窗口。按住鼠标左键连接各个模块,注意条件判断逻辑输出要连接正确的钉钉机器人,以免逻辑混乱。

   点击设备触发模块,在弹出的对话框中选择产品、设备及触发条件。 选择产品

选择设备

选择属性

   点击条件判断模块,在弹出的对话框中条件配置。

   点击疫情安全模块,在弹出的对话框中设置Webhook,选择配置方式及消息类型。Webhook 对话框输入之前创建“疫情安全”钉钉机器人时候拷贝的字符串。在“消息类型”的内容配置项里填写content内容。(内容需要包括钉钉机器人设置的"自定义关键词")

   业务逻辑开发配置完成后,我们可以先使用软件调试的方式验证相关逻辑链路的正确性。点击网页右上角的保存按钮后点击部署调试按钮。

   在弹出的对话框选择前往按钮:

   在弹出的设备模拟器页面点击启动设备模拟器按钮:

   选择属性上报选项并在跌倒状态属性栏输入 0(门关闭)或者 1(发生跌倒),点击发送命令按钮:

   发送命令后,我们便可以在钉钉群接收到相关的通知:

   到这里我们已经完成了 IoT 云端的所有配置,接下来就是完成设备端开发并完成设备属性的上报。

设备端开发

开发环境

   在进行下一步之前请确保 M5StackCore2 开发环境已经搭建完毕。详情请参考M5StackCore2 开发环境的说明。

开发原理

步骤(1) MPU6886模块采集加速度和角速度信号;
步骤(2) 计算加速度标准差,如果大于阈值,进入步骤(3),否则回到步骤(1);
步骤(3) 计算角速度标准差,如果大于阈值,则发出跌倒预警,否则回到步骤(1);

创建解决方案

   如下图所示,打开 VS Code 之后在新建一个基于 hellworld 的 python 工程,设定好工程名称(fall_detection)及工作区路径之后,硬件类型选择 M5StackCore2,点击立即创建,创建一个 Python 轻应用的解决方案。

案例代码

   下载本案例代码并解压将所有文件复制后,覆盖刚创建的fall_detection工程根目录下的文件。main.py代码区如下图所示:

Python 脚本的详细说明请参考脚本内嵌的文字注释

  1. 修改路由器名称及密码

   修改 fall_detection 工程里 main.py中 wifiSsid 和 wifiPassword 的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在""符号中间)。

# Wi-Fi SSID和Password设置
wifiSsid = "请填写您的路由器名称"
wifiPassword = "请填写您的路由器密码"

   修改完成之后 get_wifi_status 函数中的 nm.connect(wifiSsid, wifiPassword) 语句就会连接读者自己设定的路由器。

  1. 修改设备端三元组

   修改本工程里 main.py中 productKey、deviceName 和 deviceSecret 的值为读者创建的物联网设备的三元组信息,如下图所示:

  1. 修改设备端上报数据所用标识符

   main.py中下面的代码实现的是上传跌倒状态到云端的功能。其中 isFall 便是将跌倒状态上报云端所用的标识符。

# 网络初始化wlan = network.WLAN(network.STA_IF)    #创建WLAN对象get_wifi_status()connect_lp(productKey, deviceName, deviceSecret)# 硬件初始化i2cObj = I2C()i2cObj.open("mpu6886")                 # 按照board.json中名为"mpu6886"的设备节点的配置参数(主设备I2C端口号,从设备地址,总线频率等)初始化I2C类型设备对象if not isinstance(i2cObj, I2C):raise ValueError("parameter is not an I2C object")print("mpu6886 inited!")mpu6886Dev = mpu6886.MPU6886(i2cObj)   # 初始化MPU6886传感器# 跌倒检测算法初始化fallDetection = fall_detection.fall_detection(mpu6886Dev)fallDetection.calibrate()              # 校准传感器# 跌倒检测循环while True:fall = fallDetection.detect_fall() # 检测是否跌倒if (fall==True):                   # in event of a fall detectionprint("FALL DETECTED using MPU sensor")upload_data = {'params': ujson.dumps({'isFall': 1,})}# 上传跌倒状态到物联网平台device.postProps(upload_data)utime.sleep_us(10)i2cObj.close()                                      # 关闭I2C设备对象del mpu6886Dev
  1. 阈值参数说明

   在 fall_detection.py 中,可以通过以下阈值参数来调节跌倒检测的灵敏度:

加速度 阈值说明 角速度 阈值说明
ACCELERATION_LOW_THREADHOLD 越大越灵敏,默认值 4 ANGULAR_VELOCITY_LOW_THREADHOLD 越小越灵敏,默认值 1
ACCELERATION_UP_THREADHOLD 越小越灵敏,默认值 12 ANGULAR_VELOCITY_UP_THREADHOLD 越大越灵敏,默认值 40

确保这个标识符和物联网产品的物模型中属性标识符是一样的,如下图所示:

docs/examples/tap_detection/esp32/README.md

推送脚本

  1. 推送脚本

   推送此工程到 M5StackCore2 设备上,如下图所示。

  1. 推送脚本时的日志

   推送过程中的日志输出如下图所示。如果需要选择串口号,请选择“/dev/cu.wchusbserial53190134851 'USB Single Serial'”,直接输入串口号前面的数字即可。

运行结果

本地查看

   推送此脚本到 M5StackCore2 之后并运行,将 M5StackCore2 粘在一个物体上,以模拟老人跌倒的状态。

   串口一开始会打印连接阿里云 IoT 平台及校准 MPU6886 传感器的日志,如下所示:

>>> execfile("/data/pyamp/main.py")
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.3.199', '255.255.255.0', '192.168.3.1', '192.168.3.1')
sleep for 1 s
establish tcp connection with server(host='xxxxxxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
物联网平台连接成功
sleep for 2s
mpu6886 inited!
Now you can start fall detection!
FALL DETECTED using MPU sensor
FALL DETECTED using MPU sensor
FALL DETECTED using MPU sensor

当打印“Now you can start fall detection!”后,即可开始进行跌倒检测。打印“FALL DETECTED using MPU sensor”表示检测到一次“跌倒动作”,同时我们也会收到钉钉端机器人的相关通知。

物联网平台端设备信息查看

   物联网设备的系统启动成功并连接到物联网平台之后,物联网平台上对应的设备状态会从”未激活状态“变为”上线“,在物模型数据标签页上会显示设备上报到物联网平台的属性值。

   到此为止,跌倒检测系统的案例就已经完成了。感谢您的阅读!

【毕设参考】跌倒检测 ESP32+HaaS Python Motion API 快速打造上云的跌倒检测系统相关推荐

  1. 绿色节能,怎么用ESP32 + HaaS Python怎么做一个起夜小灯?接上个“智慧路灯”案例中的留下的地下室人体感应亮灭灯

    自上个案例 "用ESP32 + HaaS Python做一个 智慧路灯 系统,稍加改造也能用在地下室哦"发布以来,数度冲上CSDN 领域热度排行榜 与 全站热度排行榜,也有朋友与我 ...

  2. 【毕设参考】ESP32 + HaaS Python 打造的噪音检测系统,远离喧嚣,安享静谧

    噪音检测系统    下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明.在硬件连线完成之后我们建议您先使用"一分钟上云体验"功能预先体验本案例的实际运行效果. ...

  3. 【毕设参考】ESP32 + HaaS Python打造可以统计流量的自动感应门系统

       下图是本案例的四步导学. 简介    目前很多写字楼.酒店等入口都采用自动感应的方式开门.关门,当有人靠近时,门就会自动打开,远离时会自动关门:有时候也需要将自动门设置常开状态,比如需要多次进出 ...

  4. 【毕设参考】“摸鱼”神器,用 ESP32 + HaaS Python DIY一款全功能鱼缸 控温、过滤、换水一键执行

    智能水族箱    下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明. 简介    伴随着人们生活水平的提高,养鱼已经成为了一种新的时尚,各种桌面鱼缸层出不穷,但是市面上的鱼缸系 ...

  5. 担心燃气泄漏,用ESP32 + HaaS Python做个24小时检测设备吧,手机随时随地就能查看,还能异常报警联动

    天然气是国人目前家庭里边烹饪和取暖所用的主要燃料,其主要成分是甲烷(CH4),同时还含有少量的丙烷.乙烷.丁烷等其他少量气体.天然气本身无色无味,密度比空气小.如果发生天然气泄漏,其在空气中浓度达到5 ...

  6. 想随时定位自己做的智能设备在哪?安排,ESP32 + HaaS Python足矣,定位还能显示在地图上哦

    随着智能手机的兴起,定位技术已经深入到我们生活的方方面面,开车导航.定位打车.找寻周边的共享单车.周边的餐厅,还有实时公交信息.实时路况等等,为我们的生活带来了极大的方便.尤其是疫情期间的行程码,几乎 ...

  7. 工科生的信仰 ESP32 + HaaS Python 打造HaaS收音机

    HaaS收音机 简介 FM收音机作为上世纪的产物,一度是大家日常使用最多的工具之一,现在已经很少用到,主要还是用在汽车上.一台经典的收音机往往能勾起很多人的回忆.本案例教大家如何快速打造一台物联网FM ...

  8. 使用 ESP32 + HaaS Python 打造智能温湿度UI面板

       随着这几年智能家居行业的快速发展,家庭用的智能面板越来越普及.智能面板不仅可以用来显示时间.家用电器的状态.回家/离家模式选择还可以用来调节空调温度.加湿器状态等等信息,给人们的生活带来了很多便 ...

  9. 【毕设参考】ESP32 + HaaS Python 打造在线空气质量检测器

    空气检测系统    下图是本案例除硬件连线外的3步导学,每个步骤中实现的功能请参考图中的说明. 简介    近几年空气污染逐渐变重,很多人对空气质量愈发关心.及时检测周报环境的空气质量并通过钉钉通知相 ...

最新文章

  1. tomcat端口号被占用
  2. HTC开放Vive Tracker代码啦!
  3. delegate委托
  4. mysql搜索规则_MySQL基于规则优化
  5. 关于epoll中的read函数说明
  6. 在DockerHub发布Dubbo Admin镜像
  7. 帮你梳理springboot所有常用注解
  8. 深入理解javascript原型和闭包(8)——简述【执行上下文】上
  9. genymotion无法安装apk的问题
  10. BMP图像文件格式分析附带图解
  11. Highcharts的使用
  12. 循环序列模型 —— 1.10 长短期记忆(LSTM)
  13. Nginx——反向代理多个服务器
  14. C程序设计语言现代方法03:格式化输入输出
  15. group by 深入总结
  16. android 官方增量更新,Android 如何实现增量更新
  17. python波形分析_[转载]频谱分析:基于python画出时域频域波形
  18. 3dB带宽的概念解释
  19. php多进程兑换电影票,通过读写同一个文件锁来解决并发!
  20. 4、nerf(pytorch)

热门文章

  1. 【raid数据恢复案例】raid5扩容导致的数据丢失的数据恢复
  2. 笔试题(十五):身高体重排序
  3. idea如何全屏_IntelliJ IDEA的视图模式
  4. 我的2018——上懂机器学习,下懂微信建群
  5. 从FastReport.NET导出文件时,如何配置Acrobat PDF阅览器选项
  6. 经济学模型2-生产可能性边界
  7. Windows 系统错代码
  8. 练习4-7 求e的近似值 (15 分)
  9. 用C轻松实现扫雷,简单,普通,困难模式快来学学吧
  10. 如何批量缩小图片尺寸?