IoT智能硬件设计:遥控窗帘设计

Posted 产品人卫朋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IoT智能硬件设计:遥控窗帘设计相关的知识,希望对你有一定的参考价值。

本设计是基于STC89C51单片机的遥控窗帘。它采用按键和无线遥控两种控制方式,其中SC2262/SC2272 编码解码芯片组成无线发送接收模块;通过控制直流电机的正反转来控制窗帘的开关,并且可以指示运行状态;利用限位开关来控制窗帘停止,防止过卷。

它采用8位的STC89C51单片机做控制器,采用直流电机驱动窗帘工作。

随着社会经济的高速增长,人民生活水平的不断提高,人们对家庭生活舒适性的需求越来越强烈,窗帘作为每个家庭的家居必须用品,自然也需要满足人们更舒适性的需求,因此一款智能的遥控窗帘的研究具有一定的使用价值。

功能描述

窗帘其基本的作用无非是保护业主的个人隐私以及遮阳挡尘等功能,但传统的窗帘您必须手动去拉动,每天早开晚关也是挺麻烦的,特别是别墅或复式房的大窗帘,比较重,而且长,需要很大的力量才能开关窗帘,很不方便。

遥控电动窗帘在最近几年得到迅速发展,并广泛应用于智能大厦、高级公寓、酒店和别墅等领域,只要遥控器轻按一下,窗帘就自动开合(百叶窗可以自动旋转),非常方便。

本次设计主要研究的是利用单片机的无线遥控电路的设计。

系统总体方案及硬件设计

本系统主要由单片机最小系统、无线发射、接收模块、按键部分、电机控制执行部分和限位开关组成。

设计思路

本设计是基于单片机的遥控窗帘,采用8位的STC89C52单片机做控制器,程序采用C语言编程。利用直流电机正反转,实现控制窗帘的开关。无线遥控是由SC2262/SC2272 编码解码芯片组成的无线发送接收模块,通过SC2272接收输出端D0、D1、D2、D3输出信号控制单片机,再利用单片机控制L298N来控制直流电机。利用霍尔传感器来实现窗帘的防过卷。

系统框图如下:

 

系统硬件设计

1.主控芯片

本系统采用STC89C52为主控芯片。

STC89C52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52在众多嵌入式控制应用系统中得到广泛应用。

单片机引脚图如下:

2.单片机最小系统

单片机加上适当的外围器件和应用程序,构成的应用系统称为最小系统。

2.1时钟电路

 

2.2复位电路

单片机小系统常采用上电自动复位和手动按键复位两种方式实现系统的复位操作。

 

 

2.3按键设计

2.4无线发送、接收设计

 

2.5 正反转显示模块

本功能采用在直流电动机两侧并接发管二极管实现,正传是蓝灯亮,反转时黄灯亮。

电路图如下所示:

 

系统软件设计

程序设计

本系统采用C语言编程,主要使用了if、while等判断语句,按键采用高电平有效模式。当有按键按下时,无线发射模块发出信号,接收模块解码后响应相应功能,当限位开关闭合时,说明窗帘已经到达指定位置,停止转动。

 1系统程序流程图

 

2系统原理图

2.1最小系统复位电路

 

 2.2控制板  

 2.3遥控板

3系统程序

#include<reg52.h>
#include<intrins.h>
#include<absacc.h>		//头文件

#define uc unsigned char
#define ui unsigned int

sbit in_go		=	P1^3;
sbit in_back	=	P1^2;//手动前进后退按键 
sbit out_go		=	P3^0;
sbit out_back	=	P3^5;//电机控制输出 
sbit limit_go	=	P3^4;
sbit limit_back	=	P3^6;//前进后退限位开关 
sbit led_go		=	P1^4;
sbit led_back	=	P1^5;//前进后退限位指示灯 
sbit light		=	P1^0;//光线传感器 
sbit change		=	P1^1;//手动自动切换按键(默认自动)  
sbit led_zhishi =	P1^7;
sbit buzz		=	P1^6;

