当前位置:   article > 正文

基于单片机的晾衣架控制系统设计_基于单片机的智能晾衣架的设计的主要解决的问题

基于单片机的智能晾衣架的设计的主要解决的问题

博主主页:单片机辅导设计
博主简介:专注单片机技术领域和毕业设计项目。
主要内容:毕业设计、简历模板、学习资料、技术咨询。


主要介绍

  本次所设计的晾衣架系统不仅能够根据环境变化实现晾衣架的自动伸缩控制,而且具有体积小、重量轻,灵活方便、适用范围广、操作比较便捷等特点。
  结果表明,这款基于单片机的晾衣架控制系统彻底改变了人们的晾衣习惯,实现了足不出户就可以收晾衣物,再也不用担心外出时衣物淋雨了。
  整套系统在运行中表现出极好的智能型和便捷性,备受消费者的青睐。

关键词:单片机;光敏电阻;雨滴传感器;步进电动机;晾衣架

一、系统方案设计

1.1 系统方案论证

  本设计为实现晾衣架控制系统设计提出两种方案:
  方案一:
  本方案设计主要由单片机主控电路、按键电路、光线检测、电机控制执行部分组成。主要用到的元器件有:STC89C52单片机、小马达电动机、光敏电阻等等。STC89C52单片机作为本方案的主控芯片,光敏电阻是用来识别所处环境为白天还是夜晚的光线强弱状态。
连接电源按下开关后,初始状态是自动模式,通过光敏电阻自动识别当前所处环境的光线强弱,即白天还是夜晚。当时识别出是白天,光照比较强时,电动机正转代表晾衣架伸展,用手触碰相应的限位开关,电动机停止转动代表伸展到最大;当时光敏电阻识别出是夜晚光照强度比较弱时,电动机反转代表晾衣架收缩,用手触碰相应的限位开关,电动机转动停止代表收缩到最里面,以防止发生过卷。
  方案二:
  本次方案设计主要由单片机主控电路、雨滴检测、光线检测、按键电路、指示灯电路、电机控制执行部分组成,主要用到的元器件有:STC89C52单片机、FC-37雨滴传感器、光敏电阻、LED指示灯、微动步进电动机等等。STC89C52单片机作为本方案的主控芯片,雨滴传感器主要是用来检测所处环境中是否存在下雨的情况;光敏电阻是用来识别所处环境为白天还是夜晚的光线强弱状态;由于雨滴传感器和光敏电阻输出信号都是电压信号,单片机无法直接处理,所以本方案使用型号为LM393的电压比较器能够将光敏电阻和雨滴传感器所输出的电压信号转化为数字量信号,然后传送给单片机进行数据处理。另外,整个系统还设计了手动模式和自动模式,用户可以根据所处环境和自己的需求对当前晾衣架所处的状态进行自由的切换,电动机方面采用了比较方便的微动式步进电动机,为了直观的看到当前系统所处于的模式和状态,设计了指示灯电路以便于观察。
  连接电源按下开关后,初始状态是手动模式,用户可根据自己的需求进行收晾衣物,按下切换按钮后,系统更换为自动模式。通过光敏电阻自动识别当前所处环境的光线强弱,即白天还是夜晚。当时识别出是白天,光照比较强且雨滴传感器未检测到有雨水时,电动机正转拉动电动机上的端子(代表晾衣架上所晾的衣物)向左移动代表晾衣架伸展,当电动机上的端子移动到最左面触碰相应的限位开关,电动机转动停止代表伸展到最大;当时识别出是夜晚光照比较弱或者是在白天时雨滴传感器检测到有雨水时,电动机反转拉动端子向右移动代表晾衣架伸展,当电动机上的端子移动最右面自动触碰相应的限位开关,电动机转动停止代表收缩到最里面,电动机转动停止以防止发生过卷。
  根据上述两种方案的介绍,对于本系统设计我选择方案二,因为方案一实现的电动机正反转并不能完全实现自动化,自动检测到光线后,还需要手动按一下限位开关来实现电动机正反转的停止,方案二所采用的微动式步进电动机可以实现自动停止正反转;同时,方案一只有光照检测模块,没有雨滴检测部分,这样实现出来的功能不能够完全满足用户的要求,而方案二在方案一的基础上添加了雨滴检测装置。显而易见,方案二更符合我们的实际需求,具有易操作、智能化、实用性强等优势。

1.2 系统工作原理

  下面介绍一下本系统的原理及总体框图,总体框图如1.1所示。
在这里插入图片描述

