本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 英飞凌传感器的老人手环—老年痴呆症助理

发布时间:2022-01-07
分享到:

基于 英飞凌传感器的老人手环—老年痴呆症助理

发布时间:2022-01-07
分享到:

这是一款具有跌倒和位置检测、提醒等功能的智能手表,旨在帮助您或您所爱的人!

“每 9 名 65 岁及以上的人中就有 1 人患有阿尔茨海默病”
“家庭护理人员每年花费超过 5000 美元来照顾患有阿尔茨海默氏症的人。对于一些家庭来说,这意味着错过假期。但对其他人来说,这可能意味着要挨饿”
这些直接引用自阿尔茨海默氏症协会网站的事实足以让任何人了解一个人或他们所爱的人患有阿尔茨海默氏症时必须经历的问题。

作为一名创客,我考虑了这一点并决定我将构建一个可穿戴设备,一个可以帮助患者和他们的看护者的系统。

该系统至少应该能够执行以下任务:

  • 提醒患者执行任务,他/她每天必须做的事情(例如药物、运动等)
  • 监控患者在家中的位置
  • 在任何紧急情况下提醒看护人
  • 显示时间(毕竟是手表!)
  • 它应该是便携的、易于使用的,即使对于老年患者也是如此
  • 成本应该保持在最低限度

当我看到英飞凌的 Sensor Hub Nano 时,它似乎是这个项目的一个非常好的候选者,因为它的尺寸非常小,而且具有 BLE 功能。凭借准确的压力感应,它可用于检测患者是否跌倒并判断患者在家中的确切位置。

我将使用以下部分让基本项目正常运行:

  • 英飞凌的 Sensor Hub Nano
  • Arduino MKR1000
  • HC-05 蓝牙模块
  • 诺基亚 5110 显示屏

运行
在本节中,我将简要描述手表的工作原理,并概述我们必须执行的步骤才能使其工作。

Infineon 的 Sensor Hub Nano 评估板有一个 DPS310 气压传感器,它通过蓝牙通过评估板发送数据。压力、高度和温度值可以在 Infineon 的 Android 应用程序以及 SES2G 评估软件中查看。用户还可以根据自己的需求,使用英飞凌提供的库为 Android 构建应用程序。

但是,我希望阿尔茨海默氏症助手能够在没有 Android 手机的情况下工作。它应该是一种可自行工作的可穿戴设备,并且能够连接到智能手机以查看传感器数据。因此,我决定使用 Arduino MKR1000 板,因为它外形小巧且具有 WiFi 功能,并通过某种方法将其连接到 Sensor Hub Nano。

这是 Arduino MKR1000 的引脚排列,您会发现它很方便:

我有一个 HC-05 蓝牙模块,所以我不得不用它来连接 Arduino MKR1000 和 Sensor Hub Nano。但首先,我们需要将 HC-05 正确连接到 Arduino 的硬件 Tx 和 Rx 引脚,同时考虑到逻辑电平。我的蓝牙模块工作在 3.3v,与 MKR1000 相同,因此不需要任何电压电平转换器。但是,如果您的蓝牙模块在 5v 电平下工作,则可能需要使用类似于所示的电平转换器。

匹配电压电平后,我们需要将HC-05与Sensor Hub Nano配对以开始它们之间的数据通信,并找到一种简单的方法让Sensor Hub Nano每次进入HC的蓝牙范围时自动配对-05.

为此,我考虑将 HC-05 配置为蓝牙“主”设备,并仅将其与特定的 MAC 地址配对;传感器集线器纳米。因此,在这样配置之后,一旦您打开 HC-05,它就会搜索具有特定 MAC 地址(Sensor Hub Nano 的 MAC 地址)的设备,并自动与之配对,由用户发送和接收数据。

这是使用 HC-05 的 AT 模式命令完成的,并在“配置蓝牙模块”部分进行了介绍。

