基于单片机智能照明灯设计

举报
DS小龙哥 发表于 2025/01/09 00:03:29 2025/01/09
527 0 0
【摘要】 本项目在设计一个基于单片机的智能照明灯系统,采用STM32F103RCT6为主控芯片,结合超声波传感器进行坐姿检测,利用蓝牙与手机APP进行远程控制,提供更加个性化和智能化的灯光解决方案。

智能照明灯设计文档


1. 项目开发背景

随着科技的发展和智能家居的普及,传统的照明系统已逐渐无法满足现代人的需求。智能照明系统的出现使得灯光控制更加智能化、个性化和高效化。智能照明不仅仅依赖于人工操作,还能够根据环境、人体感应、光线变化等多种因素自动调节。尤其在现代家庭和办公环境中,智能灯具能够为人们提供更加舒适、便捷的光照体验。

本项目旨在设计一个基于单片机的智能照明灯系统,采用STM32F103RCT6为主控芯片,结合超声波传感器进行坐姿检测,利用蓝牙与手机APP进行远程控制,提供更加个性化和智能化的灯光解决方案。系统将具备多种控制方式,如人体感应控制、外界光线调节、定时控制等,并具备低功耗设计,通过锂电池供电,减少对外接电源的依赖,确保系统的灵活性与便捷性。

image-20250108233635818

2. 设计实现的功能

本项目的智能照明灯设计实现了以下主要功能:

  1. 1. 智能感应:通过人体感应模块检测是否有人员进入照明范围,自动控制LED灯条的亮灭。
  2. 2. 智能调光:根据环境光线变化,自动调节LED灯条的亮度,以保证舒适的照明效果。
  3. 3. 启动控制:通过按键控制LED灯条的开关,方便手动操作。
  4. 4. 亮度控制:通过按键调节LED灯条的亮度,实现个性化的照明需求。
  5. 5. 定时控制:按键控制灯条的定时关灯功能,定时自动关闭灯光,避免浪费能源。
  6. 6. 灯色控制:通过按键切换三种灯光颜色(白色、黄色、亮色),适应不同的使用场景。
  7. 7. OLED显示屏:显示当前灯光模式、亮度、灯条状态及坐姿检测状态,提供实时反馈。
  8. 8. 坐姿监测:利用超声波传感器检测坐姿是否正确,若坐姿不正确,启动蜂鸣器进行提示;当坐姿正确时,关闭蜂鸣器。
  9. 9. 手机APP远程控制:通过蓝牙通讯,用户可以在手机APP端控制灯具的开关、亮度、定时、灯光颜色切换、模式选择及坐姿监测功能。
  10. 10. 锂电池供电:系统采用锂电池作为电源,不需要外接220V电源,支持USB充电,并通过LED指示灯显示电池电量。

3. 项目硬件模块组成

项目的硬件设计涉及多个模块,具体组成如下:

  • • 主控芯片:STM32F103RCT6
    • • 作为本系统的核心控制单元,负责系统的所有控制逻辑、数据处理及通讯任务。
  • • 人体感应模块:PIR传感器
    • • 用于检测是否有人员进入照明区域,从而自动控制LED灯条的亮灭。
  • • 环境光感应模块:光敏电阻
    • • 检测周围环境的光线强度,自动调节LED灯条的亮度以适应环境光照条件。
  • • 超声波传感器:HC-SR04
    • • 用于检测坐姿的正确性,通过测量距离来判断坐姿是否符合标准。
  • • LED灯条:RGB LED
    • • 提供不同的光线颜色和亮度,用户可以根据需求进行调节。
  • • OLED显示屏:0.96寸OLED显示模块
    • • 显示当前工作模式、光线亮度、灯条状态及坐姿检测状态。
  • • 蓝牙模块:HC-05
    • • 提供蓝牙通讯功能,使得用户可以通过手机APP远程控制灯具。
  • • 蜂鸣器:小型蜂鸣器
    • • 用于在坐姿不正确时发出声音提示,提醒用户调整姿势。
  • • 电源管理:锂电池及充电电路
    • • 提供系统所需的电力,支持USB充电,确保系统的持续运行。

4. 设计思路

