只要是要长期插在花盆里的,就买电容式土壤湿度传感器。便宜的双叉电阻式探头让直流电经由裸露的金属脚穿过土壤,金属脚会慢慢电解,最后在湿土里报告「土壤很干」。电容式探板隔着一层完整的涂层感应水分,完全不会把电流送进土里。如果只是一个下午的课堂示范,电阻式探头仍然够用。
两种土壤湿度传感器到底在测什么?
电阻式土壤湿度传感器,也就是那支双叉探头,测的是电流在土壤里流动的难易程度。在 MH 款 LM393 模块上,一颗固定电阻从 VCC 接到 AO 输出,探头再从 AO 接到地,两者组成一个分压电路。溶有盐分的水会导电:湿土让探头的电阻下降,把 AO 拉向 0 V;干土几乎不导电,AO 就升向 VCC。只要板子通着电,这股直流电就一直在流。
电容式土壤湿度传感器测的是土壤的介电常数,也就是它储存电荷的能力。黑色探板的阻焊层底下藏着铜走线,组成一个电容,周围的土壤就是它的介质。水的介电常数约为 80,矿质土约为 4,空气为 1(电容探头),所以土壤一湿,电容就成倍增加。在 v1.2 板上,一颗 555 定时器芯片经过一颗电阻,用约 1.5 MHz 的方波驱动探板。这颗电阻和探板组成一个 RC 滤波器。方波每半个周期都太短,探板来不及充满;电容越大,充到同一电压所需的电荷就越多,所以土越湿,探板上的电压摆幅就越小。后面的二极管峰值检波电路把摆幅的顶点保持成一个稳定的电压,这就是 AOUT 随土壤变湿而下降的原因。能穿过涂层的只有交变电场,没有任何电流进入土壤。
| 电阻式双叉探头(SOILMOI、SOMOSEN) | 电容式 v1.2(CAPSOIL) | |
|---|---|---|
| 测的是什么 | 导电率:水加上溶解的盐分 | 介电常数:含水量 |
| 流进土壤的电流 | 经由裸露金属脚持续通直流电 | 没有;只有隔着涂层的交变电场 |
| 怎么坏 | 金属脚电解;读数往「干」漂移 | 不会电解;涂层被刮穿或上方电子零件进水才会坏 |
| 输出 | 模拟输出;SOILMOI 另有比较器提供的 DO | 只有模拟输出(AOUT) |
| 适合的用途 | 在土里插一个下午 | 花盆、菜圃、自动水泵 |

