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

news/2024/4/23 16:11:05/文章来源:https://blog.csdn.net/liwei16611/article/details/129136643

本设计是基于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 intsbit 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();//调用工作函数 }
}

 

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

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

相关文章

SQL零基础入门学习(三)

SQL零基础入门学习&#xff08;二&#xff09; SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录。 SQL WHERE 语法 SELECT column1, column2, ... FROM table_name WHERE condition;参数说明&#xff1a; column1, column2, …&#xff1a;要选择的字段名称&…

教你数分钟内创建并运行一个 DolphinScheduler Workflow

点击蓝字 关注我们作者 | 鲍亮&#xff0c;Apache DolphinScheduler PMC Member01Workflow是什么&#xff1f;对于数仓场景和数据湖场景来说&#xff0c;最显著的特点就是数据处理的长流程和高复杂度任务依赖关系&#xff0c;从源数据采集到最终报表数据的生成&#xff0c;中间…

软件工程 | 第一章:软件工程学概述

软件工程学概述一、前言二、软件危机1.典型表现2.产生原因3.消除危机途径三、软件工程1.概述2.软件本质特征3.软件工程基本原理4.软件工程方法学1️⃣传统方法学2️⃣面向对象方法学四、软件生命周期五、结语一、前言 本文将讲述软件工程导论的第一章相关知识点&#xff0c;主…

第一个Java程序(初识Java)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 文章目录1.Java概述1.1什么是Java1.2Java之父2.0第一个Java程序编译运行.class3.0程序如何跑起来的&#xff1f;3.1J…

加密,各种加密,耙梳加密算法(Encryption)种类以及开发场景中的运用(Python3.10)

不用说火爆一时&#xff0c;全网热议的Web3.0区块链技术&#xff0c;也不必说诸如微信支付、支付宝支付等人们几乎每天都要使用的线上支付业务&#xff0c;单是一个简简单单的注册/登录功能&#xff0c;也和加密技术脱不了干系&#xff0c;本次我们耙梳各种经典的加密算法&…

uniapp 原生安卓开发插件(module),以及android环境本地调试(二)

uniapp 原生安卓开发插件&#xff08;module&#xff09;&#xff0c;以及android环境本地调试&#xff08;一&#xff09; 1、前景 承接上一篇文章&#xff0c;由于uniapp每天只有限定的打包次数&#xff0c;所以每次插件调试都打包成为基座&#xff0c;这个不太方便&#x…

Java的Annotation接口

PS&#xff1a; 该博客将涉及Google Guice的一些知识&#xff0c;但不要惊慌&#xff0c;即使你从未了解过Guice&#xff0c;也能正常阅读该博客 1. 序言 学习Java注解时&#xff0c;曾提到&#xff1a;所有的注解都将继承java.lang.annotation.Annotation接口&#xff0c;无法…

Android自动化测试(UiAutomator)——UiObject

本文主要讲解使用UiAutomator的一些技巧&#xff0c;希望对于初学者有一定的帮助 UiObject 1、首先要声明对象 UiObject XXX new UiObject(new Selector) ; 2、其次对对象进行操作 操作类型包括&#xff1a; 执行类&#xff1a;文本输入与清除、点击/长按、拖动/滑动、 …

安装配置RabbitMQ(Win11)

一、安装依赖Erlang打开RabbitMQ官网&#xff1a;https://www.rabbitmq.com/点击Get Started点击Download Installation点击 Chocolatey or Installer点击? Erlang/OTP Version Tree点击win64下载完成后&#xff0c;右击“以管理员身份”安装配置Erlang环境变量 &#xff1a;…

Mybatis的介绍和基本使用

目录 数据库操作框架的历程 JDBC Hibernate JDBCTemplate 什么是Mybatis 快速搭建Mybatis项目 创建普通的maven项目 导入相关的依赖 创建对应的数据表 创建与表对应的实体类对象 创建对应的Mapper接口 编写配置文件 编写测试类 增删改查的基本操作 数据库操作框…

