板卡介绍
PIC-IoT WA开发板是Microchip推出的一款功能强大的物联网开发平台。该板卡集成了PIC24FJ128GA705 MCU、ATECC608A CryptoAuthentication™ 安全元件 IC 和ATWINC1510 Wi-Fi® 网络控制器,为嵌入式应用提供了与云端网络服务的连接能力。板载的ATECC608A安全元件确保了数据传输的安全性,而ATWINC1510 Wi-Fi模块则支持2.4GHz b/g/n标准的无线连接。此外,开发板还配备了TEMT6000X01光传感器和MCP9808温度传感器,以及板载调试器,便于对MCU进行编程和调试。
完成任务
尝试搭建一个手指数量辨识工具。板卡上集成了光照传感器,将板卡平放后,伸出不同数量的手指在板卡上挥动,识别出有几根手指。
光照传感器介绍
光传感器是一种基于光电效应的环境光传感器。当光线照射到传感器上时,光敏元件会产生电流或电压的变化,这个变化与光线的强度成正比。通过测量这个变化,我们可以得到环境光线的强度信息。在本项目中,当手指遮挡光线时,传感器输出的光强度会发生变化,我们通过检测这种变化来识别手指的数量。
实现思路
- 硬件准备:首先,确保PIC-IoT WA板卡和相关外设(如USB线、电源等)已经准备好,并且光传感器已经正确连接到板卡上。
- 软件环境搭建:安装必要的开发环境和工具链,如MPLAB X IDE和相应的编译器、调试器等。
- 初始化配置:对PIC24FJ128GA705 MCU和光照传感器进行初始化配置,设置ADC采样频率、光照传感器灵敏度等参数。
- 数据采集:使用MCU的ADC功能定时读取光照传感器的输出值,得到当前环境光线的强度信息。为了提高识别的准确性,可以采集多组数据并进行平均处理。
- 数据处理:设计合适的算法来处理光照传感器输出的数据。当手指遮挡光线时,传感器输出的光强度会发生变化。通过比较手指遮挡前后的光强度变化,可以判断是否有手指遮挡以及遮挡的次数(即手指数量)。具体的算法实现可以根据项目的需求进行选择和优化。
- 结果输出:将计算得到的手指数量通过串口或其他方式输出到显示器或计算机上。为了方便用户观察和记录结果,可以设计一个简单的用户界面或显示模块来展示手指数量。
实现方法
- 使能 ADC,将 ADC 连接到光照传感器。
在 MCC 中配置了 ADC 和对应的通道后,就可以在主函数中读取 ADC 的值。
uint16_t adc = ADC1_GetConversion(channel_AN8);
- 分析光照传感器随光照变化的范围。
图上展示的就是 3 根手指划过光照传感器时的读数变化。可以看到,最低点约为 110,最高点约为 190。因此,只需要检测下降沿的个数就可以判断手指的数量。
- 设计一个状态机,在手指遮挡后就开始检测。
switch (State) {
case Idle:
if (adc < 140) {
State = Detect;
timeout_count = 0;
finger_count = 0;
min_adc = 9999;
}
break;
case Detect:
min_adc = min(min_adc, adc);
if (adc > 140 && min_adc < 130) {
finger_count++;
min_adc = 9999;
}
if (timeout_count++ > 100000) {
State = Print;
}
break;
case Print:
State = Idle;
printf("Detect Finger %d\r\n", finger_count);
break;
default:
State = Idle;
break;
}
- 当检测到下降沿则将手指数量加一。
- 当长时间处于强光照的情况下,则判断本次流程结束,跳转到打印,输出手指数量。
实物展示
遇到的问题及解决方案
- 光照波动:由于环境光线的波动(如日光、灯光等),会对光照传感器的输出值产生影响,导致识别不准确。为了解决这个问题,可以采取以下措施:一是提高光照传感器的灵敏度,使其对光照变化更加敏感;二是在算法中引入阈值判断机制,只有当光强度变化超过一定阈值时才认为有手指遮挡;三是使用多个光照传感器进行冗余设计,提高系统的鲁棒性。
- 手指遮挡不完全:当手指没有完全遮挡光线时,传感器输出值的变化可能不明显,导致无法准确识别手指数量。为了解决这个问题,可以在算法中引入时间窗口的概念,即当检测到光强度变化时,等待一段时间再次检测以确保手指已经完全遮挡光线;另外,也可以通过调整光照传感器的安装位置和角度来优化识别效果。
- 算法优化:在数据处理阶段,需要设计合适的算法来准确识别手指数量。为了提高算法的准确性和鲁棒性,可以采用机器学习等先进技术来训练和优化模型;同时,也可以结合具体的应用场景和需求来定制算法的实现方案。
总结感想
首先,我要衷心感谢硬禾学堂举办的这次活动,为我提供了一个宝贵的机会,让我能够深入探索和实践蓝牙技术在HID设备中的应用。这次活动不仅让我收获了丰富的知识和经验,还激发了我对物联网和嵌入式系统开发的浓厚兴趣。
通过本次项目实践,我成功使用板卡上的光照传感器实现了一个简单而实用的手指数量辨识工具。在项目过程中,我深入了解了光照传感器的工作原理和数据处理方法,并掌握了PIC24FJ128GA705 MCU的编程和调试技巧。同时,我们也遇到了一些问题并通过不断尝试和优化解决了这些问题。这次项目不仅锻炼了我的动手能力和解决问题的能力,也让我对嵌入式系统开发和物联网技术有了更深入的了解和认识。