本系统的设计思路围绕智能化、低功耗、便捷性展开。为了实现各项功能,系统采用STM32F103RCT6作为主控芯片,具有较强的计算能力和丰富的外设接口。具体设计步骤如下:

  1. 1. 硬件选型与电路设计:根据各模块的需求,选择合适的传感器、显示模块和通信模块。通过合理的电路设计,使得各个模块能够高效、稳定地协同工作。
  2. 2. 软件开发与调试:在STM32上进行软件编程,完成传感器数据采集、LED控制、按键输入、蓝牙通讯、坐姿监测等功能的实现。通过调试确保系统的稳定性和准确性。
  3. 3. 用户界面设计:使用Qt (C++)开发手机APP,通过蓝牙实现远程控制功能。APP界面简洁直观,操作便捷,用户可以轻松控制灯具的各项功能。
  4. 4. 电池管理:通过锂电池供电,采用USB充电设计,保证系统的低功耗运行,并提供电池电量显示,提醒用户充电。
  5. 5. 测试与优化:进行功能测试、稳定性测试、用户体验测试等,确保系统满足设计要求,并对性能进行优化。

5. 系统功能总结

功能 描述 控制方式
智能感应 根据人体是否存在,自动控制灯条亮灭 PIR传感器
智能调光 根据外界光线强度自动调节亮度 光敏电阻
启动控制 按键控制开关 按键
亮度控制 按键调节亮度 按键
定时控制 按键控制定时关灯 按键
灯色控制 按键切换灯光颜色 按键
OLED显示 显示当前状态与模式 OLED显示屏
坐姿监测 检测坐姿是否正确 超声波传感器
手机APP控制 蓝牙远程控制 蓝牙
锂电池供电 提供电力,支持USB充电 锂电池

6. 技术方案

  •  硬件平台:STM32F103RCT6,具有较高的处理能力和丰富的接口,适用于本项目的各种传感器和模块的连接。
  •  开发语言与工具:使用C语言进行嵌入式编程,Qt (C++)进行手机APP开发,采用STM32CubeMX进行硬件配置。
  •  通讯方式:蓝牙(HC-05模块)用于与手机APP进行远程控制,USB充电接口用于锂电池充电。
  •  电源管理:系统采用锂电池供电,支持USB充电,具有低功耗设计,确保长时间运行。

7. 使用的模块技术详情介绍

  1. 1. STM32F103RCT6:32位微控制器,支持多种外设接口,适合复杂控制任务。
  2. 2. PIR传感器:用于人体运动检测,输出低电平表示检测到运动,输出高电平表示未检测到运动。
  3. 3. 光敏电阻:根据周围光照强度变化,调整LED灯条的亮度,确保节能。
  4. 4. HC-SR04超声波传感器:通过发送超声波并接收回波,计算距离,从而判断坐姿是否符合标准。
  5. 5. OLED显示屏:小尺寸、低功耗、高对比度,适合显示实时数据。
  6. 6. HC-05蓝牙模块:支持蓝牙串口通讯,能够与手机APP进行数据交换。
  7. 7. 蜂鸣器:用于声音提示,提醒用户进行调整。

8. 预期成果

  1. 1. 实现一个功能完整的智能照明灯系统,能够根据人体感应、环境光照变化、定时控制等自动调整灯光。
  2. 2. 设计并实现一款手机APP,支持远程控制灯光设置、坐姿检测等功能。
  3. 3. 系统具有低功耗设计,能够通过锂电池独立供电,适用于不同场景的照明需求。
  4. 4. 提供清晰的OLED显示,便于用户查看当前状态和模式。
  5. 5. 系统稳定性高,操作简便,用户体验良好。

9. 总结

本项目设计的智能照明灯系统实现了多种智能控制功能,能够自动根据环境和人体感应调整照明状态,且具有良好的用户交互体验。通过结合现代的传感技术、智能控制技术和蓝牙通信,本系统在确保照明效果的同时,极大提高了系统的能效,提供了更为便捷的操作方式,具有很高的实用价值。

