亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

基于 Arduino、Windows 和 Azure 的跌倒检测系统

组件和用品

Arduino UNO
× 1
Microsoft Windows 10 IoT Core
Microsoft Azure
Microsoft Visual Studio 2015
Arduino IDE

关于这个项目

简介 :

跌倒导致致命伤害已成为老年人不可忽视的巨大挑战。在过去的几年中,在跌倒检测领域提出了不同类型的方法,可以将其解释为三种类型:基于可穿戴设备、基于环境传感器和基于视觉 [1]。首先,可穿戴设备通常利用嵌入式传感器来检测身体的运动和位置,例如加速度计、磁力计和陀螺仪 [2, 3]。而且基于可穿戴设备的方法成本很低,而且安装和操作对老年人来说并不复杂。其次,基于环境的方法总是使用压力传感器来检测和跟踪身体。该解决方案还具有成本效益且易于部署 [4, 5]。然而,感知人体以外的物体的可能性对这种方法的检测精度提出了显着的挑战。最后但同样重要的是,基于视觉的解决方案充分利用部署的摄像头来监控范围内的所有物体,包括人体 [6, 7]。与上述两种方式相比,对人们日常生活的干扰较小,但观测空间有限,无法实现无处不在的监测。

在该项目中,提出了一种基于Arduino、Windows 10和Microsoft Azure的实时跌倒检测监控系统。三维加速度计的原始数据由带有 ADXL345 的 Arduino 提供。 Windows 10 设备利用此信息通过高效的数据融合和跌倒检测算法来获取对象的方向。 Microsoft Azure 服务和移动/PC 应用程序也旨在实现无缝的数据处理、分析、存储和获取,只要他们能够访问互联网。系统架构如图1所示。

参考资料

[1] L. Jian 和 T. E. Lockhart,“碰撞前坠落事件检测算法的开发和评估”,生物医学工程,IEEE 交易,第一卷。 61,第 2135-2140 页,2014 年。

[2] P. Pierleoni、A. Belli、L. Palma、M. Pellegrini、L. Pernini 和 S. Valenti,“用于老年人跌倒检测的高可靠性可穿戴设备”,传感器杂志,IEEE,第一卷。 15,第 4544-4553 页,2015 年。

[3] R. Freitas、M. Terroso、M. Marques、J. Gabriel、A. Torres Marques 和 R. Simoes,“移动设备支持用于跌倒检测的可穿戴传感器网络”,SENSORS,2014 IEEE,2014,第 2246-2249 页。

[4] Z. Xiaodan、H. Jing、G. Potamianos 和 M. Hasegawa-Johnson,“使用高斯混合模型和 GMM 超向量的声学跌倒检测”,在声学、语音和信号处理,2009 年。ICASSP 2009。IEEE 国际会议,2009 年,第 69-72 页。

[5] L. Yun、K. C. Ho 和 M. Popescu,“使用 Microsoft Kinect 进行声学跌倒检测的有效源分离算法”,生物医学工程,IEEE 交易,第一卷。 61,第 745-755 页,2014 年。

[6] M. Yu、S. M. Naqvi、A. Rhuma 和 J. Chambers,“在基于视频的跌倒检测系统中应用的一类边界方法分类器”,计算机视觉,IET,卷。 6,第 90-100 页,2012 年。

[7] E. E. Stone 和 M. Skubic,“使用 Microsoft Kinect 在老年人家中进行跌倒检测”,生物医学和健康信息学,IEEE 期刊,第一卷。 19, pp. 290-301, 2015.

基于姿势识别的跌倒检测原理

在这个项目中,跌倒检测算法是根据 Bharadwaj Sreenivasan 的 Fall-detection-in-Android 设计的。算法中有两个模块,姿势识别和跌倒检测。首先,我们从加速度计读取 x、y 和 z 值。然后我们计算 x、y 和 z 的 L2 范数。供姿势识别和跌倒检测模块使用。

在姿势识别模块中,用户的姿势分为坐、站、走三种基本姿势。 “y”的值应用于阈值以找出方向。使用 L2 范数的变化率 w.r.t 平均重力加速度 (9.8),我们将数据分类为步行或状态之间的过渡。

跌倒检测模块在信号中搜索特定模式。图2表示跌倒事件中L2范数的典型模式。

如果连续最小值和最大值之间的差异大于 2g,则输出被判定为下降。跌倒事件的最终决定是基于姿势识别和跌倒决策模块的输出。当检测到跌倒时,姿势识别模块的决定会告诉我们这是否是误报。如果状态仍然是行走,则可以放弃跌倒事件决策。表 1 总结了最终决定。

先决条件

