基于STM32单片机的智能台灯设计

1、项目简介

1.1 系统功能

  • 功能介绍:
    • (1)信息采集部分:主要是通过光敏采集当前光线强度,通过单片机内部AD进行模数转换,通过人体红外检测当前是否有人。
    • (2)单片机控制中心:采用STM32单片机系统,它是本系统的数据部分,通过不同光线情况下使用PWM脉冲电路进行调节当前灯光亮度。
    • (3)模式显示:我们通过切换不同的LED指示灯来表示自动和手动。
    • (4)按键设置电路:通过按键我们可以切换2种模式,手动控制和自动控制。
    • (5)灯光控制:通过PMW灯光调节电路,我们可以根据不同的光线亮度,进行3挡调节。
    • (6)人体感应:通过人体红外模块检测是否有人,在自动模式下,检测到有人,光线暗的情况下进行开灯。

1.2 演示视频

2、部分电路设计

2.1 STM32单片机核心板电路设计

  • ‌基于 ARM Cortex-M3内核的STM32F1系列单片机属于主流STM32单片机,其中增强型STM32F103子系列单片机的CPU 主频高达72MHz,片内Flash容量高达1MB,芯片引脚数量多达144个,有 QFN、LQFP、CSP、BGA 等多种芯片封装形式,并具有多种片内外设、USB接口和CAN 接口。根据STM32F103单片机片内Flash容量的不同,ST 公司将其分为小容量(16-32KB)、中等容量(64-128KB)、大容量(256KB-1MB)3种。
  • 电源电路:为单片机提供稳定的工作电压,通常采用3.3V电源供电。电源电路的设计要保证单片机在不同工作条件下都能获得稳定的电压输出,以确保单片机的正常工作。
  • 晶振电路:提供单片机工作所需的时钟信号。晶振电路通过晶振和电容组成,为单片机提供稳定的工作脉冲,确保单片机的定时和同步需求。
  • 复位电路:实现单片机的复位功能,类似于电脑的重启。复位电路通过电容和电阻的配合,实现单片机在上电启动时的自动复位,以及通过手动按键实现复位功能,保证单片机在程序跑飞或异常情况下能够重新开始执行程序。

STM32单片机是一种功能强大、易于使用、灵活且可靠的32位微控制器,基于ARM Cortex™-M内核。其主要功能特点包括:

  • 高性能和低功耗‌:STM32系列单片机提供多种内核选择,如Cortex-M0、Cortex-M3、Cortex-M4等,满足不同应用场景对性能的需求,同时保持低功耗特性。‌
  • 多种通信和外设接口‌:STM32单片机具备广泛的通信和外设接口,如I2C、SPI、USART、USB等,便于开发者实现各种复杂功能。‌
  • 易于开发和调试‌:STM32单片机提供了丰富的软件和硬件工具,如HAL库、CubeMX等,帮助开发者快速创建和调试嵌入式系统。
  • 高集成度和设计灵活性‌:STM32系列单片机全系列产品共用大部分引脚、软件和外设,优异的兼容性为开发人员带来最大的设计灵活性

单片机最小系统原理图如下图所示:

实物图:

2.2 热释电传感器及处理电路

  • 热释电红外传感器能以非接触形式检测出人体辐射的红外线,并将其转变为电压信号。
  • 热释电传感器具有成本低、不需要用红外线或电磁波等发射源、灵敏度高、可流动安装等特点。实际使用时,在热释电传感器前需安装菲涅尔透镜,这样可大大提高接收灵敏度,增加检测距离及范围。
  • 实验证明,热释电红外传感器若不加菲涅尔透镜,则其检测距离仅为2 m左右;而配上菲涅尔透镜后,其检测距离可增加到10 m以上。由于热释电传感器输出的信号变化缓慢、幅值小(小于1 mV),不能直接作为照明系统的控制信号,因此传感器的输出信号必须经过一个专门的信号处理电路,使得传感器输出信号的不规则波形转变成适合于单片机处理的数字信号。

其具体电路原理图如下图所示:

实物图:

2.3 光照检测电路

  • ‌光线采集电路我们是通过光敏电阻5528进行光线采集,光敏电阻会根据不同的光线值输出不同的电阻,然后把数据通过传输给单片机,单片机通过内部AD进行模数转换,根据不同的光线值单片机在通过PWM脉冲电路进行灯光调节。

其具体电路原理图如下图所示:

实物图如下:

2.4 PWM灯光调节电路

  • 脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。脉宽调制是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。

其具体电路原理图如下图所示:

3、单片机代码展示

3.1 系统初始化

void HardWare_Init(void)
{
  delay_init();	    //延时函数初始化	  
  delay_ms(500);       //上电瞬间加入一定延时在初始化
  KEY_GPIO_Init();
  Adc_Init();
  LED1 = 1;
  LED2 = 0;
  TIM2_Init(49,71);     //定时器初始化,定时50us
  TIM3_Init(499,7199);  //定时器初始化,定时50ms

}

