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

目录

  • 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)逆时针调节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 结语

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

    物联沃分享整理
    物联沃-IOTWORD物联网 » 5.[STM32]动动小手,自己制作做一个自动浇花系统吧

    发表评论