0前言
🚀
作者简介:大家好啊,我叫DW,每天分享一些嵌入式知识,期待和大家一起进步!
🉑🉑
系列专栏:STM32
👀👀👀
小实验简介:利用土壤湿度传感器测量土壤湿度,介于阈值之间或者大于阈值水泵关闭,小于设定阈值水泵开启且蜂鸣器报警提醒主人浇水,土壤湿度、水泵状态、阈值会在LCD12864上打印
⬇️⬇️⬇️⬇️
本月目标:希望可以拥有100个粉丝,嘻嘻,互关一起进步吧!
🎁🎁🎁🎁🎁
真心话:伟大的作品,不是靠力量而是靠坚持才完成的。
1 土壤湿度传感器简介
本实验用的传感器是YL-69湿度传感器,四线制,中间两根线需要手动连接。
通过电位器调节响应阈值,湿度低于设定阈值,DO输出高电平;湿度低于设定阈值,DO输出低电平。
1.1 功能介绍
(1)传感器用于土壤湿度检测;
(2)电压比较器采用LM393芯片;
(3)顺时针调节LM393,反向输入端输入电压越高,低湿度环境下,模块输出低电平,模块灯亮;
(4)逆时针调节LM393,反向输入电压越低,高湿度环境下,模块输出低电平,模块灯亮;
(5)模拟输出端D0与STM32输出口直接相连,单片机来检测输出的电平,以此触发水泵的工作状态;
(6)模拟量输出端AO和AD模块相连,借助AD转换,获得当前环境下土壤湿度更精确的值;
1.2 湿度检测原理
电路图解析🍫🍫
(1) 其中两个电阻作为LM393的正向输入端,下电阻为土壤湿度传感器,土壤湿度传感器就是两个电极,当电极之间有土壤连接时,可以 等效为一个电阻,土壤湿度增加,电阻值增加。
(2)土壤干燥时,电极的等效电阻很大,AO处电压升高,达到一定程度后,同相电压大于反相电压,LM393输出高电平,开关指示灭;
(3)土壤湿润时,电极的等效电阻很小,AO处电压下降,达到一定程度后,同相电压小于反相电压,LM393输出低电平,开关指示亮;
(4)反向端的VR1用于调节该端口的电压,此电压为电压比较器输入阈值翻转电压;
1.3 硬件连接
1.4 部分源码解析
本 系 统 的 土 壤 湿 度 采 样 模 块 使 用ADC1的通 道 0进 行 AD 转 换。
当土壤湿度传感 器 空 置 时,测得的采样值为4095,当 其 完
全浸没在水中时,采样值为1468,因 此 根 据 公 式:土 壤 湿
度 = (4095- 采 样 值)×100/ 4095 可 以 得 到 土 壤
湿度值,因此编写湿度转换函数如下:
CurrentHumidity = (int)((4095 - nADCValue) * 100.0 / 4095); //土壤湿度转换函数
2 水泵和继电器简介
本实验选择3V水泵,通过继电器控制水泵的开启和关闭。
2.1 原理图解析
该原理图主要由光耦电阻TLP181、三极管S8550A、稳压管、继电器SRD-05VDC组成。
(1)当RELAY为高电平时,TLP181内的二极管不发光,右边的光敏三极管电阻很大,4引脚输出高电平,PNP三极管截止,此时电磁铁断电,继电器COM与CLOSE引脚相连,J60端子没有电压输出,此时负载不工作;
(2)当RELAY为低电平时,TLP181内的二极管发光,右边的光敏三极管接收到后电阻变得很小,4引脚输出低电平,PNP三极管管导通,此时电磁铁通电,继电器COM与OPEN引脚相连,J60端有电压输出,此时负载工作;
2.1.1接线情况
(1)水泵负极接图中J61的GND,水泵正极接图中J60的Output;
(2)J60的Input和J60的VCC_5V用杜邦线连接。
2.1.2 部分函数
当open=1,水泵开启; 当open=0,水泵关闭;
void Relay_Control(u8 open){
if(open)
{
GPIO_ResetBits(Relay_PROT,Relay);//打开
}
else
{
GPIO_SetBits(Relay_PROT,Relay);//关闭
}
}
3 C语言补充
格式化字符串操作函数,使用前需要定义一个字符数组。
int sprintf(char *buf,const char*format,...);
//输出到buf指令的内存区域
利用这个函数,我们可以动态的把数据打印到LCD屏幕上
//液晶屏显示格式化输出
__align(4) u8 dtLCDBuf[16]; //LCD缓存器
sprintf((char *)dtLCDBuf,"土壤湿度:%02d %%",CurrentHumidity);
LCD12864_Display(0,0,dtLCDBuf);
sprintf((char *)dtLCDBuf,"阈值:%02d--%02d",LowLimit,UpperLimit);
LCD12864_Display(1,0,dtLCDBuf);
sprintf((char *)dtLCDBuf,"水泵状态: %s",Switch == 1?"开启":"关闭");
LCD12864_Display(2,0,dtLCDBuf);
sprintf((char *)dtLCDBuf,"给个点赞和关注吧");
LCD12864_Display(3,0,dtLCDBuf);
4 实验现象
(1)把土壤湿度传感器放入水中,看到LCD屏幕上显示湿度,此时水泵处于关闭状态;
(2)把土壤湿度传感器拿出水面,看到LCD屏幕上显示湿度,此时水泵处于开启状态,并且蜂鸣器报警。
关于LCD12864显示的请看:在LCD12864上显示属于你的文字
土壤湿度传感器置于空气中,我们可以看到LCD显示土壤湿度为0,此时水泵处于开启状态。
土壤湿度传感器置于水中,我们可以看到LCD显示土壤湿度为45%,此时水泵处于关闭状态。
5 结语
📚一点一滴,一步一个脚印,慢慢来,比较快。
🍒好了,今天的分享就到这里了,你的点赞是我的动力,对你有帮助的话可以点个赞👍👍👍哦,有写得不好的欢迎指正,欢迎留言。
源码已上传到我的资源,需要自提。文章来源:https://www.toymoban.com/news/detail-410849.html
文章来源地址https://www.toymoban.com/news/detail-410849.html
到了这里,关于5.[STM32]动动小手,自己制作做一个自动浇花系统吧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!