趣味创意馆

位置:首页 > 创意diy > 电子DIY

石头剪刀布手套:不止是寂寞宅的消遣手工电子DIY教程

电子DIY2.91W

石头剪刀布手套:不止是寂寞宅的消遣

 

制作时间:5小时 制作难度:★★★☆☆ GEEK指数:★★★★☆

《愤怒的小鸟》制作者说他们的游戏如此成功的原因之一是由于这款游戏的定位是“打发时间”,人们可以在等待例如叫号、客户、列车、下载等等的时候花不到 3 分钟消灭猪猪们——在智能手机如此流行之前,你还记得我们是如何消磨这些短暂的时间的吗?—— 我们当然会玩“石头剪子布”!我现在还经常玩这游戏。我可以凭经验告诉你,这游戏可是有些真正的策略的,绝对可以通过简单地实战来提升你的技巧。

 

然而有个老兄还设计了他自制的剪刀石头布游戏手套,让你在找不到对手的时候自娱自乐。精心设计的算法还会找出你的弱点——这让对战的挑战性着实增强了,下面就来隆重推出这款“石头剪刀布手套”。

名儿有点长,叫它剪刀手Edward吧,反正这也是个小机器人,跟Waston一样一样的~

 

这是一副会跟穿戴者进行激烈的“石头剪子布”游戏的手套,它会学习穿戴者的游戏风格,在游戏中针对他们的弱点。

听上去很酷吧?!

这是为什么呢?我自己也不是完全肯定。追踪灵机一动的源头往往是无稽之谈,不过有时还是能够逗弄出某个主题的。在本例中我的主题就是让电脑能够根据我们的规则与我们进行互动。键盘和鼠标之所以被造出来,就是让机器观察我们的行为的。但我们必须学习如何使用键盘和鼠标(以及电话)好让机器能够理解我们。

科技在键盘和鼠标出现这之后有了飞速的进步,那么我们的交互接口也该进步起来。我们不应该非学习如何使用科技不可——让机器来“读懂”我们吧。

 

因此这副手套可以和人玩儿“剪刀石头布”,而玩家不需要学习任何使用方法。只要戴上手套开始玩儿,这副手套自然就会跟你对战了。

我在公众场合将它拿出来过几次,人们在第一次玩儿时基本上不需要什么指导,他们对此大感惊奇。

它会记忆你的游戏风格,因此如果你老是出石头,那么它就会倾向于出布。而如果你倾向于在出了石头以后再甩出一个布,那么它就会用剪刀回击。

这副手套目前跟我玩儿五局三胜制的对战记录为 71 胜 62 败。

继续阅读,你可以了解我是如何制作它的,以及你在制作自己的手套时需要的所有的电路图和代码~

 

 

1   设计● 如果你想要制作某个会玩儿“石头剪子布”的玩意儿,那它应该具备哪些功能呢?

1.获取手所处于的姿势。(石头、布,或者剪刀。)

2.获取拳头的挥动,这样它就知道该在什么时候出手了。

3.选择一个游戏手势,然后……

4.和玩家同时出示游戏手势。

● 以上这些功能都可以通过一套复杂的视觉系统、一两台高速摄像机,以及一台实时地处理信息的完整计算机。但跟我们追求的理想境界相去甚远。这样做开销太大、非常复杂,而且还不是很可靠。最重要的是:它不能塞进你的口袋里。

 

● 来点更低碳的方法!我们需要从三种手势中识别出一种,石头(所有的指头都弯曲)布(所有的指头都伸直)以及剪刀(两根指头弯曲,两根指头伸直)。

从这个角度看来,我们所需要做的只是观察两根手指的弯曲状况,也就是中指和无名指。(食指和/或小指也行。)如果他们都是弯曲的,那就是石头,如果他们都是伸直的,布,如果靠边上的那个是弯曲的,则是剪刀。

如何测知物体弯曲的最浅显的答案就是弯曲传感器了。这有点杀鸡用牛刀之感,因为我并不需要了解弯曲的程度大小,只需要知道是否弯曲罢了。

正好有那么一个弯曲传感器,其大小和规格正好适用于手套的指部。就好象是专门定制的一样!实际上它们就是专门定做的——这些就是在任天堂电力手套(Power Glove)上的弯曲传感器!!!

 

● 好了,我们能够感应手势了,但我们如何感应手的挥动呢?我用一个简单的微动传感器进行了测试。它基本上就是一个在密封杯中的钢珠。当它安静地躺在杯底时,电路就能流通,而当它受到碰撞时,钢珠就会滚动,电路就断开了。它便宜又好用,适合许多应用场合,不过在玩儿了几次以后我发现它落回杯底保持稳定所需的时间太长了,而又无法调整灵敏度。手只要轻轻颤抖就会让它断电,重新归位则需要一两秒钟。一言以蔽之,它能够检测你的手是否在移动,但无法分辨出每一次的挥动。