需要哪些土壤湿度传感器零件?
零件清单:电容式与电阻式探头在 Uno 上并排对比
Parts list
| Item | Price | Qty | |
|---|---|---|---|
Soil Moisture Sensor Module Detection Water Level Capacitive Corrosion Resistant for Arduino DIYSOMOSEN | RM2.35 |
RBT 单堂课示范最便宜的探头:一体式电阻双叉探头,只有模拟输出(S、+、−),没有比较器。在土里插一个下午没问题,在花盆里放上几个星期就不行。
电容式土壤湿度传感器 v1.2 就是那块黑色探板;丝印上的「Capaitive」是原始设计本身的拼写错误,并不代表是假货。MH 土壤湿度模块是一支电阻式双叉探头,加上一块蓝色的 LM393 比较器板;红色的 Funduino 款双叉探头同样是电阻式。看金属就能判断:露出银色金属脚,就代表有电流穿过土壤。
买一支,或者两种都买,插在同一个花盆里接上 Uno 对比。Uno 的排针座是母座。电容式探头的线材末端是母头插头,所以要用公对公杜邦线;LM393 板和红色探头带的是公针,所以要用公对母杜邦线。
为什么电阻式土壤湿度传感器用了几个星期,插在湿土里却显示干?
电阻式探头的直流电,把它变成了一个电解池。在正极的金属脚上,金属原子失去电子、溶解成离子,于是银色镀层越来越薄,底下的铜出现蚀坑,还长出一层氧化物和盐分的结垢。在负极的金属脚上,电流把水电解,放出氢气。肥料会加快这个过程:溶解的离子越多,带的电流就越大;根据法拉第电解定律,金属的损耗与通过的电荷量成正比。
这些损伤会让探头的电阻上升:接触土壤的镀层变少了,结垢又不太导电。在分压电路里,探头电阻越大,AO 就越高。以 10 kΩ 固定电阻为例:探头在湿土里是 2 kΩ 时,输出 5 × 2 ÷ 12 = 0.83 V,在 Uno 上约读到 171。再加上 8 kΩ 的腐蚀,同样的湿土就变成 5 × 10 ÷ 20 = 2.5 V,约 512,已经往「干」那一端走了一半。这种漂移很慢,而且只往一个方向走,所以水泵一直在浇一盆湿土的时候,表面上什么都看不出坏了。
电容式或电阻式土壤传感器怎么接 Arduino?
这里的每一款土壤湿度传感器都需要同样三条连接:接地、3.3–5 V 供电,以及一条接到 ADC 引脚的模拟输出。只有 MH 模块的 LM393 板多出第四条 DO,也就是数字的开/关信号;电容式 v1.2 和红色探头都没有 DO 引脚,也没有阈值旋钮。
| 传感器引脚 | Uno | ESP32 | 备注 |
|---|---|---|---|
| CAPSOIL GND(黑线) | GND |
GND |
|
| CAPSOIL VCC(红线) | 5V |
3V3 |
一直通电;它没有磨损需要省 |
| CAPSOIL AOUT(黄线) | A0 |
GPIO34 |
0–3.0 V 模拟输出;越低越湿 |
| SOILMOI 探头,两支针 | 接到板上的两针输入端,不分方向 | 用附带的母对母线 | |
SOILMOI VCC |
D7 |
GPIO18 |
只在读取时才通电 |
SOILMOI GND |
GND |
GND |
|
SOILMOI AO |
A1 |
GPIO35 |
越低越湿 |
SOILMOI DO |
D2 |
GPIO19 |
HIGH = 比旋钮设定的阈值更干 |
SOMOSEN + / − / S(取代 SOILMOI) |
D7 / GND / A1 |
GPIO18 / GND / GPIO35 |
只有模拟输出,程序里 DO 那一行不用理;越高越湿 |
LM393 板上的蓝色电位器只影响 DO。当 AO 高于旋钮设定的参考电压,也就是比你的阈值更干时,比较器让 DO 保持 HIGH;土壤更湿时就把它拉到 LOW。转动旋钮完全不会改变 analogRead() 读到的数值。调整时板子需要稳定供电,因为下面的程序每次读取只让它通电一瞬间:先把它的 VCC 线改接到 5V(ESP32 接 3V3),把探头插进干到你所能接受程度的土里,再慢慢转动旋钮,直到 DO 指示灯刚好改变状态。之后把 VCC 接回切换用的引脚;从此板上的指示灯每读一次只闪一下,这是正常的。
为什么要用引脚给电阻式板供电?电解只在有电流时发生,所以程序只在读取时才给探头通电:先等 10 ms 稳定,再以 2 ms 的间隔取 16 个样本,每次读取约 45 ms。每 10 分钟读一次,通电时间就只占 0.045 ÷ 600,不到万分之一。这样能大大减缓磨损,但不能完全阻止;而板上的比较器、分压电路和两颗指示灯只耗几毫安,在 Uno 引脚宽裕的 20 mA 范围之内。
土壤湿度传感器怎么校准,而不是直接相信原始读数?
在你知道这支传感器的两个端点之前,原始读数没有任何意义。Uno 的 analogRead() 返回 1023 × 输入电压 ÷ 5 V,而电容式 v1.2 最高只输出 3.0 V,所以它能读到的最大值是 1023 × 3.0 ÷ 5 ≈ 614。整个量程有五分之二根本到不了,从电阻式教程照抄来的「高于 700 就是干」阈值永远不会触发。振荡器和探板也因板而异,所以每一支传感器都要有自己的两个数字:
- 先把下面的程序原样上传,打开串口监视器;你需要的就是它打印出来的原始数值。把干净、干燥的探头悬在空气中,记下原始值:这就是
CAP_DRY(或RES_DRY)。 - 把它竖着放进一杯水里,水深到板上横印的那条线(双叉探头就放到银色部分结束的位置),等几秒,记下数值:
CAP_WET(或RES_WET)。 - 把两个数字填进程序,再上传一次。程序会把每次读数放到这两点之间的直线上:0% 是干,100% 是湿。
电容式和 MH 模块都是越湿读数越低;红色探头则经过一颗晶体管放大探头电流,所以它的输出是越湿越高。map() 两个方向都能用,因为它只需要两个端点,而 constrain() 会把超出端点的读数截掉。得到的是一个相对刻度:盆土永远不会像一杯水那么湿,所以「该浇水」的点,要看着你自己的植物慢慢变干来决定。在表层几厘米的土摸起来变干那天记下百分比,低于这个值就浇水。探头插一次就别再动。探头周围的空气缝隙会被读成干土,因为空气的介电常数是 1,而且空气不导电,所以拔出来再插回去,即使土壤没变,读数也会跳。

