赞
踩
提示:项目准备需要一定的C语言基础或python语言基础,C语言方面大致就是能自己写出驱动文件和主程序,看得懂代码大致怎么运行的就可以了。
写这一篇推文的主要目的是记录课程设计的历程和一些想法,中间有博主遇到的常见问题,例如K210TKA2140001的固件烧录问题、stm32f103c8t6与K210双机通讯逻辑问题等等,以时间顺序简述遇到的坑和解决方法,以供UU们参考。
此为总体架构图。
首先,博主是光电相关专业的,为了更好地提高选题和课程内容的契合度,选择了人脸识别的一个大方向(本文仅仅是很基础的入门级人脸识别应用场景介绍),考虑到资金有限,市面上的openMV价格近两三年走高,朋友推荐K210这款个人觉得目前更实惠的识别硬件。此外,为了提高课设的竞争力,加入一些单片机课程学习到的内容,比如舵机驱动、串口通讯等;实用性方面,根据市面上已有的门禁系统方案,增加语音提示、红外热释电检测人体的模块。
为了防止代码编写过程中出现逻辑混淆的情况,自行绘制识别的流程图。
花了上百大洋,拿到了K210实物(实物不在身边,图片自行百度),下面开始烧录固件,等于给这个东西烧程序(类似单片机程序的烧录),不过这里烧录的是更底层的类似于运行环境的代码。之后使用IDE编程的时候,库的引用才不会报错。(所以import报错还可以检查检查固件型号对不对)。
这里需要注意,博主没有尝试自己写IDE软件,因为需要适配各种协议,比较花费时间,下面使用的官方发布的IDE软件,其中的调试和初始化步骤,官网都有详细介绍。
maixpy3.0
烧录方面,博主遇到的问题是数据线的种类不对,Type-C数据线一部分是仅具有充电功能,一部分既具有充电功能,又具有数据传输功能。选择的时候需要自行甄别。
kflash烧录指导
根据扩展功能固件库的不同,K210可以被赋予各种基础功能。识别部分代码可以直接使用官方推荐,也可以参考另一位博主。
基于K210的人脸识别门禁
这里需要注意的是,在官方代码的基础上适配项目的时候,必须知道变量含义,方便通讯。这里使用串口通讯,传输仅标记识别成功(1)和识别失败(0)。使用串口发送信息的时候,可以自行定义一段帧头检验,或者利用高速处理的性能,以某一识别成功次数作为触发阈值,在此基础上可以自行编码。
重点介绍main函数的逻辑处理:
int main(void) { // 底层延时函数初始化 delay_init(); // 72MHz分频初始化 RCC_Configuration(); USART_Config(); audio_init(); NVIC_Configuration(); TIM3_Init(2000, 719); Adc_Init(); Do_GPIO_Config(); OLED_Init(); LED_Init(); printf("欢迎使用智能门禁系统\n\n\n\n"); OLED_ShowString(1,1," ADC value:"); voice1(); /* 打印指令输入提示信息 */ Show_Message(); dj(500); while(1) { // 读取单片机电压值并用OLED显示 ADC_ConvertedValueLocal=Get_battery_volt(); OLED_ShowFNum(2,8,ADC_ConvertedValueLocal); if (Serial_RxFlag1 == 1) { if (Serial_RxData1 == '1') { OLED_ShowString(3,1," "); OLED_ShowString(3,1,"success!"); dj(500); voice2(); // 识别成功请进入 } else if (Serial_RxData1 == '2') { OLED_ShowString(3,1," "); OLED_ShowString(3,1,"error!"); voice3(); // 识别错误请重试 } else { OLED_ShowString(3,1," "); OLED_ShowString(3,1,"unexpected E"); } OLED_ShowString(4,1," "); OLED_ShowChar(4,5,Serial_RxData1); Serial_RxFlag1 = 0; // 一次操作结束,标志位清零 } if(Do_Scan(DO_GPIO_PORT, DO_GPIO_PIN) == 1) { OLED_ShowString(2,2,"true"); // 开灯 LED_ON(); } else { OLED_ShowString(2,2,"false"); // 关灯 LED_OFF(); } } }
注意:灯的打开与否通过红外热释电模块控制,以提高用户使用和离开的交互性;语音交互实际上使用的是串口与语音模块的通信;c8t6与K210的通信也是通过串口进行的;舵机的转动模拟开门的场景。
注意:关于tips中有关的问题可以浏览博主嘉立创工程
本次课程设计,使用到的内容基本是本科期间单片机应用,主要的问题还有通讯容易误码、算法识别效果不太好、PCB集成度不高显得很臃肿。对于推文有疑问或者需要这个工程,请联系QQ邮箱:207393236@qq.com。欢迎交流学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。