用RC枪控操纵乐高电机
先送上一段新制作的视频,里面RC枪控上粘着的那个橙色盒子就是下文提到的RC红外转换器,配曲是很好听的一首歌,希望大家喜欢~~~
http://video.tudou.com/v/XMjQzOTIyMDIxMg==.html
大家都知道乐高PF电机是用红外发射器和接收器来实现遥控的,就是下面这两个:
这种遥控方式有两个缺点:首先是遥控距离很小,户外只有一米左右;其次是不支持比例输出,就是说接上电机只有前进后退两档,而没有高速低速之分;接上转向电机只有+90度和-90度两档,非常的不灵活。乐高还出了一款调速遥控器,俗称为火车遥控器的:
这款是可以调速的,但是超级不好用,它的工作模式是:顺时针转则速度加快,逆时针转则速度减慢,但是你不能快速的旋转它,那样它就会搞混自己是往什么方向旋转的,根本无法快速而且精确的控制输出速度。
在制作乐高赛车的过程中,我感觉越来越需要一款可以调速,而且要快速响应的遥控器,如果像RC车(无线遥控车)的枪控那样好用该多好!和我有同样想法的人不少,包括帅哥G_phy,他用纯乐高零件制作了这个:
手感很好,非常像RC枪控,但是仍然不能调速。
这时我想到,既然乐高火车遥控器能够发出变速的指令,那就是说,乐高的红外接收器,本身是支持调速的,只是没有对应的好用的发射器而已。RC车控可以调速,但是它发射的是无线电波,又没有对应的乐高接收器。那如果我能制作一个设备,把RC无线信号转换成乐高的红外信号,那就可以实现,用手感极好的RC车控,直接控制乐高赛车了!
说做就做。首先我需要的是乐高的PF红外通信协议,这可以在 http://www.philohome.com/pf/pf.htm 找到,通过分析协议文档,我们可以知道乐高红外接收器是支持两路独立的正反7速输出的,而且正好可以用一条16bit红外指令来控制:
LEGO PF 调速指令 : 01CC BBBB AAAA LLLL
CC – 通道号,通道1是00,通道2是01,通道3是10,通道4是11
BBBB/AAAA – 两路输出,各4个bit
0000 Float 输出悬空,电机空转
0001 Forward 1 正转速度1(最慢)
0010 Forward 2 正转速度2
0011 Forward 3 正转速度3
0100 Forward 4 正转速度4
0101 Forward 5 正转速度5
0110 Forward 6 正转速度6
0111 Forward 7 正转速度7(最快)
1000 Brake 输出短路,电机刹车
1001 Forward 1 反转速度7(最快)
1010 Forward 2 反转速度6
1011 Forward 3 反转速度5
1100 Forward 4 反转速度4
1101 Forward 5 反转速度3
1110 Forward 6 反转速度2
1111 Forward 7 反转速度1(最慢)
LLLL – 校验码,1111 ^ 01CC ^ BBBB ^ AAAA
乐高PF红外接收器通过输出频率为1KHz左右的PWM信号来控制马达转速。正转的输出一共7档,占空比分别是25%、37.5%、50%、62.5%、75%、87.5%、100% 。反转也是一样的占空比,只是电压相反。M/L/XL电机就直接用这个PWM信号来驱动了,而转向电机里面应该是有芯片来计算占空比的。
然后需要学习RC接收协议,好在现在的RC接收机非常成熟,每路RC输出都是一个50Hz的脉冲信号,每个脉冲维持1ms~2ms,分别对应发射机的-100%到+100%,1.5ms对应发射机的中位,依此类推。
现在我只需要做一个系统,读取RC输出的脉冲信号,计算出比例值,然后转换成乐高的速度:-7~+7,最后发射出红外信号,这样就可以工作了。因为只需要用到3个IO口,用一个最基础的Arduino主控就足够了。
从万能的淘宝买到了所有需要的零件。
RC枪控和接收机:
这是接收机的近照,非常小,4厘米见方:
主控电脑,10元钱的Arduino板子,只有大拇指指甲盖大小,做工相当好。
大功率红外发射器,这个发射功率比乐高原装红外发射器要强不少,室内5米没问题。普通的红外发射器只要几毛钱,这个要13元!
电池盒,我买的是可以装4节7号电池的。因为前面买的Arduino主板是支持宽电压的,6V~20V都行,所以直接用9V方电池或者2S~4S锂电池供电都行。
然后接上线,学习一下Arduino开发,编写一点小程序后,就可以测试一下效果了:
如果把上面这些零件(除了RC枪控)全部装进一个盒子,体积也很小。这个盒子有自己独立的电源,可以粘在RC枪控上,也可以固定在乐高接收机附近。RC的遥控距离可以达到上百米,而且无线信号可以穿越障碍物,现在终于可以在户外放手地玩乐高小车了!