STM32项目分享:智能窗帘系统

news2025/6/8 22:39:07

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1vC411z7hY/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32智能窗帘系统。功能如下:

  1. 光强采集:光敏电阻实时采集环境光强度数据
  2. 温湿度采集:DHT11温湿度传感器采集环境温湿度
  3. 危险气体监测:MQ-7判断危险气体是否超标(超标板子指示灯闪烁)
  4. 窗帘控制:步进电机模拟窗帘驱动开闭
  5. OLED显示:当前时间,温湿度数据,模式信息
  6. 实时时钟:DS1302时钟模块读取记录当前时间
  7. 蓝牙APP控制:手机端蓝牙app远程遥控窗帘
  8. 控制模式:JR6001语音模块驱动扬声器播报提示音
  9. 控制模式:支持四种窗帘控制模式:自动模式、手动模式、定时模式和遥控模块,可按键切换

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(4针I2C协议)
  • 光敏电阻
  • DHT11温湿度传感器
  • MQ-7一氧化碳传感器
  • 28BYJ51步进电机
  • ULN2003步进电机驱动芯片
  • 蓝牙模块(BT04-A)
  • JR6001串口语音模块
  • 扬声器

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板打样焊接图

五、程序设计 

int main(void)
{	
    u16 ii=0;
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart_init(9600);          //语音模块串口初始化
	usart3_init(9600);                 //蓝牙使用
	DHT11_Init();              
	Adc_Init();
	Moto_Init();
	ds1302_gpio_init();	
	ds1032_init();						//时间设置
    ds1032_read_realTime();   //读取实时数据 
	KEY_Init();
    MQ_Init();
    LED_Init();
	OLED_Init();                                  //屏幕初始化
    TIM3_Int_Init(719,7199); 
	printf("AF:30");//声音调到31档   最大
	delay_ms(100);
    delay_ms(1000);
	printf("A7:00003");//欢迎使用
	delay_ms(1000);
	OLED_CLS();
    while(1)
    {
        if(Flag_caidan==1)//自动模式
        {
			delay_ms(500);
			Flag_adc=Get_Adc_Average(0,10);
			delay_ms(500);         
            if(Flag_adc>1000&&Flag_dakai==0)
            {
                printf("A7:00001");//打开
                TIM_Cmd(TIM3,DISABLE); 
                for(ii=0;ii<Num_i;ii++)
                {
                    Motorcw_angle(1,3);		
                    MotorStop(); 
                }
                TIM_Cmd(TIM3, ENABLE); 
                Flag_dakai=1;
                dakai=1;
            }
            if(Flag_adc<1000&&Flag_dakai==1)
            {
                printf("A7:00002");//关闭
                TIM_Cmd(TIM3,DISABLE); 
                for(ii=0;ii<Num_i;ii++)
                {
                    Motorccw_angle(1,3);		
                    MotorStop(); 
                } 
                TIM_Cmd(TIM3, ENABLE); 
                Flag_dakai=0;
                dakai=0;
		    }
            if(MQ==0)
            {
                LED0 = !LED0;
                delay_ms(100);
                LED0 = !LED0;
                delay_ms(100);
            }
        }
        if(Flag_caidan==2)//手动模式
        {
            if(dakai==1&&Flag_dakai==0)
              {
                  printf("A7:00006");//打开
                  TIM_Cmd(TIM3,DISABLE); 
                  for(ii=0;ii<Num_i;ii++)
                  {
                      Motorcw_angle(1,3);		
                      MotorStop(); 
                  }
				  TIM_Cmd(TIM3, ENABLE); 
                    Flag_dakai=1;
              }
              if(dakai==0&&Flag_dakai==1)
              {
                printf("A7:00007");//关闭
                TIM_Cmd(TIM3,DISABLE); 
                for(ii=0;ii<Num_i;ii++)
                {
                  Motorccw_angle(1,3);		
                  MotorStop(); 
                }
				TIM_Cmd(TIM3, ENABLE); 
            Flag_dakai=0;
              }
            }
		    if(Flag_caidan==3)//定时模式
		    {
			    if(TimeRAM.kai==1&&Flag_dakai==0)
			    {				                            
                 if(TimeRAM.hour_kai==TimeData.hour&&TimeRAM.minute_kai==TimeData.minute)
				    {
					    printf("A7:00006");//打开
					    TIM_Cmd(TIM3,DISABLE); 
					    for(ii=0;ii<Num_i;ii++)
					    {
						    Motorcw_angle(1,3);		
						    MotorStop(); 
					    }
					    TIM_Cmd(TIM3, ENABLE); 
					    Flag_dakai=1;
				    }
			    }
			    if(TimeRAM.guan==1&&Flag_dakai==1)
			    {			           
               if(TimeRAM.hour_guan==TimeData.hour&&TimeRAM.minute_guan==TimeData.minute)
                {
					printf("A7:00007");//关闭
					TIM_Cmd(TIM3,DISABLE); 
					for(ii=0;ii<Num_i;ii++)
					{
						Motorccw_angle(1,3);		
						MotorStop(); 
					}
					TIM_Cmd(TIM3, ENABLE); 
					Flag_dakai=0;
				}
            }
		}
		if(Flag_caidan==4)//遥控模式
		{
		    if(dakai==1&&Flag_dakai==0)
            {
                printf("A7:00006");//打开
                TIM_Cmd(TIM3,DISABLE);
				ii=0;
                for(ii=0;ii<Num_i;ii++)
                {
                    Motorcw_angle(1,3);		
                    MotorStop(); 
                }
				TIM_Cmd(TIM3, ENABLE); 
                Flag_dakai=1;
            }
            if(dakai==0&&Flag_dakai==1)
            {
                printf("A7:00007");//关闭
                TIM_Cmd(TIM3,DISABLE); 
                for(ii=0;ii<Num_i;ii++)
                {
                    Motorccw_angle(1,3);		
                    MotorStop(); 
                }
				TIM_Cmd(TIM3, ENABLE); 
                Flag_dakai=0;
            }	
		}
    }
}