bit bdata flag1,flag2,change_flag,flag_shan,flag_shan1,flag_shan2;
uc m,n,shan;

void delay(ui x)//延时函数 

	ui i,j;
	for(i=0;i<x;i++)
	for(j=0;j<110;j++);

void work()//工作函数 

	if(change==0)//判断切换是否按下 
	
		buzz=1;
		delay(50);
		if(change==0)
		change_flag=~change_flag;//手动,自动切换 
		buzz=0;
		while(!change);//释放 
	
	led_zhishi=change_flag;
	if(change_flag==0)//自动模式 
	
		if(light==0)//夜间(无光)时关闭窗帘 
		
			delay(50);
			if(light==0)
			
				if((limit_go==0)&&(flag_shan==0))
				
					out_go=1;
					out_back=1;
					led_go=1;
					for(shan=0;shan<6;shan++)
					
						led_go=~led_go;
						buzz=~led_go;
						delay(500);
					
					flag_shan=1;
				
				else if(limit_go==1)
				
					out_go=1;
					out_back=0;
					led_back=1;
					led_go=0;
					flag_shan=0;
				
			
		
		else if(light==1)//白天(有光)时打开窗帘 
		
			delay(50);
			if(light==1)
			
				if((limit_back==0)&&(flag_shan==0))
				
					out_go=1;
					out_back=1;
					led_back=1;
					for(shan=0;shan<6;shan++)
					
						led_back=~led_back;
						buzz=~led_back;
						delay(500);
					
					flag_shan=1;
				
				else if(limit_back==1)
				
					out_go=0;
					out_back=1;
					led_back=0;
					led_go=1;
					flag_shan=0;
				
			
		
	
	else if(change_flag==1)//手动模式 
	
		if((in_go==0)&&(limit_go==1))//关闭是否按下 
		
			buzz=1;
			delay(50);
			if((in_go==0)&&(limit_go==1))
			
				out_go=1;
				out_back=~out_back;//按一下打开,再按一下,停止 
				buzz=0;
				led_back=1;
				led_go=out_back;
				flag_shan1=0;
				
			
			while(!in_go);//释放
		
		else if((in_back==0)&&(limit_back==1))//打开是否按下 
		
			buzz=1;
			delay(50);
			if((in_back==0)&&(limit_back==1))
			
				out_back=1;
				out_go=~out_go;//按一下关闭,再按一下,停止  
				buzz=0;
				led_go=1;
				led_back=out_go;
				flag_shan2=0;
				
			
			while(!in_back);//按键释放
		
		if((limit_go==0)&&(flag_shan1==0))
		
			delay(5);
			if((limit_go==0)&&(flag_shan1==0))
			
				out_back=1;
				led_go=1;
				for(shan=0;shan<6;shan++)
				
					led_go=~led_go;
					buzz=~led_go;
					delay(500);
				
				flag_shan1=1;
			
		
		if((limit_back==0)&&(flag_shan2==0))
		
			delay(5);
			if((limit_back==0)&&(flag_shan2==0))
			
				out_go=1;
				led_back=1;
				for(shan=0;shan<6;shan++)
				
					led_back=~led_back;
					buzz=~led_back;
					delay(500);
				
				flag_shan2=1;
			
		
	


void main()//主函数 

	light=0;
	buzz=0;
	while(1)//进入死循环
	
		work();//调用工作函数 
	

 

以上是关于IoT智能硬件设计:遥控窗帘设计的主要内容,如果未能解决你的问题,请参考以下文章

国内物联网平台初探 ——机智云IoT物联网云服务平台及智能硬件自助开发平台

基于华为云IoT设计的智能门锁

基于华为云IoT设计的智能门锁

#yyds干货盘点# 基于STM32+ESP8266+华为云IoT设计的智能门锁

IoT物联网时代怎么挣钱?

基于STM32设计智能称重系统(华为云IOT)