【Proteus仿真】【STM32单片机】自动饲养控制系统

news2024/10/6 16:27:45

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用Proteus8仿真STM32单片机控制器,使用LCD1604显示模块、红外传感器、有害气体检测模块、PCF8591 ADC模块,蜂鸣器、DHT11温湿度、SG90舵机、风扇加热加湿等。

主要功能:
系统运行后,LCD1604显示温湿度和烟雾浓度及其阈值;
红外传感器检测是否有实物,如果没有则开启舵机,补充实物;
实时检测温度及湿度值,如果温度高于上限,打开散热;
如果温度低于下限,打开加热;温度正常,关闭加热/散热;
如果湿度高于上限,打开除湿;如果湿度低于下限,打开加湿;
如果湿度正常,关闭加湿除湿;
如果有害气体浓度高于上限,打开风扇,蜂鸣器报警;
可通过K3键进入阈值设置,K1和K2调节,设置好后可按下K4键保存。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)

*/



//系统数据显示
void sys_data_show(void)
{
	while(1)
	{
		//温度显示
		lcd1604_show_nums(5,0,sys_ctrl.temp,2,0);
		//湿度显示
		lcd1604_show_nums(5,1,sys_ctrl.humi,2,0);
		//有害气体浓度显示
		lcd1604_show_nums(5,2,sys_ctrl.gas,2,0);
		
		//温度阈值显示
		lcd1604_show_nums(10,0,sys_ctrl.templ,2,0);
		lcd1604_show_nums(13,0,sys_ctrl.temph,2,0);
		//湿度阈值显示
		lcd1604_show_nums(10,1,sys_ctrl.humil,2,0);
		lcd1604_show_nums(13,1,sys_ctrl.humih,2,0);
		//有害气体浓度阈值显示
		lcd1604_show_nums(10,2,sys_ctrl.gash,2,0);	
		
		//阈值设置位置闪烁
	   	switch(sys_ctrl.mode)
		{
			case 1://温度下限
				lcd1604_show_string(10,0,"  ");
				delay_ms(100);
				lcd1604_show_nums(10,0,sys_ctrl.templ,2,0);
				break;
			case 2://温度上限
				lcd1604_show_string(13,0,"  ");
				delay_ms(100);
				lcd1604_show_nums(13,0,sys_ctrl.temph,2,0);
				break;
			case 3://湿度下限
				lcd1604_show_string(10,1,"  ");
				delay_ms(100);
				lcd1604_show_nums(10,1,sys_ctrl.humil,2,0);
				break;
			case 4://湿度上限
				lcd1604_show_string(13,1,"  ");
				delay_ms(100);
				lcd1604_show_nums(13,1,sys_ctrl.humih,2,0);
				break;
			case 5://有害气体浓度上限
				lcd1604_show_string(10,2,"  ");
				delay_ms(100);
				lcd1604_show_nums(10,2,sys_ctrl.gash,2,0);
				break;
		}
		
		//食物状态显示
		if(sys_ctrl.food)lcd1604_show_string(5,3,"OK");
		else lcd1604_show_string(5,3,"NO");
		
		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	
	key=KEY_Scan(0);
	//模式设置
	if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>5)sys_ctrl.mode=1;
	}
	//在设置模式下,加
	else if(key==KEY1_PRESS)
	{
		switch(sys_ctrl.mode)
		{
			case 1://温度下限 
				sys_ctrl.templ++;
				if(sys_ctrl.templ>99)sys_ctrl.templ=0;
				break;
			case 2://温度上限 
				sys_ctrl.temph++;
				if(sys_ctrl.temph>99)sys_ctrl.temph=0;
				break;
			case 3://湿度下限 
				sys_ctrl.humil++;
				if(sys_ctrl.humil>99)sys_ctrl.humil=0;
				break;
			case 4://湿度上限 
				sys_ctrl.humih++;
				if(sys_ctrl.humih>99)sys_ctrl.humih=0;
				break;
			case 5://有害气体浓度上限 
				sys_ctrl.gash++;
				if(sys_ctrl.gash>99)sys_ctrl.gash=0;
				break;
		}
	}
	//在设置模式下,减
	else if(key==KEY2_PRESS)
	{
		switch(sys_ctrl.mode)
		{
			case 1://温度下限 
				sys_ctrl.templ--;
				if(sys_ctrl.templ<0)sys_ctrl.templ=99;
				break;
			case 2://温度上限 
				sys_ctrl.temph--;
				if(sys_ctrl.temph<0)sys_ctrl.temph=99;
				break;
			case 3://湿度下限 
				sys_ctrl.humil--;
				if(sys_ctrl.humil<0)sys_ctrl.humil=99;
				break;
			case 4://湿度上限 
				sys_ctrl.humih--;
				if(sys_ctrl.humih<0)sys_ctrl.humih=99;
				break;
			case 5://有害气体浓度上限 
				sys_ctrl.gash--;
				if(sys_ctrl.gash<0)sys_ctrl.gash=99;
				break;
		}
	}
	//确定
	else if(key==KEY4_PRESS)
	{
		sys_ctrl.mode=0;
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	//如果温度高于上限,打开散热
	if(sys_ctrl.temp>sys_ctrl.temph)
	{
		JR_PIN=1;SR_PIN=0;
	}
	//如果温度低于下限,打开加热
	else if(sys_ctrl.temp<sys_ctrl.templ)
	{
		JR_PIN=0;SR_PIN=1;	
	}
	//温度正常,关闭加热/散热
	else
	{
		JR_PIN=1;SR_PIN=1;
	}			
	
	//如果湿度高于上限,打开除湿
	if(sys_ctrl.humi>sys_ctrl.humih)
	{
		JS_PIN=1;CS_PIN=0;	
	}
	//如果湿度低于下限,打开加湿
	else if(sys_ctrl.humi<sys_ctrl.humil)
	{
		JS_PIN=0;CS_PIN=1;
	}
	//如果湿度正常,关闭加湿除湿
	else 
	{
		JS_PIN=1;CS_PIN=1;			
	}
	
	//如果有害气体浓度高于上限,报警,打开风扇
	if(sys_ctrl.gas>sys_ctrl.gash)
	{
		FS_PIN=0;
		beep_alarm(1,10000);
	}
	else FS_PIN=1;
	
	//如果没有食物,补充食物
	if(sys_ctrl.food==0)
	{
		sg90_set_angel(4);	
	}
	else sg90_set_angel(0);
}