图1.1 系统总体框图
  本系统利用光敏电阻和雨滴传感器来检测当前环境,由按键电路调整当前系统所处的状态,指示灯电路和微动步进电机将信号发送给单片机,再由单片机检测指示灯电路和微动步进电动机以实现晾衣架的控制;雨滴传感器和光敏电阻将检测到的电压信号输入给LM393电压比较器中,再由电压比较器输入到单片机中进行数据处理。在自动模式下,当且仅当白天不下雨的时候,晾衣架才会打开进行晾晒衣服,其他任何情况下晾衣架的状态都是收衣物状态,这样实现了智能晾衣架的设定。

二、实物展示

实物展示图如图4.2、4.3所示。
在这里插入图片描述

程序

#include <REGX52.H>					//包含单片机内部寄存器的头文件
#define uchar unsigned char 		//宏定义
#define uint unsigned int

//定义微动电机管脚
sbit EN=P2^1;	      	 //使能    
sbit A1=P2^0;			 //A相
sbit B1=P2^2;			 //B相

//定义限位开关管脚
sbit switch1=P3^3;		  //控制电机往左边的开关
sbit switch2=P3^4;		  //控制电机往右边的开关

//定义LM393两个输出管脚
sbit LM393_A=P1^0;		  //连接的是水滴传感器,水多,输出为0
sbit LM393_B=P1^1;		  //连接的是光敏电阻,光强为1

//定义按键
sbit key1=P3^5;			  //连接IO口
sbit key2=P3^6;
sbit key3=P3^7;

bit key1_flag=0;		  //按键标志位
bit key2_flag=0;
bit key3_flag=0;
//定义指示灯
sbit led0=P0^0;			  //led灯IO口
sbit led1=P0^1;
sbit led2=P0^2;
sbit led3=P0^3;

bit A_M=1;				 //手自动模式标志 1是手动模式,0是自动模式
bit R_L=1;			     //多余变量

bit Open_Close=1;		 //控制丝杠电机打开关闭标志,0是往右转,1是左转
 
  
void delay(uint time)   //误差 0us
{
    while(time--);
}

void RRM(void)	  //往右边走
{	
	EN=1;  		  	//开启使能端
	A1=1;			//两相点击,相位取反,转向相反
	delay(400);
	B1=1;
	delay(400);
	A1=0;
	delay(400);
	B1=0;
	delay(400);
	EN=0;
}

void LLM(void)	 /往左走
{	
	EN=1;
	B1=0;
	delay(400);
	A1=0;
	delay(400);
	B1=1;
	delay(400);
	A1=1;
	delay(400);
	EN=0;
}


void key_dispose()
 {
   if(!key1)		 //按键1按下
    { 
	  if(key1_flag) 
	   { 			 //清除,防止按下后连续触发
	     key1_flag=0;
		 A_M=~A_M;					 //手自动模式切换
	   }
	}
	else key1_flag=1;

   if(!key2)		 //按键2按下
    {  
	  if(key2_flag) 
	   { 
	     key2_flag=0;
		 
		if(A_M) Open_Close=0;	     //如果是手动模式,则控制丝杆电机右转
	   }
	}
	else key2_flag=1;

   if(!key3)		//按键3按下
    {  
	  if(key3_flag) 
	   { 
	     key3_flag=0;
		if(A_M) Open_Close=1;	   //如果是手动模式,则控制丝杆电机左转
	   }
	}
	else key3_flag=1;

 }


void AM_dispose()		   //自动模式判断
 {
   if(A_M==0) 			   //A_M==0是手动模式
    {
		 led0=0;		   //指示灯切换
		 led1=1;
		 if(LM393_B) 	   //如果光照强
		  {	
			 if(LM393_A) 		//且没有下雨,则控制丝杠电机右转,相当于晾衣物
			  {
			     Open_Close=0;
			  } 
			  else				//否则如果下雨,则丝杠电机左转,相当于收衣物
			   { 
			     Open_Close=1;
			   }
		  }
		  else 				  //否则如果光暗,则丝杠电机左转,相当于收衣物
		   {
		     Open_Close=1;
		   }
	}
	else   //这个就是手动模式下,控制指示灯切换
	 {
		 led0=1;
		 led1=0;
	 }
	 if(Open_Close==0)	   //Open_Close==0表示要控制丝杠电机右转
	  {
		 led2=0;
		 led3=1;
	     if(switch2!=0)   //没有触到右边限位开关,则控制右转,触到后停止
		  {
		    RRM();
		  }
	  }
	  else 				//控制左转的
	   {
		 led2=1;
		 led3=0;
	     if(switch1!=0)  
		  {
		    LLM();
		  }
	   }
 }

void Init_0_1()	   //中断初始化函数,初始化中断0,1
{ 
  TMOD=0x10;	   //设置定时器0工作模式2  8位自动重装 256
  EA=1;			   //打开总中断开关
  TH1=0x3C;
  TL1=0xb0;
  ET1=1;
  TR1=1;
}

