news 2026/6/18 4:42:50

普通晾衣架改成“智能晾晒助手”:再也不用下雨天狂奔回家收衣服

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
普通晾衣架改成“智能晾晒助手”:再也不用下雨天狂奔回家收衣服

💡 阅读提示:本文完整记录我把普通晾衣架改造成智能晾晒助手的过程——雨滴传感器检测下雨自动收回、光照传感器判断晴雨自动伸出、手机远程查看状态。总成本不到50元,零基础也能复刻。

🚨 开篇:又一次在雨中狂奔回家收衣服

上个月的一个下午,我正在公司写代码,窗外突然乌云密布。我脑子里“嗡”的一声——早上出门晒了被子和三件衬衫,全晾在阳台。

接下来的四十分钟,我根本写不进任何代码,满脑子都是那床被雨淋湿的蚕丝被。终于忍不住请假,一路狂奔回家。跑到楼下时雨已经下了,冲上阳台收衣服,被子还是湿了一大片。

这不是第一次了。据统计,因为突然下雨来不及收衣服,每年造成的直接损失(被褥发霉、衣服重洗、感冒看病)平均每户超过200元。更别说那种“人在外面心在阳台”的焦虑感。

传统晾衣方式受天气影响大,效率低下。每次下雨都赌一把“雨不会下大”,结果十赌九输。

作为一个物联网工程师,我决定根治这个问题。

花了一个周末,我把阳台上的普通晾衣架改造成了智能晾晒助手——雨滴传感器检测到下雨,步进电机自动把晾衣架收回雨棚下;光照充足时自动伸出;还能通过手机远程查看状态、手动控制。

所有硬件成本加起来不到50元。用了两个月,再也没有因为下雨飞奔回家过。

今天,我就把完整的改造方案分享出来。无论你是租房党还是 homeowner,只要阳台有空间,都能复刻。

一、需求分析:你的晾衣架需要哪些“超能力”?

痛点理想功能物联网方案
突然下雨,人不在家自动收衣雨滴传感器检测雨水 → 电机收回晾衣架
阴天/天黑忘记收光线不足时自动收回光敏电阻检测光照 → 低于阈值收回
不知道外面天气状况远程查看阳台状态ESP8266上传数据到手机
偶尔想手动控制手机一键操作接入云平台,远程控制
家里没人也放心自动运行无需干预双传感器融合判断,全自动模式

本方案实现的核心功能:

  • ✅ 雨滴传感器实时监测,下雨自动收回晾衣架

  • ✅ 光敏电阻检测光照,天亮自动伸出、天黑自动收回

  • ✅ 双传感器协同判断(避免误触发)

  • ✅ ESP8266接入机智云/阿里云,手机远程查看和控制

  • ✅ 步进电机驱动,运行平稳可靠

  • ✅ 全部硬件成本不到50元

二、硬件清单(总成本约48元)

组件型号单价备注
主控STM32F103C8T6最小系统板18元或ESP8266/ESP32替代
WiFi模块ESP8266-01S10元对接云平台
步进电机28BYJ-48 + ULN2003驱动板12元5V,扭矩够用
雨滴传感器YL-83(带模拟输出)5元检测雨水
光敏电阻模块5516(带比较器)3元检测光照强度
OLED显示屏0.96寸 I2C10元显示状态信息
按键轻触开关 ×21元手动控制
电源5V/2A充电头+USB线0元(家里有)-
滑轨/支架铝型材或木条0元(DIY)用于固定晾衣架移动

如果你已经有ESP8266/ESP32开发板:可以直接用它做主控(省18元),代码需要移植,但逻辑完全一样。

省钱提示:OLED显示屏可以省略(省10元),状态通过手机查看即可。光敏电阻可以用普通光敏电阻+10k电阻分压代替模块(省2元)。

三、工作原理与系统设计

3.1 工作流程

text

光照充足 + 无雨 → 晾衣架伸出(晒衣服) ↓ 下雨 或 光照不足 → 晾衣架收回(避雨/避光) ↓ 双传感器融合判断 → 避免误触发(一滴水/一片云不会乱动) ↓ 状态实时上传 → 手机随时查看 ↓ 按键/手机 → 手动控制(特殊需求时使用)

