零基础学会制作 基于STM32/51自动充电蓝牙智能台灯系统设计/智能台灯/台灯/智能照明

项目介绍

要求设计一个基于单片机的智能台灯,该装置应具有电量检测与显示功能,且低电量时可自动充电,智能台灯应亮度可调且具备无线控制功能。本智能台灯设计具备多种先进功能,满足现代家居的需求。首先,台灯支持手动和自动两种模式调整亮度,方便用户根据需要选择合适的光照强度。其次,台灯配备独立电源,当电量低时,台灯能自动启动充电功能。此外,台灯支持无线控制功能,用户可以远程调整亮度,增加了使用的便利性。最后,台灯具有智能感应功能,在无人时自动熄灭,有效节省能源。

功能介绍

针对中国学生近视率上升和坐姿不良的问题,本研究提出了一种基于STM32单片机的智能台灯控制系统[10]。该系统以STM32单片机为核心,利用其强大的计算能力和灵活的接口,实现了台灯的智能控制。首先,系统通过人体检测模块来判断是否有人在台灯周围,从而控制台灯的开启和关闭。这样既节省了能源,又避免了长时间无人使用时灯具的不必要运行[11]。其次,自动调光模块能实时检测环境光照强度,并通过PWM(脉冲宽度调制)技术调节台灯的亮度。这种自动调节机制确保了学习环境的光照强度始终保持在一个对眼睛友好的水平。另外,该系统还提供手动模式,用户可以通过按键模块根据个人需求手动调节台灯的亮度,增加了使用的灵活性。使用蓝牙模块可以进行远程操控。最为重要的是,系统内置了坐姿调整模块,能够监测用户与台灯的距离。如果用户距离台灯太近,低于设定的安全距离,系统会发出警报提醒用户调整坐姿,从而避免长时间不良姿势对身体造成的伤害。这种智能台灯控制系统能有效调节光照强度和纠正坐姿,为使用者提供一个视力保护和坐姿纠正双重优势的学习环境。这对于改善学生群体的视力健康和坐姿习惯具有积极意义。

所用模块

本系统由主控制器、人体检测、自动调光、坐姿调整、按键、蓝牙通讯模块及显示等多个模块组成。该装置应具有电量检测与显示功能,且低电量时可自动充电,智能台灯应亮度可调且具备无线控制功能。在系统通电后,人体检测模块首先运作,检测台灯周围是否有人,以此控制台灯的开启或关闭。用户若需根据具体需求调节亮度,可通过按键模块手动切换至调光模式进行操作。自动调光模块通过光敏电阻来感知环境光线的强度,主控制器接收并处理这些光照强度信号。利用脉冲宽度调制(PWM)技术调节输出波形的占空比,从而实现台灯亮度的自动调节。同时,坐姿调整模块监测使用者与台灯的距离,主控制器对这些距离信号进行处理,以辅助使用者及时调整坐姿,保持健康的学习环境

实物图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

原理图

在这里插入图片描述

部分代码

#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”
float adcx,temp;
extern u8 Res;
extern int miao,fen,shi;
int main(void)
{
float distance;
vu8 key=0;
int a=0,flag=0,time_flag=0,level=3; //a代表按键的值,flag自动手动。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(); //超声波初始化
TIM1_PWM_Init(3200,71);//不分频。 PWM频率3200hz
TIM3_Int_Init(9999,7199);//10Khz的计数频率,计数到10000为1000ms为1s
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;
while(1)
{
key=KEY_Scan(0); //得到键值
if(key>0)
{
switch(key)
{
case KEY2_PRES: //控制灯亮度减弱
a=2;
break;
case KEY1_PRES: //计时
a=1;
break;
case KEY3_PRES: //控制灯亮度增加
a=3;
break;
case KEY4_PRES: //切换模式
a=4;
break;
}
}else delay_ms(10);

//光照强度采集
adcx=Get_Adc_Average(ADC_Channel_1,10);
temp=(float)adcx*(3.3/4096); //temp单位为v
adcx=temp*1000; //单位为mv
OLED_ShowNums(40,2,adcx,4,1);
delay_ms(50); //延时300ms
//超声波数据采集
distance = Hcsr04GetLength();
OLED_ShowNums(40,4,distance,4,1);
delay_ms(50); //延时300ms
// OLED_ShowNums(0,6,KEY5,1,1);
//hcsr501人体检测
if(KEY51)
OLED_ShowCN(80,2,8); //有
else
OLED_ShowCN(80,2,9); //无
//蓝牙控制
if(Res
1)
{
a=1;
Res=0;
USART_SendData(USART1,‘O’);//向串口1发送数据给蓝牙模块
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
USART_SendData(USART1,‘K’);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
else if(Res2)
{
a=2;
Res=0;
USART_SendData(USART1,‘O’);//向串口1发送数据给蓝牙模块
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
USART_SendData(USART1,‘K’);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
else if(Res
3)
{
a=3;
Res=0;
USART_SendData(USART1,‘O’);//向串口1发送数据给蓝牙模块
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
USART_SendData(USART1,‘K’);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束
}
else if(Res==4)
{
a=4;
Res=0;
USART_SendData(USART1,‘O’);//向串口1发送数据给蓝牙模块
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//等待发送结束

资料下载链接

「实物制作资料.rar」,来自夸克网盘分享。
夸克网盘无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
/9ac5346gXR😕
链接:https://pan.quark.cn/s/d2ad8fd8cd73
提取码:d1hQ

  • 13
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值