MakeBlock遥控车
0赞Makeblock金属积木有一个优势是可以把乐高积木与它混搭,因为这种金属积木孔距与乐高基本尺寸相同,都是8毫米,这样乐高的资源可以方便地结合到金属结构的作品中来。这次的作品是设计了一个智能车,车体机械部分是用Makeblock金属积木搭建,而电控则是采用乐高LEGO原厂的NXT电控。
MakeBlock生产商网址:http://www.makeblock.cc/
图1 Makeblock遥控整车图
美国Mindsenors公司是出品乐高第三方NXT控件的厂商,他的产品线还是蛮丰富的,把其产品加入到您的乐高电控系统中,应该会使作品的科技含量提高一个档次。高水平的电控器件在乐高机器人作品上的应用,也是在"玩"乐高方面,成年DIY爱好者与小朋友能有所区别的一个方面。乐高“玩具”人人可玩,但应该说玩出的水平可以相差很大。
Mindsenors公司网址:http://www.mindsensors.com/
这次介绍的是Mindsensors公司的一款无线控制产品psp-nx-v4,它让您的索尼PlayStation 2游戏手柄可以无线连接到NXT控制器。把psp-nx-v4接口板插到PS2手柄的无线接收器上,再把psp-nx-v4接口板的电缆线连到NXT控制器的四个传感器端口种任何一个端口即可。
乐高电控的好处就是电控系统的连线极为方便,一根“线”里把电源线、地线、控制线、数据线等若干个线包含在一起,直接往乐高NXT控制器的端口上一插即可,即插即用。不怕连错线,不怕短路,不会出任何安全问题,省心快捷。
其实Makeblock公司不仅有好的金属乐高积木,而且他们的电控也很棒!延用了乐高电控的风格,也是类似即插即用的电控系统,只不过他们的电控核心是易学易用Arduino单片控制器。
图2 Makeblock电控系统
这次实验任务是这样的,手持SONY PS2手柄,按动手柄右侧的四个“标记了符号”的按钮,分别为三角符号(triang)按钮、十字叉符号(cross)按钮、矩形符号(square)按钮和圆形符号(circle)按钮。它们来控制Makeblock遥控车的前后左右行驶。
SONY PS2手柄各按钮的采样值会通过其无线接收器上的psp-nx-v4接口板传到NXT控制器,NXT控制器再驱动两个NXT伺服电机转动,而两个电机的输出轴又固连着小车的左右车轮,车轮的转向和转速的变化,就可以使小车被遥控做出各种行走动作。
图3 SONY PS 2游戏手柄
实验视频:
视频网址:http://player.youku.com/player.php/sid/XNjM0NjA3MDY4/v.swf
图4 Makeblock遥控车底部图
图5 Mindsensors公司的psp-nx-v4接口板
图 6 psp-nx-v4接口板和PS2手柄无线器与NXT控制器的连线图
从Mindsensors公司的psp-nx-v4接口板网页,下载NXC样例程序(内含"PSP-Nx-v4-lib.nxc"库文件),并打开程序,希望您基本能猜出程序意图,然后分析程序中哪些命令是初始化程序段,哪些是提取PS2手柄按钮信息的程序段,把对实现任务无关的程序段删除掉,再添加根据采样信息发出的电机驱动命令,即可短平快地完成程序编写任务。
所有程序资料可以文章后段,下载得到。
Mindsensors公司的psp-nx-v4接口板网址:
http://www.mindsensors.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=61
PS2手柄遥控MakeBlock小车程序(NXC语言):
//引入PS2手柄接收器接口板库文件 #include "PSP-Nx-v4-lib.nxc" //把PS2手柄接收器接口板接到NXT控制器传感器端口2 const byte SensorPort = IN_2; #define ADDR 0x02 //主程序 task main() { psp currState; psp pressures; int x; int up,down,right,left; byte refSignal; long signalRaw; byte trType; PSPV4_Init(SensorPort, ADDR); //无限循环while程序段 while (true ) { //PSPV4接口板初始化 PSPV4_ReadButtonStateWithPressure(SensorPort, ADDR, currState, pressures); refSignal = PSPV4_ReadRefereeSignal(SensorPort, ADDR); signalRaw = PSPV4_ReadRawRefereeTransmitterValue (SensorPort, ADDR); trType = PSPV4_ReadRefereeTransmitterType (SensorPort, ADDR); //把NXT控制器液晶屏清屏 ClearScreen(); //PS2手柄按钮的采样值范围为0~100 x = pressures.triang; //把PS2手柄的“triang”按钮采样值赋值给变量up up =x; NumOut(50,LCD_LINE4, x); //把变量up值显示在NXT液晶板上 x= pressures.square; //把PS2手柄的“square”按钮采样值赋值给变量left left =x; NumOut(40,LCD_LINE5, x); x = pressures.circle; //把PS2手柄的“circle”按钮采样值赋值给变量right right =x; NumOut(60,LCD_LINE5, x); x = pressures.cross; //把PS2手柄的“cross”按钮采样值赋值给变量down down =x; NumOut(50,LCD_LINE6, x); if(up > 80) //当按下"triang"按钮,小车前进,功率值为50 OnFwdReg(OUT_AC,50,OUT_REGMODE_SPEED); else if(down >80) //当按下"cross"按钮,小车后退,功率值为50 OnRevSync(OUT_AC,50,OUT_REGMODE_SPEED); else if(right >80) //当按下"circle"按钮,小车原地右转,功率值为100 OnFwdSync(OUT_AC,100,100); else if(left >80) //当按下"square"按钮,小车原地左转,功率值为100 OnFwdSync(OUT_AC,100,-100); else //否则 Off(OUT_AC); //停止 Wait(10); //延时10ms } }
PS2手柄接收器接口板官方样例程序、库文件以及我的这个任务的程序请下载:
http://yunpan.cn/QUyv5qrS8YGP4
国内爱好者可以通过注册中国贝宝Paypal,用信用卡海淘回来Mindsensors公司的“好东西”,购买方法:http://www.mindsensors.com/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=87&MMN_position=54:54。海淘产品十几天就到货了。也可以在淘宝搜搜,看有没有代购商家。