本帖最后由 iRobot 于 2013-5-11 16:44 编辑
前一段时间我说了,要不借助蓝牙,数据线,wifi来操作NXT,好了,是时候兑现诺言了。答案就一个字,我只说一次:光。 先看一张示意图。 如图所示,设想整个过程分为5个环节。 1. 手机接收输入信息或指令。 2. 完成摩斯码转换过程。 3. 将编码过的信息使用手机闪光灯发送出去 4. NXT的光线/颜色传感器捕捉光信息 5. 反编码,显示信息或执行指令。
整个过程很清晰。下面就是动动手的事情了。
首先我做了一个环境光探测程序,监测过去30秒内的环境光变化。通过反复试验可以看出,无论是室内,室外,白天,黑夜,手电筒或闪光灯的光线强度都是可以被探测到的。另外同学们注意了,即使白天阴天的情况下,光线强度也有300-400单位,而晚上开着很亮的灯的情况下,光线强度也很难达到200。这说明读书还是要趁着白天啊,保护视力。
确定了这个前提之后,基本上整个方案的可行性就得到保障了。接下来是选编码。编码有莫斯和ASCII两种。ASCII码好处就是全,大于号小于号,笑脸等都能发送,且转换方便。缺点是对于二进制光信号来说有些太长了。所以暂时用摩斯码。以后有时间再尝试ASCII。所谓摩斯码,就是电影里发电报的那种滴滴哒哒声。
手机端转换光信号让我有点为难。我认为根据现有设备的采样率,10HZ的闪光频率应该是可以被捕到的。但是我不清楚我的手机如果以这种频率闪过之后会不会当场挂掉。所以实际速率调整的较慢,也方便肉眼观察。我设计了3种模式,1是纯文本模式,发送文字信息。2是文件模式,发送图片或其他文件。3是指令模式,直接发送NXT的指令。不过在这个版本上大家还看不到文件模式。
闪光灯开启。发送信息就靠它了。
手机上的编码结束后,开始NXT端解码。首先要接收光信号。难点在于要多次试验可靠的伐值来确定收到的编码有效性。另外计时和计算光信号强度也是个难题。然后还约定了起始位和结束标记。接着做界面设计。有一个出乎意料的事儿。上次做老虎机的时候,我先把NXT主机装配好了,结果导致没法用牙签捅它的PP,所以这里我觉得应该先写程序,再搭建物理结构。这就导致我需要频繁起身才能看到屏幕。后来想了个办法,看图,我强烈建议大家都效仿一下。呵呵。
这是NXT端界面。收到的文字信息会直接显示在屏幕上。指令会立即执行。界面下方统计栏显示接收了多少个字符,当前接收状态等信息。程序启动时,需要2s时间进行初始化,这期间会测量平均环境光,所以启动中不要到处移动它或者用手电照它。启动完毕后,状态栏显示当前平均光照强度,白天在300左右,夜里开灯在150左右。我拍照的时候是阳光直射。
这是成功接收到的信息。接收一个字母,显示一个字母。下面Rec...表示正在接收。我测试的时候把26个字母依次发送过去,在1米的距离100%成功。
大致就是这样了。这是最后搭建完成的图。
拉近看雄伟
换个视角
因为是光信号发送,理论上按照一定频率开关电灯也可以。实际上确实如此。但是对操作要求很高,就不演示了。
最后照例,发帖伟大,顶贴光荣,视频回复可见。包括传输文本和指令的演示。视频质量不太好。镜头在NXT的屏幕上很难聚焦,也不容易获得正确的曝光值。所以只能凑合着看了。实际效果是很不错的。在1-2米的距离100%成功。
|