【Proteus仿真】【Arduino单片机】智能感应温控风扇

文章目录

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


一、功能简介

本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、DS18B20温度、按键、声光报警、L293D电机驱动等。

主要功能:
系统运行后,LCD1602显示传感器检测的温度值;
当红外传感器检测到有人信号时,
默认以自动模式运行,若按下K4键切换为手动模式,此时可以
通过K1和K2控制风扇加减速,风扇档位共5档(0-5)。当再次按下K4键切换为自动
模式;自动模式下,实时检测温度值,当温度高于上限且在2C范围内,以3档运行。
当温度高于上限且在4C范围内,以4档运行。当温度高于上限且在6C范围内,以5挡
运行。当温度高于上限且超过6C范围,以5档运行且蜂鸣器报警。
若温度在上下限范围内,风扇以2档运行。
若温度低于下限,风扇停止。
可通过K3键进入阈值设置,K1和K2调节。
当红外传感器未检测到有人信号时,风扇停止。


二、软件设计

/*
作者:嗨小易(技术QQ群:570487280)
*/


//系统数据显示
void sys_data_show(void)
{
  u8 buf[5];

	while(1)
	{
		//温度显示
		buf[0]=sys_ctrl.temp/100+0x30;
		buf[1]=sys_ctrl.temp%100/10+0x30;
		buf[2]='.';
		buf[3]=sys_ctrl.temp%100%10+0x30;
		buf[4]='\0';
		lcd1602_show_string(3,0,buf);

		//温度阈值显示
		lcd1602_show_nums(6,1,sys_ctrl.templ,2,0);
		lcd1602_show_nums(9,1,sys_ctrl.temph,2,0);

		//阈值闪烁指示
		switch(sys_ctrl.mode)
		{
			case 1://温度下限
				lcd1602_show_string(6,1,"  ");
				delay_ms(50);
				lcd1602_show_nums(6,1,sys_ctrl.templ,2,0);
				break;
			case 2://温度上限
				lcd1602_show_string(9,1,"  ");
				delay_ms(50);
				lcd1602_show_nums(9,1,sys_ctrl.temph,2,0);
				break;
		}

		//档位显示
		lcd1602_show_nums(10,0,sys_ctrl.gear,1,0);
		
		//手动状态显示
		if(sys_ctrl.auto_flag)lcd1602_show_string(14,0,"SD");
		else lcd1602_show_string(14,0,"Au");

		//有无人检测信号显示
		if(sys_ctrl.man==1)lcd1602_show_string(13,1,"Yes");
		else lcd1602_show_string(13,1," No");

		break;			
	}
}

//系统数据设置
void sys_data_set(void)
{
  u8 key=0;

  key=key_scan(0);
  //自动手动模式设置
	if(key==KEY4_PRESS)
	{
		sys_ctrl.auto_flag=!sys_ctrl.auto_flag;
	}
	//阈值模式设置
	else if(key==KEY3_PRESS)
	{
		sys_ctrl.mode++;
		if(sys_ctrl.mode>2)sys_ctrl.mode=0;
	}
	//阈值设置模式下,K1和K2加减
	if(sys_ctrl.mode!=0)
	{
		//加
		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;
			}	
		}
		//减
		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;
			}	
		}	
	}
	//手动模式下,档位调节
	if(sys_ctrl.auto_flag==1)
	{
		//加速
		if(key==KEY1_PRESS)
		{
			sys_ctrl.gear++;
			if(sys_ctrl.gear>5)sys_ctrl.gear=5;
		}
		//减速
		else if(key==KEY2_PRESS)
		{
			sys_ctrl.gear--;
			if(sys_ctrl.gear<0)sys_ctrl.gear=0;
		}		
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
  //如果红外检测到有人
	if(sys_ctrl.man==1)
	{
		//手动模式下,速度控制
		if(sys_ctrl.auto_flag==1)
		{
			pwm_set_duty_cycle(sys_ctrl.gear*20);//占空比	
		}
		//自动模式下,速度控制
		else
		{
			//如果温度高于上限,温度越高,风扇越快
			if(sys_ctrl.temp>=sys_ctrl.temph*10)
			{
				if(sys_ctrl.temp>=sys_ctrl.temph*10 && sys_ctrl.temp<sys_ctrl.temph*10+20)
					sys_ctrl.gear=3;
				else if(sys_ctrl.temp>=sys_ctrl.temph*10+20 && sys_ctrl.temp<sys_ctrl.temph*10+40)
					sys_ctrl.gear=4;
				else if(sys_ctrl.temp>=sys_ctrl.temph*10+40)
					sys_ctrl.gear=5;			
			}
			//如果温度低于下限,风扇停止
			else if(sys_ctrl.temp<=sys_ctrl.templ*10)
				sys_ctrl.gear=0;
			//温度在阈值范围内,风扇以固定速度运行
			else 
				sys_ctrl.gear=2;
			pwm_set_duty_cycle(sys_ctrl.gear*20);//占空比
		}		
	}
	//如果红外未检测到有人
	else
	{
		sys_ctrl.gear=0;
		pwm_set_duty_cycle(sys_ctrl.gear*20);//占空比	
	}
}



