土壤湿度检测模块利用ADC测量具体湿度(一)

  网上关于土壤湿度检测模块的使用大多都是通过其DO数字信号输出引脚来判断检测到的湿度是否超过阈值(超过输出低电平,否则输出高电平),而对于其AO模拟信号输出引脚的使用却鲜有人提及。

  本文就此从AO引脚的角度来简单谈谈本模块的使用,分享一些个人见解和疑惑。

  我用的是这种最简单的不带继电器的模块,如果采用DO引脚对模块进行使用的话,可通过模块中的蓝色电位器对阈值进行调节——不过,本文则是采用AO引脚对模块进行使用。(当然,你也可以结合起来一起使用)
在这里插入图片描述
关于该模块的引脚说明我直接引用某宝产品图片了:
在这里插入图片描述
  AO引脚我们接单片机的某个具有ADC功能的引脚(用于检测模拟电压信号),DO引脚我们接单片机的某个具有外部中断功能的引脚(用于检测电平信号的边沿变化,以判断湿度是否超过阈值),其它引脚我觉得传媒学生都晓得怎么接了。

  该模块的AO引脚能够输出模拟电压信号,而基于我们对ADC的简单认知,我们知道单片机能够通过ADC测得模拟电压。那么接下来就简单了:

  我们通过ADC先测得在湿度为0%时(干燥环境下)AO引脚的值(假设为M0),然后再测出在湿度为100%时(插入纯水中)AO引脚的值(假设为M1),以这两个数据作为参考基准。那么下一次实际测量时,即可通过以下公式求得实际湿度:

在这里插入图片描述
即通过对整个范围的占比来大致计算其湿度。

  接下来通过STM32举例,抛开ADC配置不讲,简单po一些相关代码和伪代码,展示一下大致流程:

系统初始化();
exti_init();				//外部中断初始化,用来检测DO引脚的边沿变化(这里是上升沿检测,使用PE1引脚)
Adc_Init();					//初始化ADC,这里将PA5设为模拟输入并使能、配置ADC
adc_org=ADC采样函数();		//对AO引脚进行采样,得到采样原始值
moisture = (float)(M_max-adc_org)/(M_max-M_min)*100;
//这里M_max是湿度为0%时测得值,M_min是100%时测得值
//由于湿度为0%时数值大,湿度为100%时数值小,即湿度越大,数值越小
//所以公式就转变为:(M_max-adcx)/(M_max-M_min)*100

一部分具体的代码段如下图所示,仅供参考:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  以上就是关于该模块AO引脚的大致使用,但是在写本篇博文的时候,和朋友讨论,发现好像还是有bug的:

  我们知道说AO引脚能够输出模拟电压,那它输出的是谁的电压,它和待测的土壤湿度的转换关系是什么?
  再者,从"所谓的"湿度0%到100%,测得的数值它们之间是均匀线性分布的吗?
  测得值位于M_max和M_min的正中间,它就真的对应的是50%的湿度吗?

所以本文观点和思路还有待进一步的研究确认,仅作为参考。

CSDN中调整图片大小的方式:在原先#pic_center的基础上,在后面加上
=500x500,就能得到相应的500x500大小的图片了,租一次等于号前面需要有空格,乘号用小写字母x。

  • 30
    点赞
  • 241
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值