【Proteus仿真】【STM32单片机】基于单片机的智能晾衣架控制系统

news2024/11/20 10:21:08

文章目录

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


一、功能简介

系统运行后,LCD1604显示传感器检测的温湿度、光线强度和风速,工作模式,以及相应阈值,系统工作状态等;系统默认为自动模式,
可通过K4键切换为手动模式,此时可通过K1键来控制晾衣架的开和关;
若系统处于自动模式时,可通过K3键进入阈值设置模式,K1和K2键调节各阈值参数,K4确定保存。
如果检测光线强度低于阈值,光线暗,晚上或阴雨天,此时晾衣架关闭;
如果检测光线强度高于阈值,光线强,白天,此时如果下雨或大风,关闭晾衣架,否则如果温度高于阈值且湿度低于阈值,代表晴天,打开晾衣架;
如果湿度高于阈值,则关闭晾衣架;
手动模式下,可通过串口远程控制,发送十六进制0X11指令实现开关控制;


二、软件设计

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

*/



//系统数据设置
void sys_data_set(void)
{
	u8 key=0;
	
	key=KEY_Scan(0);
	//确定/自动手动
	if(key==KEY4_PRESS)
	{
		if(sys_ctrl.mode!=0)//确定
		{
			sys_ctrl.mode=0;
		}
		else//自动/手动 
		{
			sys_ctrl.auto_flag=!sys_ctrl.auto_flag;
		}
	}
	//自动模式
	if(sys_ctrl.auto_flag==0)
	{
		//阈值设置
		if(key==KEY3_PRESS)
		{
			sys_ctrl.mode++;
			if(sys_ctrl.mode>4)sys_ctrl.mode=1;
		}
		//加
		else if(key==KEY1_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph++;
					if(sys_ctrl.temph>99)sys_ctrl.temph=0;
					break;
				case 2://湿度
					sys_ctrl.humil++;
					if(sys_ctrl.humil>99)sys_ctrl.humil=0;
					break;
				case 3://光线
					sys_ctrl.lightl++;
					if(sys_ctrl.lightl>99)sys_ctrl.lightl=0;
					break;
				case 4://风速
					sys_ctrl.windh++;
					if(sys_ctrl.windh>10)sys_ctrl.windh=1;
					break;
			}
		}
		//减
		else if(key==KEY2_PRESS)
		{
			switch(sys_ctrl.mode)
			{
				case 1://温度
					sys_ctrl.temph--;
					if(sys_ctrl.temph<0)sys_ctrl.temph=99;
					break;
				case 2://湿度
					sys_ctrl.humil--;
					if(sys_ctrl.humil<0)sys_ctrl.humil=99;
					break;
				case 3://光线
					sys_ctrl.lightl--;
					if(sys_ctrl.lightl<0)sys_ctrl.lightl=99;
					break;
				case 4://风速
					sys_ctrl.windh--;
					if(sys_ctrl.windh<0)sys_ctrl.windh=10;
					break;
			}
		}
	}
	//手动模式
	else
	{
		//开/关
		if(key==KEY1_PRESS || USART1_RX_BUF[0]==OPEN_CMD)
		{
			USART1_RX_BUF[0]=0;
			sys_ctrl.run=!sys_ctrl.run;
			if(sys_ctrl.run==1)//开
			{
				_dc_motor_zturn();
				delay_ms(500);
				_dc_motor_stop();
			}
			else//关
			{
				_dc_motor_fturn();
				delay_ms(500);
				_dc_motor_stop();
			}
		}
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	//自动模式
	if(sys_ctrl.auto_flag==0)
	{
		//正常模式下
		if(sys_ctrl.mode==0)
		{
			//如果白天
			if(sys_ctrl.light>sys_ctrl.lightl)
			{
				//如果下雨或大风,关闭晾衣架
				if(sys_ctrl.rain==1 || sys_ctrl.wind>=sys_ctrl.windh)
				{
					//如果晾衣架已打开,关闭晾衣架
					if(sys_ctrl.run==1)
					{
						sys_ctrl.run=0;
						_dc_motor_fturn();
						beep_alarm(40,2000);
						delay_ms(500);
						_dc_motor_stop();
					}
				}
				//没有下雨或大风
				else 
				{
					//如果温度高于阈值
					if(sys_ctrl.temp>sys_ctrl.temph)
					{
						//如果湿度低于阈值
						if(sys_ctrl.humi<sys_ctrl.humil)
						{
							//如果晾衣架已关闭,打开晾衣架
							if(sys_ctrl.run==0)
							{
								sys_ctrl.run=1;
								_dc_motor_zturn();
								delay_ms(500);
								_dc_motor_stop();
							}
						}
						//如果湿度高于阈值
						else 
						{
							//如果晾衣架已打开,关闭晾衣架
							if(sys_ctrl.run==1)
							{
								sys_ctrl.run=0;
								_dc_motor_fturn();
								delay_ms(500);
								_dc_motor_stop();
							}
						}
					}
				}
			}
			//如果晚上
			else
			{
				//如果晾衣架打开则关闭
				if(sys_ctrl.run==1)
				{
					sys_ctrl.run=0;
					_dc_motor_fturn();
					delay_ms(500);
					_dc_motor_stop();
				}
			}
		}
	}
}

