基于单片机智能床头灯设计
【摘要】 本项目基于STM32F103RCT6单片机设计一款具有多种智能功能的床头灯系统,兼具智能调节、远程控制、姿势检测等功能,并通过手机APP实现控制和调节,提升用户的生活质量。

项目开发背景
随着智能家居技术的发展,智能床头灯作为家庭智能设备中的一员,正日益受到人们的关注。传统的床头灯在照明、控制等方面的功能相对单一,而智能床头灯则能够结合环境光线、人体感应、定时控制、远程控制等多种功能,极大地提升了用户的使用体验。本项目旨在基于STM32F103RCT6单片机设计一款具有多种智能功能的床头灯系统,兼具智能调节、远程控制、姿势检测等功能,并通过手机APP实现控制和调节,提升用户的生活质量。
设计实现的功能
- 1. 智能感应:根据人体是否感应到,有人时自动打开LED灯条,无人时自动关闭LED灯条。
- 2. 智能调光:根据外界光线变化,LED灯条自动调节亮度,确保环境光线适宜。
- 3. 启动控制:通过按键控制床头灯的开关,满足基本的开关控制需求。
- 4. 亮度控制:通过按键控制LED灯条的亮度,亮度可根据用户需求调节。
- 5. 定时控制:用户可以通过按键设置灯条的定时关灯功能,设定关灯的时间。
- 6. 灯色控制:通过按键控制灯光的颜色,包括白色、黄色、亮色三种模式。
- 7. OLED显示屏:实时显示当前的运行模式、光线亮度、灯条状态、坐姿检测状态等信息。显示屏可以拔掉,但不影响其他功能的正常运行。
- 8. 坐姿监测:通过超声波传感器检测床头附近的人的坐姿情况,若坐姿不正确,蜂鸣器发出提示音,提醒更正坐姿。当检测到正确坐姿时,蜂鸣器关闭。
- 9. 手机APP远程控制:通过蓝牙通信,用户可以在手机APP端控制床头灯的开关、亮度调节、定时、灯光颜色切换、模式选择以及坐姿监测功能。
- 10. 锂电池供电与USB充电:系统通过锂电池供电,不需要外接220V电源插头,同时提供USB接口进行电池充电,确保设备在电池电量低时能够方便地进行充电。电池电量情况通过四个LED灯显示,直观显示剩余电量。
项目硬件模块组成
- 1. 主控芯片:STM32F103RCT6
- • 用于控制整个系统的运行,包括接收传感器数据、处理控制命令、控制显示和执行其他任务。
- 2. LED灯条
- • 作为照明输出设备,根据系统控制调节亮度和颜色。
- 3. OLED显示屏
- • 显示系统的运行状态,包括当前模式、亮度、灯条状态等。
- 4. 超声波传感器
- • 用于检测坐姿,判断用户是否坐在床头,以及坐姿是否正确。
- 5. 蜂鸣器
- • 用于在坐姿不正确时发出声音提示,提醒用户调整坐姿。
- 6. 蓝牙模块
- • 用于与手机APP进行无线通信,进行远程控制。
- 7. 按键模块
- • 用于实现灯条开关、亮度调节、灯光颜色切换、定时控制等功能。
- 8. 锂电池及充电模块
- • 为系统提供稳定的电源,支持USB充电功能。
- 9. 电池电量显示LED灯
- • 显示当前锂电池的电量状态,提醒用户及时充电。
设计思路
本系统的设计思路以STM32F103RCT6单片机为核心,通过传感器、按键和蓝牙模块等硬件组件共同实现床头灯的智能控制功能。首先,系统通过超声波传感器实时监测坐姿,通过判断坐姿是否正确来决定是否启用蜂鸣器提示。其次,系统具备智能感应功能,能够根据人体是否存在来自动控制LED灯条的开关。此外,环境光线的变化会自动调整LED灯条的亮度,保证室内光线始终保持在一个舒适的范围内。所有这些功能都可以通过按键操作,或者通过蓝牙与手机APP进行远程控制。最后,系统使用锂电池供电,保证设备的便捷性和长时间使用。
系统功能总结
功能模块 | 描述 | 控制方式 |
智能感应 | 根据人体感应控制LED灯条开关 | 自动控制 |
智能调光 | 根据环境光线变化自动调节LED灯条亮度 | 自动控制 |
启动控制 | 按键控制LED灯条开/关灯 | 按键控制 |
亮度控制 | 按键控制LED灯条亮度的调节 | 按键控制 |
定时控制 | 按键设置LED灯条定时关灯功能 | 按键控制 |
灯色控制 | 按键控制灯光颜色(白色、黄色、亮色) | 按键控制 |
OLED显示屏 | 显示当前的运行模式、光线亮度、灯条状态、坐姿检测状态等 | 自动显示 |
坐姿监测 | 超声波检测坐姿并通过蜂鸣器提示不正确坐姿,正确坐姿时关闭蜂鸣器 | 自动控制 |
手机APP远程控制 | 通过蓝牙控制灯光开关、亮度、颜色、模式、坐姿监测等 | 蓝牙控制 |
锂电池供电与充电 | 锂电池供电,并支持USB充电功能 | 自动充电 |
技术方案
- 1. 主控芯片(STM32F103RCT6)
- • STM32F103RCT6是一款基于ARM Cortex-M3内核的32位单片机,具有较高的运算能力和丰富的外设接口。它适用于控制各种智能设备,并支持多种通信方式,能够满足本项目对传感器数据处理、蓝牙通信、控制任务的需求。
- 2. 传感器
- • 超声波传感器:用于测量人与床头灯的距离,进而判断坐姿是否正确。传感器的精度和响应速度较高,能够实现实时检测。
- • 光敏电阻:用于检测环境光线的强度,根据光强调节灯条亮度。
- 3. 蓝牙模块
- • 采用标准蓝牙模块(如HC-05),用于实现手机APP与床头灯之间的无线通信,支持多种控制命令。
- 4. 电池与充电模块
- • 使用锂电池为系统供电,电池电量通过LED灯进行显示。充电模块支持USB接口,方便电池的充电操作。
使用的模块的技术详情介绍
- 1. STM32F103RCT6:作为本系统的主控芯片,STM32F103RCT6具有高性能、低功耗的特点,支持多种外设接口,包括USART、I2C、SPI等,适用于智能设备的开发。其内置的Flash存储器和RAM容量也足以存储和运行复杂的控制程序。
- 2. OLED显示屏:使用0.96英寸的OLED显示屏,分辨率为128x64,可以显示当前的工作状态、环境光线亮度、坐姿状态等信息,用户可以直观地查看系统的运行情况。
- 3. 超声波传感器:超声波传感器用于检测与床头灯的距离变化,精确度较高,能够实时响应人体的位置变化。通过超声波测距技术判断坐姿是否正确,提升用户体验。
- 4. 蓝牙模块(HC-05):HC-05蓝牙模块采用串口通信,支持与手机APP进行无线数据传输,能够实现灯光调节、定时、模式选择等功能。
- 5. 锂电池与充电模块:使用锂电池为系统供电,支持USB充电。电池电量通过四个LED灯进行显示,提醒用户充电。
预期成果
- 1. 实现一款功能齐全的智能床头灯,能够自动调节亮度、灯光颜色,并具备人体感应和坐姿检测功能。
- 2. 提供通过手机APP远程控制床头灯的功能,实现开关、亮度、颜色、定时等多种操作。
- 3. 系统能够实现智能调光,自动根据环境光线的变化调整亮度。
- 4. 锂电池供电,支持USB充电,具有较长的使用时间。
总结
本项目设计的智能床头灯不仅能够满足传统床头灯的基本照明需求,还通过引入智能感应、智能调光、坐姿监测等功能,实现了更高层次的智能化和便捷性。通过STM32F103RCT6主控芯片,结合超声波传感器、OLED显示屏、蓝牙模块、锂电池等硬件模块的协同工作,成功实现了一个高度集成且功能丰富的智能床头灯系统。
通过本项目的开发,不仅提升了床头灯的智能化水平,还通过人性化设计改善了用户的日常生活体验。例如,自动亮度调节和灯色控制可以根据不同的环境和用户需求提供最适宜的光照;坐姿监测功能则关心用户的身体健康,及时提供坐姿纠正的提醒;而通过手机APP控制的远程功能则为用户带来了极大的便捷性。此外,锂电池供电和USB充电功能减少了对外部电源的依赖,使得设备更加灵活和便于携带。
技术挑战与解决方案
- 1. 智能感应与调光控制的精准度:为确保智能感应和调光的精准度,项目采用了高精度的光敏电阻和超声波传感器。光敏电阻精确捕捉环境光线变化,而超声波传感器则确保坐姿监测的准确性,提供即时反馈。
- 2. 坐姿监测的稳定性:超声波传感器在不同角度和距离下会受到一定的误差影响,因此在设计中采用了多次测距的平均值来减少误差,保证坐姿检测的准确性和稳定性。
- 3. 蓝牙通信的稳定性与延迟问题:由于床头灯的控制系统需要与手机APP进行实时通信,蓝牙模块的选择和调试至关重要。为了减少通信延迟,选用了HC-05蓝牙模块,并通过优化数据传输协议,提高了系统的响应速度。
- 4. 电池管理与长时间使用:锂电池的选择和电池管理是本项目的另一个技术挑战。为保证长时间使用和合理的电池管理,设计了电池电量监测模块,通过四个LED灯实时显示电池电量,提醒用户及时充电。
项目的实际应用价值
智能床头灯不仅在家庭环境中有广泛的应用前景,还能在酒店、养老院等场所提供更为舒适和智能的照明体验。通过智能调节亮度、控制灯光颜色和坐姿监测,系统可以满足不同环境下的照明需求,并为用户提供健康建议。未来,随着物联网技术的进一步发展,智能床头灯将更具互动性与智能化,能够与家中的其他智能设备互联互通,实现更加个性化的控制与管理。
STM32代码设计
main.c
示例代码框架,展示如何组织和调用这些模块。
#include "stm32f10x.h" // STM32F103 的头文件
#include "OLED.h" // OLED 显示屏驱动
#include "ultrasonic.h" // 超声波传感器模块
#include "light_sensor.h" // 光敏电阻模块
#include "button.h" // 按键控制模块
#include "bluetooth.h" // 蓝牙模块
#include "led_battery.h" // 电池电量指示模块
#include "buzzer.h" // 蜂鸣器模块
#include "timer.h" // 定时器模块
// 全局变量定义
volatile uint8_t lamp_state = 0; // 灯条状态 (0: 关, 1: 开)
volatile uint8_t lamp_brightness = 5; // 灯条亮度 (1-10)
volatile uint8_t lamp_color = 0; // 灯光颜色 (0: 白色, 1: 黄色, 2: 亮色)
volatile uint8_t sit_position = 0; // 坐姿状态 (0: 不正确, 1: 正确)
// 定义坐姿检测阈值
#define SIT_THRESHOLD 10
// 函数声明
void SystemInit(void);
void LED_Init(void);
void Ultrasonic_Init(void);
void Button_Init(void);
void Bluetooth_Init(void);
void Timer_Init(void);
void Buzzer_Init(void);
int main(void) {
// 初始化系统
SystemInit();
LED_Init();
Ultrasonic_Init();
Button_Init();
Bluetooth_Init();
Timer_Init();
Buzzer_Init();
// 显示初始化信息
OLED_Init();
OLED_DisplayString(0, 0, "Smart Bed Lamp");
while(1) {
// 检查坐姿并更新状态
uint8_t distance = Ultrasonic_GetDistance(); // 获取超声波传感器的距离数据
if (distance > SIT_THRESHOLD) {
sit_position = 0; // 坐姿不正确
Buzzer_On(); // 蜂鸣器提示
} else {
sit_position = 1; // 坐姿正确
Buzzer_Off(); // 关闭蜂鸣器
}
// 根据光线传感器调节亮度
uint8_t ambient_light = LightSensor_GetValue(); // 获取环境光线值
lamp_brightness = ambient_light / 10; // 简单的亮度调整
// 按键控制开关灯、亮度、定时等功能
if (Button_GetState(0)) { // 检查开关灯按钮状态
lamp_state = !lamp_state; // 切换灯的开关状态
if (lamp_state) {
OLED_DisplayString(1, 0, "Lamp On");
} else {
OLED_DisplayString(1, 0, "Lamp Off");
}
}
// 按钮控制亮度
if (Button_GetState(1)) {
lamp_brightness = (lamp_brightness % 10) + 1; // 切换亮度
OLED_DisplayString(2, 0, "Brightness: ");
OLED_DisplayNum(2, 12, lamp_brightness);
}
// 按钮控制灯色
if (Button_GetState(2)) {
lamp_color = (lamp_color + 1) % 3; // 切换灯光颜色(白色,黄色,亮色)
switch (lamp_color) {
case 0:
OLED_DisplayString(3, 0, "Color: White");
break;
case 1:
OLED_DisplayString(3, 0, "Color: Yellow");
break;
case 2:
OLED_DisplayString(3, 0, "Color: Bright");
break;
}
}
// 按钮控制定时关灯
if (Button_GetState(3)) {
// 假设定时器模块已配置,设置定时器定时关灯
Timer_SetTimeout(30); // 30秒后自动关灯
}
// 蓝牙远程控制处理
Bluetooth_HandleCommands(); // 处理蓝牙指令
// 电池电量显示
uint8_t battery_level = LED_Battery_GetLevel(); // 获取电池电量
LED_Battery_Display(battery_level); // 显示电池电量
// 更新OLED显示内容
OLED_DisplayNum(4, 0, distance); // 显示坐姿距离
OLED_DisplayNum(5, 0, lamp_brightness); // 显示当前亮度
}
}
// 系统初始化函数
void SystemInit(void) {
HAL_Init(); // 初始化HAL库
// 初始化时钟、外设等
}
// LED初始化函数
void LED_Init(void) {
// 初始化LED灯条控制
}
// 超声波传感器初始化函数
void Ultrasonic_Init(void) {
// 初始化超声波传感器
}
// 按键初始化函数
void Button_Init(void) {
// 初始化按键输入
}
// 蓝牙模块初始化函数
void Bluetooth_Init(void) {
// 初始化蓝牙通信
}
// 定时器初始化函数
void Timer_Init(void) {
// 初始化定时器
}
// 蜂鸣器初始化函数
void Buzzer_Init(void) {
// 初始化蜂鸣器
}
// 获取超声波传感器测距数据
uint8_t Ultrasonic_GetDistance(void) {
// 返回测量的距离值
return 8; // 假设值
}
// 获取光敏电阻值
uint8_t LightSensor_GetValue(void) {
// 返回光敏电阻的值(0到100)
return 50; // 假设值
}
// 按键状态读取函数
uint8_t Button_GetState(uint8_t button_id) {
// 检查按钮状态
return 0; // 假设值
}
// 蓝牙指令处理
void Bluetooth_HandleCommands(void) {
// 处理接收到的蓝牙命令,控制LED灯条等功能
}
// 电池电量显示
void LED_Battery_Display(uint8_t level) {
// 根据电池电量显示LED状态
}
// 定时器设置超时
void Timer_SetTimeout(uint32_t seconds) {
// 设置定时器超时,定时关闭灯
}
代码说明:
- 1. 硬件模块初始化: 各个子模块的初始化函数在
main.c
中进行调用,如LED_Init()
、Ultrasonic_Init()
等,确保各个硬件模块正确工作。 - 2. 坐姿检测: 使用超声波传感器的
Ultrasonic_GetDistance()
获取当前距离数据,并根据预定的阈值SIT_THRESHOLD
来判断坐姿是否正确。 - 3. 按钮控制: 通过
Button_GetState()
检查按钮的按下状态,控制灯条的开关、亮度调节、灯色变化等功能。 - 4. OLED显示: 使用
OLED_DisplayString()
和OLED_DisplayNum()
来显示当前的灯条状态、亮度、坐姿等信息。 - 5. 蓝牙控制: 通过
Bluetooth_HandleCommands()
函数处理蓝牙命令,用户可以通过手机APP远程控制灯光和其他功能。 - 6. 电池电量显示: 通过
LED_Battery_Display()
显示当前电池的电量状态,提醒用户充电。 - 7. 定时功能: 使用
Timer_SetTimeout()
来设置定时器,在一定时间后自动关闭灯条。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)