当前位置: 首页 > news >正文

33 基于单片机的智能窗帘控制系统

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,采用DHT11温湿度传感器检测温湿度,滑动变阻器连接ADC0832数模转换器转换模拟,光敏传感器,采用GP2D12红外传感器,通过LCD1602显示屏显示各项参数,如果红外检测有人靠近,则电机顺时针转动片刻打开窗帘,人离开;如果温湿度超过阈值,则电机转动片刻打开窗帘,用按键替代语音模块,控制窗帘的打开关闭;一个模式切换按键用来切换手动/自动模式,手动模式下,两个按键负责窗帘的开关;自动模式下,则是靠红外,语音,温湿度来控制窗帘打开.并且串口可以远程操控控制窗帘的打开和关闭

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

编辑

三、程序编程

#include <REGX52.H>#include <intrins.h>#include <stdio.h>#include "oled.h"#define uchar unsigned char#define uint unsigned  intsbit CS=P1^0;                 //adc0832引脚sbit CLK=P1^1;
sbit DIO=P1^2;
sbit CS1=P1^3;                 //adc0832引脚sbit CLK1=P1^4;
sbit DIO1=P1^5;
sbit Temp_data=P2^6;  //DHT11sbit out1=P3^6;
sbit out2=P3^7;
sbit key1=P1^6;
sbit key2=P1^7;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;unsigned char rec\_dat\_lcd0\[6\];unsigned char rec\_dat\_lcd1\[6\];unsigned char rec\_dat\_lcd2\[6\];unsigned char rec\_dat\_lcd3\[6\];unsigned int rec\_dat\[4\];static uchar u,U;      //定义变量static flagpeople=0,flagwd=0,flagsd=0,flaggz=0;static uchar wd,sd;static int wdyz=37,sdyz=80,gzyz=100;static int flag=0;static char Dat\_rxd;static int flag1 = 0;static int num=0;static int flag2 = 0;void DHT11\_delay\_us(unsigned char n);void DHT11\_delay\_ms(unsigned int z);void DHT11\_start();unsigned char DHT11\_rec\_byte();void DHT11\_receive();void beep_warning();void cshq();void xxpxs();void ajjc();void ckjs();void Delay(unsigned int xms){	unsigned char i, j;	while(xms--){i = 2;j = 239;		do{			while (--j);} while (--i);}
}//延时msvoid DHT11\_delay\_ms(unsigned int z){    unsigned int i,j;    for(i=z; i>0; i--)        for(j=110; j>0; j--);
}//延时us   --2*n+5usvoid DHT11\_delay\_us(unsigned char n){    while(--n);
}//DHT11起始信号void DHT11_start(){Temp\_data=1;    DHT11\_delay_us(10);Temp\_data=0;    DHT11\_delay_ms(50);//这个延时不能过短,18ms以上,实际在仿真当中要想读到数据延时要在延时参数要在40以上才能出数据Temp\_data=1;    DHT11\_delay\_us(30);//这个延时不能过短}//接收一个字节unsigned char DHT11\_rec_byte(){    unsigned char i,dat=0;    for(i=0; i<8; i++){        while(!Temp\_data);        DHT11\_delay_us(8);dat <<=1;        if(Temp_data==1){dat +=1;}        while(Temp_data);}    return dat;
}//接收温湿度数据void DHT11\_receive(){    unsigned int R\_H,R\_L,T\_H,T\_L;    unsigned char RH,RL,TH,TL,revise;    DHT11\_start();Temp\_data=1;    if(Temp\_data==0){        while(Temp_data==0);   //等待拉高DHT11\_delay\_us(40);  //拉高后延时80usR\_H=DHT11\_rec_byte();    //接收湿度高八位R\_L=DHT11\_rec_byte();    //接收湿度低八位T\_H=DHT11\_rec_byte();    //接收温度高八位T\_L=DHT11\_rec_byte();    //接收温度低八位revise=DHT11\_rec\_byte(); //接收校正位DHT11\_delay\_us(25);    //结束if((R\_H+R\_L+T\_H+T\_L)==revise)      //校正{RH=R_H;RL=R_L;TH=T_H;TL=T_L;}        /*数据处理,方便显示*/rec_dat\[0\]=RH;rec_dat\[1\]=RL;rec_dat\[2\]=TH;rec_dat\[3\]=TL;}}void dht11(){	      DHT11\_delay\_ms(150);        DHT11\_receive();	      sprintf(rec\_dat\_lcd0,"%d",rec\_dat\[0\]);        sprintf(rec\_dat\_lcd1,"%d",rec\_dat\[1\]);        sprintf(rec\_dat\_lcd2,"%d",rec\_dat\[2\]);        sprintf(rec\_dat\_lcd3,"%d",rec\_dat\[3\]);        DHT11\_delay_ms(100);wd = rec\_dat\[3\]*10 + rec\_dat\[2\];sd = rec\_dat\[1\]*10 + rec\_dat\[0\];}uchar get\_AD\_Res()            //ADC0832启动读取函数{uchar i, data1=0, data2=0;CS=0;CLK=0;DIO=1;\_nop\_();CLK=1;\_nop\_();CLK=0;DIO=1;\_nop\_(); CLK=1;\_nop\_();CLK=0;DIO=0;\_nop\_();CLK=1;\_nop\_();CLK=0;DIO=1;\_nop\_(); for(i=0; i<8; i++){CLK=1;\_nop\_();CLK=0;\_nop\_();data1=(data1<<1)|(uchar)DIO; }	for(i=0; i<8; i++){data2=data2|(uchar)DIO<<i;CLK=1;\_nop\_();CLK=0;\_nop\_();}CS=1;	return(data1 == data2)?data1:0;
}uchar get\_AD\_Res1()            //ADC0832启动读取函数{uchar i, data1=0, data2=0;CS1=0;CLK1=0;DIO1=1;\_nop\_();CLK1=1;\_nop\_();CLK1=0;DIO1=1;\_nop\_(); CLK1=1;\_nop\_();CLK1=0;DIO1=0;\_nop\_();CLK1=1;\_nop\_();CLK1=0;DIO1=1;\_nop\_(); for(i=0; i<8; i++){CLK1=1;\_nop\_();CLK1=0;\_nop\_();data1=(data1<<1)|(uchar)DIO1; }	for(i=0; i<8; i++){data2=data2|(uchar)DIO1<<i;CLK1=1;\_nop\_();CLK1=0;\_nop\_();}CS1=1;	return(data1 == data2)?data1:0;
}void beep_warning()//蜂鸣器警报并且电机转动{ if(U<100){	 OLED_ShowCHinese(48,6,6);//有OLED_ShowCHinese(64,6,7);//人} else{	 OLED_ShowCHinese(48,6,8);//无OLED_ShowCHinese(64,6,7);//人}  if(flag == 0)  //自动模式{ if(flagpeople == 0) //可以判断有人{	if(U<100) //有人{out1 = 1;out2 = 0;	 Delay(1000);out1 = 0;flagpeople = 1;}} if(U>=100){flagpeople = 0;}	if(flagwd == 0){ if(wd>wdyz){out1 = 1;out2 = 0;	 Delay(1000);out1 = 0;flagwd = 1;}} if(wd<=wdyz){flagwd = 0;} if(flagsd == 0){  if(sd>sdyz){out1 = 1;out2 = 0;	 Delay(1000);out1 = 0;flagsd = 1;}} if(sd<=sdyz){flagsd = 0;} if(flaggz == 0){  if(u>gzyz){out1 = 1;out2 = 0;	 Delay(1000);out1 = 0;flaggz = 1;}}	if(u<=gzyz){flaggz = 0;}}}void main()					  //主函数{	out1 = 0;out2 = 0;		OLED_Init();			//初始化OLED  OLED_Clear(); OLED_ShowCHinese(0,0,0);//温	横坐标11, 纵坐标0,第0个汉字OLED_ShowCHinese(16,0,1);//度OLED_ShowCHinese(0,2,4);//湿OLED_ShowCHinese(16,2,5);//度OLED_ShowCHinese(0,4,2);//光OLED_ShowCHinese(16,4,3);//照while(1){	cshq();  //参数获取dht11(); //温湿度获取ajjc();   //按键检测xxpxs();  //显示屏显示beep_warning();    //状态判断if(flag2==0){		OLED_ShowCHinese(0,6,9);//自OLED_ShowCHinese(16,6,10);//动}		else{			OLED_ShowCHinese(0,6,11);//手OLED_ShowCHinese(16,6,10);//动}}
}void ajjc()  //按键检测{	if(flag == 0){	if(!key1)  //打开{out1 = 1;out2 = 0;	  Delay(1000);out1 = 0;		while(!key1);}	if(!key2)  //关闭{out1 = 0;out2 = 1;	  Delay(1000);out2 = 0;		while(!key2);}}	if(!key3)  //切换{flag++;flag2++;		if(flag > 1){flag = 0;}		if(flag2>1){flag2 = 0;}		while(!key3);}	if(flag==1) //手动	{	if(!key4)  //打开{out1 = 1;out2 = 0;	  Delay(1000);out1 = 0;		while(!key4);}	if(!key5)  //关闭{out1 = 0;out2 = 1;	  Delay(1000);out2 = 0;		while(!key5);}}
}void xxpxs()  //显示屏显示{	OLED_ShowNum(32,0,wd,2,16);//温度OLED_ShowNum(32,2,sd,2,16);//湿度OLED_ShowNum(32,4,u,3,16);//光强}void cshq()  //参数获取{u=get\_AD\_Res();	U=get\_AD\_Res1();	//红外}