六、实验效果 

七、资料内容

项目分享

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络超时

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在访问一个网页时&#xff0c;如果该网页长时间未响应&#xff0c;系统就会判断该网页超时&#xff0c;所以无法打开网页。下面通过代码来模拟一个网…

【MySQL】索引(上)

https://www.wolai.com/curry00/fzTPy3kSsMDEgEcdvo4G5w https://www.bilibili.com/video/BV1Kr4y1i7ru/?p69 https://jimhackking.github.io/%E8%BF%90%E7%BB%B4/MySQL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/#%E7%B4%A2%E5%BC%95 索引是一种用于快速查询和检索数据的数据结构…

知识表示与处理实验3-知识获取方法

✅作业要求&#xff1a;--------高分通过&#x1f389; 作业练习目标:以临床病历数据为来源&#xff0c;人机协同标注一定量标准数据集&#xff0c;研发基于机器学习的命名实体抽取等非结构化知识获取方法。 作业形式:提交代码及实验报告&#xff0c;实验报告以Word或者PDE形式…

基于Python+Django+MySQL+HTML的创新创业平台

DjangoMySQLHTML 基于PythonDjangoMySQLHTML的创新创业平台 用户管理 系统监控 角色管理 资源管理 参数设置 角色管理 简介 学生创新创业平台是一个功能丰富的在线教育或协作系统&#xff0c;支持中文语言环境。它提供用户管理、系统监控、多角色权限控制、资源管理、参…

Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

c++使用nlohmann读取json文件

下载&#xff1a; GitHub - nlohmann/json: JSON for Modern C 解压&#xff1a; 包含头文件&#xff1a; 要包含的头文件和要使用的命名空间&#xff1a; #include <nlohmann/json.hpp>using json nlohmann::json; 测试文件&#xff1a; 代码&#xff1a; #include…

等待 chrome.storage.local.get() 完成

chrome.storage.local.get() 获取存储处理并计数&#xff0c;内部计数正常&#xff0c;外部使用始终为0&#xff0c;百思不得其解。 如何在继续执行之前等待异步chrome.storage.local.get()完成-腾讯云开发者社区-腾讯云 (tencent.com) 原来我忽略了异步问题&#xff0c;最简…

通勤路上的美好伴侣:倍思H1s头戴式蓝牙耳机

在繁忙的都市生活中,通勤往往占据了人们大量的时间。而在这个过程中,无尽的嘈杂声——公交车的播报声、地铁的轰鸣声、街头的喧嚣——往往成为我们心情的干扰源。在这样的环境下,一款优质的头戴式蓝牙耳机,会让我们的通勤之旅变得更加愉快和舒适。 通勤路上要更舒适—— 倍思…

