【Proteus仿真】【STM32单片机】自动饲养控制系统
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用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设计,视频分享,技术交流。
相关文章:
【Proteus仿真】【STM32单片机】自动饲养控制系统
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1604显示模块、红外传感器、有害气体检测模块、PCF8591 ADC模块,蜂鸣器、DHT11温湿度、SG90舵机、风扇加热加湿等。 主要功能&a…...
【设计模式】模板方法模式
模板方法模式 1. 什么是模板方法 模板方法模式:定义一个操作中的算法骨架(父类),而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构来重定义该算法的 2. 什么时候使用模板方法 实现一些操作时,…...
c语言进制的转换二进制转换10进制
c语言进制的转换之二进制转换10进制 c语言的进制的转换 c语言进制的转换之二进制转换10进制一、二进制转换10进制的方法二、10进制程序打印 一、二进制转换10进制的方法 二进制: 二进制逢二进一,所有的数组是0、1组成 十进制转二进制: 除二反…...
C++ 纠错题总结2
1、for循环中的判断语句: 要注意初始赋值、< 还是 < for(int i 0; i < n; i) 2、cin.getline(char[], int, char) 注意:第二个参数为不是char[]的有效元素个数,因为最后一个元素位置要用来存储 \0 3、函数形参有默认值的,有默认…...
Jmeter性能 —— 事务控制器
统计性能测试结果一定会关注TPS,TPS表示:每秒处理事务数,JMeter默认每个事务对应一个请求。我们可以用逻辑控制器中的事务控制器将多个请求统计为一个事务。 1、添加事务控制器 2、事务控制器参数说明 Generate parent sample:如…...
Android C/C++ native编程NDK开发中logcat的使用
Android C/C native编程NDK开发中logcat的使用 前言具体用法 前言 在NDK开发过程中,C/C层,需要对代码进行一些调试,日志打印是我们解决异常或崩溃的重要手段,这里我就简单介绍下日志打印三步走。 首先我们先看下官方文档关于日志…...
什么是美颜SDK?深入了解直播实时美颜SDK
美颜已经成为了现代社交媒体和直播应用中的重要元素,它使用户能够在拍摄自拍照片或进行直播时改善其外貌特征。美颜技术的普及离不开美颜SDK(软件开发工具包),特别是在直播应用中,直播实时美颜SDK正变得越来越流行。在…...
TensorFlow2从磁盘读取图片数据集的示例(tf.data.Dataset.list_files)
import os import warnings warnings.filterwarnings("ignore") import tensorflow as tf from tensorflow.keras.optimizers import Adam from tensorflow.keras.applications.resnet import ResNet50 from pathlib import Path import numpy as np#数据所在文件夹 …...
Jmeter(九):jmeter_逻辑控制器与HTTP Cookie管理器详解
Jmeter:jmeter_逻辑控制器_事务控制器 事务 性能测试中,事务指的是从端到端,一个完整的操作过程,比如一次登录、一次 筛选条件查询,一次支付等;技术上讲:事务就是由1个或多个请求组成的 事务…...
CVPR2023优秀论文 | AIGC伪造图像鉴别算法泛化性缺失问题分析
作者 | 搜索内容技术部 导读 深度伪造检测算法无法检出未知伪造算法生成的攻击数据。以往算法采取手动建模伪造特征的方式提升模型泛化性,然而这种方式限制了算法可行域,影响了模型泛化性进一步提升,同时这类方法参数量巨大,无法满…...
ISP Pipeline典型场景要点SAT、Bokeh、MFNR、HDR
目录 一、概述 二、通用流程 三、典型场景 1. SAT 2. Bokeh背景虚化 MFNR 3. HDR(DOL、DCG等) 一、概述 本文解释isp pipeline的一些非常典型的场景,不同厂商对pipeline的连接及node的port口设计可能不同,但核心的思想相同…...
计算机视觉(CV)技术
是一种将数字图像或视频进行处理和分析的技术,旨在使计算机能够模拟人类视觉系统。该领域涉及到图像处理、模式识别、机器学习等多个领域,主要涵盖以下几方面: 图像处理:对图像进行去噪、增强、分割、特征提取等处理。图像分类&a…...
vue3项目使用TypeIt打字机
官网: TypeIt | The most versatile JavaScript typewriter effect library on the planet. 下载: npm i typeit 使用方法: 正常打字 多行打字机 input输入框实现打字机效果 打字机颜色变化 删除,光标移动,最全面的打字机效果 官网最下面还可以输入你想有的打字效果,然后生…...
Linux基础命令1——Linux的命令格式与命令分类
目录 Linux命令格式 Linux命令分类 如何判断命令的类型——Type命令 内置命令 外部命令 alias命令 命令的执行效率与过程 Linux命令格式 命令格式 完整的命令格式分为三部分:命令、参数、对象 其中命令与参数、参数与参数、参数与对象之间最少要有一个空格做…...
SystemVerilog Assertions应用指南 Chapter 11.5SVA检验器的时序窗口
11.5SVA检验器的时序窗口 到目前为止,带延迟的例子使用的都是固定的正延迟。在下面几个例子中,我们将讨论几种不同的描述延迟的方法属性p12检查布尔表达式“a&&b”在任何给定的时钟上升沿为真。如果表达式为真,那么在接下去的1-~3周期内,信号“c”应该至少在一个时钟周…...
内衣洗衣机有必要买吗?口碑好的小型洗衣机测评
在近年以来,由于人们对健康的认识和生活质量的不断改善,使得内衣洗衣机这一类的产品在近年来得到了飞速的发展,洗烘一体机、洗烘套装的价格总体下降,功能和性能都得到了改善,往往更多的用户会选择一台或者多台洗衣机来…...
Mac风扇控制电脑降温软件Macs Fan Control Pro 简体中文
Macs Fan Control Pro是一款功能强大的Mac风扇控制软件,旨在帮助用户更好地管理和控制Mac电脑的风扇速度和温度传感器。以下是该软件的主要特色介绍: 监测和调整Mac电脑的风扇速度和温度传感器,帮助用户控制设备温度,提高电脑性能…...
OPENCHAT: ADVANCING OPEN-SOURCE LANGUAGE MODELS WITH MIXED-QUALITY DATA
本文是LLM系列文章,针对《OPENCHAT: ADVANCING OPEN-SOURCE LANGUAGE MODELS WITH MIXED-QUALITY DATA》的翻译。 OPENCHAT:利用混合质量数据推进开源语言模型 摘要1 引言2 前言3 OpenChat4 实验5 分析6 相关工作7 结论与未来工作 摘要 如今࿰…...
【React】编程式路由,push 与 replace,withRouter,BrowserRouter 和 HashRouter 的区别
push 与 replace 模式 默认情况下,开启的是 push 模式,也就是说,每次点击跳转,都会向栈中压入一个新的地址,在点击返回时,可以返回到上一个打开的地址 有时候页面不需要这么繁琐的跳转,我们可以…...
测试老鸟总结,Allure测试报告-自动化测试详解,惊险避坑...
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Allure安装教程…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