void main()
 {

     while(switch1!=0)   //³初始化电机位置,默认为关闭
	  {
	    LLM();
	  }
  Init_0_1();		//定时器配置
  while(1) 
   {
	 AM_dispose(); //自动模式下判断天色和天气
   }
 }

void time1() interrupt 3   /定时器中断服务函数
 {
  TH1=0x3C;				   //重新转载初值,定时时间50毫秒
  TL1=0xb0;
  key_dispose();		   //调用按键扫描函数
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184

三、 硬件电路原理图

本系统硬件部分原理是由单片机最小控制系统控制整个硬件部分的运行,在最小控制系统旁边有一个下载接口,用于系统C语言程序代码的下载,整个系统使用5V电源,指示灯电路会显示现在系统所处的状态,四个指示灯分别代表自动模式、手动模式、晾衣物和收衣物,分别于单片机P00、P01、P02、P03管脚相连;当系统接通电源按下总开关后,系统默认状态为手动模式下收衣物,电动机接收到系统给的指令进行相应的转动,当触碰到限位开关SW3后,电动停止转动代表收衣物已达最大限度;同理,当触碰到限位开关SW2后,电动停止转动代表晾衣物已达最大限度,此刻,用户可根据自己的需求对晾衣架控制系统进行相应的状态调节。
当我们按下切换按键系统变为自动模式后,系统会根据光敏电阻和雨滴传感器检测到的电压信号,由电压比较器LM393将电压信号转化为数字信号输入给单片机中已实现对晾衣架的系统控制。当且仅当光敏电阻检测到当前为白天且没有雨的环境下,晾衣架才是晾衣物状态,其他任何状态都是收衣物状态。本系统硬件电路图如图2.8所示。
在这里插入图片描述

四、结论

  通过以上分析,本系统使用STC89C52单片机作为主控制器,由电源电路、STC89C52单片机核心电路、步进电机驱动电路、LED指示灯电路、雨滴检测模块、光照检测模块和按键电路等组成。本文着重对基于单片机的晾衣架控制系统做出了比较详细的报告,其中包括硬件部分与软件部分两大模块,并且对其中各个重要子模块增加了重点详细说明。
  对于这次系统设计,我主要的设计思路是解决人们晾衣物问题,实现自动化、智能化。系统利用光敏电阻和雨滴传感器来进行当前环境的检测,当系统切换为自动模式状态下,只有当且仅当不下雨的白天的时候,晾衣架才会打开进行晾衣服,其他任何情况下晾衣架的状态都是收衣物状态,这样就实现了一种智能晾衣架的设定。所用到的器件分别有:STC89C52单片机、型号为FC-37的水滴传感器作为检测当前环境是否下雨的传感器、光敏电阻作为检测白天黑夜的传感器,由于雨滴传感器和光敏电阻输出的信号都是电压信号,所以采用了LM393电压比较器将其转变为数字量信号送给单片机进行处理。为满足用户的多种需求,整个系统还设置了手动和自动两种模式;为了直观的看出当前模式和状态,还设计了指示灯电路,电机方面采用了能够成直线运动的微动电机,有利于更加清晰的观察出晾衣架当前所处模式。
  本设计主要实现的功能有:系统接通电源以后,按下总开关,系统默认为手动模式,收衣物的状态,此刻,如果用户需要手动调节可利用收晾衣物按键进行相应的调节;可观察指示灯的灯亮来确定当前所处模式和状态,从左数第一个灯表示手动模式,第二个灯表示自动模式,第三个灯表示晾衣物,第四个灯表示收衣物;按下切换按键,此时系统切换为自动模式,由光敏电阻检测当前所处环境的光照强度,若为白天,且雨滴传感器并未检测到有雨的情况下,晾衣架状态为晾衣物;若白天雨滴传感器检测到有雨的情况下,晾衣架状态为收衣物;若为黑天,那么不管雨滴传感器是否有检测到下雨,晾衣架状态都为收衣物。通过这样的设计解决了人们因工作需求或其他未在家的情况下,晾晒的衣物因下雨没有被及时收回等问题,希望会给更多的人带来智能的生活享受。

目录

目 录
摘 要 I
Abstract II
引 言 1
1 系统方案设计 3
1.1 系统方案论证 3
1.2 系统工作原理 4
2 硬件设计 5
2.1 单片机 5
2.2 按键设计 7
2.3 光线检测模块 8
2.4 雨滴检测模块 9
2.5 电压比较器 10
2.6 微动步进电动机 11
2.7 硬件电路原理图 12
3 系统主要软件设计 14
3.1 软件环境 14
3.2 程序设计 15
4 焊接与调试 17
4.1 电路焊接 17
4.2 系统调试 18
4.3 实物测试 18
结 论 20
参考文献 21
附录1 原理图 22
附录2 源程序清单 23
致 谢 30

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号