【STM32项目开源】STM32单片机智能台灯系统
目录
一、设计背景和意义
1.1设计背景:
1.2设计意义:
二、实物展示
三、硬件功能介绍
2.1 硬件清单:
2.2 功能介绍:
四、软件设计流程图
五、硬件PCB展示
六、软件主函序展示
七、单片机实物资料
资料获取 查看主页介绍:兆龙电子单片机设计
一、设计背景和意义
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 单片机在低成本智能照明设备领域的应用方案,推动传统台灯从 “单一开关、手动调光” 向 “多参数监测、智能控制、健康响应” 升级,为低成本智能化照明设备的开发提供了可参考的集成思路,具有较好的实践应用与行业推广价值。
二、实物展示
下方为实物演示视频
点击下方链接跳转演示视频
https://www.bilibili.com/video/BV15haJz1EfS/?spm_id_from=333.1387.upload.video_card.click&vd_source=2a672ca4e8794dca68cbe6d047b42ca5
下方为实物展示图片

三、硬件功能介绍
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屏采用的i2cAdc_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) //距离小于15beep=~beep; // 蜂鸣器报警elsebeep=0;}elsebeep=0;//hcsr501人体检测if(KEY5==1)OLED_ShowCN(96,2,8); //有elseOLED_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);//清除中断挂起标志位}
}
七、单片机实物资料

