土壤湿度传感器,出远门再也不怕花没人浇水了

一口Linux 2020-11-20

土壤湿度传感器模块(4线制)可以宽范围控制土壤的湿度。

通过电位器调节控制相应阈值,湿度低于设定值时,DO输出高电平,高于设定值时,DO输出低电平。

使用该模块做一个自助浇水系统,再也不用担心家里的植物忘记浇水了。

功能介绍

  • 传感器适用于土壤的湿度检测;
  • 电压比较器采用LM393芯片;
  • 模块中蓝色的电位器是用于土壤湿度的阈值调节。湿度低于设定值时,DO输出高电平,模块提示灯灭;湿度高于设定值时,DO输出低电平,模块提示灯亮;
  • 顺时针调节,LM393的反向输入端输入电压越高,较低的湿度环境,模块即可输出低电平,模块灯亮;即向右旋转,增加模块的灵敏度。
  • 逆时针调节,LM393的反向输入端输入电压越低,较高的湿度环境,模块才能输出低电平,模块灯亮。即为了让LM393电压比较器输出低电平,需要反向输入端电压大于正向输入端电压,而反向输入端电压已经通过电位器调低了(对应分压也变低了),那么只能将正向输入端的电压调的更低,只有湿度更大的情况下,正向输入端的电压才更低,所以将土壤湿度传感器向水中插入更深入才能触发模块的LED输出指示灯点亮。

此处很绕,我也看了好几遍,如果有什么问题,留言处交流哈,如果有误,我会在留言处更正。

  • 数字量输出D0可以与单片机直接相连,通过单片机来检测高低电平,由此来触发外设,比如水泵是否工作;
  • 模拟量输出AO可以和AD模块相连,通过AD转换,可以获得土壤湿度更精确的数值;
  • 工作电压3.3V-5V

3.3V时,使用STM32自带ADC功能,在空气中AO读取的值最大为4092 , 浸泡在水里的最小值1250;放在潮湿的纸上,值大约为3090附近。

  • 因为长期与水接触会发生锈蚀,可能一段时间之后会影响使用效果。

也就是说,水锈蚀会导致土壤湿度检测模块的电阻值发生变化,进而会导致土壤湿度的检测值发生偏差。

应用

可以应用于自动对菜园,花园自动浇水,家庭花盆土壤湿度的控制,水位检测。

两个电极插入土壤后,土壤将两个电极连接到一起,充当电阻,与电路中的电阻分压,再送到LM393同相端中与变阻器得到的电压比较,最后得出湿度是否超过阈值。

LM393原理

LM393是常用的运放芯片,最主要的用途就是用作电压比较器。

所以LM393常称之为电压比较器芯片。

什么是电压比较器,就是比较两个输入的电压是不是一样。

这个特点很有用,我们身边的电器很多都用到了这个功能。比如锂电池的充电保护,还有有些设备有温度保护模块,模块里面有个温度传感器,这个温度传感器将温度变化转变成电压变化,当这个电压超过给定的电压时,就会自动切断电路。

当同相端电压大于反相端电压时,电压比较器的输出端OUT输出高电平电压;
当同相端电压小于反相端端电压时,电压比较器的输出端OUT输出低电平电压,此时开关指示灯亮。

湿度检测原理

由电路原理图我们可以看出,模块的核心是一个电压比较器,采用了常见的LM393。

LM393的正相输入端接的是由两个电阻组成的分压电路,其中下电阻是土壤湿度传感器,该土壤湿度传感器就是两个电极,当两个电极之间有土壤连接之后,就等效为一个电阻,电阻值会随着土壤湿度变化而变化。实物图中,带两个大电极的那个就是土壤湿度传感器了。

LM393是电压比较器,将接在土壤湿度传感器端的两个电极插入土壤中,由于土壤中的水有一定的导电性,土壤湿度的变化会导致土壤的等效电阻值发生变化,将分压得到的电压信号传递给电压比较器的同相输入端,这个变化的电压信号与电压比较器的反相输入端的基准电压相比较。

在土壤干燥时,两个电极之间的等效电阻值很大,AO处分压点电压升高,一定程度后,使同相端电压大于反相端电压,电压比较器的输出端OUT输出高电平电压,此时开关指示灯不亮。

在土壤湿润时,两个电极之间的等效电阻值很小,AO处分压点电压下降,一定程度后,使同相端电压小于反相端电压,电压比较器的输出端OUT输出低电平电压,此时开关指示灯亮。

接在反相端端的电位器用于调节该端的电位电压,这个电压也就是电压比较器输入的阀值翻转电压,用于土壤湿度灵敏度调节。

硬件连接

模块 STM32
VCC 3.3V
GND GND
DO PA2
AO PA3

注意: 模块(小板)连接传感器的两条线不分正负,随便接。

结果展示



程序实现通过串口1打印输出传感器AO引脚的电压值和DO引脚的电平状态,点开串口助手,查看数值的变化。

传感器浸泡在水中和提起的来的数据变化,AO引脚的电压值数值越小,湿度越高,反之越低。


资料获取

微信公众号后台回复“土壤湿度传感器”,可以下载本文对应的工程源码。



其他网友提问汇总

 1. 两个线程,两个互斥锁,怎么形成一个死循环?

 2. 一个端口号可以同时被两个进程绑定吗?

 3. 一个多线程的简单例子让你看清线程调度的随机性

 4. 粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数




推荐阅读


【1】 到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念【科普】 必读
【2】Linux面试题100道,看看会多少?
【3】 Modbus协议概念最详细介绍 必读
【4】 I2C基础知识入门
【5】 多路复用IO内幕 
【6】 又一华为程序员进了ICU:压垮一个家庭,一张结算单就够了! 必读

 

 点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看


 

一口Linux 15年嵌入式开发经验古董级老鸟.曾任职中兴通讯,某研究所,华清远见教学总监.Linux驱动入门可以一起交流.
评论
热门推荐
相关推荐
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