0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32设计的智能台灯

DS小龙哥-嵌入式技术 来源:DS小龙哥-嵌入式技术 作者:DS小龙哥-嵌入式技 2024-11-19 09:26 次阅读

一、项目背景

智能家居设备在现代生活中起着越来越重要的作用。智能台灯作为其中的一种,具有调节光照亮度、色温等功能,更加符合人们对于光照环境的个性化需求。当前设计一款基于STM32微控制器设计的智能台灯,该台灯具备可调节亮度和色温的特点,为用户提供了更加舒适的使用体验。

image-20230707095753939

二、设计目标

【1】实现灯光的亮度和色温的可调节功能;

【2】添加人体感应模块,实现自动开关灯;

【3】实现手机远程控制灯光的功能;

【4】设计简洁、稳定的硬件电路和用户友好的操作界面。

三、系统架构

3.1 硬件部分

** (1) 主控芯片:选用STM32系列微控制器,具有丰富的外设资源和强大的处理能力;**

** (2) 电源部分:采用稳压电源模块,提供适宜电压的供电;**

** (3) 光源部分:选择高亮度LED作为光源,配备透明灯罩,提供均匀柔和的光照; **

**(4) 人体感应模块:采用红外传感器检测到人体活动时自动开启灯光; **

(5) 无线通信模块:使用WiFi或蓝牙模块,实现手机远程控制。

3.2 软件部分

(1) 嵌入式软件:使用Keil MDK作为开发环境,编写嵌入式C语言程序,实现灯光亮度和色温的调节、人体感应控制等功能;

** (2) 手机控制端:设计并开发手机App,通过与智能台灯连接,实现远程控制灯光的功能。**

3.3 硬件选型说明

【1】主控芯片:

采用STM32F103RCT6

【2】光源部分:

** (1) 高亮度LED:选择高亮度、节能的LED作为光源,推荐选择LED灯珠。**

** (2) 透明灯罩:选择高透光性的材料制作灯罩,保证光照均匀柔和。**

【3】人体感应模块:

(1) 红外传感器:选择灵敏度较高的红外传感器,能够快速、准确地检测到人体活动。

** (2) 光敏电阻:用于在光线不足时自动开启台灯,确保人体感应功能的正常工作。**

【4】无线通信模块

选择HC05蓝牙模块,以便与手机设备进行通信

3.4 硬件设计

【1】主控芯片选择:STM32F103RCT6,具有较高的性能和丰富的外设资源,适合作为智能台灯的核心处理器

【2】人体红外传感器:用于检测周围是否有人靠近;

【3】光敏传感器:用于检测环境光的强度;

【4】LED灯:作为台灯的光源,通过PWM控制其亮度;

【5】HC05蓝牙模块:用于与手机APP通信,接收控制命令并发送状态信息

3.5 软件设计

【1】GPIO配置:配置主控芯片的GPIO引脚,包括人体红外传感器输入引脚、光敏传感器输入引脚和LED灯控制引脚等;

【2】外部中断配置:通过外部中断来监听人体红外感应引脚的状态变化,在触发时进行相应操作;

【3】PWM配置:使用PWM控制LED灯的亮度,根据光敏传感器检测到的环境光强度动态调整PWM输出占空比;

【4】蓝牙通信:通过UART配置HC05蓝牙模块,与手机APP建立蓝牙连接,接收控制命令并发送台灯状态信息;

【5】主循环逻辑:在主循环中实时检测光敏传感器的数据以及人体红外感应引脚的状态,并根据相应条件进行台灯的开启和关闭操作;同时,检测蓝牙模块接收到的控制命令,并根据命令内容进行相应操作。

四、主要功能实现

【1】光照调节功能: 通过按键或旋钮操作,调节台灯光照的亮度和色温。亮度调节通过PWM控制LED的亮度,色温调节通过调节白光LED和彩光LED的相对亮度来实现。

【2】人体感应控制: 采用红外传感器,检测到人体活动后自动开启灯光,一段时间内没有人活动则自动关闭。

【3】远程控制功能: 手机App与智能台灯通过蓝牙通信,用户可以通过App控制灯光的开关、亮度和色温,实现远程控制功能。

五、代码实现

仿真工程代码下载: [https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink]

5.1 PWM波形控制LED灯亮度

include "stm32f10x.h"void PWM_Configuration(void);
void Delay(__IO uint32_t nCount);
​
int main(void) {
  PWM_Configuration();
​
  while (1) {
    // 逐渐增加LED亮度
    for (uint16_t i = 0; i <= 1000; i++) {
      TIM_SetCompare1(TIM2, i);  // 设置PWM占空比,范围:0-1000
      Delay(5000);               // 延时一段时间
    }
​
    // 逐渐减小LED亮度
    for (uint16_t i = 1000; i > 0; i--) {
      TIM_SetCompare1(TIM2, i);
      Delay(5000);
    }
  }
}
​
void PWM_Configuration(void) {
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
​
  // 配置GPIO口
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
​
  // 配置TIM2为PWM模式
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_OCInitTypeDef TIM_OCInitStructure;
​
  TIM_TimeBaseStructure.TIM_Period = 1000;                          // 设置周期
  TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;                     // 设置预分频
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
​
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                  // PWM模式1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 0;                                 // 初始占空比为0
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
  TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
​
  TIM_Cmd(TIM2, ENABLE);                                            // 使能TIM2
}
​
void Delay(__IO uint32_t nCount) {
  for (; nCount != 0; nCount--);
}

代码中使用了STM32的定时器TIM2和GPIOA的第0号引脚(PA0)来控制LED灯的亮度。在主函数中,通过循环逐渐增加和减小PWM的占空比,从而改变LED灯的亮度。

