一、基本介绍

项目名:基于STM32单片机的彩灯控制器
项目编号:mcuclub-dz-805
单片机类型:STM32F103C8T6
具体功能:
1、通过3个RGB灯展示灯光
2、通过5个按键展示5种不同的模式
模式一:一个灯亮完三种颜色再换另一个灯亮
模式二:一个灯亮一个颜色,从暗到亮再到暗,然后切换下一个颜色,亮完三个颜色后再换下一个灯
模式三:三个灯一起亮一种颜色的灯,然后依次亮红、绿、蓝
模式四:三个灯同时亮一种颜色从暗到亮再到暗,然后换下一种颜色
模式五:一个灯亮一个颜色,然后切换下一个灯
3、通过语音识别SU-03T控制不同的模式”唤醒指令:小远小远

二、资料总览

实物资料

请添加图片描述

三、32单片机部分资料展示

1、实物图展示

单片机型号:STM32F103C8T6
供电接口:TYPE-C
板子类型:PCB集成板,厚度1.2,两层板(上下层覆铜接地)
器件类型:元器件基本上为插针式,个别降压芯片会使用贴片式。
请添加图片描述

2、原理图展示

软件版本:AD2013
电路连线方式:网络标号连线方式
注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构图
请添加图片描述

3、PCB图展示

由原理图导出,中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。
两层板,上下覆铜接地。
请添加图片描述

四、系统框图

绘制软件:VISIO
请添加图片描述
本设计以STM32F103C8T6单片机为核心控制器,加上其他的模块一起组成彩灯控制器检测系统,其中包含中控部分、输入部分和输出部分。中控部分采用了STM32F103C8T6单片机,其主要作用是获取输入的部分数据,经过内部处理,控制输出部分。输入由三部分组成,第一部分是语音识别模块,通过该模块控制灯光模式;第二部分是按键模块,通过按键选择灯光模式;第三部分是供电模块,通过该模块可给整个系统进行供电。输出由一部分组成,第一部分是RGB灯模块,通过该模块模拟灯光。系统框图如图3.1所示。

五、部分程序展示

软件版本:keil5
注意:逻辑程序和驱动程序分开,分布于main.c和其他.c文件

