专家建议您彻底洗手以防止感染。所以我创建了一个计时器来测量洗手所需的时间。
在这里,挑战是如何开始计时。按钮开关是最简单的,但最好不要在洗手前触摸它们。我们可以使用红外线或超声波传感器,但由于需要外部组件,因此很难广泛使用它们。
该项目的独特之处在于,通过麦克风检测到流水的声音以启动计时器。这里使用的 M5Stick-C 具有内置麦克风,因此您不需要任何外部组件。
因此,任何人都可以通过简单地将代码编程到 M5Stick-C 中来实现一个简单的洗手定时器。
有许多可能的方法可以只检测水声。例如,使用高于某个值的音量级别是一种简单的方法,但它可能会导致许多故障。
在这里,我决定利用具有独特频谱的水声的特性。
显示了一个整体框图。来自麦克风的音频输入通过 FFT 转换到频域。然后使用 SVM(支持向量机)对输入音频与水声的接近程度进行评分。该分数以 FFT 的样本单位为单位。接下来,累积这个分数。这是为了检测这个特性已经持续了超过一定的时间。
我使用 Jupyter Notebook 来学习 SVM。为此,我使用了带有和不带有水声的 Arduino 的串行日志。后面会详细说明。
软件设置
由于我们使用的是 FFT 库 ArduinoFFT,如果 Arduino IDE 中尚未安装该库,请安装该库。
arduinoFFT https://github.com/kosme/arduinoFFT
接下来,在github上编译和编程这两个源文件。
SVM 模型是如何创建的
需要执行以下 3 个步骤。
首先,要记录样本数据,将以下代码添加到 HandwashingTimer.ino。
#define _SAMPLEMODE
通过此更改,FFT 结果通过 arduino 串行端口记录。您可以将数据保存到文件中。每次水流和不流水时,数据都会记录几秒钟。详细参考源码。
然后,通过 Jupyter notebook 训练 SVM。我将训练脚本上传到了 github 站点,/training/trainingSVM.py
最后,将训练结果存储到 finalized_model.csv。我将数据转换为 WaterSoundDet.ino。由于 Jupyter notebook 的 SVM 功能是基于 LIBSVM 的,请参考 LIBSVM 文档。
享受!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !