Funpack3-2项目-基于EV54Y39A的手指数量辨识工具
该项目使用了EV54Y39A板卡,实现了一个手指数量辨识工具的设计,它的主要功能为:将板卡平放后,伸出不同数量的手指在板卡上挥动,可以识别出有几根手指。
标签
Funpack活动
hkzhang
更新2024-06-06
79

项目描述:

一、项目介绍

本项目依托Funpack活动第三季第二期,硬件基于来自MicrochipEV54Y39A板卡平台尝试搭建了一个手指数量辨识工具。板卡上集成了光照传感器,将板卡平放后,伸出不同数量的手指在板卡上挥动,可以识别出有几根手指。

二、硬件概述

EV54Y39A是由Microchip推出的PIC-IoT WA开发板,是与AWS(Amazon Web Services)合作开发的Amazon Web Services (AWS) 云物联网开发解决方案。

EV54Y39A板卡平台的控制器包含两个主要组件:PIC微控制器(PIC24FJ128GA705)和Wi-Fi模块(WINC1510)。PIC24FJ128GA705是一款低功耗的16位微控制器,时钟频率为 32MHz,具有128KB 的 ECC 闪存和16KB RAM,以及12 位 ADC(200ksps)、多达 14 个模拟输入、3 个比较器和 CTMU(用于触摸应用),非常适合用于低功耗和互连应用。板载传感器包括TEMT6000X01光传感器和MCP9808温度传感器,其中光传感器连接到PIC控制器的10ADC

WA开发板可通过微型USB端口或4.2V锂电池供电,同时具有板上编程仿真器和调试器(PKOB)支持一路串口和一个IO的逻辑分析功能。为实现快速原型设计,该物联网开发板支持Studio 7和MPLAB® X IDE以及图形开发工具,例如START和MPLAB代码配置器 (MCC)。这些工具可简化将现有应用连接到云端或开发新的物联网设计。

在本次搭建手指数量辨识工具的过程中,主要用到了PIC24微控制器、ADC模块、环境光传感器以及板载与电脑通信的串口等硬件。

EV54Y39A板卡硬件布局

三、项目需求

1.获取光照传感器测量的光照数值,用开发板集成的ADC芯片将光照模拟值转换为数字值。

2.对读取的数据进行处理,识别手指经过产生的光照变化,判断是否有手指经过,以及手指数量。

3.判断手指动作是否已经结束,并在结束后输出识别出的手指数量。

四、设计思路

软件流程图

1.光传感器测量值的读取

根据原理图,板载的光传感器连接在PIC控制器的RB12引脚,引脚功能为ADC AN8。

image.png

光传感器测量的模拟信号由MCU内部的10ADC转换为数字信号,再通过程序读取。

uint16_t SENSORS_getLightValue(void)
{
//LIGHT_SENSOR_ADC_CHANNEL = 0x8​
return ADC1_GetConversion(LIGHT_SENSOR_ADC_CHANNEL);
}

2.通过读取的数据,识别手指数量

由于当手指扫过时遮挡光线,使得光传感器读取数值减小,从而产生一个下降沿信号;而手指移开时,光传感器读取数值恢复,产生一个上升沿信号,因此可以通过将获取的光强数值与阈值比较,判断当前移动手指的状态。

int lightget=0;       
int fingercount=0;
int fingerstate=0;
int light_delay=0;
int shadow_delay=0;
void getfinger()
{
lightget=SENSORS_getLightValue();
if(lightget>threshold)
//亮度高于阈值
{
if(light_delay==1)
{
if(fingerstate==1)
fingerstate=0;
light_delay=0;
}
else
light_delay=1;

if(shadow_delay==1)
shadow_delay=0;
}
else
//亮度低于阈值
{
if(shadow_delay==1)
{
if(fingerstate==0)
{
++fingercount;
fingerstate=1;
}
shadow_delay=0;
}
else
shadow_delay=1;

if(light_delay==1)
light_delay=0;
}
}

在判断的程序中,使用了有限状态机的思路,fingerstate代表当前的亮暗,即当前瞬间传感器前有没有手指,当由亮变暗时,代表一根手指开始经过,将手指计数+1;当由暗变亮时,代表一根手指离开,函数准备读取下一次手指经过的信号。而保持亮或暗的状态,程序则不会产生其他反应。