之后我想到了用加速度仪,类似于 iPhone 或任天堂 Wii 的遥控器里的那玩意儿。那是一块小小的芯片,可以获取三个方向上的加速度。

这是第二把杀鸡用的牛刀了 - = ,因为我们其实只需要检测一个方向上的挥动(至少我是这么觉得的),但它的精度很高,而且有不同级别的灵敏度,使用起来也很简单、小巧、耐用,而且耗电量也小——所以就选它了。

 

● 现在让我们给这个玩意儿赋予一些智慧吧。要让它随机出手是很简单的,但我想要让它玩起来更棒。要做到这一点,它就需要能够记忆穿戴者的游戏风格、他们的出手模式,并选择最佳手势来取得胜利。那就需要某种微控制器和一些程序了。

我选择了 Arduino Mini Pro,因为它小巧、输入输出接口数量足以满足我的需求,而且我跟它“合作”过很多次了。它也是运行在 3.3 伏电压上的,就像我们所使用的加速度仪和大部分 LED,而且便宜又全能。最重要的是,它带有长期记忆功能,这样我们就能将几次游戏中的统计信息储存起来,为我们的猜测算法服务。

 

● 最后,如何显示手头选择的手势呢?这里有多种选择。最简单的方法只需要一盏下面贴有记号的灯,但这样就显得不够卖骚,而且需要玩家去看记号,当你眼前有一盏灯亮着的时候就很难看清了。理想情况下我希望能有让玩家立刻识别出来的图标。

关于分层边缘照明我有好几个创意点子。其中大部分是在我读《邪恶疯狂科学实验室》的关于边缘照明节日贺卡的文章时想到的。很可能我从中学到的最棒的东西就是用聚酯纤维替代丙烯酸塑料。(McMaster-Carr 编号 85815K11)聚酯纤维板是很棒的玩意儿。它们的透明度很高,但又不像丙烯酸塑料那样容易碎裂,而且可以用剪刀切割。

我不是完全确定雕刻出三层图形并分层照明是否可行,于是我做了几次试验来确认。结果并不如我希望的那么完美,底层的图形有些变形了,不过依然可以识别。我在试验中发现了一点:从背部进行雕刻可以产生点亮后更明亮、熄灭后更透明的图形。我用带有细小的磨削点的 Dremel 电磨进行雕刻,但要是有机会的话,我更想看看用激光切割器做出来的效果。用铝带包裹住每一片的边缘可以大幅提高亮度。

(边缘照明的显示效果还行,但并不理想。石头在顶层,剪刀在当中,而底层的布有点不太好认了。)

 

● 当大致确定了设计方案后,我开始着手研究细节。首先确保一切都能协同运作,或者经过改动可以协同运作。由于我希望整个装置能够放入手套的手背部位,所以我做了些部件的纸剪影,将它们贴在我的手套手背上,来确定布置和走线的方案。我决定将显示器放在拇指的第二关节上,这样在甩出石头或者布的时候玩家就能看得见了。然后我欢快地检查了我的工具箱,购买了所需要的东西。

● Sparkfun 上面有这个项目中我所需要的一切材料。提示:当你在邮购任何组件时,至少多买一个。如果你意外地折断、烧坏、或者吃掉(你是有多饿啊……)了某个零件,你就不需要等待邮递员为你带来新的零件了。

 

2   制作我通常喜欢从最不确定的方面入手。这样的话万一我陷入困境了,我还可以转而处理些简单点的部分,直到我搞清楚该如何继续下去。虽然这里面有许多理论上并不确定的地方(我过去从来没有应付过这些实际的零件),但我对它们的规格很熟悉,也读了很多的文档,发生什么都不会感到意外。

真正的未知在于边缘照明显示。我不确定能够让它可识别,因此我一开始做了几次试验。最后,我选择了普通的 5mm 圆形 LED,并把它们的尺寸打磨到和塑料板的厚度相当,这样我就能让显示器尽可能地薄一些,这样对于透射光线也有好处。

我本可以使用长方形 LED,但我手头没有,而且它们的颜色种类并不是很齐全。

我认为给每个手势设定不同的颜色是很重要的,因为这样可以帮助玩家更快地识别出手,于是我试着给手势选择相匹配的颜色。(那种颜色最适合“剪刀”?)在我满意地找到了一些可用的材料之后,我继续完成剩余的记分板布线,接着开始研究弯曲传感器。

 

使用弯曲传感器是毫无疑问的,但说实话我对它们感到非常失望。它们只能获取一个方向上的弯曲,不过这跟本项目没什么关系,但可以在今后引以为戒。传感器要能在手套上滑动,因为当手指弯曲时,其顶端比伸直时长1.3cm左右。出乎意料的是,“弯曲传感器”的连接头居然不能弯曲。我没考虑到这一点,制作时浪费了一倍以上的传感器。

 

