• 基于STM32蓝牙控制的app智能台灯设计


    提示:记录毕设

    前言

    基于STM32蓝牙控制的app智能台灯设计,主控使用STM32F103ZET6,在正点原子的精英板上开发(本人也在野火板子上测试成功)。


    一、任务书

    1.1设计(研究)目标:

    针对台灯的个性化和智能化,设计了一套基于蓝牙的多功能台灯控制系统.首先用光敏传感器检测光照强度,用红外感应传感器检测是否有人,用超声波传感器检测使用者与台灯之间的距离,然后将这些检测信号传输到单片机,单片机将信号与设定值进行对比分析,再判断台灯的开/关状态,调节灯光亮度,对使用者的坐姿和使用时间作出语音提醒等.同时,相应参数实时显示在OLED屏和蓝牙终端,使用者通过蓝牙终端可以对台灯进行控制.与蓝牙的联机测试结果显示,系统功能强大,运行稳定
    设计(研究)内容及具体要求:

    1.2设计(研究)内容:
    • 题目的意义;
      1、各种传感器及设备的一般技术和特殊技术的学习:
      2、总体方案的选型设计:
      3、STM32单片机及其外围设备的软硬件系统的技术开发:
      4、系统的调试和总体运行原理
    • 其他设计内容;具体要求:
      1、硬件要求1张1号以上的大图:
      2、软件以流程图方式表示:
      3、有调试的说明。

    二、代码思路

    在这里插入图片描述

    三、硬件设计

    3.1总体设计
    • 基于蓝牙的多功能台灯控制系统是通过传感器检测周围环境,再利用微控制器进行分析处理,它不仅可以实现台灯的自动开/关、亮度调节功能,还可以根据使用者的坐姿和使用时间作出语音提醒.
    • 硬件设计框架如下:
      在这里插入图片描述
    3.2蓝牙部分设计
    • 蓝牙HC05模块用来接收数据并将数据传输至单片机,再通过手机上的蓝牙串口助手发送数据.将蓝牙模块用TTL线与电脑连接,按模块上的按键再上电,进入AT模式.
    • 打开电脑串口调试器,设置好端口号、波特率,选择十六进制显示,就可以对蓝牙模块进行调试了.
    • 蓝牙控制App为现成的蓝牙串口助手,它有12个按键,选择其中4个按键作为台灯的控制按键,分别控制台灯开/关、灯光调亮、灯光调暗和自动/手动模式切换.将串口助手和蓝牙模块进行配对连接,模块上的LED灯由快闪变为2次/s的闪烁,表示连接成功.

    四、联系我们

    承接stm32单片机、STC系列单片机设计、嵌入式。咨询liaxi,
    “2424644692”(qq)

    五、部分代码

    int main (void)
    
    {
    	volatile u8 t=0;
    	volatile u8 i=0;
    	volatile u8 key;	//按键
    	volatile u16 led0pwmval = 499;//LED灯亮度值  0为最亮,499为最弱
    	volatile u8 SD_Mode = 0;//手动模式
    	volatile u16 adcx0;
    	volatile u16 adcx1;
    		
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
    	delay_init(168);      //初始化延时函数
    	uart_init(115200);		//初始化串口波特率为115200
    	LCD_Init();					//LCD初始化
    	LED_Init();					//初始化LED 
    	KEY_Init(); 				//按键初始化
      Adc_Init(); 				//adc初始化
    	TIM13_PWM_Init(500-1,84-1);	//84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz.
    	TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
    	POINT_COLOR=RED; 
    
    	LCD_ShowString(30,50,200,16,16,"CANOE @ Light");	
    	delay_ms(5000);
    while(1)
    {
    	
      while (SD_Mode == 0)//自动模式
    	{
    	LCD_ShowString(30,70,200,16,16,"zidongmoshi");	
    	LCD_ShowString(30,150,200,16,16,"LIGHT_VAL:");	
    	key=KEY_Scan(0);		
    	if(key==KEY0_PRES||key==WKUP_PRES)  //在自动模式下,如果检测到有按键按下,则退出自动模式进入手动模式
    	{
    	SD_Mode = 1;
    		
    	}
    	TIM_SetCompare1(TIM13,499);
    	adcx0=Get_Adc_Average(ADC_Channel_2,10);		//通过ADC1探测得到红外探测模块的输出值,当有人活动时会监测得到高电平  
    	if (adcx0 >  1500)  //当探测得到高电平时,根据ADC通道3采集得到光敏电阻的值来调节亮度值
    		
    	{
    	for(i=0;i<100;i++)
    	{
    	adcx1=Get_Adc_Average(ADC_Channel_3,10);//采集得到光敏电阻的值,环境亮度越暗得到的值越小,亮度越高得到的值越大
    		                                      //adcx1的值处于1200~4000范围内
    	led0pwmval = (adcx1 - 1200)/6;		
    	TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
    	POINT_COLOR=BLUE;//设置字体为蓝色 
    	LCD_ShowxNum(110,150,(500-led0pwmval),4,16,0);     	   //显示 亮度值	
    	delay_ms(100);	
    	key=KEY_Scan(0);		
    	if(key==KEY0_PRES||key==WKUP_PRES)  //在自动模式下,如果检测到有按键按下,则退出自动模式进入手动模式
    	{
    	SD_Mode = 1;
    	i=100;
    	}
    	}
    	}
    	
    	
    	
    	}
    
    	led0pwmval = 300;
    	while(SD_Mode == 1)  //手动模式下 按键增减LED亮度
    		
    	{
    		LCD_ShowString(30,70,200,16,16,"shoudongmoshi");
    		
    		LCD_ShowString(30,90,200,16,16,"WK_UP:+  KEY0:-");	 
    	  POINT_COLOR=BLUE;//设置字体为蓝色      	 
    	  LCD_ShowString(30,150,200,16,16,"LIGHT_VAL:");	  
    
    		t++;
    		key=KEY_Scan(0);			  
    		if(key==WKUP_PRES)
    		{		 
    			if(led0pwmval<499)led0pwmval+=40;
    			TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
    		}
    		else if(key==KEY0_PRES)	
    		{
    			if(led0pwmval>45)led0pwmval-=40;
    			else led0pwmval=0;
    			TIM_SetCompare1(TIM13,led0pwmval);	//修改比较值,修改占空比
    		}	
    		if(t==10||key==KEY0_PRES||key==WKUP_PRES) 	//WKUP/KEY1按下了,或者定时时间到了
    			
    		{
    			LCD_ShowxNum(110,150,(500-led0pwmval),4,16,0);     	   //显示 亮度值
    			LED0=!LED0;	   
    			t=0;
    		}
    		delay_ms(10);	
    	
    	}
    
    
    }
    
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105

    喜欢请点赞哦!

    在这里插入图片描述

  • 相关阅读:
    【postgresql 基础入门】插入数据的多种方式 单条,多值,查询结果,插入数据冲突处理,批量导入,多种方式让数据插入更灵活
    SpringBoot教程(十三) SpringBoot集成MybatisPlus
    MAC如何在根目录创建文件
    IO学习系列之使用fread和fwrite复制文件内容
    电竞游戏行业有哪些媒体资源?活动发布会如何宣传?
    IB学生必看书单Purple Hibiscus
    微信“刷掌支付”上线,扫手就可以付款!你知道怎么开通了吗?
    wget编译升级故障解决
    PyQt5 + Python3.7 + OpenCV人脸识别身份认证系统(附源码)
    export default 导出的对象,不能解构问题,和module.exports的区别
  • 原文地址:https://blog.csdn.net/qq_43625266/article/details/128184758