一旦配对并正确连接,向 Sensor Hub Nano 发送命令就像一个蓝牙终端。您可以使用我上面指定的命令,只需通过 HC-05 连接的硬件串行端口将它们打印为字符串即可。例如,这是您将发送以启动传感器数据流的命令:

一旦我们能够从模块开始数据流,我们就需要一种方法来解析它的数据。我必须承认,这是项目中最艰难的部分;一旦您发送了启动数据流的命令,Sensor Hub Nano 就会发送一个数据流,让接收数据的设备从中解析任何有意义的信息。因此,在尝试了许多不同复杂度的方法之后(我不会在这里介绍),这是我想出的最简单、最有效的方法,用于解析来自 Sensor Hub Nano 的数据。

显示器也将连接到 Arduino 以与用户交互,并显示任何消息,或显示时间或来自传感器的数据。

一旦您在 Arduino MKR1000 中获得数据,由于其无线连接,您可以将数据发送到许多不同的物联网平台,例如 Cayenne 或 Blynk。

为此我决定使用 Cayenne,因为它漂亮的界面和简单的设置给我留下了深刻的印象。但是,遗憾的是,它在 MKR1000 WiFi 连接上存在一些错误,导致我们无法选择引脚。我应该提到 Cayenne 那边的人非常有帮助,但问题仍然没有解决。因此,我最终决定使用 Blynk,但它们的用法非常相似,因此只需更改几行 Arduino 代码,如果您想测试一下或一旦出现问题,您可以从 Blynk 切换到 Cayenne解决。两者或多或少具有相同的功能,因此这只是您自己的喜好。但是 Cayenne 的唯一优势是您也可以在 PC 上访问它,而 Blynk 仅适用于智能手机。

现在,我们已经从 Sensor Hub Nano 接收到数据,将其输入 Arduino,并将其传输到 IoT 平台(从现在开始我会说 Blynk),因此,现在您只需要根据根据您自己的需要。

配置蓝牙模块
您需要做的第一件事是获取 Sensor Hub Nano 评估套件的 MAC 地址。有很多不同的方法可以做到这一点,但我会告诉我我是如何做到的。

将 Sensor Hub Nano 与您的智能手机配对:

这里下载 Infineon 的 Sensor Hub Nano 评估应用程序(适用于 Android)并打开您的 Sensor Hub Nano。打开应用程序,它将显示 Sensor Hub Nano 为“IFX_NANOHUB”,其下方是 MAC 地址。

请记下这一点,因为您稍后将需要它。

注意:如果您现在不使用 Sensor Hub Nano,最好将其与智能手机取消配对,因为如果您的手机在附近并打开蓝牙并且 Sensor Hub Nano 已配对,手机会自动与其连接。当您设置 HC-05 并尝试使其与 Nano Hub 配对时,它根本无法连接。

使 HC-05 进入 AT 模式:

AT模式允许我们配置HC-05蓝牙模块的设置;设置波特率或设置是否作为从设备或主设备连接等等。我们需要更改模块的一些设置,以使其能够成功地从 Infineon 的 Sensor Hub Nano 检索数据。

首先,将“AT 命令”草图上传到 Arduino MKR1000。这将允许我们通过 Arduino MKR1000 在 AT 模式下向蓝牙模块发出命令。

// Needs to be placed in to AT mode 
// After a factory reset the default baud rate for communication mode is 38400 
char c = ' '; 
void setup() { 
 // start the serial communication with the host computer 
 Serial.begin(9600); 
 Serial.println("Arduino with HC-05 is ready"); 
 // start communication with the HC-05 using 38400 
 Serial1.begin(38400); 
 Serial.println("Serial1 started at 38400"); 

void loop() { 
 // Keep reading from HC-05 and send to Arduino Serial Monitor 
 if (Serial1.available()) 
 { 
   c = Serial1.read(); 
   Serial.write(c); 
 } 
 // Keep reading from Arduino Serial Monitor and send to HC-05 
 if (Serial.available()) 
 { 
   c =  Serial.read(); 
   // mirror the commands back to the serial monitor 
   // makes it easy to follow the commands 
   Serial.write(c); 
   Serial1.write(c); 
 } 
}

然后按照图仅将蓝牙模块连接到 Arduino MKR1000。

注意:最好先在面包板上接线,然后在正确设置后继续正确接线。

如果您尝试打开 Sensor Hub Nano 和 HC-05,您会看到它们此时不会自动连接。

要更改 HC-05 设置,您需要让蓝牙模块处于 AT 模式。执行此操作的方法取决于您拥有的分线板,因此您可能必须以不同的方式进行。

我的蓝牙模块有按钮开关,所以我必须执行以下步骤才能使其进入 AT 命令模式(不要忘记将 AT 命令代码上传到 Arduino):

  • 断开模块的电源。(TX 和 RX 线仍然连接!)
  • 按住模块上的按钮开关关闭
  • 在按住按钮开关的同时接通电源
  • 当 LED 亮起时,松开开关

进入 AT 模式后,您会注意到 HC-05 上 LED 闪烁模式的显着差异。在通信模式下,LED 快速闪烁,大约每秒 5 次,而在 AT 模式下,LED 每隔几秒闪烁一次。

设置 HC-05 模块:

打开串口监视器,将波特率设置为 9600 并选择“Both NL & CR”。

注意:您需要将其设置为换行符和回车符,否则 AT 命令不起作用。

在串行监视器中键入“AT”,您应该会收到“OK”。如果你这样做了,那么你可以继续前进并像我一样发出命令。

基本上,我们需要在 AT 模式下更改这些设置:

  • 删除所有当前配对的设备
  • 让它只连接到指定的蓝牙 MAC 地址
  • 将蓝牙连接模式设置为“主”
  • 指定我们需要它连接的 MAC 地址
  • 设置波特率为115200,停止位为2位,偶校验

给出了上述说明,以便您即使有另一个蓝牙模块也可以通过参考命令和它们的作用来使用它们。但现在我将列出我为 HC-05 与 Sensor Hub Nano 配对的命令。

  • AT+RMAAD
  • AT+CMODE=0
  • AT+角色=1
  • AT+BIND=1234,56,abcdef(替换为Sensor Hub Nano的MAC地址)
  • AT+UART=115200,0,0

这是我的 AT 命令的日志,供您参考:

您现在应该拔下 Arduino 以关闭蓝牙模块。这将使其恢复到通信模式。

注意:如果您在 HC-05 设置中搞砸了任何事情,最好将模块重置为默认设置并使用以下命令从头开始:AT+ORGL

测试连接:

现在,您需要测试最后一步是否成功;你可以通过打开 Sensor Hub Nano 来做到这一点。蓝色 LED 将非常缓慢地闪烁,每隔几秒钟闪烁一次。然后,将您的 Arduino 插入您的 PC,并注意 HC-05 和 Sesnor Hub Nano 上 LED 闪烁的变化。

有一个明显的区别,你应该知道这两个模块是相连的。您现在可以转到下一部分,即连接项目并对其进行测试。

注意:如果您之前已将智能手机与 Sensor Hub Nano 配对,则可能需要取消配对,否则会导致连接问题。它一次只能连接到一台设备。

测试基本项目
通过 LED 闪烁模式确认 HC-05 和 Sensor Hub Nano 之间的连接正确后,继续在智能手机中设置 Blynk 应用程序。

设置 Blynk 应用程序:

这里下载适用于您的 iOS 或 Android 设备的 Blynk 应用程序(如果您还没有),然后通过 Blynk 应用程序扫描二维码。它将自动复制此时所需的基本小部件。

您将看到类似的屏幕:

此时不要在此处进行任何更改,请继续阅读。

安装所需的库:

您需要为 Arduino IDE 安装两个不同的库,以使代码能够无误地编译。他们是:

  • Blynk ,将其连接到您的智能手机
  • u8g2lib ,用于显示

上传代码并测试:

安装库后,下载附加的代码并对其进行一些更改。您需要添加来自 Blynk 的身份验证代码(在 Blynk 中创建新项目时会通过电子邮件发送给您),以及您的 WiFi SSID 和密码。完成后,将代码上传到 MKR1000。

上传代码后,根据原理图连接电路。

然后在您的智能手机中打开 Blynk 应用程序,打开阿尔茨海默氏症助手项目并按下播放按钮。插入 MKR1000(将 HC-05 和显示器连接起来),您应该会在显示器上看到标志,Alzheimer's Assistant。它会停留片刻,然后您可以看到消息“正在等待 Sensor Hub Nano ”。打开 Sensor Hub Nano 上的小开关,确保您在 HC-05 模块的蓝牙范围内。它应该显示“已连接到 Infineon 的 Sensor Hub Nano ”,几秒钟后,您应该会在智能手机上看到压力温度和高度值。

几秒钟后,您还将看到 24 小时格式的时间以及日期,并与互联网同步。

个性化阿尔茨海默氏症助手
到目前为止,我们的设置以简洁优雅的设置从英飞凌 DPS310 检索传感器数据,但要从中获得有用的东西,我们必须根据个人要求和偏好配置设置。因此,在本节中,我将讨论代码以及如何根据每个用户的喜好修改阿尔茨海默氏症助手使其工作。我将给出每个“功能”的代码片段,您只需稍作更改即可将其添加到主代码中。

注意:当您查看我为“裸机项目”附加的代码时,您会看到它使用了 BlynkTimer 中包装的函数。如果您想进行任何自定义,我将是一个好主意,因为它可以在指定的时间间隔执行任务,并且还可以防止硬件向 Blynk 发送大量请求时发生的 Blynk 洪水错误。此外,从所有功能都存在但不包含在主代码中的意义上说,代码是“简单的”;用户必须根据需要编辑主代码,并且可能需要调整每个功能运行的时间间隔。

DPS310:

Infineon 的 DPS310 是一种低成本数字气压传感器,它以非常小的外形尺寸提供非常高的精度。正因为如此,在这样的项目中使用它是完美的,这些值可以用来检测老年患者的跌倒,或者患者确切在哪个房间。

注意:我还没有制作智能手表外壳,所以我正在使用我手上的 Sensor Hub Nano,通过蓝牙与 Arduino 连接,如下图所示:

跌倒检测:要检测跌倒,我们需要给出跌倒值(指定时间内两次读数之间的气压差),并设置间隙。例如,如果两个连续值之间的高度变化(比方说一秒的时间)在跌落值 ± 间隙值之间,则将检测到跌倒。

我做了几次测试,发现下降值应该是0.7,间隙值应该是±0.2,但它们可能不适用于所有情况。这是由于一个简单易懂的原因,当一个人跌倒时,它可能以多种不同的方式发生。因此,需要使用辅助传感器(可能是加速度计)来提高跌倒检测系统的准确性,这将被添加到未来的工作中。但是总是有可能有其他更准确的算法来检测跌倒。

检测患者在哪里:这与跌倒检测算法类似。例如,如果您需要知道患者在哪个楼层,您可以获取当前高度值并将其从先前的值中减去。然后将差异与预定义的值进行比较。这将指示患者在哪个楼层。

只需使用简单的 if 和 else 逻辑来确定患者所在的楼层(海拔值已经存在于主代码中)。这可以使用 Blynk 中的 LED 小部件来指示。

注意:我没有在主代码中包含位置检测,但用户可以根据需要添加它,只是不要忘记将其用作 Blynk 计时器功能。

同样的技术也可以用来检测一个人在哪个房间。在这种情况下,将需要诸如运动传感器之类的辅助传感器,否则可能会出现很多错误触发。

温度:DPS310 还显示温度值,我们可以使用它来提醒我们有关患者可能发生的任何事故,例如火灾。如果温度升高到特定值,比如说 45℃,它会提醒管理员。

但是因为 DPS310 传感器没有直接连接到皮肤(至少在这个用例中),我们得到的不是体温,但更准确地说它是 Sensor Hub Nano 的温度。

代码非常简单(在主循环中的任何地方使用),可能是这样的:

注:以上所有图表均使用英飞凌提供的 SESG2 评估软件创建。

蜂鸣器和开关:

我之前没有提到过这一点,但是系统中还应该有一个蜂鸣器和一个开关,它们也会很有帮助。例如,可以使用蜂鸣器来吸引患者的注意力,例如该吃药的时间,而开关可以用作安全装置。

因为我们将使用 Blynk,按钮开关可以设置为按下时,通知会出现在看守人的手机上,或者它会打电话或发送短信(这可以使用 IFTTT 完成,稍后会给出) )。这可能是执行此操作的代码片段:

它取自 Blynk 示例代码,并使用中断来检查按钮。患者可以使用它在任何紧急情况下提醒看护人,例如跌倒检测算法未检测到的跌倒。

蜂鸣器可用于产生音调,以提醒患者进行诸如药物治疗或锻炼之类的任务。

显示器:

用户实际查看的项目的主要部分是显示。诺基亚 5110 显示器普遍可用,易于设置且价格便宜,但它们并不那么华丽,尤其是在这样的系统中使用时。具有更高分辨率的 OLED 显示器将是它的一个很好的替代品,您可以轻松修改代码以使用它,因为我使用了 u8g2 库。选择任何显示器型号,并将其添加到草图的开头。您需要根据代码中的内容将其连接起来,然后就可以开始使用了。您还可以使用具有更高分辨率显示的位图图像。您还可以更改显示器上文本的字体。

注意:如果您使用分辨率更高的显示器,您可能需要更改代码中文本的像素位置。

这只是对用于使显示工作的库的简要说明。但是,现在我将告诉您如何编辑代码以使阿尔茨海默氏症助手显示时间或 Sensor Hub Nano 数据(温度、高度和压力)。

显示时间:要显示时间,您可以简单地使用 RTC(或计时模块),但由于我们已连接到 Internet,因此使用 Internet 同步时间会容易得多。当我们使用 Blynk 时,它会变得更加简单。您只需要项目中的 RTC 小部件。现在只需几行代码,您就可以从 Blynk 服务器自动检索时间(确保从 Blynk 小部件设置您的时区)。主要代码设置为默认显示时间(不是传感器值,接下来讨论)