在连接并校准了弯曲传感器后,这套装置除了加速度仪以外大部分都完成了,我进行了一次预演。

我试着玩了一会儿,想知道当处于“自然”姿势时在手套手背上会获得什么样的反馈信号,以及在挥动时会出现什么反应。我很高兴地看到它给出的反应很稳定,我都不需要通过任何平滑算法来从中抽取有用的数据了。(至少在这一简陋的应用中不需要。)

我用的加速度仪有四档灵敏度,从 1.5g 到 6g。 4g 的设置似乎在挥动拳头时可以产生最大范围的数据一致性。我决定将三根轴都接上,而非仅仅是 X 轴,因为我觉得,不连白不连。我还有多余的输入接口。结果表明,这么做帮我在之后节省了点力气,因为我发现甩出“布”的时候很容易只影响 Z 轴。

在我将所有的零件焊接到位之前,我没有用模拟电路板测试过,这是一次大胆,当然也是愚蠢的行为。不过除了一处困倦的误焊以外,第一次尝试中一切都运行良好。

最后我需要既能够获知手套运动,又能够选择合适的动作的软件。在我开发游戏多年的经验下,这种事情对我来说算是第二本能了,我并没有在开发代码中花多少精力。大致上这个问题可以分为三个可确认的小步骤,然后再将它们联系起来,直到我写出令自己满意的代码。这是一种学习如何开发的好方法。

我在这一游戏之外给接口中添加了一些特殊的东西。

● 要想关闭游戏的时候,只需出石头即可。

● 要想从串口输出储存的游戏数据(胜/负记录等等),只需出剪刀即可。

● 而要想在诊断模式下运行,只需出“反剪刀”,即中指弯曲,无名指伸直。 为毛我觉得反剪刀姿势的难度那么大呢……

3   效果如何?

优点 人们能够无需任何训练就能使用它。我把它拿到公众场合,让毫无准备的人们试用,每个人都玩的很开心,而且每个人都能够立刻进入状态。唯一的实际问题在于有的人是挥两下再出手,而其他人挥三下才出手。我目前还不是完全确定该如何让它自动解决这个问题,但我已经想到了一些点子。

缺点 用弹性很好的手套会给所有的各类连接产生额外的压力。虽然我在力所能及之处对连接进行了强化和收拢,但还是很难做到不需要将弯曲传感器别扭地拉开就将手套脱下。我弄坏了正常需求两倍的电源连线,虽然部分原因归咎于 9v 电池接口出的糟糕的导线无法承受 9v 电池的质量在晃动时产生的剧烈移动。让额外消除电源接线的应力,加上 9v 电池仓能够一定程度上缓解这一问题。整个系统并不会消耗多少电力,因此我可能在下个版本中用一小节手表电池来供电。

 

优点 它赢得较多,而且它会不断学习。我观察了我的数据,发现我从来不会在游戏的一开始出石头,于是据此调整了我的战术。结果才交了几次手,手套就发现了我的新战术,进行了弥补。

缺点 弯曲传感器——它们相对而言很贵(每个要 13 美元,基本上和整个微控制器一样了),不仅如此,还存在一个重大缺陷:一开始安装的两个传感器在工作了 700 次后就失效了。传感器本身带有强化支撑,帮助它弯曲程度远不会达到损坏的可能。不幸的是这一强化部分比主接口早 2mm 停下来,在如纸片般薄的基底上留出了一小段但非常重要的区域,可能被意外地轻易弯折,从而破坏传感器的连线。我想说这对于一个叫做“弯曲传感器”的玩意儿而言是一个设计瑕疵。在购买了替代品后(几乎是整个项目成本的两倍)我对将接线夹在两层坚固的塑料中,涂上厚厚的胶水,进行了强化,消除了应力。到目前为止这样的修整算是有效的,但弯曲传感器无法妥善应对弯曲实在令人失望。我正在不断寻找其他更便宜更可靠的方案。

跟一些人谈论了弯曲传感器的问题以后,他们提出了几个很好的替换建议。一种是用光缆,从一头发射光线,在另一头获取光线的数量。另一种建议是用某种弹性导电的织物,当伸展时电阻会发生变化。这种材料每英尺要价 60 美元,但这样可以构成许多传感器,而且我已经在寻找一些有意思的东西,加入到我的材料库中了。

 

不太好看的细节 我并不期待有谁也做一个完全一样的玩意儿,不过你可以从我的制作过程中学到些东西,因此如果你感兴趣的话,可以看看下面的细节:

 

4   零件列表● 1 副手套

● 9v 电池

● 9v 电池插塞接头

● Arduino Pro Mini 3.3v/8MHz-2 个弯曲传感器

● 2 个 1K 欧姆电阻