四、实现现象

具体动态效果看B站演示视频:
B站演示视频

32-基于单片机的智能窗帘控制系统

全部资料(源程序、仿真文件、安装包、演示视频):

百度网盘资料下载https://pan.baidu.com/s/1BqLxyhSoRrfVfWj1RaY1cg?pwd=fv3a

相关文章:

33 基于单片机的智能窗帘控制系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DHT11温湿度传感器检测温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器转换模拟,光敏传感器&#xff0c;采用GP2D12红外传感器&#xff0c;通过LCD1602显示屏显示…...

【CSS in Depth 2 精译_063】10.2 深入理解 CSS 容器查询中的容器

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 【第十章 CSS 容器查询】 ✔️ 10.1 容器查询的一个简单示例 10.1.1 容器尺寸查询的用法 10.2 深入理解容器 ✔️ 10.2.1 容器的类型 ✔️10.2.2 容器的名称 ✔️10.2.3 容器与模块化 CSS ✔️ 10.3…...

记录一次 k8s 节点内存不足的排查过程

背景&#xff1a;前端服务一直报404&#xff0c;查看k8s日志&#xff0c;没发现报错&#xff0c;但是发现pods多次重启。 排查过程&#xff1a; 查看pods日志&#xff0c;发现日志进不去。 kubectrl logs -f -n weave pod-name --tail 100查看pod describe kubectl describ…...

