基于51单片机的自动窗帘控制系统

2023-11-06

1. 简介
自动窗帘控制系统核心采用的是单片机STC89C52,其次利用了光照传感器、按键、显示屏以及信号调理电路等外围电路,使整个系统在各模块的配合下可实现半自动控制、自动控制、定时控制等功能。其主要功能有6个,分别为:
(1)手动控制:该功能是根据用户的需求通过按键进行窗帘的开关,此功能可以使窗帘的开闭处于任何一种状态;
(2)光照自动控制:系统可以根据用户设定的光照强度值通过感光器采集光照自动开关窗帘;
(3)时间控制:此功能是根据用户设定的时间一次性开关窗帘,并显示当前温度。
(4)温度报警系统:可以自行设置温度报警温度。
(5)时间显示及闹钟系统:可以自行设置闹钟时间。
(6)手动自动控制按键随时切换

2.硬件设计
自动窗帘控制系统的构成主要由STC89C52单片机最小系统、蜂鸣器报警电路、电源模块、按键电路、LCD1602液晶显示电路、步进电机驱动电路、DS1302时钟电路、光照检测模块和温度检测电路组成。其系统框图如图:
在这里插入图片描述
(1)光照检测电路
窗帘自动控制系统的光控功能是可以根据光照的强弱来自动控制窗帘的开闭的,因此需要用到光照传感元器件,在本设计中采用了光敏电阻,并和一个常规电阻串联在一起,根据光线的变化改变光敏电阻的分压值,然后通过ADC0832数模转换芯片传输给单片机,经过单片机处理后在液晶上显示。电路图如图:
在这里插入图片描述
(2)灯光驱动电路
灯光电路使用了3个LED灯作为光源,采用了三极管作为LED灯开关的控制芯片,同时也对驱动电流进行放大,以达到LED灯工作电流的要求。原理图如图:
在这里插入图片描述
(3)步进电机驱动电路
本系统的设计目的为了高效控制步进电机的转动,因此需要将单片机发出的脉冲转化为步进角度,才能控制步进电机转动,我们在这里采用ULN2003作为步进电机的驱动芯片,其作用为增强单片机的驱动能力。其工作原理为:根据单片机引脚的输出状态,使ULN2003与单片机连接的四个管脚中每时刻只有一个管脚处于导通状态(采用单拍方式对步进电机控制),其他管脚处于断开状态。这样就使得与ULN2003连接的步进电机只有一个引出端导通。驱动原理图如图:
在这里插入图片描述
(4)按键电路
按键在单片机应用系统中能实现向单片机输入数据,传送命令等功能,是人工干预单片机的主要手段。本设计中的按键采用独立按键式,共有五个。其中S2是自动和手动切换键,S3是设置退出键,S4是手动反转和设置参数减键,S5是手动正转和设置参数加键,S6是参数设置键。电路图如图:
在这里插入图片描述
(5)DS1302时钟电路
本设计采用DS1302时钟芯片为系统提供时钟源,它通过串行方式与单片机进行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间信息,并可对月末日期、闰年天数自动进行调整;电路如图:
在这里插入图片描述
电路图中,Vcc1为后备电源,Vcc2为主电源。VCC1在单电源与电池供电的系统中提供低电源并提供低功率的电池备份。VCC2在双电源系统中提供主电源,在这种运用方式中VCC1连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。

3.软件设计
系统软件设计主要有几部分组成,主要分为主程序和各个模块子程序。
(1)主程序设计
主程序构成无限循环,主要完成单片机初始化,关中断,菜单显示内容初始化,按键扫描,电机运行,计时等功能。流程图如图:
在这里插入图片描述
代码:

