内容介绍
内容介绍
一、项目和创意方向介绍
项目概述:
本项目旨在设计一款结合视觉识别与手势控制技术的创新故事播放系统。通过集成矽递科技的XIAO-ESP32C3单片机与Grove Vision AI v2视觉模块,该系统能够实现对用户手势的精准识别,并根据识别结果控制故事的播放。此外,系统还保留了传统的按键控制方式,以满足不同用户的使用习惯和需求。
创意方向:
本项目选择了“物联网与智能控制”的创意方向,并聚焦于“视觉识别与手势控制”的细分领域。通过引入先进的视觉识别技术,我们打破了传统按键控制的局限性,为用户提供了更加自然、直观且富有科技感的手势控制方式。同时,结合XIAO-ESP32C3单片机的低功耗、高性能特点,实现了系统的稳定运行与高效管理。
二、原理图及PCB介绍
设计思路:
通过Vision视觉模块来识别不同的手势,把识别到的数据发送给单片机,单片机对数据进行处理驱动OLED屏幕进行显示,语言模块进行故事播放,也支持按键控制故事播放
方案框图:
使用用VScode上的Draw.io.lntegration扩展绘制。
电路原理图:
使用嘉立创EDA绘制,整体原理图如下
继电器电路
蜂鸣器电路
LED和按键电路
接口电路
引脚扩展电路
本次项目中使用了指定厂商矽递科技(seeed studio)的XIAO-ESP32C3和莫仕(molex)公司的排针
PCB设计:
使用嘉立创EDA绘制。
三、成品功能测试
实物图:
按键和LED屏功能正常,通过按键控制视觉模块的开关
四、程序说明
包含相关头文件,定义对应变量。
#include <Seeed_Arduino_SSCMA.h> // 包含 Seeed Arduino SSCMA 库
#include "JQ.h"
#include "KEY.h"
#include "OLED.h"
bool detect = false;
bool A = false;
bool one = false;
bool gesture = true;
int stone = 0;
SSCMA AI; // 创建 SSCMA 类型的对象 AI
#define LED D2
unsigned long previousMillis = 0; // 上一次计时的时间
unsigned long interval = 10; // 时间间隔,1秒
int printCount_dog = 0; // 已经打印的次数
int printCount_cat = 0; // 已经打印的次数
int printCount_zero = 0;
const int targetCount = 20; // 目标打印的次数
初始化外设
void setup()
{
AI.begin(); // 调用 AI 对象的 begin 方法进行初始化
Serial.begin(9600); // 初始化串口通信,波特率为 9600
Init_OLED();
pinMode(LED, OUTPUT);
pinMode(D6 , OUTPUT); // 设置GPIO引脚为输出模式
pinMode(key1_pin, INPUT_PULLUP);
pinMode(key2_pin, INPUT_PULLUP);
pinMode(key3_pin, INPUT_PULLUP);
pinMode(key4_pin, INPUT_PULLUP);
}
通过循环检测按键
void loop()
{
g_key = key_scan(0); // 检测按键
switch (g_key) {
case KEY1_PRESS:
detect = !detect;
if(detect){
Serial.println("开启手势检测");
DisplayOpen();
show_numberK();
digitalWrite(LED,HIGH);
} else{
Serial.println("关闭手势检测");
DisplayShut();
show_numberG();
digitalWrite(LED,LOW);
}
break;
case KEY2_PRESS:
// show_number1();
show_numberx(); //下一曲
break;
case KEY3_PRESS:
//SendData(0x15);//清空数字
show_numbery();//上一曲
break;
case KEY4_PRESS:
A = !A;
if (A) {
SendData(0x12); // 播放暂停
} else {
SendData(0x11); // 播放继续
}
break;
}
handleGestureDetection();
}
调用的函数
void handleGestureDetection() {
if (detect && !AI.invoke()) {
int boxCount = AI.boxes().size();
Serial.print("启动摄像头识别");
if (boxCount > 0) {
int target = AI.boxes()[0].target;
int score = AI.boxes()[0].score;
if (score > 80) {
if (target == 1) {
handleTargetDog();
} else if (target == 2) {
Serial.print("调用剪刀函数");
handleTargetCat();
} else if (target == 0) {
Serial.print("调用布函数");
handleTargetZero();
}
}
}
}
}
void incrementAndCheckCount(int& count, int targetCount, const char* action, std::function<void()> mainAction, int threshold, std::function<void()> thresholdAction) {
count++;
if (count > targetCount) {
Serial.println(action);
mainAction();
count = 0;
} else if (count >= threshold) {
thresholdAction();
}
}
void handleTargetDog() {
Serial.print("识别到拳头");
printCount_dog++;
incrementAndCheckCount(printCount_dog, targetCount, "下一曲", []() {
DisplayXyq();
show_numberx();
delay(2000);
}, 3, []() {
show_number1();
Serial.println("歌曲1");
DisplayQ();
//printCount_dog = 0;
});
}
void handleTargetCat() {
Serial.print("识别到剪刀");
printCount_cat++;
incrementAndCheckCount(printCount_cat, targetCount, "上一曲", []() {
DisplaySyq();
show_numbery();
delay(2000);
}, 3, []() {
show_number2();
Serial.println("歌曲2");
DisplayJi();
//printCount_cat = 0;
});
}
void handleTargetZero() {
Serial.print("识别到布");
printCount_zero++;
incrementAndCheckCount(printCount_zero, targetCount, "关闭故事", []() {
DisplayT();
digitalWrite(LED,LOW);
SendData(0x13);
delay(2000);
}, 3, []() {
show_number3();
Serial.println("歌曲3");
DisplayB();
//printCount_zero = 0;
});
}
五、活动总结
很感谢硬禾学堂举办的FastBond活动,给了我们一个很好的机会去实现自己的想法,通过这个活动也让我看见了很多自己的不足并加以改正。
附件下载
JQ8900.zip
ProPrj_基于XIAO-ESP32C3的智能故事机_2024-10-27.epro
团队介绍
单人
评论
0 / 100
查看更多
猜你喜欢
FastBond3基础部分-基于STM32的手势识别故事机该项目使用了stm32f103zet6作为主控,实现了通过手势识别播放故事的设计,它的主要功能为:STM32单片机通过手势识别传感器识别不同的手势,根据对应的手势点亮故事机上对应的LED灯,OLED屏进行显示,语音模块播放对应的故事。
anwan
66
FastBond3挑战部分-基于stm32的智能手势识别的实现该项目使用了STM32单片机,实现了手势识别的设计,它的主要功能为:能够识别上下左右等多种手势并且通过屏幕,语音播报的方式进行展示。
zhang_jing_yuan
233
FastBond3挑战部分-基于STM32的手势识别故事机该项目使用了STM32ZET6单片机,实现了识别不同手势播放对应手势的设计,它的主要功能为:根据识别到的手势,亮起对应的指示灯,OLED屏幕上显示对应手势的说明,JQ8900语音模块播放对应的故事。
anwan
86