//应用控制系统
void appdemo_show(void)
{
	u8 i=5;
	sys_parm_init();//系统参数初始化
	KEY_Init();
	BEEP_Init();
	DHT11_Init();
	ctrl_pin_init();
	pcf8591_init();
	dc_motor_init();
	USART1_Init(9600);
	while(i--)
	{
		//读取DHT11温湿度值
		DHT11_Read_Data(&sys_ctrl.temp,&sys_ctrl.humi);
		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

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


联系作者

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

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

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

相关文章

企业如何寻找适合的CRM系统软件

在数字化转型步伐不断加快的今天&#xff0c;CRM软件成为企业必不可少的一项工具。如果您并不清楚如何寻找合适的CRM系统软件&#xff1f;不妨通过下列几点来寻觅。 1.根据CRM系统行业和类别 例如企业重视营销功能&#xff0c;搜寻营销型CRM软件&#xff1b; 企业希望梳理好…

ideogram.ai 不同风格的效果图

https://ideogram.ai/ 提示词&#xff1a; French bulldog with sunglasses, playing skateboarding, speed up, happiness, front viewPhoto 相片 正常照片 Poster 海报 偏绘画&#xff0c;清晰的勾线 3D Render 3D 渲染 胶质感&#xff0c;像 3D 模型 Typography …

王珊教授:坚定信念走自主可控之路

在人大金仓2023新品发布会上&#xff0c;我国数据库泰斗、CCF最高科学技术奖获得者、原人民大学信息学院院长、原中国计算机学会&#xff08;CCF&#xff09;副理事长、人大金仓首任董事长王珊教授发表了致辞。 去年&#xff0c;王珊教授同样见证了人大金仓KESV9产品的发布。一…

氨基酸代谢:从基础到应用,揭示其在健康与疾病的角色

氨基酸(Amino Acid, 简称AA ) 是蛋白质合成的基石。它们是正常细胞生长、分化和功能所必需的细胞结构元素和能量来源。 蛋白质是长链氨基酸。人的身体有数千种不同的蛋白质&#xff0c;每种蛋白质都有重要的作用。每种蛋白质都有自己的氨基酸序列。该序列使蛋白质呈现不同的形状…

freemarker自定义模板

模板编程器指南 <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version> </dependency>freemarker官网参考&#xff1a; https://freemarker.apache.org/docs/pgui_qu…

C# OpenCvSharp Yolov8 Cls 图像分类

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace OpenC…

【OpenPLC学习】RK3568上运行OpenPLC

1 下载Runtime源码 git clone https://github.com/thiagoralves/OpenPLC_v3.git2 安装程序 ./install.sh linux3 在RK3568上运行Runtime sh start_openplc.sh4 在windows网页端登录 账号&#xff1a;openplc 密码&#xff1a;openplc 6 下载OpenPLC Editor https://git…

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作想象和世界一样宽广

​旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作想象和世界一样宽广

防火墙旁挂、和热备

旁挂 拓扑 防火墙配置 interface GigabitEthernet0/0/0 undo shutdown ip binding vpn-instance default ip address 172.25.254.2 255.255.255.0 alias GE0/METH service-manage http permit service-manage https permit service-manage ping permit service-manage…

由于找不到MSVCP140.dll,无法继续执行代码,重新安装程序可能会解决此问题的”修复方案

在Windows操作系统中&#xff0c;msvcp140.dll是一个非常重要的动态链接库文件&#xff0c;它是Microsoft Visual C 2015 Redistributable的一部分。这个文件主要用于支持许多应用程序的正常运行&#xff0c;例如Microsoft Office、SQL Server等。当计算机上缺少msvcp140.dll文…

网络编程-TCP协议(客户端和服务端)

需要了解UDP协议的&#xff0c;可以看往期文章 https://flypeppa.blog.csdn.net/article/details/133273416 TCP/IP参考模型 代码案例 服务端代码 package com.hidata.devops.paas.udp;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr…

tomcat在idea上的配置

tomcat在idea上的配置主要包含以下几个步骤&#xff1a; 1、创建一个maven web工程 2、配置tomcat 1、创建一个maven web工程 第一个是仓库配置文件的路径&#xff0c;第二个是你的仓库路径。 2、配置tomcat 配置tomcat有以下两种方式&#xff1a; 1、集成配置 2、插件配置…

Unity 制作登录功能01-创建登录的UI并获取输入内容

1.创建UI面板 导入插件TextMesh Pro 2.编写脚本获取用户输入 这里用的是输入框侦听函数&#xff0c;所有UI都可以使用侦听函数 &#xff0c;需要注意TMP_InputField 这个类是UI中导入的一个插件TextMesh Pro&#xff01;在代码中需要引用using TMPro; 命名空间&#xff01; …

9月25日学习记录

1. vs中Qt添加模块在这个位置&#xff1a; VS2019 Qt 怎么添加Qt模块&#xff1f;_qtvs添加第三方qt模块_令狐掌门的博客-CSDN博客 2.布局学习 (1) QVBoxLayout *layoutnew QVBoxLayout(this);QWidget *w1new QWidget;QWidget *w2new QWidget;w1->setStyleSheet("bac…

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义 文章目录 I2C协议I2C配置I2C操作判断I2C是否响应I2C读写 附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总…

【广州华锐互动】VR智能内容中控平台有什么作用?

随着科技的发展&#xff0c;教育方式也在不断地进行创新。广州华锐互动开发的VR智能内容中控平台&#xff0c;为教育带来了新的可能性。它不仅可以帮助教师更好地控制和管理虚拟现实教学环境&#xff0c;还可以让学生在虚拟环境中进行互动学习&#xff0c;提高他们的学习效果。…

C#中实现定时器Timer定时判断IP是否ping通(连通)和端口号是否telnet可达(可用)

场景 Winform中使用HttpClient(设置最大超时响应时间)调用接口并做业务处理时界面卡住&#xff0c;使用async Task await异步任务编程优化&#xff1a; Winform中使用HttpClient(设置最大超时响应时间)调用接口并做业务处理时界面卡住&#xff0c;使用async Task await异步任…

做个网页火了,结果一天欠下8000元!

大家好&#xff0c;我是鱼皮。 事情是这样的&#xff0c;昨天我在 B 站某个视频的评论区下被 了&#xff1a; 我内心&#xff1a;熟悉&#xff1f;什么熟悉&#xff1f;我以为又是朋友开玩笑说哪个动物和我长得很像来着。 结果点进去一看&#xff0c;标题就直接 “震惊” 到…

【Vue】深究计算和侦听属性的原理

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue系列教程持续更新哈&#xff0c;涵盖大量的经验和示例&#xff0c;由浅入深进行讲解&#xff0c;想要学习&巩固&避坑就一起学习吧~ 计算和侦听属性 计算属性 重点概要 定义&#xff1a;要用的属性不存在&#…

3战略设计

产品代码都给你看了&#xff0c;可别再说不会DDD&#xff08;三&#xff09;&#xff1a;战略设计 # 这是一个讲解DDD落地的文章系列&#xff0c;作者是《实现领域驱动设计》的译者滕云。本文章系列以一个真实的并已成功上线的软件项目——码如云&#xff08;https://www.mryq…