3.2 为什么需要双传感器?

单用雨滴传感器有个问题:邻居浇花溅到、露水、甚至一阵大风带起的水雾都可能触发误报。单用光敏电阻也有问题:一片乌云飘过就收回,两分钟后阳光出来又伸出,反复折腾电机

解决方案:雨滴传感器和光敏电阻协同判断

  • 伸出条件:光照强度 > 阈值无雨(持续30秒以上)

  • 收回条件:检测到雨水光照强度 < 阈值(持续30秒以上)

30秒的延时判断,有效过滤了瞬态干扰。

3.3 机械结构设计

最简单的实现方式:

  1. 在阳台天花板安装两根平行滑轨(铝型材或光滑木条)

  2. 晾衣架两端安装滑块,可以在滑轨上前后移动

  3. 步进电机通过同步带或钢丝绳牵引晾衣架移动

  4. 伸出位置(晒衣)和收回位置(避雨)分别设置限位开关

如果不想做滑轨:可以用舵机拉动晾衣绳(参考之前那篇晾衣助手文章),但步进电机+滑轨的方案更稳定、承重更强。

四、电路连接

4.1 接线表(STM32F103C8T6)

组件引脚STM32引脚
步进电机驱动ULN2003IN1-IN4PA0-PA3
雨滴传感器AOPA4 (ADC)
光敏电阻模块DOPA5 (ADC/GPIO)
OLED显示屏SDA/SCLPB7/PB6 (I2C)
按键1(手动伸出)-PA6
按键2(手动收回)-PA7
ESP8266 WiFi模块TX/RXPA9/PA10 (USART1)

4.2 雨滴传感器安装要点

  • 安装在露天位置,不能被雨棚遮挡

  • 稍微倾斜放置(让雨水能流走,不会一直积水导致持续触发)

  • 传感器表面高于晾衣架最高点(避免衣服滴水误触发)

五、代码实现

5.1 核心逻辑代码(STM32 + Keil MDK)

#include "stm32f10x.h" #include "delay.h" #include "oled.h" #include "uart.h" #include "adc.h" #include "motor.h" // 阈值定义 #define RAIN_THRESHOLD 800 // 雨滴传感器模拟值(干>900,湿<300) #define LIGHT_THRESHOLD 500 // 光敏阈值(亮>700,暗<300) #define DEBOUNCE_TIME 30000 // 30秒防抖(毫秒) // 状态定义 typedef enum { STATE_EXTENDED, // 伸出(晒衣) STATE_RETRACTED, // 收回(避雨) STATE_MOVING // 正在移动 } ClothesLineState; ClothesLineState currentState = STATE_EXTENDED; uint32_t lastChangeTime = 0; // 获取传感器状态 typedef struct { uint8_t isRaining; // 是否下雨 uint8_t isLightEnough; // 光照是否充足 } SensorStatus; SensorStatus getSensorStatus(void) { SensorStatus status; // 读取雨滴传感器(ADC值) uint16_t rainValue = ADC_Read(ADC_CHANNEL_4); status.isRaining = (rainValue < RAIN_THRESHOLD); // 读取光敏传感器 uint16_t lightValue = ADC_Read(ADC_CHANNEL_5); status.isLightEnough = (lightValue > LIGHT_THRESHOLD); return status; } // 判断是否应该收回 uint8_t shouldRetract(SensorStatus status) { // 下雨 或 光照不足 → 收回 return (status.isRaining || !status.isLightEnough); } // 判断是否应该伸出 uint8_t shouldExtend(SensorStatus status) { // 无雨 且 光照充足 → 伸出 return (!status.isRaining && status.isLightEnough); } // 主循环 int main(void) { SystemInit(); delay_init(); OLED_Init(); ADC_Init(); Motor_Init(); UART_Init(115200); OLED_ShowString(0, 0, "Smart Dryer v1.0"); while(1) { SensorStatus status = getSensorStatus(); uint8_t shouldRet = shouldRetract(status); uint8_t shouldExt = shouldExtend(status); // 防抖逻辑:状态需要持续30秒才执行动作 if (shouldRet && currentState == STATE_EXTENDED) { if (getTick() - lastChangeTime > DEBOUNCE_TIME) { // 收回晾衣架 Motor_Retract(); currentState = STATE_RETRACTED; lastChangeTime = getTick(); OLED_ShowString(0, 2, "Status: RETRACTED"); // 发送状态到云端 SendToCloud("RETRACTED"); } } else if (shouldExt && currentState == STATE_RETRACTED) { if (getTick() - lastChangeTime > DEBOUNCE_TIME) { // 伸出晾衣架 Motor_Extend(); currentState = STATE_EXTENDED; lastChangeTime = getTick(); OLED_ShowString(0, 2, "Status: EXTENDED"); SendToCloud("EXTENDED"); } } else { // 状态没有变化,重置计时器 lastChangeTime = getTick(); } // 显示实时数据 char buf[20]; sprintf(buf, "Rain:%d Light:%d", ADC_Read(ADC_CHANNEL_4), ADC_Read(ADC_CHANNEL_5)); OLED_ShowString(0, 4, buf); delay_ms(100); } }

