Hackaday.io上的树莓派项目-可监控洗衣机
收藏
分享
脑图
Hackaday.io上的树莓派项目-可监控洗衣机
关于项目
项目描述:我住在公寓楼的二楼,我的洗衣机和烘干机在地下室。有一次, 我冒险到大楼的脏波纹管, 发现我的机器还剩下 15 分钟或更少的周期。我坐在水泥地上, 拒绝回到楼上的舒适区, 思考我怎样才能解决这个问题。有 3 种解决方案已经提出来:
停止信任机器周期估计值。
购买更昂贵的机器,当通过专有软件连接,可以提供详细信息
黑客一起连接到互联网
项目图片
项目文件
项目组件
1X树莓派
要采样声音,我需要采样相当快,比Arduino支持使用模拟Read,这是约8khz更快。对于我的项目,我想在人类能听到的范围内工作,直到大约20khz,并考虑到奈奎斯特定理,我需要采样率约两倍,约40khz。幸运的是,这是可以实现的Arduino,我通过实现此方法(感谢阿曼达加赛分享)。使用频率生成器测试我的实现,我发现它并不完全精确,但当前实现可能会使用中断来重做,以提高精度 - 我以后可能会解决这个问题。
为了处理传入信号,我应用了 arduinoFFT 库,并使用 ArduinoJson 对全部内容进行格式化,以便于我的后端消化。
下面是机器上的采样快速演示,显示两个麦克风的 FFT 一定时间。可视化是一个快速的黑客,所以有一些错误与它,我显然有一些调试做关于采样和FFT,但它是伟大的看到某种结果,我的努力。
蓝色区域是一个洗涤周期,红色是一个翻滚的循环。如果有任何疑问,两者都是近似值。
之前,我曾试验过使用加速度计测量机器产生的运动,并使用麦克风测量噪音,并在一个时间窗口累积这些运动,以确定机器是否正在运行。这两种方法都受到两台机器之间的交叉干扰的影响,并且有一段时间洗衣机不会产生可检测到的运动或噪音。这将导致我对数据不够自信,无法进行适当的实现,因为我从未觉得自己可以依赖我获得的数据。
我会尝试通过应用压电元件作为接触式麦克风来提高采样的精度,而不是只看振幅,我还将查看不同频段的振幅。我希望这将有助于消除基于相声的分类错误,因为当另一台机器运行时检测到的频率应该与两台机器运行时不同(我预计更低)。这将是伟大的连接麦克风到录音机,看看机器的频谱图不运行,无论是正在运行,当两个正在运行。然而, 我没有缩放或类似铺设周围, 所以可能不会发生
实际上,我计划将麦克风录到机器上,并使用两个麦克风的输出来确定机器是否正在运行。这将由 Arduino 采样,该 Arduino 通过 FFT 运行数据以生成频带结果,然后将其发送到上一篇文章中描述的 Oak。一旦数据到达后端,我可以在那里做进一步的处理和分类,例如发送通知。我尽量将 Arduino 上的处理量降至最低,因为我希望硬件和嵌入式软件非常静态,而对后端软件的更改则更容易管理。
我得到了一些Didistump橡树(基于ESP8266)从启动器和我的跟踪记录一直并不完美,从麻烦注册他们在粒子云到有一个艰难的时间让OTA闪烁工作*。然而, 我有 9 个月有一个安装在我的门铃, '按下' 按钮, 解锁我的门。简单,但非常方便的
门铃项目 - 非常简单的项目, 但可能仍然写在某个时候橡树将作为该项目的无线桥梁。计划是使用 Arduino 来处理传感器输入,并通过串行将结果发送到橡树和橡树,然后将其传输到我的后端。我知道这有点过头了,Oak 可能自己处理传感器输入,但是现在橡树正在承担桥梁任务,而 Arduino 让我可以访问世界上所有的传感器库。一旦有关 I/O 的一切被找出为项目,它可能会移植运行在橡树上单独 - 我们将看到。
一时间,这个项目只是挫折,找出如何让脚本运行启动,找出为什么脚本停止运行在早上6:24连续两次尝试(并没有停止在当时戳),一些麻烦实现麦克风硬件和缺乏资源和时间。这篇文章不会涵盖所有琐碎的挑战,而是侧重于使用麦克风切换加速度计的结果。
在决定试用麦克风后,我很快发现,我没有足够的电线铺设周围覆盖加速度计和麦克风,所以加速度计现在被删除 - 更重要的是探索麦克风路线是否可行。目前,麦克风安装在机器背面,用胶带将电子麦克风的表面固定到机器的背面。这似乎是合理的工作,但我发现,如果我能减少环境噪音的数量,将一块磁带在麦克风和机器之间检测。我相信有一点点的电噪声,这根除了。
运行机器表明,此解决方案无法修复我使用加速度计看到的相声。橙色线代表洗衣机,绿线代表洗衣机顶部的烘干机。
洗涤需要大约一个小时,如预期的那样,但我所有的测试测量到目前为止显示干燥时间低于11~2小时的程序,估计持续+3小时。这个项目可能只是非常有用,在周末完成大量的洗衣。
我能够解释自己的数据,并实际使用它检查,如果我的洗涤完成(有一个党参加,所以我是在有点匆忙),所以已经项目已经证明有用,但我失望的是,它遭受了同样的问题,加速度计方法。盯着数据看一段时间后,我注意到,即使有相声,当任一机器运行时,测量值之间似乎有明显的区别。我很快制作了下面的图表, 验证了我的假设, 尤里卡!
两个麦克风读数的区别
还有一些筛选要做,但看起来确实可以管理。我可能会尝试一些不同的东西,我认为在求和值之前输入滤波器可以使读数不那么嘈杂,当然,我可以尝试采样窗口。
我还有一些工作, 使脚本运行稳定, 但我相信我是一个 cronjob 与每晚重新启动远离成功。我希望。有一次,我考虑记录内存使用情况,看看我是否有内存泄漏,但后来我意识到,这将是大量的额外的工作,记录和分析,以确定是否有泄漏 - 然后我也需要解决它!
所以上周末,我在长时间运行脚本时有些问题,但我确实设法获取了一些数据。当我们在机器运行时访问家人时,我远程监视数据,我注意到一些奇怪的行为。
在测试期间,同时运行两台机器两个传感器的数据
如果我的记忆是正确的,那么我同时启动两台机器,在3小时的程序的烘干机和45分钟的程序洗衣机。数据显示烘干机在 ±20 分钟后停止,垫圈在 ±50 分钟后停止。老实说,我不记得15:30后重新出现的峰值是因我弄乱了macine(不太可能,应该出现在两个传感器上)还是来自程序的离心部分(更可能,与峰值计数相当匹配)。
好消息是,根据当前传感器的位置,似乎可以确定垫圈在单独运行时是否运行。坏消息是,如果烘干机也运行,似乎几乎无法判断洗衣机是否运行。实际上,鉴于机器单独运行,仅仅使用安装在烘干机上的加速度计来检测哪些机器在运行似乎是合理的。
然而,这里最令人不安的事实是,烘干机只跑了20分钟!当我们回到家时,我们发现烘干机没有把衣服晾干。经过一些故障排除和(大部分)非侵入性调查,我们决定使用保证,现在正在等待技术人员停下来修理机器。我没有预测监控硬件的这个用例, 在刚刚使用一年多之后, 机器坏了, 我很沮丧。
因此,现在它又回到了绘图板。我的解决方案适合非堆叠计算机的人, 但它没有满足我的需求。我想测试一下我铺设的麦克风,将它们平放在机器的侧面/背面,希望能分辨出哪台机器正在运行,或者我可以使用组合。毕竟,我仍然可以在烘干机上单独使用加速度计,垫圈引起的运动在烘干机运行时无法检测到的运动。另一个可能的解决方案也是修改我的运动检测代码,我有一种感觉,有一些改进的余地。
项目开始的所有势头似乎都停止了。我的互联网在街上的一些升级中意外断开连接, 我的 Isp 花了整整两个星期才恢复连接。在此期间,我考虑了我的安装选项,虽然我不满意我什么,我想这将就足够了 - 我想时间会告诉。
我用双面胶带在烘干机上安装了 pi。这绝对是我最担心的坐骑,并期望必须找到另一个解决方案很快,但我预计它足以几个星期。我为加速度计做了一些扩展电缆,并把它们装上拉链,与机器上的点,这似乎是最机械安全的地方在背面。
洗衣机的安装点 - 在排水管的金属部分。
Pi 安装在烘干机顶部,加速度计安装在烘干机顶部的环路上。
完成操作后,我连接到 pi 并开始了我的脚本(之前已经连续 24 小时测试了,没有任何问题),并很高兴看到两个传感器报告数据 - 一段时间。3 小时后, 数据流停止, 当我发现第二天, wifi 也下降了。另一个尝试做了类似的结果, 我理论出了问题 (错误在代码, 在 wifi 等) 程序崩溃, 然后一段时间后, pi 发送非活动 wifi 睡觉。通常,我会打印到终端,以帮助调试问题,但由于我运行的应用程序独立于终端会话这是不可能的。在考虑写入本地文件后,我发现有可能将通常显示在终端中的消息重定向到文件。若要在 ssh 会话中运行 python 脚本,通常会使用命令scriptname.pypython scriptname.py",但目前我使用此命令运行脚本
经过一个周末的解决,为什么脚本将只运行2-6小时的时间,我的第一个预感是,wifi适配器有问题,因为它会失去网络连接时,我发现脚本已经停止。经过几次测试(记住每个需要几个小时)与电源集线器和其他usb wifi加密狗,我发现在我的脚本错误,将退出脚本,如果连接到谷歌不成功。我猜 wifi 加密狗会断开一段时间的不活动, 导致我的虚假诊断和周末花得好...
无论如何, 向上和向上!我一直在考虑为我的 (机器人) 手机生成推送通知。我的第一次尝试是instapush,但他们的服务似乎从星期天,当我第一次发现他们,直到星期一,当我决定,他们可能不是一个稳定的选择,并引导我的注意力其他地方。我探索了远程警报,但很快发现, 他们的应用程序似乎半烤。当我按下设置时,出现了一张鹦鹉的图片,它们的默认通知不适合我的喜好。
我不知道远程警报应用程序试图告诉我在这里...
最后,我碰到了 PushBullet,我很快就能够使用,只需在 ssh 中编写命令,通知是不错的和可配置的,所以它成为首选的武器。然而,当我第一次尝试时,我花了一段时间才能在巨蛇中工作,pushbullet.py工作。后来, 我尝试了 pypushBullet 和 PushBulltPython 图书馆, 但所有三个库都使用名称 '推子弹' 一旦安装, 所以我认为他们搞砸了对方。在尝试清理和重新安装几次后,我决定找到一个库,它使用另一个名字,推子弹,它的工作像一个魅力。对于未来的工作,我可能需要投入更多的工作,学习手动安装,而不是使用pip,万一我想改变的东西,如名称。
我的第一个通知和生成它的简单代码。
虽然推波程序是罚款我的工作,现在我花了几分钟来寻找其他推波数据库的其他推弹库,我发现ntfy,这是设计为支持多个后端。我想在将来更改为这样, 以便更容易切换到另一个后端, 如果我的预处理下降, 如 Instapush 。
评论
0 / 100
查看更多
1503881740
2020-08-26
713
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号