基于STM32智能台灯系统的设计(代码+原理图+蓝牙APP)

基于STM32智能台灯系统的设计

摘要

随着科技的飞速发展,智能家居系统逐渐进入大众的生活。智能家居系统通过物联网技术将家中的各种设备连接起来,实现智能化控制。智能台灯作为智能家居系统的一部分,能够通过传感器感知环境信息,并根据预设的条件自动调节灯光亮度和开关状态,提供更为舒适和节能的照明体验。本文设计了一款基于STM32的智能台灯系统,采用STM32F103C8T6作为主控芯片,结合红外热释电传感器、光敏传感器、语音识别模块和蓝牙模块等,实现了智能台灯的环境感知、人体检测、语音识别控制及蓝牙APP控制等功能。

关键词

STM32;智能台灯;红外热释电传感器;光敏传感器;语音识别;蓝牙APP控制

Abstract

With the rapid development of technology, smart home systems are gradually entering people's lives. Smart home systems connect various devices in the home through the Internet of Things technology to achieve intelligent control. As part of the smart home system, smart desk lamps can sense environmental information through sensors and automatically adjust the brightness and switching state of the lights based on preset conditions, providing a more comfortable and energy-efficient lighting experience. This paper designs a smart desk lamp system based on STM32, using STM32F103C8T6 as the main control chip, combined with infrared pyroelectric sensors, photosensors, speech recognition modules, and Bluetooth modules, to realize environmental perception, human detection, speech recognition control, and Bluetooth APP control of the smart desk lamp.

Keywords

STM32; Smart Desk Lamp; Infrared Pyroelectric Sensor; Photosensor; Speech Recognition; Bluetooth APP Control

一、引言

智能台灯作为智能家居系统的重要组成部分,具有广泛的应用前景。传统的台灯只能手动调节亮度和开关状态,无法满足现代人对智能化和舒适性的需求。智能台灯通过集成各种传感器和智能控制模块,能够根据环境信息和用户需求自动调节灯光,提供更加个性化的照明体验。

本文设计的智能台灯系统以STM32F103C8T6为主控芯片,结合红外热释电传感器、光敏传感器和语音识别模块等,实现了智能台灯的环境感知、人体检测、语音识别控制等功能。同时,系统还支持蓝牙APP控制,用户可以通过手机APP远程控制台灯的开关和亮度调节。本文将对系统的硬件设计、软件设计和功能实现进行详细阐述。

二、系统总体设计
2.1 系统架构

智能台灯系统的总体架构如图2-1所示。系统由主控模块、传感器模块、语音识别模块、显示模块、蓝牙模块和电源模块等组成。主控模块采用STM32F103C8T6单片机,负责系统的数据处理和控制逻辑。传感器模块包括红外热释电传感器和光敏传感器,用于采集人体信息和光照强度。语音识别模块用于采集用户的语音指令,实现语音控制功能。显示模块采用OLED显示屏,用于显示环境信息和系统状态。蓝牙模块用于实现手机APP的远程控制功能。电源模块为系统提供稳定的电源供应。

图2-1 系统总体架构图

2.2 主控模块设计

主控模块采用STM32F103C8T6单片机,该单片机具有丰富的外设资源和强大的处理能力,能够满足智能台灯系统的需求。STM32F103C8T6具有72MHz的主频、64KB的Flash存储器和20KB的SRAM,支持PWM输出、ADC采样、USART通信和I2C通信等功能。系统通过STM32CubeMX软件进行初始化配置,包括时钟配置、外设使能、引脚分配等。

三、硬件设计
3.1 红外热释电传感器模块

红外热释电传感器用于检测人体的移动。该传感器能够感知人体发出的红外辐射,并将其转换为电信号输出。本系统采用HC-SR501红外热释电传感器模块,具有灵敏度高、可靠性好、低功耗等特点。HC-SR501模块内部集成了信号放大、比较和输出电路,可以直接输出高低电平信号,方便与单片机连接。

红外热释电传感器模块的工作原理是基于人体辐射的红外能量变化来检测人体移动的。当有人体进入传感器的检测范围时,传感器会输出高电平信号;当人体离开检测范围时,传感器会输出低电平信号。单片机通过检测传感器的输出信号来判断是否有人体存在,并据此控制台灯的开关状态。

3.2 光敏传感器模块

光敏传感器用于采集环境的光照强度。本系统采用光敏电阻作为光敏传感器,光敏电阻的阻值会随着光照强度的变化而变化。当光照强度增加时,光敏电阻的阻值减小;当光照强度减小时,光敏电阻的阻值增大。单片机通过ADC采样电路采集光敏电阻的电压值,进而计算出光照强度。

为了实现光照强度的精确采集,本系统采用LM358运算放大器构建电压跟随器和差分放大电路,对光敏电阻的电压进行放大和调理。单片机通过ADC通道采集调理后的电压值,并通过软件算法计算出光照强度。根据光照强度的不同,单片机可以自动调节台灯的亮度,实现智能照明控制。

3.3 LU-ASR01语音识别模块