// 电容式 vs 电阻式土壤湿度传感器,并排对比
// 电容式 v1.2(AOUT)与电阻式 MH 模块(AO + DO)接在同一块板上
#if defined(ARDUINO_ARCH_ESP32)
const int CAP_PIN = 34; // ADC1 引脚:开着 Wi-Fi 也能读
const int RES_PIN = 35; // ADC1 引脚
const int RES_PWR = 18; // 只在读取时给电阻式板供电
const int DO_PIN = 19;
#else
const int CAP_PIN = A0;
const int RES_PIN = A1;
const int RES_PWR = 7;
const int DO_PIN = 2;
#endif
// 校准值:换成你自己传感器的数字(示例数值来自 Uno)
const int CAP_DRY = 600; // 电容式,探头在干燥空气中
const int CAP_WET = 280; // 电容式,放进水里到标示线
const int RES_DRY = 1015; // 电阻式探头,在干燥空气中
const int RES_WET = 330; // 电阻式探头,在水中
const unsigned long READ_EVERY_MS = 2000; // 长期插在花盆里时改成 600000(10 分钟)
const int SAMPLES = 16;
int readAverage(int pin) {
long sum = 0;
for (int i = 0; i < SAMPLES; i++) {
sum += analogRead(pin);
delay(2);
}
return sum / SAMPLES;
}
// 不管传感器往哪个方向变化,map() 都适用:干端 0%,湿端 100%
int toPercent(int raw, int dry, int wet) {
long pct = map(raw, dry, wet, 0, 100);
return constrain(pct, 0, 100);
}
void setup() {
Serial.begin(115200);
pinMode(RES_PWR, OUTPUT);
digitalWrite(RES_PWR, LOW); // 两次读取之间探头断电:没有电流,就没有电解
pinMode(DO_PIN, INPUT);
#if defined(ARDUINO_ARCH_ESP32)
analogReadResolution(12); // 0-4095
analogSetAttenuation(ADC_11db); // 可测约 0.15-3.1 V
#endif
}
void loop() {
int capRaw = readAverage(CAP_PIN);
digitalWrite(RES_PWR, HIGH); // 给电阻式板通电
delay(10); // 等分压电路和比较器稳定
int resRaw = readAverage(RES_PIN);
bool resDry = (digitalRead(DO_PIN) == HIGH); // HIGH = 比旋钮设定的阈值更干
digitalWrite(RES_PWR, LOW); // 然后再断电
Serial.print("capacitive raw ");
Serial.print(capRaw);
Serial.print(" = ");
Serial.print(toPercent(capRaw, CAP_DRY, CAP_WET));
Serial.print("% | resistive raw ");
Serial.print(resRaw);
Serial.print(" = ");
Serial.print(toPercent(resRaw, RES_DRY, RES_WET));
Serial.print("% DO: ");
Serial.println(resDry ? "dry" : "wet");
delay(READ_EVERY_MS);
}
串口监视器设为 115200 波特率。要把校准后的读数变成浇水动作,Arduino 自动浇花系统在同一款电容式传感器上加了继电器和水泵;水位继电器自动水泵教程和迷你水泵教程讲的是水泵那一边,包括为什么水泵绝对不能直接接在 Arduino 引脚上:它要的电流是引脚能安全提供的好几倍。
用 ESP32 读土壤湿度传感器有什么不同?
在 ESP32 上,土壤传感器要接 ADC1 引脚,也就是 GPIO32–39。ADC2 引脚和 Wi-Fi 驱动共用同一个转换器,所以 Wi-Fi 一启动,ADC2 就读不到数,而大多数 ESP32 土壤项目正是为了通过 Wi-Fi 发送读数。程序用的是 GPIO34 和 GPIO35,这两个本来就是只能输入的引脚。
传感器用 3.3 V 供电。ESP32 的引脚不能承受高于它 3.3 V 供电的电压,而 LM393 板的 AO 最高会摆到它的供电电压:由 GPIO18 供电就不会超过 3.3 V,若改用 5 V 供电,就可能把 5 V 送到引脚上。ESP-32S 开发板(或其他 ESP32 型号)的读数范围是 0–4095,在 11 dB 衰减下可测约 0.15–3.1 V,所以电容式的输出放得下,但原始数值和 Uno 不同:要重新校准。ESP-32S 带的是公排针,所以杜邦线的公母要和 Uno 反过来:电容式的插头用公对母杜邦线,LM393 板和红色探头的公针则要用母对母杜邦线。
电容式土壤传感器怎么撑过一整季?
电容式 v1.2 只有在涂层完好时才不会磨损。探板上的阻焊层只是一层薄漆;一旦被石头刮穿,裸铜就会碰到湿土,探板除了是电容,还会像电阻一样漏电,读数随之偏移,露出的铜也会腐蚀。土太硬就先松土,别硬插。
板上元件下方那条横跨板子的细白线,就是插入深度的上限。线以上是定时器芯片、稳压器和插座,全都没有密封;一旦埋进土里或被溅湿,水会在引脚之间搭桥,输出乱跳,甚至整块板坏掉。板子的切边是裸露的玻璃纤维,水会顺着玻璃纤维渗进板材里,增加探板的电容,读数在几个星期里慢慢往「湿」爬。要用一整季,就用环氧胶或热缩管把切边和上方的电子零件封好,注意别让密封材料盖到感应区,封完再重新校准。
健康的 v1.2 板在 Uno 上,从干燥空气到水里,读数会差上几百,所以两点校准同时也是检查新板的方法。如果读数几乎不动,看看那颗八脚定时器芯片:设计用的是 TLC555,一颗额定最低 2 V 的 CMOS 定时器。有些仿制板用的是 NE555,规格从 4.5 V 起,在板上 3.3 V 的稳压电源下已经超出规格;Cave Pearl Project 发现,这类板子即使接 5 V,也有一半表现异常。

