要做一个雨水感应的自动晾衣架,你只需要三个部分:负责检测水滴的 LM393 雨滴传感器模块、读取信号的 Arduino UNO,以及一颗 SG90 舵机——一检测到雨水,就把晾衣绳卷进屋檐下。照下面的表格接线,上传我们的示例代码,你的晾衣架模型就能自己抢救衣服了。
雨水感应自动晾衣架是怎么工作的?
原理很简单。雨滴传感器模块的感应板上有交错的铜条——水滴落在板上时,水把这些铜条连通,LM393 模块就会向 Arduino UNO 发送信号。
Arduino 读到信号后指挥舵机转动。我们把舵机当绞盘(winch)用——晾衣绳的一端绑在舵机摆臂上,舵机一转,绳子被卷起,晾衣架就被拉进屋檐下。等感应板重新干透,舵机往反方向转,晾衣架又出去了。
这是马来西亚 RBT 课和 FYP 的经典项目——特别配我们这种下午三点说下就下的暴雨天气。所有元件都在下面的清单里。
元件清单
附加工具(可选)
| Item | Price | Qty | |
|---|---|---|---|
XL830L Digital Multimeter with backlight Portable Multimeter Electronics ProjectMULTIME | RM25.95 |
雨滴传感器模块的 AO 和 DO 输出有什么区别?
雨滴传感器模块有两个输出引脚,很多学生就是在这里搞混的:
| 输出 | 信号类型 | 读数含义 |
|---|---|---|
| AO | 模拟信号,0–1023 | 分级数值 — 感应板越湿,数值越低/变化越大。想知道潮湿程度就用它。 |
| DO | 数字信号,HIGH 或 LOW | 只有是/否两种答案。在大多数模块上,感应板变湿时 DO 输出 LOW — 逻辑和多数人的预期正好相反。 |
这个项目我们只用 DO——我们只想知道“下雨还是没下雨”。牢牢记住:LOW 代表湿。这就是下面要讲的晾衣架“自己乱动”的头号原因。模块上的小电位器则用来调节灵敏度。

传感器和舵机怎么接线?
如果这是你第一次拿杜邦线,别担心——全部加起来只有六个连接点。用面包板和杜邦线,连烙铁都不用碰。
| 元件 | 引脚 / 线 | 接到 Arduino |
|---|---|---|
| 雨滴传感器模块 | VCC | 5V |
| GND | GND | |
| DO | Pin 2 | |
| SG90 舵机 | 棕 / 黑 | GND |
| 红 | 5V | |
| 橙 / 黄 | Pin 9 |

如果你的模块到货时排针还没焊上,先看看我们的排针焊接教程——很轻松的活。
供电小贴士:像这样的轻量模型,USB 或电池供电就够了。别从 Arduino 的 5V 引脚拉重负载——如果舵机抖动或板子自己重启,那就是需要独立 5V 电源的信号。
为什么 SG90 360° 舵机适合当绞盘?
SG90 360° 舵机是连续旋转(continuous rotation)舵机——它不会转到某个固定角度,而是像电机一样持续旋转。
在代码里,write(0) 和 write(180) 表示朝各自方向全速旋转,write(90) 表示停止。卷绳的距离靠旋转时间控制——比如转 3 秒,然后停。

