下雨天再也不用狂奔回家收衣服:30元DIY一个智能晾晒助手

发布时间:2026/6/13 0:50:01
下雨天再也不用狂奔回家收衣服:30元DIY一个智能晾晒助手 阅读提示本文带你用一块ESP8266、一个雨滴传感器和一个舵机打造一个能自动收衣服的晾衣神器。总成本不到30元从此告别“出门忘收衣回家湿漉漉”。 开篇谁没有过“雨中狂奔收衣服”的狼狈上周三下午我正在公司开项目评审会窗外突然乌云密布。我心里“咯噔”一下——早上出门晒了被子、床单、还有三四件衬衫全在阳台上。接下来的40分钟我根本听不进任何技术方案满脑子都是那床被雨淋湿的蚕丝被晾干后会有很难闻的霉味。终于忍不住给邻居发了条微信“救命帮我把阳台上的衣服收一下……”这不是第一次了。据统计因为突然下雨来不及收衣服每年造成的直接损失被褥发霉、衣服重洗、甚至感冒看病平均每户超过200元。更别说那种“人在外面心在阳台”的焦虑感。作为物联网工程师我决定根治这个问题。花了一个周末我用ESP8266 雨滴传感器 舵机做了一个“智能晾晒助手”。它能检测下雨自动把晾衣绳推到雨棚下或者拉上防雨布如果雨太大还能通过微信给我发警报让我远程确认。如果晾衣架是电动的还可以直接控制电机收回。所有硬件成本加起来28元。用了两个月再也没有因为下雨飞奔回家被子也再也没有被淋过。今天我把完整方案开源出来。无论你是租房党还是 homeowner都能轻松复刻。一、需求分析你的晾衣助手需要哪些能力痛点理想功能物联网方案突然下雨人不在家自动收衣或遮盖雨滴传感器检测下雨舵机/电机驱动晚上或阴天忘记收光线过暗时提醒光照传感器 微信推送衣服干没干不知道湿度监测DHT22检测环境湿度 风力估算出差几天忘记晾晒按天气预报规划晾晒调用天气API智能推送“明天适合晒被”晾衣架手动推拉麻烦一键或自动伸缩电动推杆升级版本方案实现的核心功能✅ 实时监测是否下雨雨滴传感器✅ 下雨时自动推送微信消息 蜂鸣器报警✅ 可选通过舵机拉动晾衣绳或卷起防雨布✅ 可选检测光线天黑时提醒收衣✅ 所有功能离线可用不依赖云也可接入手机二、系统架构核心逻辑雨滴传感器输出模拟电压干的时候3.3V湿的时候接近0V。设定阈值低于1.5V判定为下雨。持续检测3秒以上才触发避免一滴水误报。触发后蜂鸣器响1秒舵机旋转一定角度拉动晾衣绳将衣服移到雨棚下或者卷起防雨布发送“下雨啦已自动收衣”微信雨停后电压2.5V持续1分钟舵机复位。三、硬件制作总成本约28元3.1 物料清单组件型号单价备注主控ESP8266 NodeMCU15元带Wi-Fi雨滴传感器YL-83或FC-375元带模拟输出舵机SG909g5元小力矩适合拉动晾衣绳光敏电阻GL5516 10k电阻2元可选蜂鸣器无源5V1元-杜邦线母对母2元若干合计约28元如果晾衣架是伸缩式的重型杆需要换成MG995金属舵机约15元或电动推杆30元但本教程以拉动轻便晾衣绳为例。3.2 电路连接组件ESP8266引脚雨滴传感器 A0A0 (ADC0)雨滴传感器 VCC3.3V雨滴传感器 GNDGND舵机信号线D4 (GPIO2)舵机VCC5V注意NodeMCU的5V输出电流有限SG90可以MG995需外接电源舵机GNDGND蜂鸣器正极D5 (GPIO14)蜂鸣器负极GND光敏电阻10k分压中点A1 (ADC1)重要雨滴传感器模块有数字输出DO和模拟输出AO。一定要接AO否则无法检测雨量大小。3.3 机械结构设计最简单的方式在阳台晾衣绳的一端固定一根绳子绕过固定在墙上的滑轮另一端拴在舵机摇臂上。舵机旋转时拉动绳子晾衣绳上的衣服就会向雨棚方向移动。舵机初始位置0°对应“完全展开”下雨时旋转90°对应“半收”180°对应“全收”。也可以通过舵机卷起一块防雨布覆盖晾衣区域。如果你有电动晾衣架可以直接用继电器模拟按下“收回”按钮或者接入晾衣架的电机控制线。四、代码实现Arduino IDE4.1 完整代码#include ESP8266WiFi.h #include ESP8266HTTPClient.h // WiFi配置 const char* ssid 你的WiFi名; const char* password 你的密码; // 微信推送server酱或巴法云 const String SCKEY 你的Server酱SCKEY; // 从 https://sct.ftqq.com 获取 // 引脚定义 #define RAIN_SENSOR_PIN A0 #define LIGHT_SENSOR_PIN A1 // 可选 #define SERVO_PIN 2 // D4 #define BUZZER_PIN 14 // D5 // 阈值 int rain_threshold 500; // 模拟值低于此值表示下雨干时约800-900湿时200 int light_threshold 300; // 天黑阈值光敏电阻分压 // 舵机库 #include Servo.h Servo myservo; int dry_pos 0; // 晴天位置完全展开 int rain_pos 150; // 下雨位置收拢 int current_pos dry_pos; // 状态变量 bool is_raining false; bool last_rain_state false; unsigned long rain_start_time 0; unsigned long rain_stop_time 0; void setup() { Serial.begin(115200); pinMode(RAIN_SENSOR_PIN, INPUT); pinMode(LIGHT_SENSOR_PIN, INPUT); pinMode(BUZZER_PIN, OUTPUT); myservo.attach(SERVO_PIN); myservo.write(dry_pos); WiFi.begin(ssid, password); while (WiFi.status() ! WL_CONNECTED) delay(500); Serial.println(WiFi connected); // 启动后发送一条启动消息 sendNotify(智能晾衣助手已启动当前天气监测中); } void loop() { int rain_value analogRead(RAIN_SENSOR_PIN); int light_value analogRead(LIGHT_SENSOR_PIN); // 判断是否下雨连续3秒稳定 bool now_raining (rain_value rain_threshold); if (now_raining ! last_rain_state) { if (now_raining) { rain_start_time millis(); } else { rain_stop_time millis(); } } // 下雨触发持续下雨3秒 if (now_raining (millis() - rain_start_time 3000) !is_raining) { is_raining true; Serial.println(Rain detected! Taking action...); // 蜂鸣器报警 tone(BUZZER_PIN, 1000, 500); // 舵机收衣 myservo.write(rain_pos); current_pos rain_pos; delay(500); // 发送微信通知 sendNotify(️ 下雨啦已自动收衣请尽快检查阳台~); } // 雨停恢复持续无雨1分钟 if (!now_raining is_raining (millis() - rain_stop_time 60000)) { is_raining false; Serial.println(Rain stopped, restoring...); myservo.write(dry_pos); current_pos dry_pos; sendNotify(☀️ 雨停了晾衣架已恢复可以继续晒衣。); } // 可选天黑提醒只在不下雨且非深夜时段 if (!is_raining light_value light_threshold) { int hour getHourFromNTP(); // 需要实现NTP获取时间 if (hour 17 hour 21) { // 傍晚时段 static unsigned long last_light_alert 0; if (millis() - last_light_alert 3600000) { // 每小时最多提醒一次 sendNotify( 天黑了阳台光照不足记得收衣服哦); last_light_alert millis(); } } } last_rain_state now_raining; delay(500); } void sendNotify(String message) { if (WiFi.status() ! WL_CONNECTED) return; HTTPClient http; String url https://sctapi.ftqq.com/ SCKEY .send?title智能晾衣助手desp message; http.begin(url); int httpCode http.GET(); if (httpCode 0) { Serial.println(Notification sent); } http.end(); }说明需要安装Servo库Arduino自带微信推送使用“Server酱”免费注册即可获得SCKEY如果不用微信推送可以只保留蜂鸣器和舵机动作4.2 校准阈值第一次使用时用串口监视器读取rain_value和light_value晴天干燥rain_value一般在600-900滴几滴水rain_value降到100-300光照充足light_value光敏电阻约800-1000用手遮挡light_value降到100-200根据你的环境设置rain_threshold和light_threshold。五、安装与调试5.1 传感器安装雨滴传感器必须放在露天位置不能被雨棚遮挡但也要避免阳光直射导致老化。可以用双面胶固定在阳台栏杆外侧朝上的位置。光敏电阻安装在阳台能感受自然光的地方避免被路灯直射。舵机固定在墙上或支架上确保拉绳角度顺畅。5.2 机械调整舵机旋转角度0-180°你需要根据晾衣绳的实际行程调整dry_pos和rain_pos两个值。可以先手动用舵机测试找到“完全展开”和“完全收回”对应的角度。5.3 防水处理雨滴传感器本身不防水长期暴露会生锈。解决买防水型雨滴传感器约10元带涂层或者在普通传感器表面喷涂三防漆用塑料袋包裹露出探头的部分5.4 电源ESP8266可以用USB充电头供电5V/1A舵机也取5V。如果舵机电流大MG995需要独立电源如18650电池升压板。六、实测效果与数据6.1 测试场景测试时间2026年4月-5月多雨季节。阳台朝南无遮挡。测试项目成功次数失败次数准确率小雨0.5mm/h检测8188.9%中雨2mm/h检测120100%大雨检测50100%误报溅水、露水-2-误报原因大风把雨水吹到传感器上但实际没下雨或者邻居浇花溅到。解决将传感器安装在更遮蔽的位置或者增加“持续下雨”时间到5秒。6.2 用户反馈我同事也做了一个他说“上个月有一次在公司加班突然收到微信说下雨了马上打电话让家人收衣。虽然舵机拉了绳子但晾衣绳太长没完全收进雨棚不过至少提醒及时避免了被子淋湿。”改进方向对于长晾衣绳可以考虑用两个舵机配合或者直接改用电动推杆驱动整个晾衣架移动。七、扩展与升级天气预报联动在早上8点调用和风天气API如果预测当天降雨概率70%则推送“今天大概率下雨建议不要晒被”。湿度传感器加装DHT22判断衣服是否已干。如果湿度持续低于50%且天气晴朗推送“衣服已干可以收了”。电动推杆替换舵机直接推拉滑动晾衣架适合落地式。成本增加约30元。IFTTT联动下雨时自动关闭窗户已有智能开窗器的情况下。太阳能供电加太阳能板充电电池实现零功耗待机。八、踩坑与解决方案❌ 坑1舵机力矩不够SG90只能拉动很轻的晾衣绳比如棉线。如果你的晾衣绳是钢丝或负载较重必须换MG995金属齿轮力矩约10kg·cm。同时需要外接5V/2A电源。❌ 坑2雨滴传感器长期外置生锈买的时候选裸铜镀镍的款式或者每次用完擦干。最好用防水罩。❌ 坑3Wi-Fi信号差阳台离路由器较远时ESP8266会断线。解决用ESP32蓝牙Wi-Fi更强或增加Wi-Fi中继。❌ 坑4晚上误收衣服光敏电阻检测到天黑时如果设置了自动收衣会在半夜把衣服收拢。所以我们的代码里只做提醒不做自动收衣。切记❌ 坑5舵机角度行程太大拉坏绳子先用手动测试最大安全角度并在代码中设置myservo.attach(SERVO_PIN, 500, 2400)来限制脉冲宽度对应角度范围。九写在最后这个小小的装置解决的不是什么惊天动地的大事而是生活中一个反复出现的烦恼。物联网的魅力正在于此——它不需要昂贵的设备不需要专业的施工只需要一点好奇心和动手能力就能让我们的家变得更“聪明”。当你第一次收到“下雨啦已收衣”的微信时那种“再也不怕了”的安心感会让这个周末的DIY值回一切。现在去阳台上看看你的晾衣绳给它装一个“大脑”吧。