注意:屏幕上显示的时间可能会上升或下降一分钟,因为它是从互联网同步的,但尽管如此,我已经测试了很长时间并发现它非常准确(只是一个几秒钟)。

显示 Sensor Hub Nano 数据:我们也可以在显示器中显示来自 Sensor Hub Nano 的数据。并不是说它会使患者受益,而是在您需要时用于调试目的。这可以通过以下代码片段来完成:

void showSensorValues() { 
 //Shows the sensor values on the display 
 char bufT[10]; 
 char bufP[10]; 
 char bufA[10]; 
 String(t).toCharArray(bufT, 10); 
 String(p).toCharArray(bufP, 10); 
 String(a).toCharArray(bufA, 10); 
 u8g2.clearBuffer(); 
 u8g2.setFont(u8g2_font_6x10_tf ); 
 //Display the temperature 
 u8g2.drawStr(0, 10, "T:"); 
 u8g2.drawStr(12, 10, bufT); 
 u8g2.drawStr(73, 10, "C"); 
 u8g2.drawCircle(70, 4, 1, U8G2_DRAW_ALL); 
 u8g2.drawHLine(0, 12, 85); 
 //Display the pressure 
 u8g2.drawStr(0, 26, "P:"); 
 u8g2.drawStr(12, 26, bufP); 
 u8g2.drawStr(60, 26, "mBar"); 
 u8g2.drawHLine(0, 28, 85); 
 //Display the altitude 
 u8g2.drawStr(0, 42, "A:"); 
 u8g2.drawStr(12, 42, bufA); 
 u8g2.drawStr(72, 42, "m"); 
 u8g2.drawHLine(0, 44, 85); 
 //Send the values to the display 
 u8g2.sendBuffer(); 
}

