手搓党分享:用Air700E开发板+毫米波雷达,搓一个睡眠监测仪!

news/2024/10/13 10:36:18

 只能说,看到这个大佬分享的睡眠监测仪,手上的手环瞬间不香了。。。

用Air700E开发板+毫米波雷达,手搓一个开箱即用的睡眠监测仪,不花冤枉钱!

 

一、项目原理及硬件制作

 

毫米波是指频率范围从30-300GHz的电磁波,它的波长很短,雷达发射的毫米波会随人体反射回来,同时人体微小的移动会改变毫米波。有了这些变化,雷达可以计算出人体移动的距离速度以及方向。

- 项目原理 -

毫米波雷达测人体胸腔起伏,根据起伏计算心率和呼吸频率,然后通过算法推算睡眠状态,使用手机小程序读取和展示数据。

 

图片

相比市面上的手环,毫米波雷达无需佩戴即可实现无感体验的隐形监测。

- 主要物料 - 

本文睡眠监测仪主要硬件物料包含:毫米波雷达R60ABD1、合宙Air700E开发板、传感器(AHT20、BH1750等等)、底板和外壳。除了底板需要打板和外壳需要3D打印,其他零件都可以在网上购买组装。

01. 毫米波雷达R60ABD1:

常见的毫米波雷达有24/60/77GHz三种,原理上频率越高,雷达感知的微动幅度越小。这款60GHz自带睡眠监测功能的毫米波雷达,它很接近我的想法。

 

图片

02. 合宙Air700E开发板:

按照以往经验,睡眠监测仪最简单直接的做法是,找一块开发板连上雷达串口,将雷达数据通过蓝牙转发出去,客户端通过蓝牙读取雷达数据,然后展示出来。

但为了让家里的老人也能用,我打算加上远程看护的功能,所以这里要改用可以Wi-Fi或者4G通信的开发板,还要部署一套存放和查询数据的后端服务。

 

图片

虽然我对开发板选型没有任何偏好,但觉得有必要把吃灰的羊毛利用起来——以前入手的合宙Air700E开发板不仅性价比高,而且可以用Lua写嵌入式,特别适合。

03. 自制底板(可选):

自制的底板用于整合Air700E开发板、毫米波雷达R60ABD1和其他传感器(AHT20、BH1750等等)。

 

图片

 

图片

所以其实即使没有底板,用杜邦线连接它们,然后刷入固件,也可以在小程序验证毫米波雷达的睡眠监测能力。不过为了避免验证过程中发生各种问题,我还是建议用底板验证。

04. 自制外壳(可选):

设计外壳时,要注意到雷达的距离最好是半波长的整数倍;加上USB口和按键,硬件图形就出来了。为了方便调试,外壳保留了开发板上的开机键和关机键。

 

图片

- 硬件组装 - 

拿到板子开始组装,先焊接元器件和Air700E开发板,再装雷达。可以看到堆叠后雷达和Air700E开发板还有一点点距离,雷达性能应该不会有太大影响。

 

图片

 

图片

安装外壳也是很简单,几乎不可能犯错。上好螺丝之后,测试一下按键有没有问题,到这里硬件算是完成了。

 

图片

- 开源链接 - 

目前基于毫米波雷达的睡眠监测仪项目硬件,已在立创平台开源。可通过原工程链接获取项目相关详细操作步骤、注意事项,以及原理图、PCB等最新文件:

原工程链接:
https://oshwhub.com/zomco/MR60LT0

开源协议:
CERN Open Hardware License

二、功能实现及效果测试

 

图片

 

- 功能实现 - 

项目代码嵌入式部分,我直接用合宙官方的模板工程。删掉不需要的代码,加上雷达串口通讯相关代码。雷达协议并不复杂,心率、呼吸频率、体动是实时上报的,所以比较好调试。而睡眠数据每10分钟才上报一次,调试会比较困难。

后端部分主要分三块:

  • 从雷达拿数据存到数据库

  • 提供历史数据查询接口

  • 提供实时数据查询接口

 

对接雷达的部分会麻烦一些,其他都是很简单的增删查改。

前端部分我直接参考小米运动的设计,除了要有查看历史数据和实时数据的页面,还需要有调整雷达和绑定雷达的入口。到这里软件也好了,可以测试一下效果。

- 效果测试 - 

01. 绑定设备:

插卡开机,等待指示灯常绿。长按绑定键,雷达进入绑定状态;然后打开小程序OWR Care,扫描开发板表面的二维码,等待绑定完成。调整雷达位置,确保雷达距离合适。

 

图片

图片

02. 心率测试:

我们先看看实时数据,心率测试结果和手环的有一些偏差,但也不是太离谱:

 

图片

03. 睡眠测试:

睡眠数据要等睡醒才会有,而且雷达只能做单人睡眠监测。但我没有这样的测试条件,这里只好先给出双人监测测试结果,最后我测了三组数据:

 

图片

有几个地方需要注意:

首先因为睡眠数据的上报,频率是10分钟一次,所以雷达计算睡眠时长最小单位是10分钟。

其次,手环可以测出快速眼动期时长,雷达则不能;雷达会计算清醒时长而手环就没有。最后我无法确认手环和雷达对睡眠状态定义是否一致,也无法得知他们的结果是否能反映实际情况。

但至少从三组数据可以看出,手环和雷达测得的睡眠时长,总体上接近实际时长。第三组数据偏差较大,估计在双人监测场景,雷达无法区分哪个人先睡或者先醒,直接将睡眠时长叠加计算了。

考虑到项目定位不是医疗器械,我觉得这种偏差是可以接受的,使用几天整体感受也是很好。

 

- 待改进完善 - 

 

图片

指示灯:

挂在床头就有点光污染,不过可以将外壳做厚避免透光,但我估计会影响雷达性能。当然,最好的办法是换其他材质的外壳。

自身算法:

实测发现,有吹风干扰的时候,雷达会误判有人在睡觉,或者雷达安装角度不够,有时候会没有数据,不知道厂商那边有没有升级计划。

总体上看,个人认为雷达使用体验比手环好多了,它更符合用户长期使用的习惯,要回查睡眠数据也是很方便,你觉得呢?你的手环还好吗?

如果你也对毫米波雷达睡眠监测仪感兴趣,不妨自己试试DIY~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70997.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

记录工作开发日常遇到的问题点-css字体

data.forEach((item, index) => { style +=@font-face {font-family: FileType${index};src: url(${item.FileUrl}) format(truetype);} ht +=` });$(head).append($(<style>).text(style));//插入到head后面$(#fontFamilyContent).html(ht)$(…

手撸二叉树——二叉查找树

二叉树是数据结构中非常重要的一种数据结构,它是树的一种。二叉树是数据结构中非常重要的一种数据结构,它是树的一种,但是每个节点的子节点不能多余两个,可以是0,1,2个子节点,0个子节点代表没有子节点。常见的二叉树结构如下图所示:每个节点的子节点不多于2个,其中3,…

煤矿皮带运输智能监控系统

煤矿皮带运输智能监控系统基于视频AI图像识别算法,煤矿皮带运输智能监控系统通过实时监测皮带运输过程中的各种异常情况,如跑偏、撕裂、堆料异常等,实现对运输过程的智能监控。煤矿皮带运输智能监控系统一旦检测到异常情况,立即发出告警并采取相应的措施,以保障运输安全。…

2024-2025-1《计算机基础与程序设计》第3周学习总结20241428张雄一

学期(如2024-2025-1) 学号(如:20241300) 《计算机基础与程序设计》第X周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(https://www.cnblogs.com/rocedu/p/9577842.html#WE…

パナソニックグループ プログラミングコンテスト2024(ABC 375)

形象理解这一场的 CA.Seats \(\text{diff }20\)对给定序列 \(S\) 找出 \(i\) 的个数,使得 \(S_{i}=0,S_{i+1}=1,S_{i+2}=0\)#define int long long string x;signed main(){int n;cin>>n;cin>>x;int ans=0;for(int i=0;i<=(int)x.length()-3;++i){if(x[i]==# an…

揭秘 FineVideo 数据集构建的背后的秘密

开放视频数据集稀缺,因此减缓了开源视频 AI 的发展。为此,我们构建了 FineVideo,这是一个包含 43,000 个视频的数据集,总时长为 3,400 小时,并带有丰富的描述、叙事细节、场景分割和问答对。 FineVideo 包含高度多样化的视频和元数据集合,使其成为训练模型理解视频内容、…

财务人的数字化转型

随着全球经济的变化,所有行业从过去的红利,过渡到向管理要红利,数字技术为经营和财务效率带来了令人惊喜的助推力,财务数字化成为企业转型的一个重要方向。 公司战略转型背后,财务组织如何长期落地? 数字化转型带来哪些实质性效益? 财务共享中心数字化建设现状 不同阶段…

多校 A 层冲刺 NOIP2024 模拟赛 06

多校A层冲刺NOIP2024模拟赛06 T 小 Z 的手套(gloves) 签到题 答案显然具有单调性,排序后二分答案即可。 T 小 Z 的字符串(string) 签到题 注意到 \(n\) 较小,可以使用 \(O(n^3)\) 的算法,直接上大 \(DP\)。 设计状态 \(f_{i,j,k,0/1/2}\) 表示从左往右填到 \(i\) 位,已…