显示类控件——Label

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、Label介绍属性代码示例: 显示不同格式的文本代码示例: 显示图片代码示例: 文本对齐, 自动换行…

在Kubernetes中部署Elasticsearch高可用集群详细教程

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

【Pycharm】设置双击打开文件

概要 习惯真可怕。很多小伙伴用习惯了VsCode开发&#xff0c;或者其他一些开发工具&#xff0c;然后某些开发工具是单击目录文件就能打开预览的&#xff0c;而换到pycharm后&#xff0c;发现目录是双击才能打开预览&#xff0c;那么这个用起来就特别不习惯。 解决办法 只需一…

数智教育创新如何向未来?腾讯云与你探索革新之路

引言 随着科技革命的快速发展&#xff0c;掀起教育领域的变革&#xff0c;新理念、新技术、新模式、新应用正不断涌现&#xff0c;正塑造着教育的未来形态。未来科技还将如何赋能教育创新&#xff1f; 5月31日&#xff0c;由腾讯云TVP 与西安电子科技大学联合举办的「数智教育的…

智慧场馆:绝对是科技+建筑的完美盛宴,有图有真相。

2024-01-03 14:34贝格前端工场 去年的亚运会&#xff0c;让大家体验了一把建筑科技&#xff0c;现在这个依然成了新趋势&#xff0c;贝格前端工场借此描述下场馆和科技的紧密联络&#xff0c;以及智慧场馆的应用场景。 智慧场馆是指通过科技手段将传统场馆进行升级改造&#…

扩展欧几里得算法——AcWing.877扩展欧几里得算法

扩展欧几里得算法 定义 扩展欧几里得算法是用来在已知整数 a、b 的情况下&#xff0c;求解一组整数 x、y 使得 ax by gcd(a, b)&#xff08;gcd 表示最大公约数&#xff09;。 运用情况 求解线性同余方程。在密码学等领域有广泛应用。 注意事项 要注意边界情况和特殊值…

LabVIEW软件开发任务的工作量估算方法

在开发LabVIEW软件时&#xff0c;如何准确估算软件开发任务的工作量。通过需求分析、功能分解、复杂度评估和资源配置等步骤&#xff0c;结合常见的估算方法&#xff0c;如专家判断法、类比估算法和参数估算法&#xff0c;确保项目按时按质完成&#xff0c;提供项目管理和资源分…

理解Es的DSL语法(一):查询

目录 DSL相关联的基本概念 ElasticSearch的字段类型 ElasticSearch的查询类型 DSL语法 query 普通查询 布尔查询 字符串构建查询 _source from和size sort 关于sort和查询的相关性评分 关于sort的性能 DSL相关联的基本概念 Es的DSL并不是独立的知识点&#xff…

深入理解计算机系统 家庭作业6.35

第一步先求(S,E,B,m) 题目说共C128个字节,块大小B为16个字节,那就是分为八组:0,1,2,3,4,5,6,7.然后每组存4个int 每个4字节 CB*E*S .B16 ,直接映射的E就是1,所以S8 (S,E,B,m)(8,1,16,7) C128M128s3b4t0 sizeof(int)0100地址(二进制)COCIsrc[0][0]00000000000000组0src[0][1…

气膜球幕影院:大众追捧的全新体验—轻空间

近年来&#xff0c;气膜球幕影院因其独特的观影体验和灵活的应用&#xff0c;受到了广大观众的热烈欢迎。轻空间带您来探讨一下气膜球幕影院为何如此受欢迎。 沉浸式体验的吸引力 气膜球幕影院的360度全景沉浸式体验&#xff0c;让观众仿佛置身于影片的世界中。这种前所未有的观…

【计算机视觉】人脸算法之图像处理基础知识(一)

图像处理基础知识&#xff08;一&#xff09; 1.图像的构成 图像的构成可以包括以下几方面知识&#xff1a; 1.像素&#xff1a;图像的基本单位&#xff0c;是图像中的一个点。每个像素都有特定的位置和色彩值。在数字图像中&#xff0c;像素的颜色通常由红、绿、蓝&#xf…

cocos creator如何使用cryptojs加解密(及引入方法)

cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 如果想转请评论留个言并注明原博 Sclifftop 13805064305 阿浚 cocos creator如何使用cryptojs加解密&#xff08;及引入方法&#xff09; 步骤 获取库 1. npm install crypto-js -g&#xff0c;加不加…