目录
[2.1 硬件清单:](#2.1 硬件清单:)
[2.2 功能介绍:](#2.2 功能介绍:)
[资料获取 查看主页介绍:兆龙电子单片机设计](#资料获取 查看主页介绍:兆龙电子单片机设计)
一、设计背景和意义
1.1设计背景:
在现代家庭、办公场所及学习空间的日常照明管理中,台灯的舒适性、节能性与智能化控制是核心需求。传统台灯存在明显局限:一方面,高端智能台灯(如品牌定制化护眼灯、商用级智能照明系统)功能虽全但成本高昂,安装调试复杂,依赖特定品牌售后支持,难以普及到普通家庭、学生宿舍等场景,且设备兼容性差,更换或升级成本高,无法灵活满足不同人群的照明习惯需求;另一方面,普通简易台灯(如基础按键式、旋钮调光型)虽操作简单,但功能单一,仅能实现基础的开关与亮度调节,缺乏光照强度自适应、色温精准控制、人体感应开关及用眼健康提醒等功能,无法满足现代化生活场景下对用眼健康、便捷管理的需求。
现有台灯控制方案还存在功能割裂与集成度低的问题:部分高端照明设备虽具备多模式控制与健康监测功能,但依赖复杂的电路设计与专业维护,后期使用成本高,难以覆盖预算有限的家庭或学生群体;而低成本台灯又在功能完整性与智能化上存在欠缺,无法实现照明数据与移动端 APP、健康提醒的联动,导致照明能耗浪费严重、用眼健康无法保障,无法为用户照明习惯分析及设备优化管理提供数据支撑。基于此,本设计以 STM32 单片机为核心,融合高精度参数采集模块(如光照传感器、人体红外传感器、温湿度传感器、亮度检测模块)、OLED 显示模块、数据存储模块及 PWM 调光与报警模块,构建低成本、高集成度的 STM32 单片机多功能智能台灯系统,以解决传统台灯设备功能单一、智能化程度低、能耗高及健康保护不足的问题。
1.2设计意义:
本设计通过整合 STM32 单片机的高效数据处理能力与多模块协同工作机制,在智能照明管理领域具有多重实用价值,具体体现在以下三方面:
从使用体验与管理效率角度,该系统突破了传统台灯的局限:一是实现了多参数同步监测与多功能联动(如支持环境光照、人体存在状态、环境温湿度、灯光亮度等核心指标,联动 PWM 调光模块、色温调节模块、自动开关、定时提醒等功能),无需人工频繁操作或查看状态,减少操作繁琐性;二是配备 OLED 实时显示模块,直观呈现当前光照强度、色温、运行模式及用眼时长,同时支持数据自动存储(可通过 SD 卡或 WiFi 传输至手机 APP / 云端平台),方便用户长期追溯照明数据与设备运行规律,为用眼健康分析与设备管理优化提供完整数据支撑;三是新增异常预警与自动调控功能,当监测到某项参数超出舒适范围(如光照过强 / 过弱、连续用眼超时、环境湿度过高)时,系统自动触发声光报警,同时联动调光模块调节亮度、切换护眼模式、启动休息提醒等,无需人工干预即可及时处理异常,大幅提升了照明管理的便捷性与健康性。
从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度参数传感器(如 BH1750 光照传感器、HC-SR501 人体红外传感器、DHT11 温湿度传感器、光敏电阻检测模块)与通用外围模块,在保证数据精度(光照测量误差可控制在 ±5lux 以内,亮度调节响应时间可控制在 1 秒以内)的前提下,有效降低了系统整体成本,相比同功能的高端智能台灯成本降低 40%-60%,更易普及到普通家庭、学生宿舍及小型办公等场景。同时,系统支持模块化扩展(如后续可新增语音控制模块、远程预约功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。
从应用场景与行业价值角度,该系统可广泛适配多类照明场景:在普通家庭生活中,可作为家庭学习的智能照明中心,实时调控亮度色温、监测用眼时长,保障用眼健康;在高校电子信息与自动化相关专业教学中,可作为单片机应用与智能设备控制的实践案例,帮助学生理解嵌入式系统与多种传感器协同工作原理;在学生宿舍或小型办公室场景中,可为用户提供低成本的智能照明方案,减少能耗浪费与设备维护成本,提升照明体验。此外,本设计探索了 STM32 单片机在低成本智能照明设备领域的应用方案,推动传统台灯从 "单一开关、手动调光" 向 "多参数监测、智能控制、健康响应" 升级,为低成本智能化照明设备的开发提供了可参考的集成思路,具有较好的实践应用与行业推广价值。
**二、**实物展示
下方为实物演示视频
下方为实物展示图片

三、硬件功能介绍
2.1 硬件清单:
- STM32F103C8T6
- OLED液晶显示
- 超声波传感器
- SR501人体感应传感器
- 大功率LED
- 光照采集电路
- 声光报警电路
- 蓝牙模块
2.2 功能介绍:
(1)智能感应:根据人体感应是否有人进行控制LED灯条亮灭
(2)智能调光:根据外界光线变化,LED灯条自动调节亮度
(3)启动控制:通过按键控制开/关灯
(4)亮度控制:按键控制灯条的亮度(三档亮度)
(5)计时功能:按键启动计时 累计台灯运行时间(作息时间)
(6)OLED显示屏:当前模式、环境光线、当前亮度、超声波距离
(7)手机APP远程端控制:采用蓝牙通讯,用户可以在手机APP 端进行控制启动、亮度、计时、模式选取
四、软件设计流程图

五、硬件PCB展示


六、软件主函序展示
#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "beep.h"
#include "OLED_I2C.h"
#include "csb.h "
#include "adc.h"
#include "time.h"
#include "button.h"
extern uint16_t Serial_RxData;
extern uint8_t Serial_RxFlag;
float temp;
extern u8 Res;
extern int miao,fen,shi;
int a=0;//按键的值
int flag=1;//自动手动
u16 adcx;
int miao=0,fen=0,shi=0;
u16 distance_set=15;
u8 SendString[20]; //向蓝牙发送的显示信息
int main(void)
{
uint16_t distance;
vu8 key=0;
int time_flag=0,level=3; //time_flag代表开关定时器,计时,level代表灯的亮度等级
int miao_flag=0,fen_flag=1,shi_flag=0; //代表计时时间,时间到,报警提示久座
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
BEEP_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //按键初始化
I2C_Configuration(); //i2c初始化,oled屏采用的i2c
Adc_Init(); //ADC初始化
uart_init(9600); //串口初始化
Hcsr04Init(); //超声波初始化
OLED_Init();
OLED_Fill(0xFF);//全屏点亮
delay_ms(2);
OLED_Fill(0x00);
delay_ms(2);
delay_ms(100);
OLED_CLS(); //清屏
alarm();
OLED_SHOW_A();
miao=0;fen=0;shi=0;
EXTIx_Init();
while(1)
{
//光照强度采集
adcx=Get_Adc_Average(ADC_Channel_1,5);
adcx=(float)adcx/40.95;
OLED_ShowNums(40,2,adcx,3,1);
delay_ms(50); //延时300ms
//超声波数据采集
distance = Hcsr04GetLength();
OLED_ShowNums(40,4,distance,3,1);
if(distance>400)
distance=400;
if(KEY5==1)
{
if(distance<distance_set) //距离小于15
beep=~beep; // 蜂鸣器报警
else
beep=0;
}
else
beep=0;
//hcsr501人体检测
if(KEY5==1)
OLED_ShowCN(96,2,8); //有
else
OLED_ShowCN(96,2,9); //无
switch(a)
{
case 1:
time_flag+=1;
time_flag%=2;
miao=0;
fen =0;
shi=0;
a=0;
break;
case 2:
if(flag%2==0)
level--;
if(level==0)
level=1;
a=0;
break;
case 3:
if(flag%2==0)
level++;
if(level==6)
level=5;
a=0;
break;
case 4:
flag+=1;
a=0;
break;
}
TIM_SetCompare1(TIM1,0); //关台灯
OLED_ShowChar(98,6,' ');
OLED_ShowChar(106,6,' ');
OLED_ShowChar(114,6,' ');
//显示时间
OLED_ShowNums(40,6,fen,2,1);
OLED_ShowChar(60,6,':');
OLED_ShowNums(70,6,miao,2,1);
}
}
void EXTI15_10_IRQHandler(void) //按键中断处理函数
{
if(EXTI_GetITStatus(EXTI_Line12) == SET) //计时
{
a=4;
EXTI_ClearITPendingBit(EXTI_Line12);//清除中断挂起标志位
}
if(EXTI_GetITStatus(EXTI_Line13) == SET) //控制灯亮度减弱
{
a=3;
EXTI_ClearITPendingBit(EXTI_Line13);//清除中断挂起标志位
} //控制灯亮度增加
if(EXTI_GetITStatus(EXTI_Line14) == SET)
{
a=2;
EXTI_ClearITPendingBit(EXTI_Line14);//清除中断挂起标志位
}
if(EXTI_GetITStatus(EXTI_Line15) == SET) //切换模式
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0) //切换模式
{
a=1;
}
EXTI_ClearITPendingBit(EXTI_Line15);//清除中断挂起标志位
}
}
七、单片机实物资料