5.2 智能台灯逻辑代码

// 引入所需的库
#include < stdio.h >
#include < stdbool.h >// 定义引脚和设备地址
#define PIR_SENSOR_PIN 2
#define LIGHT_SENSOR_PIN 3
#define LED_PIN 4
#define HC05_BAUD_RATE 9600// 声明全局变量
bool isPersonDetected = false;
int lightIntensity = 0;
​
// 初始化函数
void setup() {
  // 配置引脚模式
  pinMode(PIR_SENSOR_PIN, INPUT);
  pinMode(LIGHT_SENSOR_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
​
  // 初始化串口通信
  Serial.begin(HC05_BAUD_RATE);
}
​
// 主循环函数
void loop() {
  // 检测人体红外感应
  if (digitalRead(PIR_SENSOR_PIN) == HIGH) {
    isPersonDetected = true;
  } else {
    isPersonDetected = false;
  }
​
  // 检测光敏传感器
  lightIntensity = analogRead(LIGHT_SENSOR_PIN);
​
  // 根据条件控制台灯
  if (isPersonDetected && lightIntensity < 500) {
    digitalWrite(LED_PIN, HIGH);
  } else {
    digitalWrite(LED_PIN, LOW);
  }
​
  // 处理蓝牙通信
  if (Serial.available()) {
    char command = Serial.read();
    handleBluetoothCommand(command);
  }
}
​
// 处理蓝牙命令函数
void handleBluetoothCommand(char command) {
  // 处理从手机APP发送来的命令,例如控制台灯亮度

}
​
// 主函数
int main() {
  setup();  // 初始化
  while (1) {
    loop();  // 主循环
  }
  return 0;
}

六、总结

当前文章介绍了基于STM32F103RCT6主控芯片的智能台灯的设计过程和实现原理。通过集成人体红外感应、光敏检测和与手机APP连接的功能,实现了台灯的自动开关和亮度调节等智能化操作。通过手机APP与蓝牙模块的连接,用户可以远程控制台灯的开关、亮度和模式等,提供了更加方便和智能化的使用体验。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10893

    浏览量

    355666
  • 智能台灯
    +关注

    关注

    9

    文章

    83

    浏览量

    21020
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 基于STM32智能台灯设计

    单片机台灯STDIY智能台灯
    Mr_haohao
    发布于 :2022年08月16日 17:25:02

    基于stm32智能台灯

    物联网智能DIY
    jf_06209345
    发布于 :2023年03月27日 22:07:08

    智能台灯设计资料

    智能台灯设计资料
    发表于 08-14 12:56

    智能台灯分享!

    智能台灯分享!
    发表于 12-05 16:39

    智能台灯的制作

    智能台灯的制作
    发表于 07-15 14:32

    【Tisan物联网申请】智能木工台灯

    申请理由:想把木工工艺的台灯实现智能化联网控制。让传统的台灯变得智能起来!项目描述:项目:智能台灯
    发表于 10-15 10:09

    智能台灯资料

    很好的智能台灯资料。。。
    发表于 12-17 00:14

    智能台灯

    有没有大神做过智能台灯,能分享分享资料吗
    发表于 03-16 13:52

    STM32芯片的一款智能台灯项目分享 包含代码哦

    一款智能台灯,特分享出来供大家学习。智能台灯侧面图智能台灯整体图
    发表于 07-27 11:42

    设计一款懂人所想的智能台灯

    摘要:基于STM32单片机和机智云硬件开发平台,设计了一款智能台灯。在设计中融合了光电传感器、光照强度传感器、温湿度传感器、WiFi通信模块等一些常用的传感器,在台灯普通照明功能的基础
    发表于 09-17 16:37

    基于STM32芯片和机智云平台的一款智能台灯

    随着现代科学技术的不断发展,生活用品的智能化程度也越来越普及,人们对一些家居物品的人性化、智能化设计要求也越来越高。众所周知台灯作为家庭主要照明工具之一,在现代社会生活中占有重要地位,而且台灯
    发表于 07-22 15:31

    10个STM32系列设计分享请查收

    怎样去设计一种基于STM32的双向DC-DC变换器?怎样去设计一种基于stm32智能台灯
    发表于 10-21 08:58

    475【毕设课设】基于STM32单片机智能红外感应光照检测台灯路灯

    475【毕设课设】基于STM32单片机智能红外感应光照检测台灯路灯
    发表于 11-30 09:06 85次下载
    475【毕设课设】基于<b class='flag-5'>STM32</b>单片机<b class='flag-5'>智能</b>红外感应光照检测<b class='flag-5'>台灯</b>路灯

    基于STM32单片机的智能台灯系统设计

    本次智能台灯系统的设计使用STM32单片机作为控制中心,通过光电管检测是否有人,通过DS1302时钟模块定时,通过超声波模块进行测距,当光电管检测到人时,定时灯变亮并根据光强调光,当定时时间超过1h,通过语音播报进行提示。
    的头像 发表于 08-28 09:37 5052次阅读
    基于<b class='flag-5'>STM32</b>单片机的<b class='flag-5'>智能</b><b class='flag-5'>台灯</b>系统设计

    STM32项目分享:智能台灯系统

    01—项目简介1.功能详解基于STM32智能台灯系统。功能如下:亮度控制:按键控制照明灯的亮度(5挡亮度)计时功能:按键启动计时,累
    的头像 发表于 11-29 01:02 461次阅读
    <b class='flag-5'>STM32</b>项目分享:<b class='flag-5'>智能</b><b class='flag-5'>台灯</b>系统