跳到主要内容

土壤水分测量传感器(AD电压)

一、传感器介绍

  • 电源电压: 3.3v or 5v
  • 输出电压: 0~2.3v
  • 工作电流: 最大20mA
  • 探头使用寿命:1年左右

product1

product2

product3

  • 电阻式土壤湿度传感器结构简单,价格便宜,可以通过暴露在电路板上的镀镍线路和土壤的接触来测量土壤的湿度,检测的土壤湿度被传感器以电压信号的方式输出。但由于被测量的土壤密度以及成分的不确定性,该传感器仅适用于精度要求不是太高的场合,更多的是希望用该传感器来判断土壤湿度的大致情况,通过传感器输出的电压值来判断土壤中水分含量的程度。
  • 土壤湿度传感器探头相当于一个电阻,当悬空时电阻无穷大,但在土壤中时,湿度越大电阻越小。
  • 传感器的DO引脚用来指示是土壤中的水分是否高于或低于某个阙值,通过电位器调节控制相应阀值,湿度低于阙值时DO输出高电平,反之DO输出低电平。
  • 传感器的AO引脚输出模拟电压信号,用来指示土壤含水量的程度。

这里我们只检测AO输出的电压模拟量信号,因为该电压信号可以反映土壤中的具体含水程度。对于DO引脚则使用起来更简单,如果开发者感兴趣的话可以用Core提供的GPIO库函数来实现,这里就不涉及了。

二、接线图

layout

三、材料清单

名称推荐购买链接(或者您可以自己制作)模块硬件资料下载
土壤湿度传感器模块模块购买链接下载地址
声明:这里推荐的购买链接仅供参考,您完全可以去其他商家或渠道购买,只要功能相似即可,如果需要更低的成本建议自己开发硬件模块或定制。

四、完整代码

--配置Core的USB口以虚拟串口模式工作,这样print()输出的内容就可以在电脑串口终端上显示了
LIB_UsbConfig("CDC")
--配置AD电压采集功能,最大值采样值4096对应3.6V输入电压
--当通道采集满1个点时缓存满,每个点的采集时间间隔为300ms
LIB_ADConfig(1,300000)
--开始大循环
while(GC(1) == true)
do
--每隔300ms查询A0通道是否转换完成
--开发者也可以将传感器接至A1-A3中的任一通道,也可以多个通道接多个传感器,用法都和下面一样
LIB_DelayMs(300)
A0_full_flag, A0_buf = LIB_ADCheckBufFull("A0")
if A0_full_flag == 1 then
--打印输出A0通道的AD采样值以及对应的电压值
print(string.format("A0=%04d Voltage=%.2fv", A0_buf[1], A0_buf[1]*3.6/4096.0))
end
end
如果感兴趣,上面代码中出现的LIB开头的库函数可以在 API文档 中通过Ctrl+F查询。

五、实验过程及结论

步骤一:把传感器探头空置(不接触土壤)

pic1

result1

可以看到在此状态下传感器输出的电压值在满压3.3V

步骤二:把传感器探头全部浸入水中观察

pic2

result2

可以看到土壤传感器探头全部浸入纯水中时传感器输出的电压值在1.18V左右

步骤三:把传感器探头放入具有一定湿度的土壤中观察

pic3

result3

可以看到传感器探头放入土壤中时输出的电压为1.59V

步骤四:向土壤中加入更多的水观察

pic4

result4

向土壤中加入更多的水后可以看到传感器的输出电压为1.31V

结论:

通过上面实验可以看出,传感器在"空置"-->"浸入纯水中"-->"放入土壤中"-->"土壤中加入更多的水"这四个状态输出的电压值分别为:3.30V,,1.18V, 1.59V,1.31V。

可以得出当土壤中所含水分比例越高时,传感器输出的电压越低。