● MMA7260Q 三轴加速度仪。(带有接口板)

● 6 个 3mm 白色 LED

● 单刀单掷滑动开关

● 12mm Piezo 扬声器。

● 3mm 绿色 LED

● 3mm 红色 LED

● 5mm 蓝色 LED。

● 5mm 水色 LED(我不太清楚那里能弄到。但很漂亮。)

● 5mm 白色 LED。-2 个 42 欧姆电阻。(注意:如果你用的 LED 都是 3.2~3.5v 的,那么你可以将电路简化,在 LED 上都不需要附加电阻。)

 

5   图纸 

6   源代码● 在这里下载 Arduino主控板的设置信息 。(或许你想知道 Arduino的使用方法 ?)

 

7   关于剪刀石头布这个游戏几点不得不说的事来点事关和活人(不是机器)玩游戏的题外话:我们在家庭日常生活中常常会玩“石头剪子布”。当我们在决定谁挑选餐厅、谁去把洗碗机里的餐具拿出来,或者谁掌握遥控器的时候,我们都会在一点上达成共识——总之我们听从“石头剪子布”的赢家。

如果你不熟悉这个小游戏,那么地球人都知道的规则是这样的:剪刀剪破布、石头砸坏剪刀、而布包住(击败)石头。三局两胜决定胜者。

直到最近,我都一直认为这游戏纯属运气,不过其实不是这样的。这是一个关乎技巧的游戏。嘘……别把这消息透露给我家里人。他们都很奇怪我怎么突然变成了“石头剪子布”的霸主……

下面是基于心理学作用的“剪刀石头布决胜 6 大秘诀” 。当将这些秘诀融会贯通后,我发现胜率高达 80%,还有 90% 的机率迷惑你的对手。

7.1   了解你的对手

知己知彼百战不殆,连上文的机器手套都明白这个道理——研究表明女性在游戏一开始有 60%~80% 的机率出剪刀(比男性高得多)。如果你跟一个女士对战,那就多出石头吧。有的人相信如果你有 66% 或以上的时候都出石头,你就能轻松战胜业余玩家。凭我的个人经验并不确定这一说法的真伪。

 

7.2   假动作

在你出手之前扭动手指,让你的对手以为你要出别的手势,搅得他心神不宁。例如,在你实际出布之前很快地摆出一个微妙的剪刀手势(因为他以为你会出剪刀,所以就会出石头)。

 

7.3   菜鸟石头大部分新手在游戏开始时会出石头。因此,知道了这一点,如果你跟新手对战,先出布吧。 喂喂~在碳基世界真的还有“石头剪刀布”的所谓“新手”嘛? 

7.4   事不过三

有时人们会连续出石头、剪刀或布,但他们几乎从来不会连出三次。如果你的对手连出了两次某种手势,你可以预料他的第三次出手不会是之前连续出的那种。

 

7.5   潜规则…

大部分人会有潜意识的石头、剪刀、布的出手规律。他们会频繁按照同样的顺序出手。如果是这样,在你跟别人对战之前先研究一下他跟别人的对战,这样,你就能了解他的规律。

 

7.6   赢家效应!

最后一点,这个秘诀在你赢得了三局中的第一局时真的非常有用。大部分新手玩家会下意识地出刚才击败了他们的那个手势。如果你刚刚用石头击败了对手,那么下一次就出布,因为他们很可能会出石头。我根据自己的经验,发现这一秘诀几乎次次奏效。

 

虽然有点扯,我依然希望你能凭借这些秘诀在“石头剪子布”中好好地给对手点颜色瞧瞧!祝你好运!

 

8   拓展教程再介绍这个“剪刀石头布”的高阶教程(适合2人以上的玩家)。它包含了四种新的手势,例如时间机器、食人族、克隆体和大拇指。这绝对会让游戏更加有意思的。来看看四个手势的新功能吧:

● 基本手势中多了一个“时光机”:用对手上一次的手势对抗他当前的手势。(还得考验记性…)

 

修正手势(跟基本手势一起出):

● 食人族: 这个辅助手势可以帮助你击败没有食人族手势但是跟你出了相同基本手术的家伙,当然假如都出了辅助手势就两两相消不起作用了。

● 克隆人:用双手出相同的手势,如果赢了 +2 分,如果输了则 -2 分。

● 复数 i : 如果出“ i ”的玩家数为奇数,赢了这局的玩家得到的分数变成复数分,这个“复数分”算法不一定,可根据具体的游戏大家协商议定~

 

你可以自行修改这个手套的细节,像Sheldon四人组经常做的一样,自己跟自己玩“石头-剪刀-布-蜥蜴-史波克”(考虑到这个游戏的难度,我觉得你很难在日常生活中找到一个可以相互匹敌的对手,所以也就只能自己玩了...)。不熟悉规则的,请自行复习TBBT。