不要忘记运行此命令以获取以下传感器数据:

但这并不是显示器的全部。正如我在开头所说的那样,阿尔茨海默氏症助手应该能够提醒患者每天需要完成的任务,例如何时服药或提醒患者锻炼。

使用 Eventor 小部件提醒:-

为此,我们将在 Blynk 中使用 Eventor 小部件。

将 Eventor 小部件添加到您的项目中(如果您扫描上面的二维码,它已经存在),只需按照屏幕截图查看如何设置它:

在上面的示例中,事件器小部件用于设置跌倒检测通知。

使用 Eventor 小部件进行提醒由以下代码完成:

到了服药时间时,显示屏上的结果:

运动也是一样:

这是通过键入:

由于这对我没有用,我没有将它添加到主代码中,但是您可以随时根据需要添加(命令已存在,您只需要在主草图中添加一些逻辑即可)。

使用 Blynk 和 IFTTT:-

Blynk 可以让任何 Arduino 项目轻松利用 IFTTT 的功能。

这是因为您可以使用 Blynk 向 IFTTT Webhooks 频道(以前称为 Maker 频道)发送 Webhook 请求,并且您可以创建一个 IFTTT 小程序等待触发 Webhook(从 Blynk 和 Arduino 方面),您可以让它触发任何其他响应。

关于如何将 IFTTT 和 Blynk 与 webhooks 一起使用的简单示例:

Blynk webhook 小部件可用于发送这样的 webhook 请求:

这是 IFTTT 网络钩子频道:

并且使用 webhooks 来触发 IFTTT 并不是唯一的方法。IFTTT 也可以通过使用 Blynk 发送电子邮件和推文来触发。

您现在已经制作了一个小程序。是时候测试一下了。

在 IFTTT 中打开“服务”,然后选择“Webhooks”。转到“设置”,您将在那里看到一个 URL。复制它并在新选项卡中打开它。在那里,而不是 {event},输入事件名称(您之前设置的)。这对我来说是“button_pressed”,所以当我点击“Test it”时,这是几秒钟后的结果:

现在您已经确认 Webhook 工作正常,您只需在 Blynk Webhook 设置中写入 URL 并获得 GET 或 POST 请求(通过 Blynk Webhook 小部件)

而且,如果您愿意,您也可以使用电话,甚至 Twitter 和 Facebook,而不是 SMS,这就是 IFTTT 的强大之处。

最后的润色
到目前为止,该项目的几乎所有电子部分都已完成,但仍有一些东西存在。最后,我将列出为改进该项目应该做的未来工作。

电池和充电:

MKR1000 有一个锂聚合物电池端口,这意味着您可以连接一个。但我目前没有,所以我不会深入研究,但如果您需要相关信息,您应该查看 Arduino MKR1000 的网站。

对于充电,您有两种选择,直接使用 MKR1000 USB 端口,另一种是使用无线充电(如果有的话)。我将使用无线充电。这是因为我已经有了 Futara Elettronica 制造的无线充电接收器和发射器。

要使用接收器和发射器,只需为发射器提供指定电压即可。那将是“基座”,您可以在其中放置阿尔茨海默氏症助手进行充电。在接收器端,您只需剪下并连接一根备用的 USB micro B 电缆(连接到 MKR1000 USB 端口),然后通过查看引脚排列将另一端连接到 VCC 和接地。

看看下面的图片,看看如何连接它:

最终结果:

外壳:

与每个项目一样,这也需要一个外壳,这就是我最终希望阿尔茨海默氏症助手的样子:

如果您对此项目有任何想法、意见或问题,请在下方留言。

原文链接丨以上内容来源网络,如涉及侵权可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论