基于Adafruit IO与振动传感器的智能洗衣机提醒器DIY教程

发布时间:2026/5/16 23:09:33

基于Adafruit IO与振动传感器的智能洗衣机提醒器DIY教程 1. 项目概述告别遗忘让洗衣机“开口说话”你有没有过这样的经历把衣服塞进洗衣机按下启动键然后转头就去忙别的事情等再想起来时已经是好几个小时甚至第二天湿漉漉的衣服在滚筒里闷出了一股怪味。这个生活里的小烦恼几乎每个人都遇到过。传统的机械定时器或者手机闹钟提醒要么不够智能要么容易被忽略。今天我想分享一个我自己动手解决这个问题的项目一个能感知洗衣机工作状态、并在衣物洗好后自动提醒你的智能提醒器。这个项目的核心思路非常直接洗衣机在脱水阶段会产生强烈的、有规律的振动。我们用一个振动传感器“贴”在洗衣机上当检测到这种特定的振动模式时就认为洗衣流程进入了尾声。随后系统会启动一个倒计时时间一到便通过你习惯的通信方式比如邮件发出提醒。更妙的是你可以在晾好衣服后按一下设备上的按钮或者远程操作一下告诉系统“任务完成”提醒就会停止。整个过程你不需要写一行代码全部通过图形化的拖拽配置完成。它背后的技术支柱是Adafruit IO平台和WipperSnapper固件。Adafruit IO是一个专为物联网项目设计的云服务平台你可以把它理解为一个在线的“数据中转站”和“逻辑大脑”。而WipperSnapper则是一种特殊的固件刷写到像Adafruit FunHouse这样的开发板上之后这块板子就变成了一个即插即用的物联网节点它能自动将传感器数据上报到Adafruit IO并接收来自云端的指令。这种组合彻底改变了传统的嵌入式开发流程——你不再需要埋头编写C或MicroPython代码去处理网络连接、数据协议和云通信只需要在网页上点点鼠标配置好传感器和逻辑规则一个功能完整的物联网设备就诞生了。我选择Adafruit FunHouse作为主控板是因为它几乎是为家庭自动化量身定做的。它集成了Wi-Fi、彩色显示屏、多个物理按键和丰富的传感器接口开箱即用省去了额外连接屏幕和按键的麻烦。振动传感器则扮演了“耳朵”的角色监听洗衣机的“工作语言”。整个项目硬件连接简单逻辑清晰非常适合作为物联网和智能家居的入门实践既能解决实际问题又能让你直观地理解“感知-上传-判断-执行”这一完整的物联网闭环。2. 核心硬件选型与连接解析工欲善其事必先利其器。一个稳定可靠的硬件基础是项目成功的前提。在这个项目中硬件的选择主要围绕“感知”、“决策”和“人机交互”三个环节展开。2.1 主控板为什么是Adafruit FunHouse市面上支持Wi-Fi的微控制器很多比如常见的ESP32开发板。我选择Adafruit FunHouse是基于以下几个实实在在的考量高度集成节省时间FunHouse板载了一块240x240的彩色IPS显示屏和五个物理按键上、下、左、右、选择。这意味着我们无需再额外购买和焊接OLED屏幕、连接按钮大大简化了硬件组装和初始测试的步骤。对于家庭项目来说这种“一体化”设计极大地提升了完成度和美观度。即插即用的传感器接口它配备了多个STEMMA QT / JST-PH 3Pin接口。这种接口是防反插的用配套的连接线可以像拼乐高一样连接兼容的传感器无需分辨正负极对新手极其友好。我们的振动传感器就可以直接通过这种接口连接到模拟输入引脚。对WipperSnapper的完美支持Adafruit官方为FunHouse提供了开箱即用的WipperSnapper固件支持。这意味着刷写固件、连接网络的过程被极大简化几乎是一键完成避免了在Arduino IDE或CircuitPython环境中手动配置Wi-Fi库和证书的繁琐过程。内置磁吸脚垫板子背面预留了安装孔可以轻松安装附带的磁铁脚。这让我们可以非常方便地将设备吸附在洗衣机的金属外壳上既牢固又便于调整位置和取下。如果你的手头没有FunHouse理论上任何被WipperSnapper支持的ESP32或RP2040开发板都可以替代例如Adafruit的Feather ESP32-S2。但你需要自行解决显示和输入问题要么外接一个I2C显示屏和按钮要么完全依赖手机或电脑端的Adafruit IO Dashboard进行状态查看和交互这会损失一部分便捷性。2.2 振动传感器选择合适的“听觉”灵敏度振动传感器是这个项目的“信号触发器”它的选型直接关系到系统能否准确识别洗衣机的脱水状态而不被其他干扰比如人走过地面的震动误触发。项目原文提到了两种型号快速振动开关Fast Vibration Switch和中速振动开关Medium Vibration Switch。它们的核心区别在于内部弹簧的灵敏度和复位时间。快速振动开关内部弹簧非常灵敏轻微的震动就能使其闭合导通。它适用于振动强度不大但频率较高的场景。对于现代平衡性较好的洗衣机在脱水时产生的持续、高频振动快速开关能很好地捕捉。中速振动开关弹簧稍硬需要更强的冲击力才能触发。它的优点是抗干扰能力更强不容易被偶然的碰撞触发。如果你的洗衣机年头较老脱水时“地动山摇”或者你担心宠物撞到洗衣机产生误报中速开关可能是更稳妥的选择。实操心得如果你不确定该选哪个我的建议是优先选择快速振动开关。在测试中我发现即使对于振动较强的洗衣机只要安装位置得当后文会详述快速开关也能稳定工作。它的高灵敏度确保了在脱水启动初期就能被可靠检测到为后续的计时提供更准确的时间起点。如果发现它过于敏感比如洗衣机旁走路都触发我们可以后期在Adafruit IO的Action逻辑中增加“防抖”判断例如要求振动信号持续超过2秒才算有效这比更换硬件要灵活得多。2.3 硬件连接安全与可靠的细节连接本身很简单振动开关有两根引线一根接信号线白色一根接地线黑色。信号线连接到FunHouse的A0模拟输入引脚。这里有几个容易踩坑的细节需要特别注意连接器的选择最佳选择推荐使用JST-PH 3Pin转鳄鱼夹线。将JST端插入FunHouse的A0端口鳄鱼夹分别夹住振动开关的两根引线。这种方法连接最牢固接触电阻小且拔插方便。备用方案如果你打算永久安装可以考虑将振动开关的引线焊接上排针然后使用杜邦线母对公连接到FunHouse顶部为PIR传感器预留的排母上或者使用JST-PH转杜邦母头的线。焊接时务必小心振动开关的细弹簧引线非常脆弱烙铁温度不宜过高停留时间要短最好先给引线和排针分别上好锡“搪锡”再快速焊接避免烫坏塑料外壳。绝缘与固定鳄鱼夹的隐患使用鳄鱼夹时一定要将红色电源正极的夹子用绝缘胶带包裹起来或者将它弯折到一边确保绝不接触任何金属部分。因为A0端口的三根线是信号白、电源红、地黑并排的红色夹子如果意外碰到振动开关的引线或洗衣机外壳可能导致短路损坏板子。传感器的安装不要用胶水直接把传感器粘死在洗衣机上。建议使用厚实的泡沫双面胶或纳米无痕胶。这种胶有一定厚度和弹性既能牢固粘贴又能将洗衣机的振动更好地传递到传感器。安装位置也有讲究优先选择洗衣机侧面或顶盖靠近后部的金属平面这里是振动传导最直接的地方。可以多试几个位置和角度比如让传感器直立或平躺观察哪个位置在脱水时触发最稳定。3. 软件平台配置零代码构建物联网逻辑这是本项目的精髓所在也是WipperSnapper和Adafruit IO平台强大之处的体现。我们将完全通过网页配置完成设备注册、传感器添加和自动化逻辑的搭建。3.1 第一步让设备“上网” - WipperSnapper固件刷写首先你需要一个Adafruit IO账户免费注册。然后我们将把FunHouse变成Adafruit IO平台下的一个设备。进入设备添加页面登录Adafruit IO后点击顶部导航栏的 “New Device”。选择板型在板型选择页面搜索“FunHouse”找到后点击“Choose Board”。** guided installation wizard**页面会变成一个详细的引导教程。你需要用USB线将FunHouse连接至电脑。按照页面提示长按板上的某个按钮通常是“USR”或“RST”进入Bootloader模式。此时电脑上会出现一个名为“FUNHOUSE”或“RPI-RP2”的U盘。将页面提供的.uf2固件文件拖入该U盘。设备会自动重启。配置Wi-Fi重启后FunHouse的屏幕会显示一个二维码和Wi-Fi名称。用手机连接这个Wi-Fi热点会弹出一个配置页面Captive Portal在此页面中选择你家的2.4GHz Wi-Fi并输入密码。完成注册配置成功后FunHouse会尝试连接网络并注册到你的Adafruit IO账户。稍等片刻在Adafruit IO的“Devices”页面你应该能看到你的FunHouse在线了。注意事项务必确保连接的是2.4GHz网络。许多物联网设备包括ESP32不支持5GHz频段。如果遇到设备一直卡在“连接”或“注册”状态请尝试a) 重启路由器b) 检查Wi-Fi密码是否正确c) 在路由器后台暂时关闭WPA3加密仅使用WPA2d) 执行设备恢复出厂设置后重试。3.2 第二步配置设备组件 - 导入即用设备上线后我们需要告诉Adafruit IO这个FunHouse上都有哪些“零件”组件可供使用。幸运的是对于FunHouse这种官方板Adafruit提供了“一键配置”功能。进入你的FunHouse设备页面。点击“Auto-Config”按钮。在弹出的窗口中选择“Import Config”。系统会提示你上传一个配置文件。你可以使用项目作者提供的funhouse-washing-machine.json文件。这个文件已经预定义好了板载的显示屏、五个按键以及一个连接在A0引脚的振动传感器组件。导入成功后刷新页面你会看到左侧组件列表里出现了“Display”、“Up Button”、“Down Button”、“Round Vibration Switch”等条目。此时你可以尝试按下板上的“上”、“下”按钮对应的组件状态应该会实时更新为“Pressed”。这证明硬件与云端的通信一切正常。3.3 第三步构建核心大脑 - Adafruit IO Actions逻辑编排Actions是Adafruit IO的自动化工作流引擎通过拖拽“积木块”的方式构建逻辑。我们将创建两个核心Action。3.3.1 Action 1洗涤周期计时与状态管理这个Action负责监听振动传感器和按钮计算时间并更新系统状态和显示屏信息。创建状态反馈首先在“Feeds”页面创建一个名为washer-notify的新数据流。这个流将用来存储系统的状态例如“未开始”、“洗涤中”、“已洗完”、“已晾挂”。创建Action在“Actions”页面新建一个Action命名为“Washing Cycle Timer”。设置触发器从左侧工具箱拖入“When feed data matching 0”触发器块。选择“Vibration Switch”这个数据流。这个触发器意味着当振动传感器的值变为0从振动到静止的瞬间这里需要理解振动传感器在触发时通常发送1静止时发送0。所以这个触发器可能意在捕捉振动停止的时刻即脱水结束。但原文逻辑更可能是用“数据更新”这个事件本身而非具体值。在实际配置时我们应选择“When feed data changes”触发器任何变化都触发更为通用。处理时间变量添加三个变量vibrated_time振动时间、start_time开始时间、end_time结束时间。使用“Set Variable”块和“Get Feed Value”块分别获取“振动传感器”、“上按钮”、“下按钮”这三个数据流最新一次数据更新的时间戳updated_at并存入对应的变量。时间戳通常是从Adafruit IO服务器获取的UNIX时间戳秒数。构建逻辑判断拖入“If/Else/Else-If”逻辑块。第一个判断IFstart_timevibrated_time这表示“开始”按钮按下的时间晚于最后一次振动时间。这意味着在本次振动发生后你又按了“开始”可能是误操作或新的洗衣周期。此时显示屏应显示“已开始未检测到新周期”并将washer-notify状态设为“not-washed”。第二个判断Else-Ifend_timestart_time这表示“结束”按钮按下的时间晚于“开始”时间。这意味着用户已经按下了“结束”按钮表示衣物已晾挂。此时显示屏应显示完整的开始、振动、结束时间并将washer-notify状态设为“hungout”。第三个情况Else以上都不符合即振动发生了但用户还未按下“结束”按钮。此时显示屏显示开始时间和最后一次振动时间并将washer-notify状态设为“almost-washed”。更新显示屏在每一个判断分支里使用“Set Feed Value”块向“Display”这个数据流发送格式化后的文本信息。这里需要用到一个技巧使用“Text Template”块并结合过滤器来格式化时间。例如{{ vars.vibrated_time | plus: 28800 | date: ‘%H:%M:%S’ }}会将存储的UNIX时间戳加上8小时东八区偏移并格式化为“时:分:秒”显示在屏幕上。3.3.2 Action 2延迟通知与重复提醒这个Action负责在系统进入“almost-washed”状态后等待一段时间然后开始周期性地发送提醒。创建延迟Action新建一个名为“Washing Almost Ready”的Action。设置触发器添加“When feed data matching “almost-washed””触发器指向washer-notify流。配置延迟与重置点击Action根块的齿轮图标进入“Delay Settings”。设置延迟时间为30分钟或你想要的任何时间。关键一步务必勾选“Reset existing delays”。这意味着如果在这个30分钟的等待期内洗衣机又产生了新的振动可能因为不平衡重新脱水导致washer-notify流再次被设为“almost-washed”那么这个30分钟倒计时会重置。这有效防止了因洗衣机间歇性振动导致的过早或重复提醒。延迟后状态转移在Action的执行部分添加一个“If”块再次检查washer-notify流的值是否仍为“almost-washed”防止状态已被手动更改。如果是则使用“Set Feed Value”块将其更新为“washed”。这个“washed”状态将是触发最终提醒的信号。创建提醒Action再新建一个名为“Hang Clothes Notifier”的Action。设置复合触发器添加第一个触发器“When feed data STARTS “washed””。这个触发器只在washer-notify流的值变成“washed”的瞬间触发一次非常适合用来发送第一条“洗涤完成”的通知。添加第二个触发器“Scheduled Trigger”。将其设置为“Every 30 minutes”。这个触发器会每30分钟定期触发。构建提醒逻辑在Action执行部分添加“If”块判断washer-notify流的值是否等于“washed”。如果等于则执行“Send Email”块或SMS块。在邮件内容中你可以自定义提醒文字例如“洗衣机里的衣服已经洗好很久了快去晾起来吧”。这个逻辑的结果是一旦状态变为“washed”立即发一封邮件然后每30分钟检查一次只要状态还是“washed”就再发一封直到状态被改变如你晾完衣服后按下按钮状态变为“hungout”判断条件不成立邮件停止。4. 系统调试、优化与扩展思路硬件连接好了软件逻辑也配置完毕接下来就是把它放到洗衣机旁进行实战测试和微调。4.1 安装与初步测试安装位置用磁吸脚将FunHouse固定在洗衣机侧面或顶部一个既醒目又不妨碍操作的位置。用泡沫双面胶将振动传感器贴在洗衣机侧板中部或靠上的位置。连接好线缆并妥善固定避免拉扯。模拟测试按下FunHouse的“上”按钮模拟放入衣物并启动洗衣机。观察屏幕是否更新了“开始时间”。用手快速敲击或摇晃洗衣机模拟脱水振动。观察Adafruit IO设备页面上“Vibration Switch”组件的数据是否从0变为1或反之。同时屏幕上的“最后振动时间”应该更新。等待一段时间或直接修改Action中的延迟时间为1分钟进行快速测试检查是否收到了测试邮件。按下“下”按钮模拟晾衣完成。观察屏幕状态是否更新为“已结束”并且邮件提醒是否停止。4.2 真实洗涤周期校准进行一次真实的空载洗衣或选择“仅脱水”程序这是最重要的校准步骤。启动前按下“上”按钮。让洗衣机完整运行。重点关注脱水阶段开始和结束的时刻。程序结束后按下“下”按钮。关键记录对比屏幕记录的“最后振动时间”与你实际观察到的脱水结束时间。计算两者之间的差值。这个差值就是你需要在第一个Action中从振动触发到发送“almost-washed”状态之间设置的延迟时间。例如振动传感器在脱水结束前2分钟就停止触发因为转速降低而整个脱水程序在振动停止后还需2分钟才完全停止排水和开锁。那么你就需要设置一个至少2分钟的延迟再进入“almost-washed”状态否则提醒会来得太早。原文建议的30分钟是一个通用值包含了脱水结束后的“宽容时间”。你可以根据你的耐心和洗衣程序的具体情况将这个值调整为你认为合理的间隔比如15分钟或45分钟。4.3 常见问题排查问题现象可能原因排查步骤与解决方案设备无法连接Wi-Fi/Adafruit IO1. Wi-Fi密码错误2. 网络为5GHz3. 路由器防火墙或MAC过滤限制4. WipperSnapper固件问题1. 重新执行配网流程仔细输入密码。2. 确保连接2.4GHz网络。3. 检查路由器后台暂时关闭高级安全功能试一下。4. 尝试在设备页面检查并更新固件或执行出厂重置后重刷。振动传感器始终无反应1. 接线错误或接触不良2. 传感器安装位置/角度不佳3. 传感器本身损坏4. Adafruit IO组件未正确配置1. 用万用表通断档测试振动开关摇晃时应有通断变化。2. 调整传感器位置和角度尝试贴在洗衣机不同部位。3. 更换一个传感器试试。4. 检查设备页面确认“Vibration Switch”组件对应的引脚是否正确应为A0。能检测振动但提醒不触发1. Action逻辑配置错误2. 时间变量或触发器设置不对3.washer-notify数据流状态未正确变化1. 在Adafruit IO的Action编辑页面使用“Save Run”测试并查看下方的运行日志检查每一步的判断结果。2. 检查时间戳获取的代码块确认是取updated_at字段。3. 在“Feeds”页面手动观察washer-notify流的数据变化历史看是否按预期从“almost-washed”变为“washed”。收到重复提醒但衣物已晾1. “下”按钮未按下或按下无效2. Action中状态判断逻辑有误1. 按下“下”按钮后立即查看屏幕状态和washer-notify流的值是否变为“hungout”。2. 检查“Washing Cycle Timer” Action中关于end_time的判断分支是否正确设置了“hungout”状态。提醒邮件收不到1. Adafruit IO邮件服务问题2. 邮件被归入垃圾邮件3. Action中邮件块配置错误1. 检查Adafruit IO账户的“Notifications”设置确保邮箱已验证。2. 检查垃圾邮件文件夹。3. 在Action中可以先用一个“Set Feed Value”块替换“Send Email”块向一个测试数据流发信息验证Action本身是否被正确触发。4.4 项目扩展与优化思路这个基础框架有很大的扩展潜力多通知渠道除了邮件你可以在提醒Action中同时添加Discord或Slack通知块。只需在对应的聊天平台创建一个Webhook并将其URL配置到Action中。这样提醒可以同时推送到你的多个常用通信软件。集成智能家居平台利用Adafruit IO的IFTTT或Zapier集成你可以将washer-notify流的状态变化作为触发器去控制家里的智能插座、智能灯泡。例如当状态变为“washed”时让客厅的智能灯泡闪烁红光变为“hungout”时则恢复原状。数据记录与分析Adafruit IO会自动记录所有数据流的历史值。你可以利用其Dashboard功能创建图表可视化一周的洗衣次数、时长分布。这不仅能满足好奇心还能帮你优化用水用电习惯。硬件优化如果追求极致美观和稳定可以设计一个3D打印的外壳将FunHouse和传感器集成进去通过磁性底座整体吸附在洗衣机上。对于电源可以改用5V USB电源适配器配合磁吸充电线供电比一直插着USB线更整洁。这个项目最让我欣赏的一点是它用最直观的方式展示了物联网如何无缝融入日常生活。你不需要成为通信协议专家也不需要搭建复杂的服务器就能让物理设备具备“感知”和“告知”的能力。从按下按钮开始到收到云端提醒整个链条清晰可见。当你成功运行起这个系统并第一次因为它的提醒而及时晾出香喷喷的衣服时那种亲手创造便利的成就感正是DIY和智能家居最大的乐趣所在。

相关新闻