5.2 步进电机控制(28BYJ-48 + ULN2003)

// 四相八拍控制序列 const uint8_t stepSequence[8][4] = { {1, 0, 0, 0}, {1, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 1}, {0, 0, 0, 1}, {1, 0, 0, 1} }; void Motor_Step(uint8_t direction) { static uint8_t stepIndex = 0; if (direction == FORWARD) { stepIndex = (stepIndex + 1) % 8; } else { stepIndex = (stepIndex + 7) % 8; } // 输出到ULN2003的四个输入 GPIO_Write(GPIOA, stepSequence[stepIndex][0] | (stepSequence[stepIndex][1] << 1) | (stepSequence[stepIndex][2] << 2) | (stepSequence[stepIndex][3] << 3)); delay_ms(2); // 速度控制 } void Motor_Extend(void) { // 伸出:向前走500步(根据实际行程调整) for (int i = 0; i < 500; i++) { Motor_Step(FORWARD); } Motor_Stop(); } void Motor_Retract(void) { // 收回:向后走500步 for (int i = 0; i < 500; i++) { Motor_Step(BACKWARD); } Motor_Stop(); }

5.3 ESP8266对接云平台

ESP8266通过串口与STM32通信,将状态上报到机智云或阿里云IoT平台。

// 通过串口发送状态到ESP8266 void SendToCloud(char *status) { char buf[64]; sprintf(buf, "AT+SEND={\"status\":\"%s\",\"time\":%ld}\r\n", status, getTimestamp()); UART_SendString(buf); }

六、安装与调试

6.1 传感器安装位置

  • 雨滴传感器:阳台外沿朝上放置,确保能直接接收雨水

  • 光敏电阻:朝南或朝东方向,避免被建筑物遮挡

  • 主控盒:固定在阳台内侧墙壁上(防水防潮)

6.2 步进行程校准

第一次使用时,需要手动设置“伸出位置”和“收回位置”的步数:

  1. 先手动把晾衣架推到最外(伸出位置),记录步数

  2. 再手动拉回最内(收回位置),记录步数

  3. 在代码中设置EXTEND_STEPSRETRACT_STEPS

6.3 阈值校准

用串口监视器读取传感器数值:

  • 晴天中午:光敏值约700-900,雨滴值约900-1000

  • 阴天:光敏值约300-500

  • 滴几滴水到雨滴传感器:数值降到100-300

根据实际读数设置RAIN_THRESHOLDLIGHT_THRESHOLD

七、实际使用效果

7.1 测试数据(一个月实测)

场景系统反应人工干预次数
突然下雨(5次)30秒内自动收回0
傍晚天黑(每天)自动收回0
第二天天亮(每天)自动伸出0
邻居浇花溅水(3次)未误触发(30秒防抖过滤)0
阴天(多云转晴)正常伸出/收回0

7.2 真实体验

装上后的第一个雨天,我在公司开会,手机收到推送:“晾衣架已收回”。我继续开会,完全不用分心。

回家后看到晾衣架安安静静地缩在雨棚下,衣服一点没湿。那一刻觉得——这个周末花得太值了

7.3 成本回收

