STM32项目分享:智能台灯系统

2024-06-08 17:52

本文主要是介绍STM32项目分享:智能台灯系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板及元器件图

五、程序设计 

六、实验效果 

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

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

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32智能台灯系统。

功能如下:

  1. 亮度控制:按键控制照明灯的亮度(5挡亮度)
  2. 计时功能:按键启动计时,累计台灯运行时间(作息时间)
  3. OLED显示:显示当前模式、环境光强、超声波距离
  4. 控制模式:通过按键控制照明灯为手动模式/自动模式
  5. 蓝牙APP控制:通过蓝牙APP控制照明灯模式选取、亮度调节、计时等功能
  6. 智能调光:自动模式下根据外界光线变化,LED照明灯自动调节亮度
  7. 人体姿态提醒:超声波距离近于5cm触发蜂鸣器报警,提醒纠正人体姿态

2.主要器件

  • STM32F103C8T6最小系统板
  • OLED显示屏(4针I2C协议)
  • 光敏传感器
  • 大功率LED照明灯模块
  • HC-SR04超声波传感器
  • HC-SR501人体红外传感器
  • 蓝牙模块(BT04-A)
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB板及元器件图

五、程序设计 

int main(void)
{	unsigned char p[16]=" ";u8 datatemp[SIZE];	unsigned int  STEP=0;			//步数临时替换值			_Bool Heart_OK = 0;				//读取到正确心率标志位unsigned char Heart = 0;		//心率值short temperature = 0; 				//温度值STEPS_DIS = 1;delay_init();	    			//延时函数初始化	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);//设置中断优先级分组为组3:2位抢占优先级,2位响应优先级LED_Init();		  				//初始化与控制设备连接的硬件接口OLED_Init();					//OLED初始化delay_ms(50);OLED_CLS();						//清屏OLED_ShowCN(32,2,0);			//万事可期(欢迎使用) OLED_ShowCN(32+16,2,1);OLED_ShowCN(32+32,2,2);OLED_ShowCN(32+32+16,2,3);ADXL345_Init();while(ADXL345_Init())			//3D加速度传感器初始化	{OLED_ShowStr(0,0,"ADXL345 Error",2);delay_ms(200);OLED_ShowStr(0,0,"             ",2);delay_ms(200);}while(DS18B20_Init())	//DS18B20初始化	{OLED_ShowStr(0,0,"DS18B20 Error",2);delay_ms(200);OLED_ShowStr(0,0,"             ",2);	delay_ms(200);}delay_ms(100);while(DS18B20_Get_Temp()==850);	//DS18B20刚上电时候 读取的值是850 这里等待 直到不是850才开始下一步		delay_ms(5000);OLED_CLS();						//清屏Adc_Init();TIM3_Int_Init(1999,71);			//定时2ms中断uart_init(9600);	 			//串口一初始化为9600TIM2_Int_Init(199,7199);		//10Khz的计数频率,计数到500为20ms KEY_Init();						//IO初始化		EXTIX_Init();					//外部中断初始化OLED_CLS();						//清屏 Dis_Init();						STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,SIZE);  //flash中读出步数STEPS = (datatemp[0]-0x30)*10000+(datatemp[1]-0x30)*1000+(datatemp[2]-0x30)*100+(datatemp[3]-0x30)*10+(datatemp[4]-0x30);//读到值转换为步数RTC_Init();//	RTC_Set(2019,8,5,20,43,55);  //设置时间while(1){	if(Timer_Flag==1)					//500ms到 读取数据{Timer_Flag = 0;					//清除标志TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE ); 						//使能指定的TIM3中断,允许更新中断TIM_ITConfig(TIM3,TIM_IT_Update,DISABLE ); 						//使能指定的TIM3中断,允许更新中断		temperature=DS18B20_Get_Temp();	//读取温度TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); 						//使能指定的TIM3中断,允许更新中断TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); 						//使能指定的TIM3中断,允许更新中断TIM_Cmd(TIM2, ENABLE);  		//使能TIMx	if (QS == true)					//读取到了心率信号{			QS = false; 				//清除标志 等待下一次读取if(BPM>HEART_MIN_ERROR&&BPM<HEART_MAX_ERROR)		//读取到的值再正常心率区间 40-160内{Heart_OK = 1;			//标志位置一Heart = BPM;			//心率传递给Heart}else{Heart_OK = 0;			//标志位清零Heart = 0;				//设置为0}	}}if(ADXL345_FLAG==1)					//20ms到?{ADXL345_FLAG = 0;	  			//清除标志位step_counter();	}
//		printf("三轴加速器: %d \r\n",ADXL345_FLAG);	//串口发送出去delay_ms(20);	if(STEP!=STEPS)						//步数发生改变 存储一次{STEP = STEPS;TEXT_Buffer[0]=(u16)STEPS/10000+0x30;TEXT_Buffer[1]=(u16)STEPS%10000/1000+0x30;TEXT_Buffer[2]=(u16)STEPS%10000%1000/100+0x30;TEXT_Buffer[3]=(u16)STEPS%10000%1000%100/10+0x30;TEXT_Buffer[4]=(u16)STEPS%10000%1000%100%10+0x30;STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE);}if(calendar.hour==0&&calendar.min==0&&(calendar.sec==0||calendar.sec==1||calendar.sec==2))		//凌晨00:00:00  清除步数{STEPS = 0;TEXT_Buffer[0]=(u16)STEPS/10000+0x30;TEXT_Buffer[1]=(u16)STEPS%10000/1000+0x30;TEXT_Buffer[2]=(u16)STEPS%10000%1000/100+0x30;TEXT_Buffer[3]=(u16)STEPS%10000%1000%100/10+0x30;TEXT_Buffer[4]=(u16)STEPS%10000%1000%100%10+0x30;STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE);delay_ms(500);}Key_set();							//时间设置if(KEY0==0)							//KEY0切换显示按键{while(KEY0==0);					//等待松开OLED_CLS();						//清屏	if(Dis_mode==0)					//如果上一次是显示心率、步数、体温 的 则显示时间Dis_mode = 1;else 							//如果上一次不是显示心率、步数、体温 的 则心率、步数、体温{Dis_mode = 0;				Dis_Init();					//显示汉字信息}		}if(KEY2==0)	   						//清除步数{while(KEY2==0);STEPS = 0;TEXT_Buffer[0]=(u16)'0';TEXT_Buffer[1]=(u16)'0';TEXT_Buffer[2]=(u16)'0';TEXT_Buffer[3]=(u16)'0';TEXT_Buffer[4]=(u16)'0';STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,SIZE);		//清除后存储一次数据}if(update_flag==1) 					//2S标志到 发送一次数据到手机APP{update_flag = 0;printf("Step:%5d H:%3d T:%4.1f \r\n",STEPS,Heart,(float)temperature/10);	//串口发送出去}switch(Dis_mode){case 0:	  										//显示传感器数据if(STEPS_DIS==1)							//刷新计步{sprintf((char*)p,":%-5d ",STEPS);		//显示步数OLED_ShowStr(32,2,p,2);}sprintf((char*)p,":%4.1f    ",(float)temperature/10);OLED_ShowStr(32,4,p,2);						//显示温度if(Heart_OK==1)								//读取到正确心率{sprintf((char*)p,":%3dr/min",Heart);	//显示心率OLED_ShowStr(32,0,p,2);	}else{sprintf((char*)p,":---r/min");	OLED_ShowStr(32,0,p,2);}break;case 1:											//显示时间 日期等信息RTC_Display();								//显示时钟break;}}	
}

六、实验效果 

七、资料内容

项目分享

这篇关于STM32项目分享:智能台灯系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042891

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文