设计背景
其实我大二的时候就想做一个这样的产品了,因为在食堂吃饭的时候老是忘记带纸巾,主要是懒得带,而且感觉塞那么一小包在裤兜里老是有点不自在。老是蹭蹭舍友的,笑死!
就在不久后,食堂里面有些摊位就开始配纸巾了,但是我靠,我爱吃的鸡排饭那家没配。每次买鸡排饭去隔壁猪脚饭摊位抽纸巾都感觉老板在看着me,我甚至想掏手机给老板付点纸巾费了。而且它们配的纸巾好劣质啊!一擦嘴全是毛是什么鬼。
所以我就感觉,要是有个共享的纸巾在那多好,是抽纸!!不是一小包的!!这样我就不用往我裤兜里面塞一包没用完的纸巾膈应自己了。而且我也不想每次付一块两块这么昂贵的纸巾费(等我有钱就舍得了)
当时想着,放一包质量好的抽纸和付款码在那,大学生素质高,让他们自主付款。我舍友却说:你搞来,我一整包纸巾给你拿走,你能咋办?清洁阿姨都有可能当垃圾收走。学校同不同意?当时一直没想着利用自己的专业知识来解决这些收费、安全问题,所以大二的想法在大四才得以实现。
共享抽纸的期望功能:
1.能计算你每次抽取的纸巾来少量收费,比如一张2毛钱之类的。?(毕竟用的是质量好的纸巾)
2.纸盒的开关是可控的。
3.进行身份认证,通过刷卡?指纹?人脸?(杜绝不付款还想用纸巾行为)
实物
没做壳子,3D打印太贵啦!!!亚克力都好贵啊。
硬件架构
系统架构
主要实现的功能
人脸认证
功能描述
使用opencv读取USB免驱动摄像头来实现画面的捕捉,画面信息先由LubanCat-1进行处理。采用opencv常用的人脸级联分类器来识别人脸的位置,截取人脸有效区域,通过无线WIFI模块进行联网,上传百度智能云进行人脸认证以及人脸库管理。
实现流程
读取视频,用级联分类器识别人脸。级联分类器人脸识别链接,文章里面还有美女 >0<
截取人脸部分,就是基于人脸识别出的x、y、w、h,将frame进行数组切片就OK啦(当然w、h改大一点,保证完整人脸区域)
# 获取人脸区域并赋值给self.face_roi
self.face_roi = frame[y:y+h, x:x+w]
这一步是为保证上传百度智能云的图片是有人脸的,减少API调用次数(调用太多要钱的!!!)
怎么上传百度智能云,以及如何进行人脸库管理,请看我另一篇文章《百度智能云调用》
GUI界面
功能描述
GUI的页面有三个:
1.显示封面的首页。
2.使用页面,有摄像头拍摄的完整画面显示,截取人脸的画面显示。有用户注册、用户注销、结算金额、打开纸盒的功能按键以及是否人脸识别的复选键,还有功能对应的对话框提示。
3.用户使用数据页面,用于显示所有使用用户的用纸信息,就是用户的欠条或者存的额度,避免频繁地进行收费行为。
实现流程
GUI是基于pyside6进行设计开发的,参考了Qt Designer框架(git链接)。其实界面开发无非就是显示、按键的信号与槽、对话框、文件交互、布局,宏观的东西没多少。较为繁琐的是一些样式的配置,部件怎么拼在一起更美观,模态和非模态的对话框调用虚拟键盘配置问题,更注重的是设计审美和细节。系统的pyside6学习建议看这个系列的视频。(针对快速开发或者不会C++的情况)有时间的话,本人还是更推荐用C++的QT去开发,功能完整。本次毕设赶时间,就用pyside6快速开发了,双标就是我了。
纸盒开关
功能描述
通过控制MG996R舵机的翻转来模拟纸盒的顶盖翻转,实现纸盒的自动开合。
实现流程
舵机控制也简单啦,就是板子PWM控制,给个指定的极性、频率和脉宽(或者说占空比)就可以控制舵机了。当然,想要丝滑的翻转还需要比例控制。实现代码可看我写的这篇舵机控制。
语音交互
功能描述
通过麦克风收集用户下达的功能指令(等同GUI按键功能),语音模块去识别处理后,将信息通过串口协议发给主控板,调用相应的功能。还能通过喇叭播报如人脸认证是否正确、抽取了几张纸巾等信息。
实现流程
本次设计采用CI-03T语音模块,并在拓展板里面加入喇叭和麦克风,这个模块是通过网站来自定义其语音指令逻辑和串口协议,我们主控板只需要有串口就可以使用,非常简单快捷的开发。具体描述请看我另外一篇——CI-03T开发,固件烧录成功后按照自己的串口通信协议进行发送和接收指令,就可以实现语音代替触控了。
纸张数计量
功能描述
每个人每一次取纸的量不一样,所以得按量收费。
实现流程
当时想过几种方案,比如红外测距?(测量纸张的剩余的厚度),光电传感器?(去检测每次抽取的动作)但后面想到那种压力传感器的方法更为准确,因为每张纸的重量大多是一致的,然后HX711这个模块测试重量又很准确(静置水平位置),所以检测每次抽取重量,就能知道抽取的纸张数了。通讯方式是ADC, 开发可参考这篇文章树莓派控制HX711
数据存储
功能描述
存储每个注册用户的用纸数,如果每次抽纸都要付款,大家也比较烦,所以设计了这个数据存储的功能,可以先存几块钱,就能有相应纸张的余额,每次取纸的时候再扣就好了。
实现流程
阿里云有对应的oss数据存储的SDK教程,然后将用户数据写入data.json文件存储更新到阿里云。这样就能实现多机云存储,毕竟消费者可能这个机器抽几张,下次去别的机器。
结语
本次记录毕设相关的开发过程,目的是为了提供给师弟师妹们参考,多一条毕设思路,毕竟我这个做的有点简陋。期待有大神进行再创。