【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设计,视频分享,技术交流。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis 源码分析(五):异常模块

1、前言 上一篇我们解了Mybatis解析器模块&#xff0c;本篇我们来了解反射模块。本文&#xff0c;我们来分享 MyBatis 的异常模块。 对应 exceptions 包&#xff0c;如下图所示&#xff1a; 在 MyBatis源码分析&#xff08;二&#xff09;&#xff1a;项目结构 中&#xff0c;简…

Python处理字符串-正则提取遇到的第一个完整括号内容处理后替换

1.场景分析 该场景介绍如何用python语言&#xff0c;使用正则表达式处理字符串内第一个完整的括号内容&#xff0c;一个括号内可能会含有一个括号&#xff0c;多个括号自行扩展正则即可&#xff0c;处理完成后再替换到括号的内容 2.重难点 第一个括号内可能会还有另一个括号 …

使用 Process Explorer 和 Windbg 排查软件线程堵塞问题

目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码&#xff0c;找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…

U盘、硬盘无法打开,修复RAW磁盘或分区,硬盘变成raw格式如何恢复,数据恢复

本文持续更新&#xff0c;针对遇到的数据丢失问题进行详细记录 磁盘变成RAW的可能原因 突然断电或关机文件系统丢失或损坏病毒或恶意软件感染坏扇区磁盘损坏 以下解决方案针对非病毒损坏 通过Windows自带的工具进行恢复&#xff08;CHKDSK命令&#xff09; 1.连接硬盘 2.…

少儿编程 2023年12月中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)

2023年12月scratch编程等级考试四级真题 选择题 1、运行下列程序后,角色最后的坐标是 A、(180,100) B、(10,100) C、(100,10) D、(100,100) 答案:D 考点分析:考查积木综合使用; 程序中内层循环旋转其实是干扰项,并不会影响坐标值;角色初始的坐标是(0,0),重复执行…

Linux du和df命令

目录 一. df二. du 一. df ⏹用于显示系统级别&#xff0c;磁盘分区上的可用和已用空间的信息 -h&#xff1a;以人类可读的格式显示文件系统大小 ⏹每秒钟监视当前磁盘的使用情况 watch 用于周期性的执行特定的命令-n 1 表示每一秒刷新一次命令执行的结果df -h ./ 表示周期性…

SCT2A27STER:5.5V-100V Vin,4A峰值限流,高效异步降压DCDC转换器,集成200mA LDO

特性&#xff1a; • 5.5V-100V 输入电压范围 • 最大输出电压&#xff1a;30V • 2A 连续输出电流 • 4A峰值电流限制 • 1.2V 1% 反馈电压 • 集成500mΩ 高侧功率 MOSFETs • 可选5V或者3.3V,输出一路200mA LDO • 25uA静态电流&#xff0c;VBIAS连接到高于6V的辅助电源 •…

深入理解 Flink(三)Flink 内核基础设施源码级原理详解

Hadoop 生态各大常见组件的 RPC 技术实现 Flink RPC 网络通信框架 Akka 详解 1、ActorSystem 是管理 Actor 生命周期的组件&#xff0c;Actor 是负责进行通信的组件。 2、每个 Actor 都有一个 MailBox&#xff0c;别的 Actor 发送给它的消息都首先储存在 MailBox 中&#xff0c…

PCL 计算异面直线的距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,PCL 计算异面直线的距离,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 设置直线 A B AB A

2024年1月9日

2024年1月9日09:26:57待在工作室玩千恋万花和登录PTA练习习题 2024年1月9日09:28:02判断素数肯定会成为考试的关键点之一 2024年1月9日15:13:49完成java的复习 2024年1月9日15:16:41判断反馈类型 2024年1月9日15:20:29行列式求系数通过沙路法展开得到 2024年1月9日15:21:1…

浅析ARMv8体系结构:Memory Type

文章目录 内存类型概述Normal内存属性CacheabilityShareability Device内存属性GatheringReorderingEarly Write Acknowledgement 相关参考 内存类型概述 ARMv8内存模型将内存分成了Normal和Device两种类型&#xff0c;不同的内存类型支持的属性也存在差异&#xff0c;其中&am…

HTML---JQurey的基本使用

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 本章目标 &#xff08;1&#xff09;能够搭建jQuery开发环境 &#xff08;2&#xff09;使用ready( )方法加载页面、掌握jQuery语法 使用addClass( )方法和css( )方法为元素添加CSS样式使用n…