此外,程序设置的采样频率为每3ms读取一次亮度,为了避免光照信号抖动造成检测错误,还使用了状态机消抖的方法。变量light_delay和shadow_delay代表有一次读取的延迟,只有两次读取到相同信号时,才会判断亮或暗的状态,增加准确性。

3.手指动作结束的判断与结果输出

当第一个手指被检测到时,recestate状态置1,表示进入接收状态。而当手指动作结束,信号变为持续的高亮度信号,因此在接收状态下读取到一段时间内持续的亮信号时,recestate状态置0,结束接收并输出整次过程中读取到的手指数量。最终的手指识别函数如下:

void getfinger()
{
lightget=SENSORS_getLightValue();
if(lightget>threshold)
//亮度高于阈值
{
if(light_delay==1)
{
if(recestate==1)
{
++lighttimecount;
if(lighttimecount>160)
{
outputnum();
recestate=0;
lighttimecount=0;
}
}
if(fingerstate==1)
fingerstate=0;
light_delay=0;
}
else
light_delay=1;

if(shadow_delay==1)
shadow_delay=0;
}
else
//亮度低于阈值
{
if(shadow_delay==1)
{
lighttimecount=0;
if(recestate==0)
recestate=1;
if(fingerstate==0)
{
++fingercount;
fingerstate=1;
}
shadow_delay=0;
}
else
shadow_delay=1;

if(light_delay==1)
light_delay=0;
}
}

PIC-IoT WA开发板的板载调试器集成了一个虚拟 COM 端口 (CDC),可以非常方便地实现电脑与板卡的通信,将识别结果通过串口打印到电脑。为了可以直观地观察结果,还配置的板载的4颗led灯,当检测到不同数量的手指时,特点的led灯将亮起,显示检测到的数量。


image.png

void outputnum()
{
LED_RED_SetHigh();
LED_BLUE_SetHigh();
LED_GREEN_SetHigh();
LED_YELLOW_SetHigh();
switch(fingercount)
{
case 1:
LED_RED_SetLow();
break;
case 2:
LED_YELLOW_SetLow();
break;
case 3:
LED_GREEN_SetLow();
break;
case 4:
LED_BLUE_SetLow();
break;
case 5:
LED_RED_SetLow();
LED_YELLOW_SetLow();
break;
case 6:
LED_GREEN_SetLow();
LED_YELLOW_SetLow();
break;
case 7:
LED_BLUE_SetLow();
LED_GREEN_SetLow();
break;
case 8:
LED_RED_SetLow();
LED_BLUE_SetLow();
break;
default:
LED_RED_SetLow();
LED_YELLOW_SetLow();
LED_GREEN_SetLow();
LED_BLUE_SetLow();
break;
}
printf("%d fingers\r\n",fingercount);
fingercount=0;
}


五、完成的功能

最终搭建的手指数量辨识工具,可以准确识别挥过的手指数量,并且通过串口输出到电脑。

实际使用时的图片

某次识别的结果,第三个led亮起,代表识别到三根手指

在电脑串口调试界面中输出的手指数量信息

六、未来计划与活动总结

本次活动我使用EV54Y39A板卡平台尝试搭建了一个手指数量辨识工具,测试的结果也比较理想。同时板卡也有强大的物联网功能,之后会尝试结合物联网进行开发,探索手指识别等工具在智能控制等物联网方面的应用。

通过本次funpack活动的学习,我对​物联网开发板又有了进一步的了解,锻炼了我的动手能力和编程能力,也对嵌入式开发有了新的体会。未来期望再次参加活动,了解并学习更多的知识,掌握更多的技能,开拓电子芯片在生活中运用的视野。

在学习中,我遇到了不少难题,比如第一次接触Microchip的PIC系列芯片和开发工具,在学习和查找资料上花费了较长时间。但是在此过程中,我收到了很多来自硬禾的帮助和支持,直播的教程和交流群老师的答疑都让我受益匪浅,十分感谢官方为我们提供了这次学习的机会,最后祝funpack越办越好!

附件下载
finger.zip
团队介绍
123
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号