//应用控制系统
void appdemo_show(void)
{
	u8 i=5;
	sys_parm_init();//系统参数初始化
	KEY_Init();
	BEEP_Init();
	DHT11_Init();
	ctrl_pin_init();
	sg90_init();
	pcf8591_init();

	while(i--)
	{
		//读取DHT11温湿度值
		DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);	
		//获取有害气体浓度
		sys_ctrl.gas=pcf8591_read_adcvalue(0);
		sys_ctrl.gas=cal_map(sys_ctrl.gas,0,255,0,99);
		delay_ms(100);
	}
	
	lcd1604_init();//LCD1604初始化
	sys_open_show();//系统初始界面显示

	while(1)
	{
		sys_data_get();//系统数据获取
		sys_data_show();//系统数据显示
		sys_data_set();//系统数据设置
		sys_fun_ctrl();//系统功能控制		
	}
}






三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1124196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java--关系运算符

1.关系运算符 1.判断数据是否满足条件&#xff0c;最终返回一个判断的结果&#xff0c;这个结果是布尔类型的值&#xff1a;true或者false。 注意&#xff1a;在java中判断两个变量内容是否相等一定是""&#xff0c;千万不要把""误写成""或&quo…

性能与效果平衡:选择适合项目的直播实时美颜SDK

当下&#xff0c;越来越多的主播和内容创作者依赖于实时美颜技术&#xff0c;以确保他们在镜头前始终保持最佳状态。为了实现这一目标&#xff0c;许多开发者和团队开始探索主播直播美颜SDK&#xff0c;但在选择适合项目的SDK时&#xff0c;性能与效果的平衡变得尤为重要。 本…

阿里巴巴1688/京东/淘宝天猫API接口

获取key和secret API接口分享信息如下&#xff1a; item_get - 获得商品详情 item_search - 按关键字搜索商品 item_review-获得商品评论 item_search_img - 按图搜索商品&#xff08;拍立淘&#xff09; item_search_suggest - 获得搜索词推荐 item_fee - 获得商品快递…

vue3项目使用TypeIt打字机

官网: TypeIt | The most versatile JavaScript typewriter effect library on the planet. 下载: npm i typeit 使用方法: 正常打字 多行打字机 input输入框实现打字机效果 打字机颜色变化 删除,光标移动,最全面的打字机效果 官网最下面还可以输入你想有的打字效果,然后生…

文本批量处理,高效便捷的管理利器!

您是否曾经为了批量处理文本数据而烦恼&#xff1f;冗长的文本文件&#xff0c;繁琐的处理步骤&#xff0c;让您的工作变得异常困难。现在&#xff0c;我们向您推荐一款文本批量处理工具&#xff0c;它能够快速、准确地处理大量文本数据&#xff0c;让您的管理工作更加高效便捷…

基于springboot+vue网上图书商城54

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

RT-Thread 中断管理(学习)