else if(flag_mode_4 == 1)																		//模式四:三个灯同时亮一种颜色从暗到亮再到暗,然后换下一种颜色
	{
		switch(flag_step)
		{
			case 0:
				colour_1 = 0;
				colour_2 = 0;
				colour_3 = 0;
				state_pwm_1 = 1;
				state_pwm_2 = 1;
				state_pwm_3 = 1;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 1:
				colour_1 = 0;
				colour_2 = 0;
				colour_3 = 0;
				state_pwm_1 = 2;
				state_pwm_2 = 2;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 2:
				colour_1 = 0;
				colour_2 = 0;
				colour_3 = 0;
				state_pwm_1 = 3;
				state_pwm_2 = 3;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 3:
				colour_1 = 0;
				colour_2 = 0;
				colour_3 = 0;
				state_pwm_1 = 2;
				state_pwm_2 = 2;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 4:
				colour_1 = 0;
				colour_2 = 0;
				colour_3 = 0;
				state_pwm_1 = 1;
				state_pwm_2 = 1;
				state_pwm_3 = 1;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;

			case 5:
				colour_1 = 1;
				colour_2 = 1;
				colour_3 = 1;
				state_pwm_1 = 1;
				state_pwm_2 = 1;
				state_pwm_3 = 1;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 6:
				colour_1 = 1;
				colour_2 = 1;
				colour_3 = 1;
				state_pwm_1 = 2;
				state_pwm_2 = 2;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 7:
				colour_1 = 1;
				colour_2 = 1;
				colour_3 = 1;
				state_pwm_1 = 3;
				state_pwm_2 = 3;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 8:
				colour_1 = 1;
				colour_2 = 1;
				colour_3 = 1;
				state_pwm_1 = 2;
				state_pwm_2 = 2;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 9:
				colour_1 = 1;
				colour_2 = 1;
				colour_3 = 1;
				state_pwm_1 = 1;
				state_pwm_2 = 1;
				state_pwm_3 = 1;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 10:
				colour_1 = 2;
				colour_2 = 2;
				colour_3 = 2;
				state_pwm_1 = 1;
				state_pwm_2 = 1;
				state_pwm_3 = 1;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 11:
				colour_1 = 2;
				colour_2 = 2;
				colour_3 = 2;
				state_pwm_1 = 2;
				state_pwm_2 = 2;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 12:
				colour_1 = 2;
				colour_2 = 2;
				colour_3 = 2;
				state_pwm_1 = 3;
				state_pwm_2 = 3;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 13:
				colour_1 = 2;
				colour_2 = 2;
				colour_3 = 2;
				state_pwm_1 = 2;
				state_pwm_2 = 2;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 14:
				colour_1 = 2;
				colour_2 = 2;
				colour_3 = 2;
				state_pwm_1 = 1;
				state_pwm_2 = 1;
				state_pwm_3 = 1;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step = 0;
					colour_1 = 0;
					colour_2 = 0;
					colour_3 = 0;
				}
			break;

			default:
			break;
		}
	}
	else if(flag_mode_5 == 1)																		//模式五:一个灯亮一个颜色,然后切换下一个灯
	{
		switch(flag_step)
		{
			case 0:
				colour_1 = 0;
				state_pwm_1 = 3;
				state_pwm_2 = 0;
				state_pwm_3 = 0;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 1:
				colour_2 = 0;
				state_pwm_1 = 0;
				state_pwm_2 = 3;
				state_pwm_3 = 0;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 2:
				colour_3 = 0;
				state_pwm_1 = 0;
				state_pwm_2 = 0;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 3:
				colour_1 = 1;
				state_pwm_1 = 3;
				state_pwm_2 = 0;
				state_pwm_3 = 0;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 4:
				colour_2 = 1;
				state_pwm_1 = 0;
				state_pwm_2 = 3;
				state_pwm_3 = 0;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 5:
				colour_3 = 1;
				state_pwm_1 = 0;
				state_pwm_2 = 0;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 6:
				colour_1 = 2;
				state_pwm_1 = 3;
				state_pwm_2 = 0;
				state_pwm_3 = 0;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 7:
				colour_2 = 2;
				state_pwm_1 = 0;
				state_pwm_2 = 3;
				state_pwm_3 = 0;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step++;
				}
			break;
				
			case 8:
				colour_3 = 2;
				state_pwm_1 = 0;
				state_pwm_2 = 0;
				state_pwm_3 = 3;
			
				if(flag_time_finish_500ms == 1)
				{
					flag_time_finish_500ms = 0;
					flag_step = 0;
					colour_1 = 0;
					colour_2 = 0;
					colour_3 = 0;
				}
			break;
			
			default:
			break;
		}
	}
	else																												//没有模式时,灯关闭
	{
		state_pwm_1 = 0;
		state_pwm_2 = 0;
		state_pwm_3 = 0;
		
	}
	
	
	if(state_pwm_1 == 0)		//控制灯1亮度
	{
		pwm_1 = 0;
	}
	else if(state_pwm_1 == 1)
	{
		pwm_1 = 3;
	}
	else if(state_pwm_1 == 2)
	{
		pwm_1 = 6;
	}
	else
	{
		pwm_1 = 10;
	}

	
	if(state_pwm_2 == 0)		//控制灯2亮度
	{
		pwm_2 = 0;
	}
	else if(state_pwm_2 == 1)
	{
		pwm_2 = 3;
	}
	else if(state_pwm_2 == 2)
	{
		pwm_2 = 6;
	}
	else
	{
		pwm_2 = 10;
	}
	
	if(state_pwm_3 == 0)		//控制灯3亮度
	{
		pwm_3 = 0;
	}
	else if(state_pwm_3 == 1)
	{
		pwm_3 = 3;
	}
	else if(state_pwm_3 == 2)
	{
		pwm_3 = 6;
	}
	else
	{
		pwm_3 = 10;
	}
}
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