站内搜索
更多
人体靠近氛围灯
专业版

人体靠近氛围灯

简介

本项目基于STM32G0,借助萤火工厂24GHz毫米波雷达模块,实现了人体接近时点亮SK6812灯珠

简介:本项目基于STM32G0,借助萤火工厂24GHz毫米波雷达模块,实现了人体接近时点亮SK6812灯珠
”暖冬创趣迎新年“

开源协议

GPL 3.0

创建时间:2024-12-25 15:13:11更新时间:2025-01-25 14:29:21

描述

配置STM32G030K6T6引脚如下

其中,PB5连接雷达模块的输出引脚,用于判断是否有人体存在;PA9设置为PWM输出,用于生成响应占空比方波用于变换灯珠颜色;PA8用于测试

其中,时钟引脚需要配置DMA,其配置如下

完成配置后生成代码

在PTD中定义

typedef union
{
    struct
    {
        uint8_t w;
        uint8_t b;
        uint8_t r;
        uint8_t g;
    }color;
    uint32_t data;
}PixelRGBW_t;

在PD中定义

#define NEOPIXEL_ZERO   19
#define NEOPIXEL_ONE    39

#define NUM_PIXELS      8
#define DMA_BUFF_SIZE   (NUM_PIXELS * 32) + 1

 

编写主函数如下

int main(void)
{

  /* USER CODE BEGIN 1 */
  PixelRGBW_t pixel[NUM_PIXELS] = {0};
  uint32_t dmaBuffer[DMA_BUFF_SIZE] = {0};
  uint32_t *pBuff;
  int i, j, k;
  uint16_t stepSize;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_TIM1_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  k = 0;
  stepSize = 4;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_SET)
    {
        for(i = (NUM_PIXELS - 1); i > 0; i--)
        {
            pixel[i].data = pixel[i - 1].data;
        }
        if(k < 255)
        {
             pixel[0].color.g = 254 - k; //[254, 0]
             pixel[0].color.r =  k + 1; //[1, 255]
             pixel[0].color.b = 0;
             pixel[0].color.w = 0;
        }
        else if (k < 510)
        {
            pixel[0].color.g = 0;
            pixel[0].color.r = 509 - k; //[254, 0]
            pixel[0].color.b = k - 254; //[1, 255]
            pixel[0].color.w = 0;
            j++;
        }
        else if (k < 765)
        {
            pixel[0].color.g = 0;
            pixel[0].color.r = 0;
            pixel[0].color.b = 764 - k; //[254, 0]
            pixel[0].color.w = k - 509; //[1, 255]
        }
        else if (k < 1020)
        {
            pixel[0].color.g = k - 764; //[1, 255]
            pixel[0].color.r = 0;
            pixel[0].color.b = 0;
            pixel[0].color.w = 1019 - k; //[254, 0]
        }
        k = (k + stepSize) % 1020;
        // 50% brightness
        pixel[0].color.g >>= 2;
        pixel[0].color.r >>= 2;
        pixel[0].color.b >>= 2;
        pixel[0].color.w >>= 2;
        pBuff = dmaBuffer;
        for(i = 0; i < NUM_PIXELS; i++)
        {
            for(j = 31; j>= 0; j--)
            {
                if((pixel[i].data >> j) &0x01)
                {
                    *pBuff = NEOPIXEL_ONE;
                }
                else
                {
                    *pBuff = NEOPIXEL_ZERO;
                }
                pBuff++;
            }
        }
        dmaBuffer[DMA_BUFF_SIZE - 1] = 0; // last element must be 0!
        HAL_TIM_PWM_Start_DMA(&htim1, TIM_CHANNEL_2, dmaBuffer, DMA_BUFF_SIZE);
        HAL_Delay(10);
    }
  }
  /* USER CODE END 3 */
}

如此即可实现在人体靠近时灯珠能发出炫彩色。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
AmbienceLight.rar
14
2
毫米波雷达.pdf
18
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航