中断是一种异常&#xff0c;异常是导致处理器脱离正常运行转向执行特殊代码的任何事件&#xff0c;如果不及时进行处理&#xff0c;轻则系统出错&#xff0c;重则会导致系统毁灭性地瘫痪。所以正确地处理异常&#xff0c;避免错误的发生是提高软件鲁棒性&#xff08;稳定性&…

cropper+jq(图片裁剪上传)

<link rel"stylesheet" href"../../cropper/cropper.css"> <script type"text/javascript" src"../../cropper/cropper.js"></script> 没有引入jquery的原因 引入jquery <script src"../jquery-1.10.2.js…

SAP 公司间销售

一、 概述 很多项目中&#xff0c;特别是集团型公司&#xff0c;生产总部在某地&#xff0c;但是在各个省会城市&#xff0c;乃至国外都有相应的贸易公司&#xff0c;特别是国外&#xff0c;此时贸易公司接到客户采购订单&#xff0c;但是贸易公司没有库存&#xff0c;甚至没有…

企业/公司 | 设计行业,图档图纸加密、防泄密软件系统

天锐绿盾加密防泄密软件是一种专业的企业数据防泄密软件系统&#xff0c;旨在保护企业核心文件、文档、源代码、图纸文件等数据安全。它基于天锐绿盾安全防护系统&#xff0c;集文件加密、行为监控、权限控制于一体&#xff0c;能够有效地防止企业内部和外部的数据泄露。 PC访问…

RPA平台比较和选择指南

随着企业数字化转型进程的加速&#xff0c;自动化和人工智能技术在各个领域得到了广泛应用。其中&#xff0c;RPA作为一种帮助企业构建高效自动化工作流程的技术&#xff0c;已经在许多企业取得了显著的成果。然而&#xff0c;市场上的RPA平台众多&#xff0c;如何选择一个适合…

H指数----题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 由题目可知&#xff0c;我们要寻找的是一个最大的H值。 首先先对引用次数排序&#xff0c;然后再寻找在规定内的最大H值 public int hIndex(int[] citations) {Arrays.sort(citatio…

PHP 在线考试管理系统mysql数据库web结构layUI布局apache计算机软件工程网页wamp

一、源码特点 PHP 在线考试管理系统是一套完善的web设计系统 layUI技术布局 &#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 PHP 在线考试系统1 代码 https://download.csdn.net/download/qq_41…

MQTT协议简介及其应用

一、简介 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输&#xff09;是一种基于发布/订阅模式的“轻量级”通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在1999年开发。MQTT最大的优点在于&#xff0c;能够以极低的带宽…

IP代理是什么?有什么好处?

IP说简单不简单&#xff0c;说复杂也不复杂&#xff0c;打个比方&#xff0c;IP就好比我们上网的一个门牌号&#xff0c;每家每户都会有一个门牌号&#xff0c;而且是唯一的地址。而代理IP&#xff08;代理服务器&#xff09;是一个位于中间的服务器&#xff0c;充当客户端和目…

手动导入jar包,pom还是爆红是什么情况

阿里云依赖仓库没有需要的依赖&#xff0c;所以去中央仓库下载&#xff0c; 手动安装jar包&#xff0c;pom还是爆红&#xff0c;可能的原因是你没有配置本地仓库路径 由于没有指定本地仓库路径&#xff0c;所以它默认把依赖安装在该目录下 而我idea的依赖仓库是 所以pom的依赖…

无敌了!Redis进军磁盘存储!

在高手林立的数据库江湖&#xff0c;Redis就像一个刺客&#xff0c;或许不如经典数据库存在感强&#xff0c;但因其高性能的特质而在群英榜中独占一席。 作为缓存的首选内存数据库&#xff0c;Redis最近放出了一个大新闻——将磁盘作为分层存储体系结构的一部分&#xff0c;以…

深度学习遇到 DolphinDB AI DataLoader

深度学习模型有能力自动发现变量之间的关系&#xff0c;而这些关系通常是不可见的&#xff0c;这使得深度学习可以挖掘新的因子和规律&#xff0c;为量化投资策略提供更多可能性。在传统的量化策略开发流程中&#xff0c;通常会使用 Python 或第三方工具生成因子&#xff0c;并…

短视频矩阵系统源码/源头搭建技术交付

一、短视频矩阵系统&#xff0c;短视频矩阵源码技术 1、抖音开放平台申请账号&#xff0c;快手平台申请账号&#xff1b;阿里云混剪接口。 2、系统总台支持OEM代理&#xff0c;可以按点数管理。 3、代理功能。包括是否允许再次开二级代理、是否允许OEM等。 4、可支持一条龙…

KVM...

KVM 查看组包 安装KVM 启动服务 systemct start libvirtd systemct enable libvirtd 查看模块&#xff1a;lsmod lsmod | grep kvm 图形化的使用 cd /opt 上传进项M-2009 打开KVM