3.2 按键扫描函数

void keyscan(void)
{
	if(KEY1 == 0)//模式切换按键
	{
	 	delay_ms(10);//消抖
		if(KEY1 == 0)
		{
		 	while(KEY1 == 0);//等待按键松开
			mode = 0;

			LED1 = 1;
			LED2 = 0;
		}
	}
	if(KEY2 == 0)//模式切换按键
	{
	 	delay_ms(10);
		if(KEY2 == 0)
		{
       while(KEY2 == 0);
			 mode = 1;
			 LED1 = 0;
			 LED2 = 1;
		}
	}
	if(mode == 1)
	{
			if(KEY3 == 0)//加键
			{
				delay_ms(10);
				if(KEY3 == 0 )
				{
					while(KEY3 == 0);
					if(GearTemp < 3)GearTemp++;
				}
			}
			
			if(KEY4 == 0)//减键
			{
				delay_ms(10);
				if(KEY4 == 0 )
				{
					while(KEY4 == 0);
					if(GearTemp > 0)GearTemp--;
				}
			}
	}
}

3.3 PWM调光程序设计


void LedGearHandle(u8 temp)//调节LED档位
{
		switch(temp)
		{
			 case(0):PWM_Val = 0xFF;PWM_LED = 0;break; 
			 case(1):PWM_Val = 0x78;break;  //120
			 case(2):PWM_Val = 0x32;break;  //50
			 case(3):PWM_Val = 0x00;PWM_LED = 1;break;
			 default:PWM_Val = 0x00;PWM_LED = 1;break;
		}
}
### 基于STM32智能台灯系统设计方案 #### 设计概述 基于STM32智能台灯系统旨在提供一种高度集成化的解决方案,支持多种智能化操作。此系统不仅具备基本照明功能,还能根据环境条件自动调整亮度,并能响应语音命令执行特定动作。 #### 功能描述 - **亮度调节**:依据周围光线强度变化自适应改变输出功率;同时也允许用户通过物理按钮手动设置偏好等级。 - **健康保护机制**:利用红外或超声波技术监控使用者位置,一旦发现异常靠近即刻发出警告音提示保持适当间隔。 - **定时提醒服务**:内置RTC芯片配合LCD/OLED屏幕用于记录当前时刻以及预设的学习时段结束信号通知。 - **光照数据收集与反馈**:借助光敏元件获取即时照度读数并在可视界面上直观呈现出来。 #### 硬件组件清单 - STM32微控制器作为核心处理器负责整体逻辑运算处理任务; - LED驱动板连接至MCU GPIO端口来控制不同类型的光源工作状态切换(开/关、调亮等); - SU-03T离线语音识别单元经由UART接口传送解析后的音频片段给主控板作出相应反应[^1]; - LDR型感光二极管用来感应外部自然光水平并向CPU汇报数值以便参与后续决策过程[^2]; - HC-SR04型号超声波测距仪或者IR发射接收对管完成近距离探测作业以保障视力安全[^3]。 #### 连接说明 各外围设备需按照各自通信协议接入指定I/O引脚上形成完整的电路布局图: | 组件名称 | 接口类型 | 对应STM32引脚 | |----------|----------------|---------------| | LED | PWM | TIMx_CHy | | SU-03T | UART | USARTz_TX/RX | | LDR | ADC | AINw | | 测距仪 | Trig/Echo (GPIO)| PBn, PCm | 其中PWM通道用于精确调控发光体亮度级别;而ADC模拟输入则服务于采样外界光学参数的任务需求。 #### 软件架构概览 整个应用程序构建在FreeRTOS操作系统之上,采用多任务并发运行模式提高效率降低延迟现象发生概率。以下是部分关键源码片段示例: ```c // 初始化外设资源函数定义 void System_Init(void){ // 配置时钟树结构... MX_GPIO_Init(); /* 设置通用IO属性 */ MX_USARTx_UART_Init(); /* 开启串行通讯链路 */ MX_TIMx_PWM_Init(); /* 准备好脉宽调制设施 */ } /* 主循环体内无限等待事件触发 */ int main(void){ HAL_Init(); System_Init(); while(1){ osDelay(5); // 循环延时防止占用过多CPU周期 if(/* 检查是否有新的语音指令到来 */){ Process_Voice_Commands(); } Update_Light_Brightness_based_on_Ambient_Lux(); Check_User_Distance_and_Alert_if_Too_Close(); } } ``` 上述代码展示了初始化阶段如何配置必要的硬件模块,以及进入稳定态之后持续监听来自各个传感器的数据更新情况并据此采取行动的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值