还有什么理由买电阻式土壤湿度传感器?
有:做短时间的示范,电阻式土壤湿度传感器正是对的选择。在 RBT 课上,探头插进一杯土,全班看着倒水时读数怎么变化,当天下午就拔出来。既然金属损耗跟通过的电荷量成正比,四个小时的代价就是 4 ÷ 720,不到在花盆里插一个月的 1%。冲洗、晾干,留给下一班用。红色探头最简单,三支针、不用调;MH 模块多了 DO,学生可以先用 digitalRead() 控制一颗 LED。
即插即用的土壤湿度继电器模块不用写程序就能切换一台小型直流水泵,但它的探头是一直通电的电阻式双叉探头,所以比用引脚切换供电的探头腐蚀得更快:短期项目可以,一整季不行。只接低压直流;继电器上印着 250 VAC,不代表可以把市电线路拉到湿土旁边。如果你的项目是种菜加养鱼,鱼菜共生 RBT 专题把植物种在定时淹水的陶粒里,完全不用土壤传感器。
原则是:任何要在花盆里放超过几天的,或者要驱动自动水泵的,都用电容式传感器。RBT 单堂课示范,两种都可以。
我们常见的错误
看名字判断探头。市面上不少双叉探头都挂着「电容式」或「防腐蚀」的名字在卖。只要看到裸露的银色金属脚,不管标签怎么写,就是有电流穿过土壤;电容式板是一整片光滑、完全被涂层覆盖的探板,看不到任何金属。
照抄别人的阈值。别的教程里的数字,属于那支传感器配那块板的 ADC。花两分钟、准备一杯水,就能得到你自己的数字。
买 DHT11 来测土壤。马来文的 kelembapan 同时指空气湿度和土壤湿度,中文的「湿度」也一样,所以搜湿度传感器很容易搜到 DHT11。DHT11 测的是它周围空气中的水蒸气,对土壤里含多少水一无所知(DHT11 与 DHT22 怎么选)。
常见问题
电容式和电阻式土壤湿度传感器,哪个比较好?
在土里放超过几天的,选电容式:没有电流进入土壤,就没有东西会电解。电阻式适合短时间示范。
为什么我的土壤湿度传感器插在湿土里却显示干?
电阻式探头是腐蚀:电解让金属脚的电阻上升,把读数推向「干」。换成电容式就好。如果是电容式板,要把探板周围的土压实,因为空气缝隙会被读成干,并且用你自己测到的干、湿读数来校准。
电容式土壤湿度传感器可以接 ESP32 吗?
可以。用 3.3 V 供电,接 ADC1 引脚(GPIO32–39),因为 Wi-Fi 一启动 ADC2 就读不到;校准也要直接在 ESP32 上做。
电容式土壤湿度传感器 v1.2 有 DO 引脚吗?
没有。它只有 GND、VCC 和 AOUT。DO 引脚和阈值旋钮属于电阻式探头附带的 LM393 比较器板。
我的传感器上印着「Capaitive Soil Moisture Sensor」,是假货吗?
不是,这个拼写错误本来就印在 v1.2 设计的丝印上。真正该检查的是定时器芯片:TLC555 才对。
最后更新:2026年10月。有问题?WhatsApp 联系我们。



Capacitive Soil Moisture Sensor V1.2 Corrosion Resistant with Cable For Arduino IOT Application
MH Soil Moisture Sensor Module Hygrometer Detection Moisture Sensor for Arduino Plant Watering System
Arduino Uno Compatible SMD UNO R3 with Type B Cable - ATMEGA328P with CH340G-Microcontroller Project
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-M 20CM
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 30CM
Soil Moisture Sensor Module Detection Water Level Capacitive Corrosion Resistant for Arduino DIY