灵感来源:
接触感染是新冠病毒传播的主要方式之一,双手接触到病原体后因为不自觉触摸口、鼻及眼,从而使病毒得以传播。
人类是少数会不自觉触摸自己脸部的少数物种之一。据一项有趣的实验数据显示,即使是医科生,也会不自觉每小时触摸自己的脸不少于20多次,那些劝导大众不摸脸的医护专家们在公共场合都难免犯错,甚至还舔手指翻页。
所以,我思考如何能借助科技的力量来减少这种“自摸”行为?
新闻发布会上当众舔手指翻页
医疗专家当众摸脸
材料准备
硬件
- M3内六角螺丝
- M3平头螺钉
- 2-56螺钉
- 弹簧
- 垫圈
电子元器件
- Arduino Nano
- 7段数码管
- 红外传感器
- TT电机
- OLED显示屏
- PCB板
- 跳线
- 3D打印机A5S
- Hatchbox PETG打印耗材
- 水贴纸
- 松紧带
第一步:设计理念
主要的想法是使用一些传感器来检测任何触摸脸部的行为,并应用一些 "惩罚"来提醒我们不要摸脸!因为基于巴甫洛夫条件理论,不断的负反馈可以改变我们的行为。
对于检测,理论上任何障碍物检测传感器都可以。超声波传感器,Tof传感器,红外线传感器等等,前两者可以精确感知物体的距离,而我仅仅需要简单感知物体存在与否,所以最终我选择的是常见的红外传感器。
对于负反馈机制,我想了很多不同的方法.然而,由于这是戴在头上的,我不希望有任何永久性的脑损伤。所以选择了物理击打机制。
第二步:传感器选择
红外传感器比较便宜,声称有效检测范围是2到30厘米。我一开始只用了2个,但很快就发现它们并不能达到30cm。通过进一步的测试,我发现检测手部的有效距离为6.5cm左右,检测白纸能达到11厘米,与不同材料的物体表面反射率呈正相关。
所以我在脸颊两侧位置又添加了两个传感器,从而使传感器的检测范围覆盖了整个脸部。
此外,由于此传感器并不能发射和检测特定频率的红外线,其准确性很容易受外部热源(如,阳光,电炉发热丝,火焰等等)的影响。我只好用热缩管(后来用3D打印的盖子)把它盖住,挡住侧面的环境,但是面对热源的时候,它还是有读数的。
还有一点很有趣,这些传感器不能与苹果Face ID配合使用。由于Face ID使用的是红外泛光和点状图案来读取反光。每次用Face ID解锁最近的iPhone,都会导致一次触发。
第三步:机械设计
这个装置上最主要的机械结构是形成有效的负反馈的打脸机构。我分别尝试了以下几种设计:
拨片转轮结构:它相当大,而且看起来很搞笑。我一开始用厚纸片作为翻板,但它对我们造成对伤害很小,看起来比较适合当作小风扇。
拨片转轮结构
2.连杆结构(打臂与杆件联动):这个其实做起来很好玩,通过四段连杆来完成击打动作,不过我的经验不足,在负荷大的时候,电机会停顿。
连杆结构
3.凸轮机构:为了解决卡住还有电机停滞的问题,我们需要把电机的旋转和击打动作分开,因此最终设计出了凸轮机构,非常好用。
凸轮机构
我还将关节设计成可调节的,所以这个该置有可能适合许多尺寸。
然而,我更多的是凭自己的直觉设计,而没有应用科学的方法,所以有时零件会有点弯曲,因为我可能漏掉了一些关节的自由度,这里肯定需要更多的研究。
其他细节包括柔性结构的设计,用来更好地“适配”头部轮廓,可以支持不同的头部尺寸,部分零件易于拆卸等等。
第四步:电子元件
传感器
由于四个传感器中的任何一个触发都会运行相同的程序,我曾尝试将他们的4条输入端整合为一条。
我最先用面包板简单搭了一个电路:四个NPN三极管作为开关,串联起来,当任意传感器被触发时,此路便会断开,并联的信号端便会输出信号。但由于原件尺寸过大(SMD技能不足),最终还是放弃了此方案。
最后我保留了4条输入端的连接方式, 这不仅节省了部件费用,能耗等等,还能通过软件逻辑,更好的debug出问题的传感器。
4路转1路电路
电机
这里没有什么特别的地方,只需要加一个反激二极管,用晶体管做Arduino信号就可以了。
我为原型设计了电路,增加了连接器以更好地管理布线。板子最后还是太大了,我希望有一个数控系统来雕刻实际的PCB,可以使用更好的连接器,而不是跳线。
扩展版
第五步:准备代码
这个逻辑很简单。简而言之:
循环检查所有的传感器,如果有任何一个传感器被触发,它就会发出信号,启动电机实施打击,同时计数器记录下摸脸的次数并显示出来。
有几个值得一提的注意事项:
因为当某个传感器被持续遮挡时,摸脸计数会随着程序每次loop循环而增加,达不到准确计数的目的。
我设计了一个小的定时器(用于倒数),可以更精确的计数。
当一个传感器被触发时,计数器+1,定时器开始工作,倒数开始,在倒数结束之前任何新的触发都不再增加摸脸计数。
为了对惩罚机制进行区分,我也设置了不同的打脸时长:单次摸脸打击1秒;计数器每记录下10次,需忍受5秒连续击打;每记录下一百次,就需要忍受长达10秒的饱和打击。以此来加强负反馈的效用。
我根据计数器增加了不同的打脸时长:单次触碰的时候打脸1秒;当计数器每记录下10次,增加打脸时间,改为需忍受5秒连续击打;当计数器每记录下一百次,恭喜你,中奖了,你将会需要忍受长达10秒的“致残”打击,当然这个设计是为了加强负反馈的效果。
我花了不少时间打磨OLED显示屏上的图形。目标是和工业设计的风格相匹配。
首先要解决的问题是将自定义字体添加到Adafruit GFX库中,步骤很多,但Adafruit在这里有很好的记录:
https://github.com/adafruit/Adafruit-GFX-Library/blob/master/fontconvert/fontconvert_win.md
不过要制作和测试不同大小的字体文件,有点繁琐。
接下来遇到的问题是文件大小,字体文件是位图表示的,字体文件相当大(考虑到所有字符)。我只好去学习Fontforge这个字体制作工具,把多余的字符去掉,只剩下数字。
我选择的字体也不是单行距的,这意味着不同的字符有不同的宽度,导致数字总是跳来跳去。最后不得不手工编辑了通过adafruit程序制作的字体文件,以实现单距,还加了一些前导零,所以会显示 "003"而不是 "3"。
003
使用OLED的一个好处是你可以添加自定义图形,所以我在adobe illustrator中设计了停止标志和箭头,用这个工具http://javl.github.io/image2cpp/生成代码,然后编入arduino即可。
"STOP"
第六步:美学
我喜欢赛博朋克的风格,并从《2077》中获得了很多参考。
良好的设计绝对是我的项目里不可或缺的一部分,所以我玩得很开心。我还另外设计了水贴纸,并用激光打印机打印出来。细节能让这个项目更加完整。
实测效果怎么样?
通过超过一个星期的佩戴测试,我发现有时候听到马达的声音比实际的敲打更让我头疼。
每计数100次,持续打击10秒钟的设计很让我生气,但也确实有一定的效果,根据我的粗略测试,它确实让我把摸脸的次数降到了50%左右(约450次降至约270次)。
但是装置还存在很大的改进空间。比如说,环境的干扰或者是手机的误触发等等。
但是相信我,它的确能让你少摸脸,如果不信的话,可以尝试加大击打的力度和次数试试。
顺便说一下,这次还解锁了许多原设计意图之外的功能,比如:治疗手机上瘾(每次手机解锁都会触发)、培养更好的餐桌礼仪(勺子和盘子都会触发)、加强社交距离(不适合亲密动作)、确保居家不出门(阳光照射触发击打)。
看看视频中的真实例子,哈哈。
所以,这又是一个有点有用又有点没用的项目,希望你能从这里学到一些东西,也希望能够给你带来一点欢乐。
谢谢你的观看和阅读。