锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

5.[STM32]动动小手,自己制作做一个自动浇花系统吧

时间:2022-09-25 22:00:00 端子公连接器3dw三极管5lm2596三极管继电器2864150minisrd一s一148d继电器

目录

  • 0前言
  • 1 介绍土壤湿度传感器
    • 1.1 功能介绍
    • 1.2 湿度检测原理
      • 1.3 硬件连接
      • 1.4 部分源码分析
  • 2 介绍水泵和继电器
    • 2.1 原理图解析
      • 2.1.1接线情况
      • 2.1.2 部分函数
  • 3 C语言补充
  • 4 实验现象
  • 5 结语

0前言

??
大家好,我叫你。DW,每天分享一些嵌入式知识,期待和大家一起进步!
???
系列专栏:STM32
???
小实验简介:利用土壤湿度传感器测量土壤湿度,在阈值之间或大于阈值泵关闭,小于设定阈值泵打开,
蜂鸣器报警提醒主浇水,土壤湿度、泵状态、阈值LCD12864上打印
???
本月目标:希望能有100个粉丝,嘻嘻,互相关联,共同进步!
???
说实话:伟大的作品不是靠力量,而是靠坚持。

在这里插入图片描述

1 介绍土壤湿度传感器

本实验中使用的传感器是YL-69湿度传感器,四线制,中间两条线需要手动连接。
响应阈值由
电位器调节,湿度低于设定阈值,DO输出高电平,湿度低于设定阈值,DO输出低电平。

1.1 功能介绍

(1)土壤湿度检测传感器;
(2)采用电压比较器LM393
芯片
(3)顺时针调整LM393,反向输入端输入电压越高,低湿度环境下,模块输出低电平,模块灯亮;
(4)逆时针调节LM反向输入电压越低,模块输出低电平,模块灯在高湿度环境下亮;
(5)模拟输出端D0与STM32输出口直接连接,单片机检测输出电平,触发泵的工作状态;
(6)模拟量输出端AO和AD借助模块连接AD在当前环境当前环境下土壤湿度更准确的值;

1.2 湿度检测原理


电路图分析

(1) 作为两个电阻LM在393的正输入端,下电阻是土壤湿度传感器,土壤湿度传感器是两个电极,当电极之间有土壤连接时,可以 等效为电阻,土壤湿度增加,电阻值增加。
(2)土壤干燥时,电极等效电阻大,AO处电压升高后,同相电压大于反相电压,LM393输出高电平,
开关指示灭;
(3)土壤湿润时,电极等效电阻很小,AO同相电压低于反相电压,达到一定程度后,LM393输出低电平,开关指示亮;
(4)反向端VR1用于调节端口电压,该电压为电压比较器输入阈值翻转电压;

1.3 硬件连接

1.4 部分源码分析

本 系 统 的 土 壤 湿 度 采 样 模 块 使 使用ADC1 道 0进 行 AD 转 换。
传感土壤湿度 器 空 置 当测得的采样值为4095时 其 完
采样值为1468时,采样值为1468 此 根 据 公 式:土 壤 湿
度 = (4095- 采 样 值)×100/ 4095 可 以 得 到 土 壤
因此,湿度转换函数的编写如下:

CurrentHumidity = (int)((4095 - nADCValue) * 100.0 / 4095); ////土壤湿度转换函数  

2 介绍水泵和继电器

本实验选择3V水泵的开启和关闭由继电器控制。

2.1 原理图解析

该原理图主要由光耦电阻TLP181、三极管S8550A、稳压管,继电器SRD-05VDC组成。

(1)当RELAY高电平时,TLP二极管在181内不发光,右侧光敏三极管电阻大,4引脚输出高电平,PNP三极管截止时,电磁铁断电,继电器COM与CLOSE引脚相连,J60端子无电压输出,此时负载不工作;
(2)当RELAY低电平时,TLP二极管在181内发光,右侧光敏三极管接收后电阻变小,4引脚输出低电平,PNP此时,电磁铁通电,继电器通电COM与OPEN引脚相连,J当负载工作时,60端有电压输出;

2.1.1接线情况

(1)水泵负极接图J61的GND,在水泵正极接图中J60的Output;
(2)J60的Input和J60的VCC_5V连接杜邦线。

2.1.2 部分函数

当open=1.打开水泵; 当open=水泵关闭;

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 结语

📚一点一滴,一步一个脚印,慢慢来,比较快。
🍒好了,今天的分享就到这里了,你的点赞是我的动力,对你有帮助的话可以点个赞👍👍👍哦,有写得不好的欢迎指正,欢迎留言。
源码已上传到我的资源,需要自提。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章