三、实验现象

演示视频:https://space.bilibili.com/444388619
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

.NET Framework 与 .NET Core 与 .NET Standard 之间的差异

介绍 在本文中&#xff0c;我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

前端实现搜索功能

最近遇到一个需求,用户在输入框输入关键字之后,点击搜索按钮后进行搜索,如下图,选中的数据在下面,上面展现的是搜索后的数据,现在选中了2条数据: 当用户输入KET后点击搜索,搜出的结果有16条,勾选全选选中后,将选中的16条的数据加到之前已选的2条数据里,于是此时已选…

认识Linux指令之 “ head tail ” 命令

01.head指令 head 与 tail 就像它的名字一样的浅显易懂&#xff0c;它是用来显示开头或结尾某个数量的文字区块&#xff0c;head 用来显示档案的开头至标准输出中&#xff0c;而 tail 想当然尔就是看档案的结尾。 语法&#xff1a; head [参数]... [文件]... 功能&#…

SAP CO11N报工批次分割(拆分)

CO11N做报工的时候&#xff0c;下阶料启用了批次&#xff0c;比如需要过账4166个&#xff0c;但是每一批次的库存都不满足4166个&#xff0c;所以需要拆分&#xff08;分割&#xff09;处理 这个时候我们就需要对这一行做分割处理 选中这一行&#xff0c;点击‘分割’按钮 弹…

Speech | 语音克隆Openvoice的论文解读及项目实现

本文主要介绍了语音克隆Openvoice的论文以及项目实现~ 论文题目&#xff1a;OpenVoice: Versatile Instant Voice Cloning 论文地址&#xff1a;2312.01479.pdf (arxiv.org) 项目地址&#xff1a;https://github.com/myshell-ai/OpenVoice.git 官网&#xff1a;Home (myshell.a…

C 练习实例23

题目&#xff1a;打印出如下图案&#xff08;菱形&#xff09;。 * *** ***** ******* ***** *** * 题目分析&#xff1a; 先打印前4行&#xff0c;因为是递增关系。 第0行&#xff1a;打印3个空格&#xff0c;1个* 第1行&#xff1a;打印2个空格&#xff0c;3个*…

【Github-Action】GithubAction 环境下,如何将临时生成的文件推送至指定分支。

通过这篇文章你可以掌握如何将github action 环境下临时生成的文件推送至指定分支&#xff0c;并且可以打开利用github开放的api做各种强大或有趣的事情的视野和思路。 如果你对github-action感兴趣&#xff0c;还可以看这篇文章&#xff0c; 这篇文章教会你如何开发Github Act…

分布式系统架构设计之分布式消息队列中间件的技术选型报告

1、主流消息队列中间件 01 Kafka 基本原理 Kafka 基于发布-订阅模式&#xff0c;它维护了一个或多个 Topic&#xff0c;生产者将消息发送到 Topic&#xff0c;消费者从 Topic 中读取消息。Kafka 强调高吞吐量&#xff0c;通过批量处理、顺序 I/O 和零拷贝等技术实现高性能 …