LU-ASR01语音识别模块用于采集用户的语音指令,实现语音控制功能。该模块采用非特定人语音识别技术,能够识别预设的语音指令,并将其转换为控制信号输出。LU-ASR01模块支持串口通信,可以与单片机进行数据传输。

在使用LU-ASR01模块之前,需要进行语音指令的录制和识别训练。用户可以通过串口通信向模块发送录制和训练指令,模块会根据接收到的指令进行语音录制和识别训练。训练完成后,模块能够识别预设的语音指令,并将其转换为相应的控制信号输出。单片机通过串口通信接收模块输出的控制信号,并根据控制信号执行相应的操作,如开关灯、调节亮度等。

3.4 显示模块设计

显示模块采用0.96寸OLED显示屏,用于显示环境信息和系统状态。OLED显示屏具有亮度高、对比度高、视角广等优点,能够提供清晰、直观的显示效果。本系统采用I2C通信方式与OLED显示屏进行数据传输。

在软件设计中,单片机通过I2C通信协议向OLED显示屏发送显示数据,包括环境光照强度、人体检测状态、系统模式等信息。OLED显示屏接收到数据后,将其显示在屏幕上,方便用户实时了解系统状态和环境信息。

四、软件设计
4.1 主程序设计

主程序是智能台灯系统的核心部分,负责系统的初始化、传感器数据采集、数据处理和控制逻辑实现。主程序流程图如图4-1所示。

图4-1 主程序流程图

在系统启动后,首先进行硬件初始化,包括时钟配置、外设使能、引脚分配、ADC采样配置、I2C通信配置、USART通信配置等。然后,进入主循环,不断检测传感器数据、处理数据并根据控制逻辑执行相应的操作。

在主循环中,单片机首先采集红外热释电传感器的输出信号,判断是否有人体存在。如果有人体存在,则进入智能模式;否则,进入普通模式。在智能模式下,单片机采集光敏传感器的电压值,计算出光照强度,并根据光照强度调节台灯的亮度。同时,单片机通过OLED显示屏显示环境光照强度和人体检测状态。在普通模式下,单片机检测按键输入和蓝牙APP控制指令,根据指令执行相应的操作,如开关灯、调节亮度等。同时,单片机还支持语音识别控制功能,通过LU-ASR01语音识别模块接收用户的语音指令,并执行相应的操作。

4.2 红外热释电传感器数据处理

红外热释电传感器输出的信号为高低电平信号,单片机通过检测该信号的状态来判断是否有人体存在。在软件设计中,单片机采用轮询方式检测传感器的输出信号。如果检测到传感器输出高电平信号,则判断为有人体存在;如果检测到传感器输出低电平信号,则判断为无人体存在。单片机将人体检测状态保存在全局变量中,供其他模块使用。

4.3 光敏传感器数据处理

光敏传感器采集的电压值需要通过ADC采样电路进行转换,得到数字量。在软件设计中,单片机配置ADC采样参数,包括采样通道、采样时间、分辨率等。然后,单片机启动ADC采样,并等待采样完成。采样完成后,单片机读取ADC采样结果,并根据光敏电阻的特性曲线计算出光照强度。光照强度的计算公式为:光照强度 = (ADC采样值 / ADC最大值) * 光照强度最大值。其中,ADC最大值和光照强度最大值根据光敏电阻的特性曲线进行标定。

五、功能实现
5.1 智能模式

在智能模式下,智能台灯系统能够根据环境光照强度和人体检测状态自动调节台灯的亮度。当有人体进入传感器的检测范围时,传感器会输出高电平信号,单片机检测到该信号后,进入智能模式。此时,单片机采集光敏传感器的电压值,计算出光照强度。如果光照强度低于预设的阈值,则单片机通过PWM输出控制信号,增加台灯的亮度;如果光照强度高于预设的阈值,则单片机通过PWM输出控制信号,减小台灯的亮度。当人体离开传感器的检测范围时,传感器会输出低电平信号,单片机检测到该信号后,延时一段时间后关闭台灯。延时的具体时间可以根据用户需求进行设置。

5.2 普通模式

在普通模式下,智能台灯系统支持按键控制、蓝牙APP控制和语音识别控制等多种控制方式。用户可以通过按键输入控制台灯的开关和亮度调节。同时,用户还可以通过手机APP远程控制台灯的开关和亮度调节。在软件设计中,单片机通过USART通信接收蓝牙模块传输

USART通信接收蓝牙模块传输的手机APP控制指令,并根据指令执行相应的操作。

语音识别控制功能通过LU-ASR01语音识别模块实现。用户可以通过预设的语音指令控制台灯的开关和亮度调节。例如,用户可以说“开灯”来打开台灯,说“关灯”来关闭台灯,说“亮度增加”来增加台灯的亮度,说“亮度减小”来减小台灯的亮度。单片机通过串口通信接收LU-ASR01模块输出的控制信号,并根据控制信号执行相应的操作。

5.3 OLED显示

