Funpack3-2---基于EV54Y39A的手指数量辨识工具
该项目使用了undefined,实现了手指数量辨识工具的设计,它的主要功能为:将板卡平放后,伸出不同数量的手指在板卡上挥动,识别出有几根手指。
标签
FunPack3-2
EV54Y39A
手指数量辨识工具
冷月烟
更新2024-06-04
172

项目描述

项目介绍

使用板卡搭建一个手指数量辨识工具。

板卡上集成了光照传感器,将板卡平放后,伸出不同数量的手指在板卡上挥动,识别出有几根手指。

 

设计思路

当手指以一个离板卡较近的距离经过后,光照传感器正上方就会有一个比较好的遮挡,当手指缓缓经过就会有一个连续的效果(不遮挡-遮挡-不遮挡)。

当在板卡上方使用LED灯照射时,就会产生一个比较强的平行光,这样遮挡产生的效果就会最大化。

因为一次手指经过的时间是比较短的,当检测到一次不遮挡-遮挡-不遮挡变化后,就会等待2秒,当这2秒内再次出现不遮挡-遮挡-不遮挡变化后,就会加一根手指计数,然后从新计时,如果这2秒没有发送变化,就会打印采集到经过的手指数。

官方提供了非常完整的工程,直接在源工程上修改即可得到亮度获取的裸工程。

 

硬件介绍


FgubBPXGx5p4JfNJoM8doMFCwlXe

特性:

  • 易于迁移至基于 AVR 的嵌入式应用的云端
    • 嵌入式传感器,执行器或机电一体化应用
    • 轻松为广大的 AVR MCU 应用添加云连接
  • 智能:PIC24FJ128GA705 XLP MCU
    • 128 KB 闪存和 16 KB SRAM
    • 低功耗、智能传感器的理想选择
  • 连接:WINC1500 Wi-Fi
    • 运行连接到 Amazon Cloud 的 TCP/IP 和 TLS
  • 安全:ATECC608
    • 密钥存储、认证、加密
    • AWS IoT Core 的安全设备身份验证
    • 预先配置,易于连接
  • 物联网传感器节点快速原型开发 
    • 包括光和温度传感器
    • AVR-IoT.com 上的自定义登录页面
    • 添加更多传感器:500 多个扩展板供选择
    • 轻松拖放编程器/调试器
  • 用于连接 MikroElekronika click Boards™ 的 mikroBUS 接头
  •  板载调试器
    • Microchip MPLAB X IDE中的板卡识别
    • 编程和调试
    • 虚拟 COM 端口 (CDC)
    • 一个逻辑分析仪通道(DGI GPIO)

应用:

  • 智能家居物联网传感器和执行器(照明、访问控制、气候控制)
  • 智慧城市工业传感器(空气质量、交通预测)
  • 健康(血压、心率)
  • 工业 4.0 过程控制传感器(液位、压力、温度、流量)

 

Fh87MSLtkfLCYNi8_ISIIceiNhTX


PIC24F系列微控制器是具有128KB 的 ECC 闪存和16KB RAM 的超低功耗16位微控制器,非常适合用于低功耗和互连应用。具有 12 位 ADC(200ksps)、多达 14 个模拟输入、3 个比较器和 CTMU(用于触摸应用),该系列芯片非常适用于通用应用。


芯片关键规格

CPU类型

16-bit PIC MCU

直接内存访问 (DMA) 通道

6

ADC数量

1

比较器数量

3

CPU 运行速度 (MHz)

16

工作温度范围

-40ºC~125ºC

ADC通道数

14

是否支持低功耗

程序存储器大小(KB)

128

工作电压范围

2.0V~3.6V

最大 ADC 分辨率(bits)

12

是否外设引脚选择 (PPS) / 引脚复用

Multiple Flash Panels

False

内部振荡器

8MHz

最大 ADC 采样率(ksps)

200

是否支持 MPLAB 代码配置器 

 

EV54Y39A板卡硬件布局

FruNxJyfYbTMlpIvBohqs8XS68Js

 

软件流程图

 


主要代码片段及说明

初始化代码

初始化MAIN_dataTask任务

void application_init(void)
{
SYSTEM_Initialize();
timeout_flushAll();
LED_test();

timeout_create(&MAIN_dataTasksTimer, MAIN_DATATASK_INTERVAL);
}


主任务

主要运算逻辑实现

uint8_t fingers = 0;
uint32_t time_count=0;
uint32_t MAIN_dataTask(void *payload)
{
static uint8_t fingers_mode = 0;
int light = 0;
light = SENSORS_getLightValue();
// printf("light:%d\r\n", light);
if(light < 300 && fingers_mode == 0)
{
time_count = 0;
fingers_mode = 1;
fingers ++;
}
else if(light >= 300 && fingers_mode == 1)
{
fingers_mode = 0;
}
if(fingers != 0 && time_count > 20)
{
printf("fingers num:%d\r\n", fingers);
fingers = 0;
}
time_count++;
return MAIN_DATATASK_INTERVAL;
}


获取亮度

uint16_t SENSORS_getLightValue(void)
{
return ADC1_GetConversion(LIGHT_SENSOR_ADC_CHANNEL);
}


主代码

主要就是初始化与任务调度

int main(void)
{
application_init();

while (1)
{
runScheduler();
}

return 0;
}


功能展示及说明

识别结果打印


对本活动的心得体会

这次的题目趣味性还是比较强的,一开始本来打算采用快速晃动手指的方式,利用挡光率不同的原理去做手指数判断,但是后来考虑到这种方式很难量化处理,就换成了上文的方式,整体玩下来还是比较有趣的。

 

意见建议

无。

 

注意

与DFP包与XC16版本如下:

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