探索天空中的“名字”——用Landsat影像记录你的名字形状!

大家好&#xff01;今天我发现了一个特别有趣的工具——NASA官网上有一个功能&#xff0c;允许你输入自己的名字&#xff0c;然后它会根据Landsat卫星影像显示出与你名字形状相符的地形图。是不是很酷&#xff1f;&#x1f389; &#x1f30d; Landsat影像的神奇之处Landsat是N…...

QT6学习第四天 感受QT的文件编译

QT6学习第四天 感受QT的文件编译 使用纯代码编写程序新建工程 使用其他编辑器纯代码编写程序并在命令行运行使用 .ui 表单文件生成界面使用自定义 C 窗口类使用现成的QT Designer界面类 使用纯代码编写程序 我们知道QT Creator中可以用拖拽的方式在 .ui 文件上布局&#xff0c…...

透视投影(Perspective projection)与等距圆柱投影(Equirectangular projection)

一、透视投影 1.方法概述 Perspective projection&#xff08;透视投影&#xff09;是一种模拟人眼观察三维空间物体时的视觉效果的投影方法。它通过模拟观察者从一个特定视点观察三维场景的方式来创建二维图像。在透视投影中&#xff0c;远处的物体看起来比近处的物体小&…...

5 Java字符串操作

字符串操作 1、String类1.1 声明字符串1.2 创建字符串 1.3 字符串连接 /连接字符串连接其他数据类型 1.4 提取字符串信息获取字符串长度length()获取指定位置的字符 charAt()获取子字符串索引位置 indexOf()判断字符串首尾内容 startsWith()/endsWith()获取字符数组 toCharArra…...

【C++习题】17.二分查找算法_二分查找