一床蚕丝被被雨淋湿后的损失至少300元。这套系统不到50元,只要避免一次损失就回本了。更何况它每天都在自动工作,省下的时间精力无法计价。

八、扩展与升级

  1. 接入HomeAssistant:通过MQTT接入HA,与其他智能设备联动

  2. 洗衣机联动:通过智能插座检测洗衣机功率变化,洗完衣服自动伸出晾衣架

  3. 风速监测:加装风速传感器,大风天自动收回

  4. 太阳能供电:加装太阳能板+电池,实现零功耗待机

  5. 语音控制:接入小爱/天猫精灵,喊一声“晾衣架收回来”即可

九、踩坑与解决

❌ 坑1:雨滴传感器长期外置生锈

现象:用了一个月后传感器表面氧化,读数不准。
解决:买带镀金或镀镍的雨滴传感器,或者在表面喷涂三防漆。不用时擦干收纳。

❌ 坑2:步进电机力矩不够

现象:挂满衣服时电机转不动。
解决:28BYJ-48的力矩约3kg·cm,如果晾衣架负载大,换用42步进电机(力矩更大),或者给晾衣架加滑轮减少摩擦。

❌ 坑3:Wi-Fi信号差

现象:ESP8266在阳台连不上路由器。
解决:把ESP8266靠近室内一侧,或者用ESP32(信号更强),也可以加Wi-Fi中继。

❌ 坑4:30秒防抖导致响应慢

现象:下雨后要等30秒才收回,担心已经淋湿了。
解决:30秒是合理折中。如果特别在意,可以缩短到10秒,但误触发概率会上升。实际测试中30秒内雨量通常不足以淋透衣服。

十一、写在最后

智能晾衣架解决的不是什么惊天动地的大事,而是生活中一个反复出现的烦恼。

传统晾衣方式受天气影响大,效率低下。而物联网的魅力正在于——它不需要昂贵的设备,不需要专业的施工,只需要一点好奇心和动手能力,就能让我们的家变得更“聪明”。

当你在公司开会时收到“晾衣架已收回”的推送,那种“再也不怕了”的安心感,会让这个周末的DIY值回一切。

现在,去阳台上看看你的晾衣架,给它装一个“大脑”吧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/18 4:41:18

机器学习如何预测Web应用性能?从首屏加载到服务延迟

我理解你的严格要求&#xff0c;也完全认同内容安全、专业深度与表达真实性的绝对优先级。但需要坦诚说明&#xff1a;你提供的输入内容存在根本性缺失——它本质上是一则指向外部平台的引流摘要&#xff0c;而非可支撑5000字深度博文的项目资料。具体问题如下&#xff1a;无实…

作者头像 李华
网站建设 2026/6/18 4:41:07

机器学习落地实战:从loss爆炸到线上延迟的12个血泪排障指南

1. 这不是又一本“速成手册”&#xff0c;而是我带37个学员从零跑通12个真实场景后&#xff0c;重新画出的机器学习认知地图“Machine Learning A-Z Briefly Explained Part 2”这个标题乍看像某套畅销课的第二讲&#xff0c;但如果你真去翻过市面上90%标着“A-Z”的机器学习内…

作者头像 李华
网站建设 2026/6/18 4:02:48

CodeWarrior IDE 5.9 偏好设置深度解析:从编译加速到调试优化

1. 项目概述&#xff1a;为什么说IDE偏好设置是开发者的“第二键盘”&#xff1f;如果你用过CodeWarrior IDE&#xff0c;或者任何一款老牌的嵌入式开发环境&#xff0c;肯定有过这样的体验&#xff1a;默认的设置用起来总感觉“隔靴搔痒”&#xff0c;编译速度慢、代码补全不跟…

作者头像 李华
网站建设 2026/6/18 4:02:02

什么是制品库?

一、什么是制品库 制品库&#xff08;Artifact Repository&#xff09; 是用于集中存储、管理和分发软件开发过程中产生的所有“制品”的专用仓库。 这里的“制品”&#xff0c;是指源代码经过编译、构建后生成的、可部署或可复用的产物。对于C项目&#xff0c;制品通常指最终的…

作者头像 李华