其实早应该把这个做出来,但是拖到现在,今天一狠心决定把它完成。

上面的这个是电路部分的照片,其实主要就是两块:STM32部分和一个简单的电机驱动。
STM32部分的电路在设计电路的一点小结这篇文章里面已经写过了,当时做这块电路的时候蓝牙部分是有问题的,昨天心血来潮,把蓝牙部分弄好了,其实就是割了两条etch上的线,用飞线代替。蓝牙用的是国产的模块,datasheet写得很不清楚导致设计时候线连反掉了。


电机驱动只是2个三极管,当作开关用的。

Android端用的是Bluetooth SPP,测试用很方便。

下面这个是完整的小车样子,经测试跑起来很灵活^_^

 

微博上看到CSK制作的激光键盘,科技感十足,于是也想自己做一个。这样的激光键盘网上其实已经有卖,不过价格都是1K以上,自己做的话成本很便宜。参考了CSK的自制的低成本激光3D扫描测距仪和激光投射键盘

上面这个是我做出来的prototype

原理的话其实挺简单,下面这幅图可以说得很清楚:

顶端的Projector负责投射出激光键盘,最下方是一个红外一字线激光管,中间的是一个摄像头。当手敲击键盘的时候,指尖会被红外光源照亮,这时候摄像头捕捉到照亮的位置,并可以用这个亮点位置反算出所按下的键。为了不让可见光干扰,在摄像头上需要加一个滤光片,我用的是810nm的,能把810nm以下波长的可见光滤除。


程序截图

可以使用OpenCV的特征点识别来检测手指位置,上图里面那个大亮点里面的小圈就是OpenCV特征点识别出来的位置。用这个位置和键盘做一下映射,得到按键以后给系统发送按键消息,一个激光键盘就可以使用了 :-)

 

打开Update Manager时候,更新安装不了,总是跳出来对话框说

Not enough free disk space
The upgrade needs a total of 23.0 M free space on disk ‘/boot’. Please free at least an additional 6,127 k of disk space on ‘/boot’. Empty your trash and remove temporary packages of former installations using ‘sudo apt-get clean’.

/boot之前分配过100M的空间,试了sudo apt-get clean并没有解决问题。
后来找到的办法是把之前没有用的Kernel删掉就好了,至于怎么删,请参考 http://www.go4expert.com/forums/showthread.php?t=24436,rm掉几个/boot下的文件就好。
分别是 rm

/boot/vmlinuz -*kernel version*
/boot/ initrd-*kernel version*
/boot/config-*kernel version*
/boot/system.map-*kernel version*

和 rm -rf

/lib/modules/*kernel version*
 

微博上看到@TechWeb转发了一个微博,内容是:

以下这段密文,为支付宝一位女工程师所编写,采用了二战时期一种著名商业密码机的加密原理,她说,她要讲的话都在这里面,包括联系方式。祝女生们节日快乐!
密文:
NRFHFLOGTBIHURDAFCKTFONJTNGFMESQSLBQEQJILGJRNNBOUSDR
GXJRIQQRJZQURVSYRLRDOFVBFKKKFFGXDNYXLWPNFPGDIDBOGXHD
NBMDSQSAKPXJHSBWYXLWWCZHJBIEHKXXYZRTPITVDOGJILLRUMCV
ULWZMQDSRALFRPNIZIBMOUSCKPWBELJGZOLOOZXJMAANELTFYLOS
ZFGKYDLKJGRPDVNWULPEOKTKFDPGNYCJPENIPQBOFDZRBOHTSHZM
OMYANWSAMKLRAGTROJEXNZTAIAJRDSDNHQVMMXDZMPTUTOMLOSNG
SLOPGTYUJJNSEHQJGSODKYPAH
提示:
1.这是按二战时期一种知名商业密码机的原理加密后的密文,温馨提示:”AZ BY”, “A”, “L”, “I”.
2. 也许这张映射表在破解的时候用的到。表暴力,要温柔~
温馨提示:目测即可破解,不是所有都用的到的噢。
{34=65, 32=66, 33=67, 40=68, 41=69, 46=70, 44=71, 93=72, 59=73, 126=74, 125=75, 124=76, 123=78, 63=77, 62=79, 61=81, 91=80, 60=82}
攻城狮们,程旭媛们,密码爱好者们,欢迎参加逻辑的狂欢!

虽然感觉阿里巴巴用像这样用女工程师来吸引呆呆的城旭猿不太厚道,但是还是打算晚上从实验室回去后试试看。
“二战时期一种著名商业密码机”指的是Enigma了,先wikipedia上了解了一下,然后找到了一个网页版的的解码机http://enigmaco.de/enigma/enigma.html。

“A”, “L”, “I”是三个转盘上的值,”AZ BY”是后面的映射。
这样,可以得到字符串:

PUBLICBCLASSBALIPAYBNBBBBBBPUBLICBVOIDBWELCOMEALLD
EBNBBBBBBBBBSYSTEMFOUTFPRINTLNDAHIJSWEETIEGBWELCOM
EBTOBALIPAYCBSOBGLADBTOBHAVEBYOUBROOTINGBFORBUSCBM
YBWEIBOBIDBISBALIPAYHUTUGBPLEASEBCONTACTBMEFBSEEBU
BSOONJAEIBBBBBKBBBBBBPUBLICBSTATICBVOIDBMAINDSTRIN
GPHBARGSEBNBBBBBBBBBALIPAYBALIPAYBQBNEWBALIPAYDEIB
BBBBBBBBALIPAYFWELCOMEALLDEIBBBBBKBKB

看样子是java代码,里面夹杂的字符的ascii值应该用提示里面的替换掉,本来打算写个程序自动替换的,后来发现这里不适用,需要人肉判断。
根据提示里的表,写了一个简单的代码来对照着翻译,输出结果在下面:

B (space)
C!
A"
D(
E)
G,
F.
I;
R<
Q=
O>
M?
P[
H]
N{
L|
K}
J~

在译码结果里面看不顺眼的地方把字符用上面的换掉,最终可以得到:

PUBLIC CLASS ALIPAY{
	PUBLIC VOID  WELCOMEALL(){
		SYSTEM.OUT.PRINTLN("HI~SWEETIE, WELCOME TO ALIPAY! SOB GLAD TO HAVE YOU ROOTING FOR US! MY WEIBO ID IS ALIPAY****, PLEASE CONTACT ME. SEE U SOON~");//加句注释,给ID打了薄码
	}
	PUBLIC STATIC VOID MAIN(STRING[]  ARGS) {
		ALIPAY ALIPAY = NEW ALIPAY();
		ALIPAY.WELCOMEALL();
	}
}
 


这个电子琴是工程教育课上的作业。一共支持25个按键(两个八度音阶和一个高音),按键通过74hc165芯片并转串传到单片机,声音信号通过一个10Khz的定时器中断发出,由DA经过滤波器和功放LM386再输出。真正做的时候没有完全按照上面这个一开始设计的电路来,那个三阶有源滤波器直接用rc一阶的替换了。

下面这个是演示视频:

Continue reading »

© 2012 Bill Hsu .me Suffusion theme by Sayontan Sinha