自制MaKeyMaKey
2015-09-10谢作如
谢作如
MaKeyMaKey是大众融资平台Kickstarter上的一个项目,由两位MIT在读博士设计。它能将日常物品变成触摸板,然后连上电脑和网络。MaKeyMaKey由三个部分组成:MaKeyMaKey主板、鳄鱼夹和数据线。对于任何导体(表面湿润的绝缘体也可以)来说,只要用鳄鱼嘴导线将物体与电路板上的各个金属触点相连,然后再连接电脑,就可达到触摸板的效果,成为一个计算机输入设备。
MaKeyMaKey能够模拟键盘和鼠标的信号,结合电脑中现成的游戏和媒体播放器之类的软件,不用编程,就能够设计简单的互动媒体作品了,常见的是用来做水果键盘,如图1所示。MaKeyMaKey的意义在于它可以用极其简单的方法让艺术家创造艺术,让孩子体验技术带来的乐趣,因而被称为是孩子们21世纪的发明工具包。
MaKeyMaKey并不贵,淘宝上能买到,大概500元左右。但作为一名创客,当然要试着自己来做一块。论技术难度倒真不高,只要稍微懂一点Arduino的基础知识就能实现。
设计输入模块
MaKeyMaKey的神奇之处在于能够把任何导体(包括人体、表面湿润的绝缘体)变成输入设备。对照运行图2所示的工作原理,我们可以发现,人体无非是一个选择性的开关,让不同的“键”(引脚)和“Gnd”连接起来,形成一个回路,让单片机能识别,如图3所示。
作为输入设备,我们知道最基础的电路如图4所示。这其实就是一个典型的分压电路,Vout的电压是受R1和R2的电阻值大小影响的。R2的电阻越大,Vout分到的电压也就越大。但是,由于作为输入设备人体的电阻很大,所以如何选择合适的电阻是重点。
如果熟悉计算分压电路,可以试着计算一下。一般在干燥环境中,人体电阻大约在2千欧到20兆欧范围内,那么作为匹配的电阻,应该选择这一范围的中间值,即10兆欧。经过测试,一般来说,1~10兆欧的电阻基本上都能比较敏感地测出是否形成了回路。
控制板的选择
控制板方面,我们当然要选择开源硬件Arduino。MaKeyMaKey本身就和Arduino有着密不可分的关系。不信你可以查看MaKeyMaKey板子的背后,是否写着Arduino的字样?
Arduino也有多种型号,我们用Leonardo还是UNO?因为Leonardo直接使用了ATmega32u4的USB通信功能,取消了USB转UART芯片,这使得Leonardo不仅可以作为一个虚拟的(CDC)串行/COM端口,还可以作为鼠标或者键盘连接到计算机。那么,第一选择肯定是Leonardo了(如下页图5)。其实,国内有很多Arduino的兼容产品,有些用的芯片就是ATmega32u4。只要是用这一芯片的,都可以改造为键盘和鼠标。
Arduino编程
Arduino IDE中直接提供了模拟键盘、鼠标功能的范例,在“示例”-“09 USB”中,如图6所示。范例中有英文的注释,很容易看懂。要实现键盘和鼠标功能,只需关注以下两点:①在setup函数中,加上“Mouse.begin();Keyboard.begin();”的声明。②输入按键信息,直接用“Keyboard.press('l');”即可。“Keyboard.releaseAll();”为释放按键。特殊字符,可以用KEY_LEFT_ALT之类的常量来代替。
依样画葫芦,我写了如图7的代码,其中TouchSensitivity是用来调节输入模块的敏感度的。代码中我定义了A0到A5口,分别对应“右、左、下、上”的方向键,以及空格和鼠标左键。
对MaKeyMaKey的改进
测试一下这块自制的MaKeyMaKey,除了我仅仅写了最常用的6个键外,其他几乎一模一样。既然是自制的MaKeyMaKey,我们总要做点改进。
1.解放另一只手
总是一只手接上Gnd线,另一只手触碰导体,才可以模拟出按键或者鼠标的动作,还是不方便。如何做才能更方便?其实很简单,如果将触摸传感器作为输入设备,就可以解放另一只手了。当然,我们也可以用红外测距传感器、红外遥控之类,连手都不用碰,也能和电脑交互,不是更有趣了吗?
2.远程控制
用蓝牙把两块Arduino连接起来,其中一块接电脑做接收端,模拟鼠标键盘,另一块加上特定的传感器做控制。哦,这不是无线鼠标了吗?是啊,如果加上三轴加速度传感器,就是空中飞鼠了。我看过有人把板子缝在帽子上,实现了用头部控制鼠标来玩游戏。
其实,这款自制的Arduino能做的有很多,只要你大胆想象。那么,是不是只能用Leonardo之类带ATmega32u4芯片的板子,才能模拟MaKeyMaKey?答案当然是否定的。在创客们的眼里,一件事情往往有很多种解决方案。例如,我们可以编一个客户端,用串口和Arduino连接,然后把串口的信息转化为模拟按键。国内有一款很有名的产品叫酷乐宅,就是用这种方案来模仿MaKeyMaKey的。
如果对相关内容感兴趣,请关注主持人博客。