如果你手上拿的是 180° 定位舵机,控制方式改用角度:write(0) 是晾衣架伸出的位置,write(180) 是收回的位置。不确定自己的是哪种舵机?下单前先读我们的舵机 180° vs 270° vs 360° 区别指南。
完整 Arduino 代码(带防抖)
这段代码会间隔 500ms 确认两次读数——避免溅到一滴水就触发系统。晾衣架收进来之后,它会等一分钟才重新检查。
#include <Servo.h>
const int PIN_SENSOR = 2; // 雨滴传感器模块的 DO
const int PIN_SERVO = 9; // 舵机信号线(橙/黄)
Servo winch; // SG90 360 度舵机当卷绳绞盘
bool jemuranDalam = false; // 当前状态:true = 晾衣架已收进
void setup() {
pinMode(PIN_SENSOR, INPUT);
winch.attach(PIN_SERVO);
winch.write(90); // 对 360 度舵机来说 90 = 停止
Serial.begin(9600);
}
// 确认两次读数 - 避免一滴溅水直接触发
bool hujanDisahkan() {
if (digitalRead(PIN_SENSOR) == LOW) { // 大多数模块上 LOW = 湿
delay(500); // 等半秒
if (digitalRead(PIN_SENSOR) == LOW) { // 还是湿的?才算真的下雨
return true;
}
}
return false;
}
void tarikMasuk() {
winch.write(0); // 朝一个方向全速旋转
delay(3000); // 转 3 秒 = 卷绳距离
winch.write(90); // 停止
jemuranDalam = true;
Serial.println("Hujan dikesan - jemuran masuk");
}
void keluarSemula() {
winch.write(180); // 反方向旋转
delay(3000); // 时间相同 = 距离相同
winch.write(90); // 停止
jemuranDalam = false;
Serial.println("Dah kering - jemuran keluar");
}
void loop() {
if (!jemuranDalam && hujanDisahkan()) {
tarikMasuk();
delay(60000); // 等 1 分钟再重新检查
}
else if (jemuranDalam && !hujanDisahkan()) {
keluarSemula();
delay(60000); // 给感应板时间彻底干透
}
delay(200);
}
通过 Arduino IDE 上传,然后打开串口监视器(9600 baud)看状态。往感应板上滴几滴水就能测试——不用等真的下雨。
真实客户最常踩的坑
“没碰到水,晾衣架就自己收进来了”
“project anak saya ada masalah — bila power on, jemuran terus masuk walaupun tak kena air. kemungkinan apa masalahnya ya… wiring cable ataupun code yang salah?”
这是我们 WhatsApp 上收到最多的问题——上面就是一位家长的马来语原话:一通电,晾衣架没碰到水就自己收进来了。通常是这三个原因之一:
- 代码里 DO 逻辑写反了。很多人写
if (digitalRead(PIN_SENSOR) == HIGH)来判断下雨,但在大多数模块上 LOW 才代表湿。上面的代码已经用了正确的逻辑。 - 灵敏度电位器调得太高。模块变得过度敏感——在我们这种潮湿的空气里很常见。慢慢转动电位器,直到感应板干燥时读数稳定。
- 感应板受潮或有脏污——上一场雨留下的。先用布把感应板擦干,再重新测试。
分不清是接线还是代码的问题?用万用表检查滴水时 DO 引脚的信号有没有变化——有变化就说明接线没问题,问题出在代码上。
对接线没信心?放心,你可以的
“cikgu saya cakap kalau tak tahu nak sambung wayar semua ni, tak payah buat”
有位学生用马来语告诉我们:老师说不会接线就干脆别做了。别放弃——这个项目总共只有六个接线点。照上面的接线表一行一行接,接好一行就做个记号,通电前再整体检查一遍。很多零基础的学生第一次尝试就成功了。
这套系统能用在家里真正的晾衣架上吗?
说实话:这是一个学习用的模型,不是真正的晾衣系统。SG90 舵机只卷得动轻量模型——真正的湿衣服远远超出它的能力范围。
要做真实规格,你需要大功率直流电机、电机驱动器和独立电源——不能再从 Arduino 引脚取电。如果电源电压偏高,用降压模块降下来——参考LM2596 降压模块调到 5V 教程。
想在 RBT 拿更高分?
呈现方式也算分。3D 打印外壳比纸皮箱加胶带看起来专业得多——如果你的学校有 3D 打印机,为 Arduino 和传感器支架打印一个外壳。在老师面前演示晾衣架自动进出,绝对印象加分。
FAQ
为什么没下雨,我的晾衣架也会自己收进来?
三大嫌疑犯:代码里 DO 逻辑写反了(LOW 才代表湿,不是 HIGH)、灵敏度调得太高,或者感应板还残留着上一场雨的水汽。把板擦干,逐一排查。
普通的 180° 舵机能用吗?
能用,只是控制方式不同——改用角度,比如 write(0) 是伸出位置、write(180) 是收回位置,而不是像 360° 舵机那样靠旋转时间。
雨滴传感器的灵敏度怎么调?
一边滴几滴水测试,一边一点一点转动模块上的小电位器。目标:感应板干燥时 DO 稳定,碰到水滴时快速翻转。
可以用 AO 输出代替 DO 吗?
可以——AO 给出 0 到 1023 的模拟读数,你可以自己设定潮湿阈值。但对学校项目来说,DO 已经够用,代码也更简单。
为什么代码要等一分钟才重新检查?
因为雨停之后,感应板通常还会湿上一阵子。没有这个间隔,读数每次短暂变化,舵机就会反复地收进又放出。
最后更新:2026年7月。有问题?WhatsApp 联系我们。



Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
Raindrops Sensor Water Droplets Sensor Module High Sensitivity For Arduino IOT Application
SG90 MG90 Tower Pro Micro Servo Motor 9g 180 360 Servo Motor for Arduino Robotic - SG90- 360°
MB102 Breadboard 170 400 830 Holes Breadboard Donut Board Arduino Prototype Multi Color - BREADBOARD (400 HOLES)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
XL830L Digital Multimeter with backlight Portable Multimeter Electronics Project