首页 动态 版块 商城 我的
 退出
游客  
等级:
金币:
经验值:

FC-28土壤传感器湿度检测 模拟量信号读取Python/C++编程 树莓派与ESP32使用例程

  6297 
 0
豆豆   Hirono 

Image

一:土壤传感器介绍

   这是一款电阻式土壤湿度传感器,是电子元器中最常用的水分检测模块,传感器的S引脚输出模拟量信号,其输出的模拟电压值会随土壤湿度变化而连续波动,当湿度越小输出的电压越小,当湿度越大输出的电压也就越大,输出范围在0-3v左右,其输出是根据你的输入电压来决定范围的。


1.工作原理

是利用水分中离子导电特性,湿度电阻越小输出电压越大,湿度大电阻越小输出电压越大。但是在土壤中易受土壤盐分及电极极化腐蚀影响湿度检测,如果要转化精准的湿度百分比,需要加入单片机开发板来编程读取ADC值从而实现湿度数据!‌‌


2.产品参数

产品型号: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信号)(+电源正)(-电源负)
工作模式:电阻式(通过探针反馈湿度电阻变,湿度越高电阻越小反之增大)


3.引脚定义

Image

4.电路原理图

Image

二:树莓派例程

1.树莓派接线图

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


Image

2.Python程序

FC28soil moisture下载FC28soil moisture这个源代码上传树莓派Pico文件内,运行查看数据(如下图) 可将传感器放在干燥与湿润场景进行对比

如果你还没有搭建好树莓派Python的编程环境可参考这个帖子→:如何搭建Python编程环境


Image


说明:如果检测湿度百分比不精准,可calib_data里调节ADC最大与最小值。将传感器放在干燥和水中进行测试原始的ADC值。然后自己修改代码的默认值。

3.实战升级功能

1.上面的程序只是测试传感器读取湿度功能是否正常,我们要再次升级功能:检测+显示+报警+阀值设定+控制设备 等多种功能一体

2.请严格按下图的引脚标识一对一的进行连接,比如:S接GP0,那么找到蜂鸣器的S引脚与主板GP0引脚连接起来)务必不能接错!

Image

4.升级Python程序

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


Image

5.演示视频



6.按键功能

功能详细介绍
检测:传感器探头插在不同湿度的环境中,可实时检测水份湿度百分比
阀值:可设置湿度上限与下限阀值,低于下限时触发GP1/GP2/GP3输出高电平和GP4/GP5/GP6输出低电平。如果高于上限则输出相反
校准:针对不同的湿度环境,可校准传感器ADC的最小干燥值与最大湿润值。从而更加精准的检测湿度
按键:实现完全脱离电脑也能操作,可通过主板上按键进行调控阈值与功能
显示:实现可视化将湿度数据实时精准显示,还能显示校准值阈值设定等参数


7.校准与阈值设定

功能一:阈值设定

1.在主显示界面按A进入到阈值设定模式,进入后在次按A可切换“上限”与“下限” ,如果此时按B与C是增加与减小上下限数字

(上限:是指土壤传感器检测到湿度过高,引脚输出:GP1.GP2.GP3输出低电平,GP4.GP5.GP6输出高电平)

(下限:是指土壤传感器检测到湿度过低,开始报警,闪红灯,GP1.GP2.GP3输出高电平,GP4.GP5.GP6输出低电平)

2.最后按D保存阈值,并自动返回主界面。

Image

功能二:ADC校准

1.在主显示界面按B进入到ADC校准模式,进入校准模式后在次按B可切换“最小”与“最大” ,如果此时按C是会自动校准ADC值10秒后自动锁定数值。

(最小值:请将传感器放在空气中,按C开始读取ADC最小值10秒,视为干燥环境湿度最低值)

(最大值:请将传感器放在水份中,按C开始读取ADC最大值10秒,视为湿润环境湿度最大值)

2.最后按D保存校准,并自动返回主界面。

Image

三:ESP32/Arduino例程

1.ESP32接线图

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

Image

2.C++程序

FC-28 下载FC-28这个源代码直接用Arduino IDE编译上传程序打开串口监视查看(如下图) 

如果湿度不准确,可将传感器探头完全插入水中,将原始ADC值修改为程序最大值


Image


3.逻辑解析

校准基准点(预定义变量):

定义了计算百分比的两个“锚点”。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物联网,工控数显,嵌入式软硬件开发,科创教育,产品定制,生产,方案解决...

作者签名:    楼主  2026-04-03 18:29:28
回复列表
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
您的IP: 216.73.217.50 , 2026-07-26 23:52:56
Powered by YDXHUO _VERSION
© 2017-2026 跃动芯火版权
(17) 分享
分享

请保存二维码或复制链接进行分享

取消
免责声明
1、本站资源,均来自网络与个人作者,所有资源和文章仅限用于学习和研究目的 。
2、不得用于商业或非法用途,否则,一切责任由该用户承担 !

侵权删除请致信 E-Mail:ydxho@qq.com
已有0次打赏