Funpack3-2 基于 PIC-IoT WA 的手指数量辨识工具
该项目使用了PIC-IoT WA 开发板,C语言,实现了手指数量辨识工具的设计,它的主要功能为:利用开发板上自带的光传感器,检测挥动的手指个数,并通过串口打印数据。
标签
嵌入式系统
Funpack活动
反正都一样
更新2024-06-04
46

项目介绍

这里是我参加Funpack第三季第二期活动的任务总结报告,我所完成的是任务一搭建一个手指数量辨识工具。板卡上集成了光照传感器,将板卡平放后,伸出不同数量的手指在板卡上挥动,识别出有几根手指。

我将按照以下步骤进行开发板的控制开发:

步骤 1: 初始化

  1. 启动系统,准备好光传感器模块和ADC(模数转换器)功能。

步骤 2: 获取ADC值

  1. 通过板载光传感器采集实时的光强数据,转换为相应的ADC值。

步骤 3: 实时数据采集和处理

  1. 连续检测ADC值,将数据存储在缓冲区中。

步骤 4: 数据分析和挥动规律检测

  1. 利用算法对采集的数据进行分析与处理,检测数据中的光强规律变化。
  2. 寻找光强值的高峰和低谷,代表光线变暗和变亮的时刻。

步骤 5: 手指挥动识别

  1. 通过规律检测算法确定挥手动作的特征,如从光线变暗到变亮的持续时间或幅度。
  2. 基于确切的规律及阈值,识别手指的挥动次数。

步骤 6: 提示与反馈

  1. 在识别出手指挥动次数后,输出结果

步骤 7: 循环检测

  1. 持续循环执行上述步骤,保持对光传感器数据的实时监测和手指挥动的识别。

通过这个流程,你可以持续监测光传感器的输出,利用适当的算法和规律检测技术来识别手指的挥动次数,从而实现对手指挥动的智能识别和监测。

主要硬件介绍

PIC24FJ128GA705 微控制器

16位微控制器,低功耗设计。时钟频率为32MHz,提供强大的处理能力。集成了12位ADC,用于模拟信号转数字信号转换,如光传感器的数据采集。

Wi-Fi模块 WINC1510

基于 Microchip 的 ATWINC1510 技术,是一款低功耗认证的 IoT 网络控制器。允许设备通过 Wi-Fi 连接到云服务(如 Google IoT Cloud 或 AWS),实现远程数据传输和控制。

ATECC608 密码协处理器

集成在控制器板上,用于生成私钥和公钥,加密消息传输以确保通信安全。

传感器

TEMT6000X01 光传感器

连接到PIC控制器的10位ADC,用于检测环境光照强度变化。

MCP9808 温度传感器

通过I2C接口连接,用于测量温度范围在-20℃至100℃之间,具有0.25℃的典型精度。

PIC IoT WA开发板

可以通过微型USB端口或4.2V锂电池供电,提供灵活的供电方式。具有板上编程仿真器和调试器(PKOB),支持串口通信和逻辑分析功能。


这个系统结合了低功耗的 PIC 微控制器、Wi-Fi模块、安全密码协处理器和多种传感器,实现了智能控制和监测功能,适合用于物联网应用中。通过集成这些组件,可以实现实时数据采集、通信和安全加密等功能,为物联网设备提供稳定可靠的运行和通信环境。

主要软件介绍

在进行开发时,我使用官方的 MPLAB X IDE。在首次安装 IDE 后,需要安装适用于 16 位微控制器的编译器工具。安装完编译器后,可以通过点击右上角的 "MCC" 按钮,进入图形化配置界面。

image.png

我们需要配置串口外设

image.png

点击添加后,在此处界面进行更加具体的配置

image.png

而在此处,需要对串口所对应的引脚进行配置

image.png

光传感器我们是使用adc的引脚进行模拟量的测量,所以我们也需对adc外设开启,并设置使用。具体的配置参考串口的配置,也可以看视频里的介绍。

uint8_t start_flag=0;
#define normal_average_value 1111
#define invertal 150
uint8_t deep_num=0;
uint8_t normal_count=0;
uint8_t dir=0;
int main(void)
{
// initialize the device
SYSTEM_Initialize();
uint16_t i=0;
uint16_t data=0,last_data=0;
uint16_t total_count=0;
while (1)
{
//printf("%d: %d\r\n",i++,get_linght_adc_value());
//err_led_Toggle();
data=get_linght_adc_value();
if(!start_flag ){
if(abs(data-normal_average_value) > invertal){
start_flag=1;
last_data=data;
dir=0;
delay_ms(20);
printf("start\r\n");
}
}else{
total_count++;
if(abs(data-normal_average_value) > invertal){
if(!dir){//??
if(last_data > data){
printf("ccc: %d:%d\r\n",last_data,data);
}else{
printf("bbb +1: %d:%d\r\n",last_data,data);
deep_num++;
dir=1;
}
}else{//??
if(last_data > data){
printf("ddd: %d:%d\r\n",last_data,data);
dir=0;
}else{
printf("eeee: %d:%d\r\n",last_data,data);
}
}
}
last_data=data;
if(total_count>2000){
start_flag=0;
dir=0;
total_count=0;
printf("\r\nfinger_num => %d\r\n\r\n",deep_num);
deep_num=0;
}
}

// UART1_Write(0x03);
// UART1_Write(0xFC);
//
//
// UART1_Write(data);
// UART1_Write(data>>8);
//
// UART1_Write(0xFC);
// UART1_Write(0x03);

// delay_ms(5);
// Add your application code
}

return 1;
}

代码部分核心逻辑非常简单:首先:

设定环境下的 ADC 平均值。在主循环中持续监测 ADC 值

一旦检测到值显著低于设定值,表示周围有遮挡物通过,系统将进入检测状态,该状态大约持续 2 秒(可根据需要调整)

在检测状态下,系统将获取每个 ADC 值,并进行分析统计,以便确定数据流中存在的波谷数,每个波谷对应一根手指

尽管这种检测方式易于理解和实现,但当手指数量增多时,系统可能会出现不准确的情况

总结

在本次活动中,学习了如何pic家的相关芯片。在过程中遇到的问题,通过百度搜索都能找到适合的答案,使自我得到了提升,感谢硬禾学堂平台。


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