100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 5.[STM32]动动小手 自己制作做一个自动浇花系统吧

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

时间:2019-12-09 19:09:19

相关推荐

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

📚一点一滴,一步一个脚印,慢慢来,比较快。

🍒好了,今天的分享就到这里了,你的点赞是我的动力,对你有帮助的话可以点个赞👍👍👍哦,有写得不好的欢迎指正,欢迎留言。

源码已上传到我的资源,需要自提。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。