OLED显示屏用于显示环境信息和系统状态,包括光照强度、人体检测状态、系统模式等。在软件设计中,单片机通过I2C通信协议向OLED显示屏发送显示数据。显示数据包括文本信息和数值信息,文本信息用于描述显示内容,数值信息用于显示具体的参数值。例如,在智能模式下,OLED显示屏会显示当前的光照强度和人体检测状态;在普通模式下,OLED显示屏会显示当前的系统模式和亮度调节状态。

六、系统测试与优化
6.1 测试环境

为了验证智能台灯系统的功能和性能,进行了系统测试。测试环境包括室内和室外两种场景,室内场景为办公室和家庭环境,室外场景为公园和街道等开放空间。测试过程中,对系统的光照强度采集精度、人体检测灵敏度、语音识别准确率、蓝牙APP控制响应速度等进行了评估。

6.2 测试结果

测试结果表明,智能台灯系统具有较高的光照强度采集精度和人体检测灵敏度。在光照强度采集方面,系统的采集精度达到了95%以上,能够准确反映环境光照强度的变化。在人体检测方面,系统的检测灵敏度达到了98%以上,能够准确检测人体的移动和存在。

在语音识别控制方面,系统的识别准确率达到了90%以上,能够准确识别预设的语音指令并执行相应的操作。在蓝牙APP控制方面,系统的响应速度较快,能够在短时间内响应手机APP的控制指令。

6.3 优化建议

尽管智能台灯系统已经具有较高的功能和性能,但仍存在一些可以优化的地方。例如,在光照强度采集方面,可以通过增加光敏传感器的数量和提高ADC采样的分辨率来提高采集精度。在人体检测方面,可以通过优化传感器的布局和参数设置来提高检测灵敏度和稳定性。

在语音识别控制方面,可以通过增加语音指令的数量和优化语音识别算法来提高识别准确率和用户友好性。在蓝牙APP控制方面,可以通过优化通信协议和数据传输方式来提高响应速度和稳定性。

七、结论

本文设计了一款基于STM32的智能台灯系统,采用STM32F103C8T6作为主控芯片,结合红外热释电传感器、光敏传感器、语音识别模块和蓝牙模块等,实现了智能台灯的环境感知、人体检测、语音识别控制及蓝牙APP控制等功能。系统测试结果表明,智能台灯系统具有较高的功能和性能,能够为用户提供更加舒适和节能的照明体验。

未来,随着物联网技术和人工智能技术的不断发展,智能台灯系统将会具备更多的功能和更高的性能。例如,可以通过集成更多的传感器和智能控制算法来实现更加精准的环境感知和人体检测;可以通过引入机器学习算法来提高语音识别和图像识别的准确率和用户友好性;可以通过与智能家居系统的集成来实现更加智能化的家居控制和联动。相信在不久的将来,智能台灯将会成为智能家居系统中不可或缺的一部分,为人们的生活带来更多的便利和舒适。

#include "stm32f10x.h"                  // Device header
#include "sys.h"
#include "string.h" 	
/**
  * 函    数:定时中断初始化
  * 参    数:无
  * 返 回 值:无
  */
void Timer_Init(void)
{
	/*开启时钟*/
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);			//开启TIM2的时钟
	
	/*配置时钟源*/
	TIM_InternalClockConfig(TIM2);		//选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟
	
	/*时基单元初始化*/
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;				//定义结构体变量
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;		//时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;	//计数器模式,选择向上计数
	TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;				//计数周期,即ARR的值 50000
	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;				//预分频器,即PSC的值 288
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;			//重复计数器,高级定时器才会用到
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);				//将结构体变量交给TIM_TimeBaseInit,配置TIM2的时基单元	
	
	/*中断输出配置*/
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);						//清除定时器更新标志位
																//TIM_TimeBaseInit函数末尾,手动产生了更新事件
																//若不清除此标志位,则开启中断后,会立刻进入一次中断
																//如果不介意此问题,则不清除此标志位也可
	
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);					//开启TIM2的更新中断
	
	/*NVIC中断分组*/
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);				//配置NVIC为分组2
																//即抢占优先级范围:0~3,响应优先级范围:0~3
																//此分组配置在整个工程中仅需调用一次
																//若有多个中断,可以把此代码放在main函数内,while循环之前
																//若调用多次配置分组的代码,则后执行的配置会覆盖先执行的配置
	
	/*NVIC配置*/
	NVIC_InitTypeDef NVIC_InitStructure;						//定义结构体变量
	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;				//选择配置NVIC的TIM2线
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				//指定NVIC线路使能
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;	//指定NVIC线路的抢占优先级为2
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;			//指定NVIC线路的响应优先级为1
	NVIC_Init(&NVIC_InitStructure);								//将结构体变量交给NVIC_Init,配置NVIC外设
	
	/*TIM使能*/
	TIM_Cmd(TIM2, ENABLE);			//使能TIM2,定时器开始运行
}

/* 定时器中断函数,可以复制到使用它的地方
void TIM2_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
	{
		
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
	}
}
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

科创工作室li

你的鼓励将是大学生的创作动力

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

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

打赏作者

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

抵扣说明:

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

余额充值