文章目录 二分查找算法简介题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解总结朴素二分模板 二分查找算法简介 特点&#xff1a; 二分查找算法&#xff0c;是最恶心&#xff0c;细节最多&#xff0c;最容易写出死循环的算法。&#xff08;而且非常难…...

Spring Boot英语知识网站:架构与开发

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

Unity ShaderLab 实现网格爆炸

实现思路&#xff1a; 沿着3D物体每个面的法线&#xff0c;将面偏移一定的位置。 Shader Graph实现如下&#xff1a; Shader Lab 实现如下&#xff1a; Shader "Unlit/MeshExplode" {Properties{_MainTex ("Texture", 2D) "white" {}_Distan…...

2024/11/28学习日志

为了更好地记录并反思自己的学习状况&#xff0c;将每日学习的内容、时长、心得等记录于此日志。 于9月3日开始记录&#xff0c;计划每日记录&#xff0c;希望至少能够坚持一个学期。 学习内容&#xff1a; 数据结构&#xff1a; 拓扑排序。关键路径。 马原&#xff1a; 马…...

在shardingsphere执行存储过程

环境&#xff1a; springboot&#xff1a;2.5.2 数据库&#xff1a;Kingbase金仓V8R6 依赖&#xff1a; <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId></depende…...

1.文件目录操作

目录 &#x1f34c; ls - 列出目录内容 &#x1f349;cp - 复制文件或目录 &#x1f347;mv - 移动或重命名文件 &#x1f353; cd - 切换目录 &#x1f348; pwd - 打印工作目录 &#x1f352;mkdir - 创建目录 &#x1f351; rmdir - 删除空目录 &#x1f96d; touc…...

Vue单页面应用和多页面应用

在 Vue.js 中&#xff0c;“单页面”&#xff08;SPA&#xff0c;Single Page Application&#xff09;和"多页面"&#xff08;MPA&#xff0c;Multi Page Application&#xff09;是两种不同的应用结构&#xff0c;它们的差异主要体现在页面的加载方式、路由的使用、…...

Lombok :简化 Java 编程的得力工具

在 Java 开发过程中&#xff0c;常常需要编写大量的样板代码&#xff0c;例如构造函数、Getter 和 Setter 方法、equals 和 hashCode 方法等。这些代码虽然逻辑相对固定&#xff0c;但编写起来却较为繁琐且容易出错&#xff0c;并且会使代码显得冗长。Lombok 应运而生&#xff…...

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC&#xff08;Artificial Intellige…...

DBA面试题-1

面临失业&#xff0c;整理一下面试题&#xff0c;找下家继续搬砖 主要参考&#xff1a;https://www.csdn.net/?spm1001.2101.3001.4476 略有修改 一、mysql有哪些数据类型 1&#xff0c; 整形 tinyint,smallint,medumint,int,bigint&#xff1b;分别占用1字节、2字节、3字节…...

用go语言写一个小服务

文章目录 简介重新想到go 小服务main.go部署测试 结束语 简介 golang的优势 响应速度&#xff1a; Go > Java > Python 内存占用&#xff1a; Go < Java < Python 从java转go&#xff0c;然后go又转java&#xff0c;感觉就是go虽然在编译、内存占用都强于java&am…...

亚马逊开发视频人工智能模型,The Information 报道

根据《The Information》周三的报道&#xff0c;电子商务巨头亚马逊&#xff08;AMZN&#xff09;已开发出一种新的生成式人工智能&#xff08;AI&#xff09;&#xff0c;不仅能处理文本&#xff0c;还能处理图片和视频&#xff0c;从而减少对人工智能初创公司Anthropic的依赖…...

WordCloud参数的用法:

-------------词云图集合------------- 用WordcloudPyQt5写个词云图生成器1.0 WordCloud去掉停用词&#xff08;fit_wordsgenerate&#xff09;的2种用法 通过词频来绘制词云图&#xff08;jiebaWordCloud&#xff09; Python教程95&#xff1a;去掉停用词词频统计jieba.toke…...

【独家首发】Loom+Reactor双引擎协同性能白皮书:基于200万RPS压测的ThreadPerTaskExecutor替代方案(含JFR火焰图对比)