Java线程的6 种状态

Java 线程的状态 Java线程有六种状态&#xff1a; 初始&#xff08;NEW&#xff09;、运行&#xff08;RUNNABLE&#xff09;、阻塞&#xff08;BLOCKED&#xff09;、 等待&#xff08;WAITING&#xff09;、超时等待&#xff08;TIMED_WAITING&#xff09;、终止&#xff08…

vue-router 的基本用法

vue-router 的基本用法 1.什么是 vue-router vue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用&#xff0c;能够轻松的管理 SPA 项目中组件的切换。 vue-router 的官方文档地址&#xff1a;https://router.vuejs.org/zh/ 2.vue-router 安装和配置的…

MacBook IDEA 顶部菜单栏不显示问题

文章目录背景&#xff1a;当前显示方式一1. 快捷键&#xff1a;双击shift 搜索 idea.vmoptions3. 在idea.vmoptions文件末尾添加 -Dapple.laf.useScreenMenuBarfalse方式二1. 访达 > 应用程序 > idea 右键 显示包内容2. 进入到bin包位置的命令终端3. 编辑文件 vi idea.pr…

EasyExcel 低内存导出大数据量的Excel方案探索 50万行 50列 (附:实现代码)

文章目录1.前言2.准备工作3.导出测试3.1.单次查询、全量导出3.2. 多次查询&#xff0c;多个文件&#xff0c;单次写入3.3.多次查询&#xff0c;多个文件&#xff0c;多次写入3.4.多线程导出探索3.5.文件打包成ZIP3.6.响应给客户4.实现代码5.结语1.前言 最近接到一个需求&#…

多元化增长引擎业务占比超四成,联想开启混动模式?

一句话概括联想集团的业绩&#xff1a;预料之内的整体下滑&#xff0c;超出预期的第二曲线。 上周五&#xff08;2月17日&#xff09;&#xff0c;联想集团发布了2022到2023财年第三季度业绩。根据财报&#xff0c;联想集团实现营收152.67亿美元&#xff0c;同比下降24%&#…

【机器学习】决策树-Gini指数

1. CART树 分类回归树(CART,Classification And Regression Tree)算法是一种决策树分类方法。CART每一个节点上都采用二分法&#xff0c;采用一种二分递归分割的技术&#xff0c;CART生成的树必须是二叉树&#xff0c;也就是无论回归还是分类&#xff0c;无论特征离散还是连续&…

15-基础加强3-单元测试日志

文章目录1.单元测试1.1概述【理解】1.2特点【理解】1.3使用步骤【应用】1.4相关注解【应用】2.日志2.1概述【理解】2.2日志体系结构和Log4J【理解】2.3入门案例【应用】1.单元测试 1.1概述【理解】 JUnit是一个 Java 编程语言的单元测试工具。JUnit 是一个非常重要的测试工具…

Profinet转ModbusTCP网关连接昆仑通态触摸屏配置案例

本案例是模拟将Modbus TCP 设备数据接入到西门子PROFINET 网络中。 使用设备为西门子 S7-1500 型 PLC, Profinet转ModbusTCP网关。MODBUS 从站昆仑通态触摸屏。 配置方法&#xff1a; 打开博图&#xff0c;新建项目并添加站点。 添加1513PLC。 设置好IP并处于联网状态 导入Pr…

VTK学习笔记(四十)vtk提取单层数据

VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据1. VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据1.1 vtkImageReslice提取单层图像1.2 vtkExtractVOI提取单层图像1. VTK学习笔记&#xff08;四十&#xff09;vtk提取单层数据 VTK实现单层图片的提取方法有…

力扣mysql刷题记录

mysql刷题记录 刷题链接https://leetcode.cn/study-plan/sql/?progressjkih0qc mysql冲&#xff01;mysql刷题记录一. 1699. 两人之间的通话次数题解二、1251. 平均售价题解三. 1571. 仓库经理题解四.1445. 苹果和桔子解五.1193. 每月交易 I题解六.1633. 各赛事的用户注册率题…