微信扫码进入小程序特定页面

小程序配置 开发 - 开发管理 - 开发设置-普通链接二维码打开小程序 配置好的截图 如下&#xff1a;二维码规则建议是自己的域名 /mini/ 功能页面 pages/index/index 是为了方便跳转其他页面 记得把校验文件发给后端 web 端处理 二维码格式为&#xff1a;二维码规则/功能页…

基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统

Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统&#xff0c; 前端集成 amis 低代码前端框架&#xff0c;后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…

2024美赛数学建模思路 - 复盘:人力资源安排的最优化模型

文章目录 0 赛题思路1 描述2 问题概括3 建模过程3.1 边界说明3.2 符号约定3.3 分析3.4 模型建立3.5 模型求解 4 模型评价与推广5 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 描述 …

【深度学习:数据增强】计算机视觉中数据增强的完整指南

【深度学习&#xff1a;数据增强】计算机视觉中数据增强的完整指南 为什么要做数据增强&#xff1f;等等&#xff0c;什么是数据增强&#xff1f;数据增强技术数据增强的注意事项和潜在陷阱什么时候应该做数据增强&#xff1f;类不平衡的数据增强那么我应该选择哪些转换呢&…

【Wordpress高级教程】 Wordpress免插件建立站群,wordpress整站迁移/安装

提示&#xff1a;该方法适用于Wordpress的站点&#xff0c;且无需插件哦&#xff08;插件一般都需要付费的&#xff0c;博主比较穷&#xff0c;我们就通过技术来解决&#xff09; 文章目录 前言一、准备工作二、搭建站群1.打包wp-content2.导入新站点3.导出数据库4.修改数据库配…

redis的高可用(主从复制、哨兵、群集)

redis的高可用&#xff08;主从复制、哨兵、群集&#xff09; 主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&…

[Docker] Mac M1系列芯片上完美运行Docker

docker pull qinchz/dm8-arm64 container_name: dm8ports:- "5236:5236"mem_limit: 1gmemswap_limit: 1gvolumes:- /data/dm8:/home/dmdba/data 数据库实例参数已修改&#xff0c;接近oracle使用习惯 #字符集 utf-8 CHARSET1 #VARCHAR 类型对象的长度以字符为单位 …

vmware虚拟机内存异常占用问题一例

关键词 vmware esxi、hypervisor虚拟化平台内存模式 Guest virtual memory 一、问题现象 业务一台vmware虚拟机出现内存使用率告警&#xff0c;运维人员登录系统检查内存确实高水位状态 检查各进程使用内存不高&#xff0c;合计内存总数与使用率占用情况明显不匹配&#xf…

将dumpbin从Visual Studio中抠出来,并使用dumpbin查看exe和dll库的依赖关系

目录 1、初步说明 2、在开发的机器上使用dumpbin工具查看dll库的依赖关系 3、将dumpbin.exe从Visual Studio中抠出来 3.1、找到dumpbin.exe文件及其依赖的dll文件 3.2、在cmd中运行dumpbin&#xff0c;提示找不到link.exe文件 3.3、再次运行dumpbin.exe提示找不到mspdb10…

UV胶水能够粘接聚苯乙烯PS吗?需要注意哪些事项?又有哪些优势呢?

聚苯乙烯&#xff08;Polystyrene&#xff0c;简称PS&#xff09;是一种常见的合成聚合物&#xff0c;属于热塑性塑料。它是由苯乙烯单体聚合而成的&#xff0c;具有轻质、透明或半透明、电绝缘性好等特点。常见: 包装材料白色泡沫塑料&#xff08;EPS&#xff0c;用于包装、保…

排序链表[中等]

一、题目 给你链表的头结点head&#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5] 示例 3&…

Python多线程同步

同步条件(Event) 在Python中&#xff0c;多线程同步可以通过threading模块中的Event对象来实现。Event对象允许一个或多个线程等待某个事件的发生&#xff0c;当事件发生时&#xff0c;等待的线程将被唤醒。 event.isSet()&#xff1a;返回event的状态值 event.wait()&#x…