在这个项目中,对于Arduino设备,蓝牙通信是通过HC-06实现的,它是一个便宜的小封装模块。对于 Windows 10 设备,如果您使用 Surface Pro 和 Lumia 1520,则不需要蓝牙模块。但是,如果您使用 Raspberry Pi 或 MBM 作为 Windows 10 IoT 设备,则需要蓝牙加密狗。请参阅我们的 MVP David Jones 的 Generic Serial Bluetooth with Win 10 IoT-Core RPI2 来设置环境。

注意:如果您尚未安装 Windows 10 和 Visual Studio 2015,则需要 2-3 小时才能完成先决条件,但大部分时间无人值守。

你需要什么

零件:

1. Arduino Uno 和标准 A/B USB 线

2. HC-06蓝牙模块

3. ADXL345加速度计模块

4. 公-公、公-母跳线

5. 迷你面包板

6. Lumia 1520 或其他兼容 Windows Phone 10 的设备

7.ORICO蓝牙模块

项目说明

步骤 1:将加速度计模块 ADXL345 连接到 Arduino

时间 :5分钟

零件 :Arduino Uno R3、ADXL345、跳线、迷你面包板

工具 :不适用

ADXL345 是一款小型、薄型、低功耗、3 轴 MEMS 加速度计,具有高达 +-16 g 的高分辨率(13 位)测量能力。数字输出数据采用 16 位二进制补码格式,可通过 SPI(3 线或 4 线)或 I2C 数字接口访问。

ADXL345 支持 SPI 和 I2C,我们将在本项目中讨论 I2C。 I2C 是 2 线串行连接,因此我们需要将 SDA(数据)和 SCL(时钟)线连接到 Arduino UNO 进行通信。在 Arduino UNO 上,SDA 在模拟引脚 4 上,SCL 在模拟引脚 5 上。确保传感器上的 VCC 和 CS 引脚都连接到 3.3v。我们将 CS 连接到 3.3V 以告诉传感器我们将其用作 I2C 设备,而不是 SPI 设备。

第 2 步:连接蓝牙模块

时间 :5分钟

零件 :蓝牙模块、跳线

工具 :不适用

在这个项目中,我们使用 HC-06 作为蓝牙模块 - 它比 SparkFun 的 BlueSMiRF Silver 模块便宜得多。此外,HC-05具有“完整”固件,许多AT命令,并且可以作为主模块和从模块。另一方面,HC-06 固件只能是一个从设备,具有非常有限的 AT 命令。下表显示了所有带有响应的 HC-06 固件命令:

首先,将蓝牙模块插入面包板,使连接更容易。要为模块供电,请在 Arduino 的 5V 电源轨和模块的 Vcc 引脚之间运行跳线。并在模块的 GND 引脚和 Arduino 上的任何 GND 引脚之间运行一个公-公跳线。要建立串行通信,将一个公-公跳线从蓝牙模块的 TX 引脚连接到 Arduino 的 RX 引脚(数字引脚 0),另一个从模块的 RX 引脚连接到 Arduino 的 TX 引脚(数字引脚 1)。

注意:当您将蓝牙的 TX 和 RX 引脚连接到 Arduino 时,您将无法将草图从 Arduino IDE 上传到 Arduino。当您需要上传草图时断开它们并在成功上传草图后重新连接它们。在下面的草图中,显示使用了 HC-05。实际上,正如上面所解释的,HC-05 和 HC-06 都可以。

蓝牙和加速度计连接后,实物是这样的:

第 3 步:将蓝牙模块与 Windows 10 设备配对

时间 :5分钟

零件 :蓝牙模块,Windows 10设备,ORICO蓝牙模块(可选)

工具 :不适用

蓝牙模块运行 SPP(蓝牙串行协议)协议。所以任何支持 SPP 的设备都可以连接到它。在 Windows 10 设备上,这看起来像一个虚拟 COM 端口。在连接之前,请确保模块已通电并准备好配对。模块上的红色 LED 指示状态:闪烁表示“准备配对”,而常亮表示“配对”。

在 Windows 10 for PC 上,只需导航到设置->设备->蓝牙,打开蓝牙,然后屏幕上就会显示“HC-06”模块。点击 配对设备,然后输入设备的配对码。请记住,默认配对码是 1234,默认串口速度是 9600 波特。然后,蓝牙页面显示如下:

对于 Windows 10 移动版,导航到设置->设备->蓝牙,并执行上一节中描述的相同步骤。配对设备页面如下所示:

对于 Windows 10 IoT Core 设备,例如 Raspberry Pi 2、MBM 和 Dragon Board 410c,配对过程有很大不同。首先,对于没有板载蓝牙模块的Raspberry Pi 2和MBM,我们应该购买蓝牙USB加密狗并插入。只需参考硬件兼容性列表并选择经过验证的蓝牙USB加密狗即可。