void main()
{	
	init_eepom();		 //初始化EEPROM
	init_1602();		 //lcd1602初始化
	init_1602_dis_csf(); //lcd1602初始化显示
	init_ds1302_io();	 //初始化ds1302Io
	init_time0();		 //初始化定时器
	menu_1_break();	     //菜单初始界面
	init_ds1302();		 //ds1302初始化
	temperature1 = read1_temp();  //读温度1
	delay_1ms(650);
	while(1)
	{
		key();			 //按键程序
		if(key_can < 10)
		{
			key_with();	
		}
		shoudong_kaiguan();	  //手动开关窗帘
		if(flag_200ms == 1)
		{		
			flag_200ms = 0;
			temperature1 = read1_temp();  //读温度1	环境温度
			if(temperature1 >= 99)
				temperature1 = 99;
			zinengchuanglian_dis();	  //智能窗帘处理函数
			guanxian = ad0832read(1,0) * 9.0 / 255;
			if((menu_1 == 0))
			{
				read_time();		  //读时间
				init_1602_ds1302();   //显示时钟
				write_sfm_18b20(2,13,temperature1);	//显示温度
				write_sfm1(2,0,guanxian);	//显示温度
				  	if(guanxian <= guanxian_set)
			 LED=0;
			else
			 LED=1;
				if(temperature1 >= t_high)
					beep =	~beep;   //温度报警 ,蜂鸣器报警
				else 
					beep = 1;        
			}
		}
		bujindj();	 //步进电机函数
	}
}

(2)步进电机驱动程序设计
步进电机程序设计主要实现的功能为判断旋转方向;按顺序传送控制脉冲;判断所要求的控制步数是否传送完毕。程序流程图如图:
在这里插入图片描述
代码:

uchar flag_z_f;        //正反标志位  0为顺时钟 1为逆时史上转
unsigned char code zheng[4]={0xf8,0xf4,0xf2,0xf1};//正转表格
unsigned char code fan[4]={0xf1,0xf2,0xf4,0xf8};//反转表格
uint bjdj_value;   //步进电机的量
uchar bjdj_zidong;   //步进电机的量	自动

void bujindj()	 //步进电机函数
{
	static uchar i;
	if(flag_z_f != 0)	
	{	
		if(flag_z_f == 1)	   //开
		{
			if(bjdj_value >= 254)
			{
				flag_z_f = 0;
				bjdj_value = 254;
				P2 = P2 & 0xf0;	//让4个IO口都不输出
				write_eepom();  //保存
			}else 
				bjdj_value ++;	
		}
		if(flag_z_f == 2)	   //关
		{				
			if(bjdj_value <= 1)
			{
				flag_z_f = 0;
				bjdj_value = 1;
				P2 = P2 & 0xf0;	//让4个IO口都不输出
				write_eepom();  //保存
			}else  
				bjdj_value --;
		}
		for(i=0;i<4;i++)          //4相
		{
			if(flag_z_f == 1)	  //开
				P2=zheng[i];// & (P2 | 0xf0);	       //
			else if(flag_z_f == 2)//关
				P2=fan[i];// & (P2 | 0xf0);	        //
			delay_uint(500);        //改变这个参数可以调整电机转速
		}
	}
}


由于代码较多,其他子程序就不一一介绍,有兴趣可下载源码去看看。

源码+AD原理图 下载:关注公众号,首页回复“自动窗帘”获取资料
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机的自动窗帘控制系统 的相关文章