第一章&#xff1a;Java 项目 Loom 响应式编程转型指南Project Loom 与响应式编程并非互斥范式&#xff0c;而是可协同演进的技术路径。Loom 的虚拟线程&#xff08;Virtual Threads&#xff09;为传统阻塞式 I/O 密集型响应式应用&#xff08;如基于 Reactor 或 RxJava 的服务…...

一键部署清音听真:Qwen3-ASR-1.7B高精度语音识别系统开箱即用

一键部署清音听真&#xff1a;Qwen3-ASR-1.7B高精度语音识别系统开箱即用 1. 语音识别技术的新突破 在数字化办公日益普及的今天&#xff0c;语音识别技术已成为提升工作效率的重要工具。然而&#xff0c;传统语音识别系统在面对复杂场景时往往捉襟见肘——背景噪音、专业术语…...

终极TypeORM实战指南:从零到精通的完整TypeScript ORM培训方案

终极TypeORM实战指南&#xff1a;从零到精通的完整TypeScript ORM培训方案 【免费下载链接】typeorm TypeScript & JavaScript ORM for Node.js — supports PostgreSQL, MySQL, MariaDB, SQLite, SQL Server, Oracle, and more. 项目地址: https://gitcode.com/GitHub_T…...

颠覆传统:March7thAssistant让崩坏星穹铁道自动化游戏体验提升10倍

颠覆传统&#xff1a;March7thAssistant让崩坏星穹铁道自动化游戏体验提升10倍 【免费下载链接】March7thAssistant 崩坏&#xff1a;星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant March7thAssistant&#xff08;三月七…...

Dell R730xd老将焕新记:保姆级教程搞定ESXi 8.0u3d,附网卡驱动避坑指南

Dell R730xd服务器升级ESXi 8.0u3d全流程实战指南 当企业IT基础设施进入更新周期&#xff0c;许多运维团队都会面临一个现实问题&#xff1a;那些曾经稳定服役多年的服务器硬件&#xff0c;是否还能适配最新的虚拟化平台&#xff1f;以Dell PowerEdge R730xd这款经典2U服务器为…...

仅限首批200名AI基础设施工程师:Cuvil 2024Q3内部编译诊断工具集(含AST可视化插件与算子融合热力图)

第一章&#xff1a;Cuvil编译器在Python AI推理中的定位与价值Cuvil编译器是一个面向AI推理场景的轻量级、Python原生友好的编译框架&#xff0c;专为优化动态图模型&#xff08;如PyTorch TorchScript子集、ONNX子图及自定义算子图&#xff09;在CPU/GPU边缘设备上的执行效率而…...

GLM-OCR模型开箱即用体验:CSDN星图GPU平台一键部署

GLM-OCR模型开箱即用体验&#xff1a;CSDN星图GPU平台一键部署 最近在做一个需要批量处理图片文字识别的项目&#xff0c;传统的手动部署OCR模型&#xff0c;光是配环境、装依赖、解决版本冲突就能耗掉大半天&#xff0c;更别提还得自己搞定GPU驱动和显存分配了。正当我为此头…...

PowerPaint-V1 Gradio在文化遗产保护中的应用:古画修复与数字化

PowerPaint-V1 Gradio在文化遗产保护中的应用&#xff1a;古画修复与数字化 1. 引言 一幅珍贵的古代山水画&#xff0c;因为年代久远出现了多处破损和褪色&#xff1b;一张历史照片&#xff0c;因为保存不当而出现了霉斑和裂纹。这些文化遗产的损坏&#xff0c;往往意味着一段…...

Linux操作系统-系统安装与三种网络模式

本文将指导您在VMware Workstation 16 Pro环境下安装CentOS 7系统&#xff0c;详细介绍从创建虚拟机到完成操作系统安装的完整步骤。一、创建虚拟机1.点击“文件”菜单&#xff0c;选择“创建虚拟机”&#xff0c;然后点击“自定义”开始创建虚拟机。2.点击"浏览"按钮…...

一些算法题的反思总结

1.技巧总结有序———想二分连续———①滑动窗口② DP&#xff08;dp[i]表示以i结尾的xxxxx&#xff09;③前缀和&#xff0c;f(ij)-f(i)重复——哈希/Counter/defaultdict子问题——1️⃣递归&#xff0c;先定义结束如何退出&#xff0c;再考虑当前值怎么做2️⃣动态规划&…...