本项目选用ORICO BTA-403模块。

如果你在 Dragon Board 410c 上尝试这个项目,那么你不需要蓝牙适配器,因为 Dragon Board 410c 有一个板载蓝牙模块。

将ORICO BTA-403蓝牙USB dongle插入树莓派2的USB接口如下。

插入 ORICO BTA-403 蓝牙 USB 加密狗后,它将在 Windows 10 IoT Core 设备的默认应用屏幕上显示消息。

对于 Windows 10 IoT Core 设备上的蓝牙配对,请参阅配对 BLE 设备和 GATT 属性表转储工具页面并按照“配对 Sensortag”部分中描述的“步骤 1 - 步骤 6”进行操作。这里我们应该使用 SSH 连接到 Windows IoT Core 并运行命令行工具来配置设备。

注意:请记住,应在主菜单上选择 BR 模式。并且默认配对码是1234。

配对成功后,设备蓝牙页面如下图所示:

第 4 步:创建 Azure 存储帐户

时间 :10分钟

零件 :不适用

工具 :Azure 帐号

在这个项目中,我们将需要 Azure Storage Table 来存储来自 Windows 10 IoT Core 设备的数据。因此,我们可以按如下方式创建它。

(1) 在 Azure 管理门户 (https://manage.windowsazure.com) 中,单击左侧的“STORAGE”图标以查看您现有的存储帐户(如果有),然后单击“+NEW”按钮在左下角。

(2) 在“新建”面板中,选择“数据服务”| “存储” | “快速创建”。填写“URL、位置/关联组和复制”字段,然后单击“创建存储帐户”按钮。

(3) 等待新存储帐户的状态显示为“在线”。

(4) 选择新创建的Storage account,然后点击页面底部的MANAGE ACCESS KEYS。复制存储帐户名称和访问密钥之一。

第 5 步:创建 Azure 存储表

我们使用 Azure 存储资源管理器(它是 Codeplex 上可用的第三方开源工具:https://azurestorageexplorer.codeplex.com)来创建 Azure 存储表。

(1) 去添加账户并填写账户名和访问密钥。建立帐户后,您可以访问显示 blob 容器、队列和表的存储。

(2) 选中表格,点击新建按钮,新建一个名为“Accelerometer Table”的表格,如下所示。

第 5 步:下载和部署代码

时间 :10分钟

零件 :不适用

工具 :不适用

首先,既然我们已经为 Arduino 连接好了一切,请从(在下面的代码部分中提供)下载“ADXL345_HC06.ino”项目并将其加载到您 PC 上的 Arduino IDE 中。请务必拔下 HC-06 模块的 TX/RX 跳线,然后上传草图。将 TX/RX 跳线重新连接到 Arduino 的数字 0 和数字 1 引脚。插上电源,应用程序将在 Arduino Uno 上运行。

其次,从github下载“GenericBluetoothSerialUWApp”项目。使用带有更新 1 的 Visual Studio 2015 加载“GenericBluetoothSerialUWApp”。这个应用程序是在我们的 MVP David Jones 的通用串行蓝牙与 Win 10 IoT-Core RPI2 的帮助下设计的。如果您希望此 UWP 应用在 PC 上运行,请选择带有本地设备调试的 x86 或 x64。如果您希望此 UWP 应用在 Windows 10 Mobile 上运行,请选择 ARM with Device debugging。如果您希望此 UWP 应用在 Windows 10 IoT 设备(例如 Raspberry Pi 2)上运行,请确保将“远程调试”点设置为您的设备。

接下来,在解决方案资源管理器中打开 MainPage.xaml.cs 并找到“dataTransferTick”。添加您在第 4 部分中保存的存储帐户名称和访问密钥。

将 HC-06 与您的 Windows 10 设备配对后,在 Visual Studio 中按 F5 以启动通用 Windows 平台应用程序。

双击“HC-06”符号,您将在应用程序的最顶部找到Id和Name显示,如下所示。

很快,您可以看到 HC-06 上的 LED 状态将从闪烁变为稳定。并且一旦蓝牙模块的通信通道建立,“Start Rev”按钮被启用。

单击“开始接收”以启用数据接收。然后您将看到停止接收、处理数据和上传数据按钮已启用。只需单击“处理数据”按钮即可运行跌倒检测算法。您将看到 Recvd TextBlock 上的数据和携带设备的人的状态。

您仍然可以发现数据将显示在 Visual Studio 的调试窗口中,如下所示。

然后,单击“上传”按钮将数据上传到 Azure。数据将每 3 秒传输一次。如果要更改时间间隔,可以修改“AzureButton_Click”中的代码如下。

private void AzureButton_Click(object sender, RoutedEventArgs e) {

timerDataTransfer =ThreadPoolTimer.CreatePeriodicTimer(dataTransferTick, TimeSpan.FromMilliseconds(Convert.ToInt32(3000) )));

}

很快,就可以看到AccelerometerTable中的数据如下

第三,从github下载“FallDetectionClient”。使用带有更新 1 的 Visual Studio 2015 加载此项目。此应用程序使用 Windows Universal Temple 构建,因此您可以在 Windows 10 PC/Mobile 以及 Windows 10 IoT Core 设备上运行它。接下来,在解决方案资源管理器中打开 StorageSensor.cs 并找到“_accountName”和“_key”。添加您在第 4 部分中保存的存储帐户名称和访问密钥。

现在您应该可以在 Visual Studio 中按 F5:应用程序将部署并启动,您应该会在设备输出中看到这一点。

代码

  • Arduino Sketch (ADXL345_HC06.ino)
Arduino Sketch (ADXL345_HC06.ino)Arduino
ADXL345 加速度计 + HC-06 蓝牙模块
#include  #include  #define Register_ID 0#define Register_2D 0x2D#define Register_X0 0x32#define Register_X1 0x33#define Register_Y0 0x34#define Register_Y1 0x35#定义寄存器_Z0 0x36#定义寄存器_Z1 0x37int ADXAddress =0xA7>> 1; int 读数 =0;int val =0;int X0, X1, X_out;int Y0, Y1, Y_out;int Z1, Z0, Z_out;double Xg, Yg, Zg;void setup(){ Serial.begin(9600); Wire.begin();延迟(100); Wire.beginTransmission(ADXAddress); Wire.write(Register_2D); Wire.write(8); Wire.endTransmission();}void loop() { double tempx =0;字符 strx[5];双时间 =0;字符[5];双温度 =0;字符 strz[5];字符串 gy; Wire.beginTransmission(ADXAddress); Wire.write(Register_X0); Wire.write(Register_X1); Wire.endTransmission(); Wire.requestFrom(ADXAddress, 2);如果 (Wire.available() <=2); { X0 =Wire.read(); X1 =Wire.read(); X1 =X1 <<8; X_out =X0 + X1; Wire.beginTransmission(ADXAddress); Wire.write(Register_Y0); Wire.write(Register_Y1); Wire.endTransmission(); Wire.requestFrom(ADXAddress, 2);如果 (Wire.available() <=2); { Y0 =Wire.read(); Y1 =Wire.read(); Y1 =Y1 <<8; Y_out =Y0 + Y1; Wire.beginTransmission(ADXAddress); Wire.write(Register_Z0); Wire.write(Register_Z1); Wire.endTransmission(); Wire.requestFrom(ADXAddress, 2);如果 (Wire.available() <=2); { Z0 =Wire.read(); Z1 =Wire.read(); Z1 =Z1 <<8; Z_out =Z0 + Z1; Xg =X_out / 256.00; Yg =Y_out / 256.00; Zg =Z_out / 256.00; if(Xg>0) { gy =String("")+ "x=+"+Xg; } else { gy =String("")+ "x="+Xg; } if(Yg>0) { gy +=String("")+ "y=+"+Yg; } else { gy +=String("")+ "y="+Yg; } if(Zg>0) { gy +=String("")+ "z=+"+Zg+","; } else { gy +=String("")+ "z="+Zg+","; } Serial.print(gy);}
蓝牙串口应用
通过HC-06蓝牙与Arduino通信,将ADXL345数据发送到Azure https://github.com/shijiong/FallDetection/tree/master/GenericBluetoothSerialUWApp
FallDetectionClient
用于跌倒检测的 UWP 客户端应用https://github.com/shijiong/FallDetection/tree/master/FallDetectionClient

示意图

ADXL345 + HC-06 完成 ADXL345 连接的%20Schematic.fzzSketch ADXL345.fzzSketch 用于蓝牙模块连接 hc-06.fzz

制造工艺

  1. 使用 Arduino 和 RFID 和 Python 的考勤系统
  2. 使用 Arduino Uno 的人体检测机器人系统
  3. 适用于 Windows 10 UWP 应用的 PM2.5 和 PM 10 检测器设计
  4. 森林火灾监测和探测系统(带短信警报)
  5. u-blox LEA-6H 02 GPS 模块,带有 Arduino 和 Python
  6. 基于 Arduino 和 OLED 的元胞自动机
  7. eDOT - 基于 Arduino 的精密时钟和气象站
  8. 基于Arduino和谷歌电子表格的考勤系统
  9. 基于Arduino的碰撞检测预警系统
  10. 使用 Arduino Uno 和蓝牙进行汽车控制
  11. 基于 Arduino 和 Android 的密码保护门锁
  12. 基于 Arduino 的安全系统