
这是一款电阻式土壤湿度传感器,是电子元器中最常用的水分检测模块,传感器的S引脚输出模拟量信号,其输出的模拟电压值会随土壤湿度变化而连续波动,当湿度越小输出的电压越小,当湿度越大输出的电压也就越大,输出范围在0-3v左右,其输出是根据你的输入电压来决定范围的。
是利用水分中离子导电特性,湿度电阻越小输出电压越大,湿度大电阻越小输出电压越大。但是在土壤中易受土壤盐分及电极极化腐蚀影响湿度检测,如果要转化精准的湿度百分比,需要加入单片机开发板来编程读取ADC值从而实现湿度数据!
| 产品型号:FC-28 |
| 工作电压:DC3.3V ~ 5V |
| 工作电流:≤ 20mA(典型值 15mA) |
| 输出信号:S模拟量输出0 ~ 3V取决电源电压 |
| 测量范围:0% ~ 100% RH(相对湿度) |
| 测量精度:±5% RH(常规环境,会受土壤类型、盐分影响) |
| 响应时间:< 1 秒(干燥→湿润状态切换) |
| 工作温度:-10℃ ~ +70℃(推荐 0℃~50℃使用) |
| 存储温度:-40℃ ~ +80℃ |
| 探针材质:镀镍 / 镀金合金 |
| 产品尺寸:约 62mm × 20mm × 5mm |
| 孔位尺寸:孔3.5mm 两孔间距14mm(便于安装固定) |
| 接口定义:(S信号)(+电源正)(-电源负) |
| 工作模式:电阻式(通过探针反馈湿度电阻变,湿度越高电阻越小反之增大) |


| 以树莓派Pico开发板为例,提醒: 请按下图的引脚标识接线,务必不能接错。如果接错线通电后会导致设备烧毁! |

| FC28soil moisture | 下载FC28soil moisture这个源代码上传树莓派Pico文件内,运行查看数据(如下图) 可将传感器放在干燥与湿润场景进行对比 |
如果你还没有搭建好树莓派Python的编程环境可参考这个帖子→:如何搭建Python编程环境

说明:如果检测湿度百分比不精准,可calib_data里调节ADC最大与最小值。将传感器放在干燥和水中进行测试原始的ADC值。然后自己修改代码的默认值。
1.上面的程序只是测试传感器读取湿度功能是否正常,我们要再次升级功能:检测+显示+报警+阀值设定+控制设备 等多种功能一体。
2.请严格按下图的引脚标识一对一的进行连接,(比如:S接GP0,那么找到蜂鸣器的S引脚与主板GP0引脚连接起来)务必不能接错!

| 土壤湿度压缩包 | 下载这个压缩包并解压,将程序文件全部上传至树莓派pico文件内,直接运行查看数据(如下图) |

| 功能 | 详细介绍 |
| 检测: | 传感器探头插在不同湿度的环境中,可实时检测水份湿度百分比 |
| 阀值: | 可设置湿度上限与下限阀值,低于下限时触发GP1/GP2/GP3输出高电平和GP4/GP5/GP6输出低电平。如果高于上限则输出相反 |
| 校准: | 针对不同的湿度环境,可校准传感器ADC的最小干燥值与最大湿润值。从而更加精准的检测湿度 |
| 按键: | 实现完全脱离电脑也能操作,可通过主板上按键进行调控阈值与功能 |
| 显示: | 实现可视化将湿度数据实时精准显示,还能显示校准值阈值设定等参数 |
功能一:阈值设定 1.在主显示界面按A进入到阈值设定模式,进入后在次按A可切换“上限”与“下限” ,如果此时按B与C是增加与减小上下限数字 (上限:是指土壤传感器检测到湿度过高,引脚输出:GP1.GP2.GP3输出低电平,GP4.GP5.GP6输出高电平) (下限:是指土壤传感器检测到湿度过低,开始报警,闪红灯,GP1.GP2.GP3输出高电平,GP4.GP5.GP6输出低电平) 2.最后按D保存阈值,并自动返回主界面。 |

功能二:ADC校准 1.在主显示界面按B进入到ADC校准模式,进入校准模式后在次按B可切换“最小”与“最大” ,如果此时按C是会自动校准ADC值10秒后自动锁定数值。 (最小值:请将传感器放在空气中,按C开始读取ADC最小值10秒,视为干燥环境湿度最低值) (最大值:请将传感器放在水份中,按C开始读取ADC最大值10秒,视为湿润环境湿度最大值) 2.最后按D保存校准,并自动返回主界面。 |

本次以ESP32-S3主板为例按下图接好连接线,务必注意不可接反,否则会烧毁传感器。

| FC-28 下载FC-28这个源代码直接用Arduino IDE编译上传程序打开串口监视查看(如下图) |
如果湿度不准确,可将传感器探头完全插入水中,将原始ADC值修改为程序最大值

校准基准点(预定义变量):
定义了计算百分比的两个“锚点”。ADC_MIN_DRY 是土壤完全干燥时的电平,ADC_MAX_WET 是完全湿润时的电平。
将它们放在代码最顶部,方便你根据串口打印出的原始 ADC 随时手动修改。
软件滤波(均值采样):
ESP32 的 ADC(模数转换器)容易受到电源波动或电磁干扰,导致单次读数频繁跳动。
这里连续读取 10 次原始值并取平均数,能让输出的数值平滑稳定得多。
核心映射算法 (map)
map(x, in_min, in_max, out_min, out_max) 是 Arduino 内置的线性插值函数。
注意顺序:这里把 ADC_MIN_DRY 放在前面对应 0,ADC_MAX_WET 放在后面对应 100。这就实现了“ADC 越大,百分比越小;ADC 越小,百分比越大”的反向等比例转换。
边界限幅 (constrain):
防止“爆表”。如果土壤比你预设的还干,ADC 可能会超出 ADC_MIN_DRY,此时 map 函数会算出一个负数(比如 -5%);反之如果太湿,可能会算出一个超过 100% 的数(比如 105%)。
constrain 强行把范围锁定在在 0 到 100%的合理区间内。
打印输出数据:
前面几句用 Serial.print() 不换行输出,最后一句用 println() 换行,确保串口监视器里始终保持“原始 ADC 值: xxx | 土壤湿度: xx%”,方便你一边观察原始 ADC,一边校准数值。
联系人:张工
电话:0755-32914578
QQ:2251000002
微信:扫下方二维码添加,请备注来意
提供:人工智能,IOT物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...