系统的创新点在于:

  1. 1. 智能感应与自动调节功能:系统不仅具备基于人体感应的自动开关灯功能,还能根据环境光照强度智能调节LED灯条的亮度,达到节能的效果。
  2. 2. 坐姿监测:系统集成了超声波传感器进行坐姿监测,具有健康管理功能,能够实时检测坐姿不当并通过蜂鸣器发出警告,提醒用户保持正确坐姿,有助于提升用户的身体健康。
  3. 3. 远程控制与个性化设置:用户可以通过手机APP远程控制灯光的亮度、颜色、定时、模式等,操作灵活方便。同时,灯具的个性化设置可以通过多种按键控制和APP交互来实现。
  4. 4. 低功耗设计:系统采用锂电池供电,支持USB充电设计,不依赖外部电源插座。通过电池电量显示和智能电源管理功能,能够确保长期稳定运行。
  5. 5. 实时状态反馈:OLED显示屏能够清晰地显示系统的当前状态,如灯光模式、亮度、灯条状态及坐姿监测的实时反馈,方便用户查看和调整。

本设计通过STM32F103RCT6为核心控制芯片,结合超声波、光敏电阻、PIR传感器等多种传感技术,成功实现了一个多功能智能照明系统。系统不仅具有自动调光、定时控制、灯色切换等功能,还结合坐姿监测提供健康提醒,并通过蓝牙与手机APP进行远程控制。系统具有低功耗、高效率和较好的用户体验,满足了智能家居的多样化需求。

随着未来智能家居行业的不断发展,本项目的设计可以不断优化和完善,继续推动智能家居技术的应用,提升人们的生活质量。

10. STM32设计

下面是 STM32F103RCT6 控制的智能照明灯系统的 main.c 文件。这段代码包括了主控制流程、各个模块的初始化与协作,以及基本的控制逻辑。

main.c 示例代码

#include "stm32f10x.h"
#include "stdio.h"
#include "oled.h"
#include "pwm.h"
#include "sensor.h"
#include "bluetooth.h"
#include "buzzer.h"
#include "led.h"
#include "button.h"
#include "timer.h"
#include "lcd.h"

// 定义常量
#define LIGHT_MODE_WHITE   1
#define LIGHT_MODE_YELLOW  2
#define LIGHT_MODE_BRIGHT  3

// 全局变量
uint8_t light_mode = LIGHT_MODE_WHITE;  // 当前灯光模式
uint8_t light_brightness = 50;          // 当前亮度(50%)
uint8_t motion_detected = 0;            // 人体感应状态
uint8_t sit_correct = 0;                // 坐姿监测状态

// 函数声明
void SystemInit(void);
void Initialize(void);
void UpdateLight(void);
void UpdateSitPosition(void);
void DisplayStatus(void);
void ButtonControl(void);
void TimerControl(void);

int main(void)
{
    // 初始化系统
    SystemInit();
    Initialize();

    // 主循环
    while (1)
    {
        // 按键控制(亮度、定时、灯光颜色等)
        ButtonControl();

        // 更新灯光状态
        UpdateLight();

        // 更新坐姿检测
        UpdateSitPosition();

        // 显示状态信息
        DisplayStatus();

        // 定时任务处理
        TimerControl();

        // 可加入睡眠模式等其他低功耗处理(根据需要)
    }
}

// 初始化各个模块
void Initialize(void)
{
    // 初始化OLED显示屏
    OLED_Init();

    // 初始化PWM(用于LED亮度控制)
    PWM_Init();

    // 初始化PIR传感器
    PIR_Init();

    // 初始化光敏电阻(用于自动调节亮度)
    LightSensor_Init();

    // 初始化超声波传感器(用于坐姿检测)
    Ultrasonic_Init();

    // 初始化蓝牙模块
    Bluetooth_Init();

    // 初始化蜂鸣器
    Buzzer_Init();

    // 初始化按键控制
    Button_Init();

    // 初始化定时器(定时控制)
    Timer_Init();
}

// 更新灯光控制状态
void UpdateLight(void)
{
    // 根据人体感应状态控制灯光
    motion_detected = PIR_Read();
    if (motion_detected)
    {
        // 人体感应到则点亮灯光
        LED_On();
    }
    else
    {
        // 没有人体感应时,判断定时是否关闭灯光
        LED_Off();
    }

    // 根据环境光强度自动调节亮度
    int light_level = LightSensor_Read();
    light_brightness = map(light_level, 0, 1023, 0, 100);  // 映射光照值到亮度百分比

    // 设置LED亮度
    PWM_SetDutyCycle(light_brightness);

    // 根据当前的灯光模式选择颜色
    switch (light_mode)
    {
        case LIGHT_MODE_WHITE:
            LED_SetColor(WHITE);  // 设置为白色
            break;
        case LIGHT_MODE_YELLOW:
            LED_SetColor(YELLOW); // 设置为黄色
            break;
        case LIGHT_MODE_BRIGHT:
            LED_SetColor(BRIGHT); // 设置为亮色
            break;
        default:
            break;
    }
}

// 更新坐姿检测状态
void UpdateSitPosition(void)
{
    // 读取超声波传感器的数据来检测坐姿
    sit_correct = Ultrasonic_Read();
    if (!sit_correct)
    {
        // 坐姿不正确时,开启蜂鸣器发出声音提示
        Buzzer_On();
    }
    else
    {
        // 坐姿正确时,关闭蜂鸣器
        Buzzer_Off();
    }
}

// 显示当前状态信息
void DisplayStatus(void)
{
    // 在OLED上显示当前的灯光模式、亮度、坐姿状态等
    OLED_Clear();
    OLED_SetCursor(0, 0);

    // 显示灯光模式
    if (light_mode == LIGHT_MODE_WHITE)
        OLED_Print("Mode: White");
    else if (light_mode == LIGHT_MODE_YELLOW)
        OLED_Print("Mode: Yellow");
    else
        OLED_Print("Mode: Bright");

    // 显示亮度
    OLED_SetCursor(0, 1);
    OLED_Print("Brightness: ");
    OLED_PrintNum(light_brightness);

    // 显示坐姿状态
    OLED_SetCursor(0, 2);
    if (sit_correct)
        OLED_Print("Sit: Correct");
    else
        OLED_Print("Sit: Incorrect");
}

// 按键控制(控制灯光的开关、亮度、定时等)
void ButtonControl(void)
{
    // 检查按键输入,控制灯光开关、亮度、灯光颜色等
    if (Button_Pressed())
    {
        if (Button_Read() == BUTTON_MODE_CHANGE)
        {
            // 切换灯光模式(白色、黄色、亮色)
            light_mode++;
            if (light_mode > LIGHT_MODE_BRIGHT)
                light_mode = LIGHT_MODE_WHITE;
        }
        else if (Button_Read() == BUTTON_BRIGHTNESS_UP)
        {
            // 增加亮度
            if (light_brightness < 100)
                light_brightness += 10;
        }
        else if (Button_Read() == BUTTON_BRIGHTNESS_DOWN)
        {
            // 降低亮度
            if (light_brightness > 0)
                light_brightness -= 10;
        }
    }
}

// 定时控制(实现定时关灯、定时任务等)
void TimerControl(void)
{
    static uint32_t last_time = 0;
    uint32_t current_time = GetSysTickCount();

    // 定时控制灯光关闭
    if (current_time - last_time > 10000) // 10秒定时关闭灯光
    {
        last_time = current_time;
        LED_Off();  // 关闭灯光
    }
}

// 映射函数(将传感器输入映射到指定范围)
int map(int value, int from_low, int from_high, int to_low, int to_high)
{
    return (value - from_low) * (to_high - to_low) / (from_high - from_low) + to_low;
}

代码说明:

  1. 1. 主控逻辑
    •  main() 函数中进入主循环,定期调用 ButtonControl()UpdateLight()UpdateSitPosition()DisplayStatus() 等函数来处理按键控制、灯光控制、坐姿监测和状态显示。
  2. 2. 模块初始化
    •  Initialize() 函数用于初始化所有硬件模块,包括OLED显示、PIR传感器、环境光传感器、超声波传感器、蓝牙模块等。
  3. 3. 灯光控制
    • • 根据人体感应和环境光线强度,自动调整灯光状态(开/关、亮度、颜色)。使用PWM控制亮度,并根据光线强度动态调整亮度。
  4. 4. 坐姿监测
    • • 使用超声波传感器来检测坐姿是否正确,若检测到坐姿不正确,则启用蜂鸣器进行提示。
  5. 5. 按键控制
    • • 按键控制灯光的模式切换、亮度调节等操作。
  6. 6. 定时控制
    • • 使用系统定时器进行定时控制功能,比如10秒后自动关闭灯光。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。