宜昌老张

MakeBlock遥控车

0
阅读(2503) 评论(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。海淘产品十几天就到货了。也可以在淘宝搜搜,看有没有代购商家。