×

带水声检测器的洗手定时器

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2022-10-18

131594

分享资料个

描述

专家建议您彻底洗手以防止感染。所以我创建了一个计时器来测量洗手所需的时间。

在这里,挑战是如何开始计时。按钮开关是最简单的,但最好不要在洗手前触摸它们。我们可以使用红外线或超声波传感器,但由于需要外部组件,因此很难广泛使用它们。

该项目的独特之处在于,通过麦克风检测到流水的声音以启动计时器。这里使用的 M5Stick-C 具有内置麦克风,因此您不需要任何外部组件。

因此,任何人都可以通过简单地将代码编程到 M5Stick-C 中来实现一个简单的洗手定时器。

它是如何工作的?

poYBAGNN706AVWUKAACNDZ2kE0s862.png
框图
 

有许多可能的方法可以只检测水声。例如,使用高于某个值的音量级别是一种简单的方法,但它可能会导致许多故障。

在这里,我决定利用具有独特频谱的水声的特性。

显示了一个整体框图。来自麦克风的音频输入通过 FFT 转换到频域。然后使用 SVM(支持向量机)对输入音频与水声的接近程度进行评分。该分数以 FFT 的样本单位为单位。接下来,累积这个分数。这是为了检测这个特性已经持续了超过一定的时间。

我使用 Jupyter Notebook 来学习 SVM。为此,我使用了带有和不带有水声的 Arduino 的串行日志。后面会详细说明。

 

软件设置

由于我们使用的是 FFT 库 ArduinoFFT,如果 Arduino IDE 中尚未安装该库,请安装该库。

arduinoFFT https://github.com/kosme/arduinoFFT

接下来,在github上编译和编程这两个源文件。

 

SVM 模型是如何创建的

需要执行以下 3 个步骤。

  • 记录样本数据。
  • Jupyter Notebook 的 SVM 训练
  • 根据训练数据创建 SVM 代码

首先,要记录样本数据,将以下代码添加到 HandwashingTimer.ino。

#define _SAMPLEMODE

通过此更改,FFT 结果通过 arduino 串行端口记录。您可以将数据保存到文件中。每次水流和不流水时,数据都会记录几秒钟。详细参考源码。

然后,通过 Jupyter notebook 训练 SVM。我将训练脚本上传到了 github 站点,/training/trainingSVM.py

最后,将训练结果存储到 finalized_model.csv。我将数据转换为 WaterSoundDet.ino。由于 Jupyter notebook 的 SVM 功能是基于 LIBSVM 的,请参考 LIBSVM 文档。

享受!

 

 

 

 

 

 

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !