FastBond3挑战部分-基于STM32的手势识别故事机
该项目使用了STM32ZET6单片机,实现了识别不同手势播放对应手势的设计,它的主要功能为:根据识别到的手势,亮起对应的指示灯,OLED屏幕上显示对应手势的说明,JQ8900语音模块播放对应的故事。
标签
嵌入式系统
FastBond第三季
STM单片机
anwan
更新2024-10-21
86

一、项目和创意方向介绍

项目概述:

本项目旨在设计一款集手势识别、LED指示、OLED显示与语音播放功能于一体的创新故事机。通过整合先进的传感器技术、微控制器处理能力及多媒体展示技术,为用户带来前所未有的互动体验。用户仅需通过简单的手势动作,即可控制故事机播放不同的故事,实现科技与故事的完美融合。

创意方向:

本项目选择了“物联网”为创意方向,并聚焦于“人机交互”的细分领域。通过手势识别技术,我们打破了传统按键或触摸操作的限制,为用户提供了更加自然、便捷的交互方式。同时,结合STM32微控制器的强大处理能力和丰富的外设接口,实现了多功能的集成与高效管理,为智能家居产品的创新设计提供了新的思路。

二、原理图及PCB介绍

设计思路:

通过手势识别传感器将不同手势转换为数字信号发送给STM32单片机,单片机通过读取到的数据驱动LED灯的亮灭,OLED屏幕的显示,语音模块故事的播放。


方案框图:

使用VSCODS上的插件Draw.io lntegration绘制。单片机通过读取传感器的数据来驱动对应外设。

电路原理图:

使用嘉立创EDA绘制,整体原理图如下

image.png


5V转3.3V稳压电路,通过AMS1117-3.3芯片来输出3.3V的电压。

image.png

采用直插式供电,通过Typec口供电

image.png

电源指示灯电路

image.png

串口下载电路

image.png

BOOT电路

image.png

LED电路,根据不同手势有不同的显示效果

image.png

外设接口电路

image.pngimage.pngimage.png

MCU电路

image.png

本次项目中使用了指定厂商意法半导体公司的STM32ZET6芯片和莫仕(molex)公司的2p排针

PCB设计

使用嘉立创EDA绘制,对电源线进行了加粗处理,对晶振进行了包地和禁止铺铜处理,通过过孔加强散热。

image.png

三、成品功能测试

实物图:

2c72a955b841d4753de15ae0d1bcb6b.jpg

供电没问题,电源指示灯正常亮起

3eeca970fd768224fafe568d201f320.jpg

按键功能没问题,能通过按键控制手势识别功能的开关

c2da6ad7bb204a4c3a4ad4075a4b8c5.jpgada9ffd014e19038e579dd1b4f5355f.jpg

语言模块指示工作灯亮起,能正常工作


5e2dcfae8afd683adc18e56d443f384.jpg

LED指示电路没问题,可以根据手势亮起对应的LED灯

abc6191eb8fb0d1a77e3b8381174b45.jpgedd503fdd3409167e67ee49b93e21f0.jpg

OLED显示正常

150582bfc834651420203fdbe25dd03.jpg

四、程序说明

包含外设的头文件,初始化外设。

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/KEY/key.h"
#include "./BSP/TIMER/btim.h"
#include "./BSP/OLED/OLED.h"
#include "./BSP/PAJ7620/PAJ7620_Driver.h"
#include "./BSP/MUSIC/music.h"
#include "./BSP/PAJ7620/PAJ7620.h"

int main(void)
{
uint8_t key;
uint8_t Gesture_run_state = 0;

HAL_Init(); /* ³õʼ»¯HAL¿â */
sys_stm32_clock_init(RCC_PLL_MUL9); /* ÉèÖÃʱÖÓ, 72Mhz */
delay_init(72); /* ÑÓʱ³õʼ»¯ */
usart_init(9600); /* ´®¿Ú³õʼ»¯Îª9600 */
btim_timx_int_init(100 - 1, 7200 - 1); /* 10KhzµÄ¼ÆÊýƵÂÊ£¬¼ÆÊý100´ÎÊä³öÒ»´ÎΪ10ms */
led_init(); /* ³õʼ»¯LED */
key_init(); /* ³õʼ»¯KEY */
OLED_Init(); /* ³õʼ»¯OLED */
OLED_Clear(); /* OLEDÇåÆÁ */
jq8900_oneuart_init(); /* ³õʼ»¯JQ8900 */
paj7620_Driver_Init(); /* ³õʼ»¯PAJ7620 */

通过while语句,实现对手势识别模块PAJ7620的控制、按键扫描、音乐播放以及OLED显示屏的更新。

    while (1)
{

if(Gesture_run_state == 0)
{

Gesture_run_state = 1;

music_operate(MUSIC_SONG11); /* ²¥±¨ÊÖÊÆʶ±ð¹Ø±Õ */

}

if(Clock_Count % 10 == 0)
{
key = key_scan(0); /* µÃµ½¼üÖµ */
if (key == WKUP_PRES)
{

if(Gesture_run_state == 1)
{

Gesture_run_state = 2;
music_operate(MUSIC_SONG10); /* ²¥±¨ÊÖÊÆʶ±ð¿ªÆô */
goto exit_if; // Ìø³ö if ´úÂë¿é

}

if(Gesture_run_state == 2)
{

Gesture_run_state = 1;
music_operate(MUSIC_SONG11); /* ²¥±¨ÊÖÊÆʶ±ð¹Ø±Õ */
OLED_Clear();
goto exit_if; // Ìø³ö if ´úÂë¿é

}

}

exit_if:

if(Gesture_run_state == 2)
{

paj7620_Driver_Get_Gesture();

}

}


if(Clock_Count >= 100)
{

Clock_Count = 0;

if(Gesture_run_state == 1)
{

OLED_ShowString(1, 1, "Gesture Close");

}

if(Gesture_run_state == 2)
{

OLED_ShowString(1, 1, "Gesture Turn");

}

}

}

}

五、活动总结

很烦感谢硬禾学堂举办的FastBond3活动,为我们电子DIY爱好者提供了很好的机会,让我们可以尽情的发挥自己的想象,尽情的创作。希望硬核学堂越来越好。

软硬件
电路图
附件下载
11.程序代码源文件.zip
ProDoc_核心板加插件_2024-10-19.epro
团队介绍
单人
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号