随机推荐

  • 无向图的DFS算法

    2 无向图的DFS算法 按照教材中的定义方式 完整实现图的DFS算法 给定图数据文件 tinyG txt 能够输出DFS的节点遍历结果 及每个节点的Pre和Post值 和连通分量的个数与节点构成 类名 GraphDFS 博文标题 第四周作业
  • C++ std::pair and std::list \ std::array

    std pair lt 第一个数据类型 第二个数据类型 gt 变量名 例如 std pair
  • leetcode总结:最长公共前缀

    1 Python max 方法返回字符串中最大的字母 Python min 方法返回字符串中最小的字母 2 另外 字符串是可以比较的 故有下面 3 enumerate 函数 用于将一个可遍历的数据对象 如列表 元组或字符串 组合为一个索引序
  • Unity——MVC(很不错的解释应用)

    点击打开链接 First time programmers usually start learning the trade with the classic Hello World program From there bigger an
  • 这就是神经网络 9:深度学习-语义分割-FCN、U-Net、SegNet

    FCN 简介 FCN全称是 Fully Convolutional Networks 也就是全卷积网络 这个网络去掉了全连接层 网络结构里只有卷积 池化和反卷积 操作 本文的FCN特指这个语义分割网络 而非广义的全卷积网络 作者在论文里说
  • 计算机管理启动postgresql失败

    1 选中postgresql右键 属性 2 在属性中的找到 登录 页 本地系统账户
  • C++文件读写操作(自学笔记三)

    C 中对文件的操作的三个大类 写操作 ofstream 读操作 ifstream 读写操作 fstream 要想实现对文件的读写操作 头文件中需要包含 include
  • spring初始化方法的执行顺序以及其原理

    Spring中初始化方法的执行顺序 首先通过一个例子来看其顺序 调用顺序 init2 PostConstruct注解 gt afterPropertiesSet InitializingBean接口 gt init3 init method
  • 数学建模——相关系数(1)——皮尔逊相关系数(Person)

    文章目录 一 相关系数专栏简介 二 相关的基本数学概念 总体和样本 三 皮尔逊相关系数 Person 1 协方差 用于引出相关系数的定义 2 总体皮尔逊Person相关系数 3 样本皮尔逊Person相关系数 4 皮尔逊相关系数的使用范围
  • 海思平台GPIO驱动最简单实现

    闲来无事 发两个小程序玩玩 利用HI MPI SYS SetReg HI MPI SYS GetReg实现GPIO驱动程序 源码 include
  • Java中的拷贝

    Java中的拷贝 在Java中 深拷贝和浅拷贝主要用于对象的拷贝 即将一个对象复制给另一个对象 而引用拷贝一般用于对象的赋值和参数传递 三者的对比图 浅拷贝 浅拷贝指只拷贝对象的引用 不拷贝对象本身 也就是说 如果对象中有引用类型的成员变量
  • [深度学习] 超参数设定和网络训练

    超参数设定 介绍一些重要的网络设计过程中的超参数设定技巧和训练技巧 如学习率 批规范化操作和网络优化化策略的选择 网络超参数的设定 网络超参数设定在搭建整个网络架构之前 需首先指定与网络结构相关的各项超参数 输入图像像素 卷积层个数 卷积核
  • 关于connectionstring字符串的那点事

    我们在做VB数据库经典实例这本书上的五个小例子和做学生信息管理系统时 都需要通过Vb链接数据库 在众多的链接方式中connectionstring字符串应该是较为简单的一种方式 下面我来详细介绍它的一些属性 1 使用SQL Server数据
  • stm32------TFTLCD显示

    目录 一 1 硬件连接 2 LCD lcddev结构体 LCD结构体 mini版没有 lcddev结构体 3 七个底层接口函数 写寄存器值函数 写数据函数 读数据函数 写寄存器内容函数 读寄存器内容函数 开始写GRAM函数 写GRAM函数
  • 1500*B. The Walkway(贪心&规律)

    解析 把每个区间段分成左闭右开区间 我们可以观察到 每个区间的饼干数量为 r l d 上取整 所以先计算不删除某个点的饼干总和init 然后遍历所有点 将这个点删除 所以删除某个点后剩余数量为 找出最小值并且统计数量 需要注意的是 因为如果
  • java mysql驱动 名称_JDBC连接mysql的驱动mysql connector java安装使用教程

    MySQL connector java是一款由mysql官方推出的jdbc驱动 它是java通过JDBC连接操作mysql的驱动 解压之后是jar包 可以实现通过jdbc来远程连接数据库进行各种管理操作 mysql jdbc驱动需要配合j
  • Rethinking Data Augmentation

    Rethinking Data Augmentation Self Supervision and Self Distillation Abstract 对进行了数据增强 翻转 裁剪等操作 的增强数据任然使用原始标签时 如果增强数据的分布与
  • OpenAI Translator - 基于 ChatGPT的最强开源 AI 划词翻译工具

    为啥要造这个轮子 我开发了一个 Bob 的插件 bob plugin openai translator 使用 ChatGPT API 在 macOS 上进行全局划词翻译 但是由于很多用户并不是 macOS 用户 所以特此开发了一个浏览器插
  • 2014年1月1日-7日(共25小时,剩4743小时)

    1月1日元旦放假 晚上编程1小时 1月2日和3日每天5小时 1月4日和5日周末 周六的时候编程5小时 周日出去玩了 1月6日出去办事 下午2小时 1月7日上下午和晚上 估计应该有7小时 共25小时
  • 基于51单片机的自动窗帘控制系统

    1 简介 自动窗帘控制系统核心采用的是单片机STC89C52 其次利用了光照传感器 按键 显示屏以及信号调理电路等外围电路 使整个系统在各模块的配合下可实现半自动控制 自动控制 定时控制等功能 其主要功能有6个 分别为 1 手动控制 该功能