
人体靠近氛围灯
简介
本项目基于STM32G0,借助萤火工厂24GHz毫米波雷达模块,实现了人体接近时点亮SK6812灯珠
简介:本项目基于STM32G0,借助萤火工厂24GHz毫米波雷达模块,实现了人体接近时点亮SK6812灯珠开源协议
:GPL 3.0
描述
配置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
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。










