宜昌老张

五按钮模块遥控乐高六足机器人(SSC32舵机控制板)

0
阅读(4823)

图1五按钮模块遥控乐高六足机器人

    SSC32舵机控制板可以看成一个输入输出接口板,它自己并没有程序思考能力,而是把大脑交给远端计算能力更强的上位计算机,这次实验的上位主机是Arduino UNO控制器。Arduino控制器与SSC32舵机控制板,通过蓝牙无线通讯形成了主从机运行模式,如图1所示。

    上篇文章《LabVIEW蓝牙控制乐高六足机器人》的上位主机选用的是PC机LabVIEW软件,文章网址:http://blog.chinaaet.com/detail/32097.html

    舵机控制板从机能控制多达32路的伺服电机,这次的六足机器人用到了12台舵机驱动,该机器人左右两侧各分布三条腿,每条腿由两个舵机控制,这两个舵机分别起着大腿关节和小腿关节的作用。Arduino主机的模拟口0上连接了一个五按钮模块,通过按动模块上的按钮,主机向从机发布前进、后退、左转、右转和停止命令,从而无线遥控六足机器人行走。

六足机器人视频:

视频网址:http://player.youku.com/player.php/sid/XNTI2NzY2MzMy/v.swf

    五按钮模块由DFRobot公司出品,这个模块让你使用1路模拟口即可读取5个按键的状态,为Arduino节约IO口。如图2所示。配合Arduino传感器扩展板可以完成使用多个按钮进行互动的作品。

该模块说明书网址:

http://wiki.dfrobot.com.cn/index.php/ADKeyboard_%E6%A8%A1%E6%8B%9F5%E6%8C%89%E9%94%AE%E6%A8%A1%E5%9D%97(SKU:_DFR0075)

图2五按钮模块与Arduino控制板的连线图

   模块中5个按钮的标号分别为S1到S5,按下这些按钮后,Arduino控制器从模拟端口读取的数据分别为50, 200, 400, 600, 800。根据这些数据,Arduino就会判断出,哪个按钮被按下了。建议先用该模块说明书中的程序测试下模块如何使用。

图3五按钮模块实物图

     用Arduino控制器作为主机,来判断五个按钮中哪个按钮被按下。如果S5按钮被按下,则Arduino下达前进命令“Serial.println("PL 0 SQ 0");”,如果S4按钮被按下,则下达后退命令“Serial.println("PL 0 SQ 1");”,如果S2或S3按钮被按下,下达左转命令“Serial.println("PL 0 SQ 2");”或右转命令“Serial.println("PL 0 SQ 3");”,如果按下S1按钮,执行“Serial.println ("PL 0");”,机器人停止行走。

/*Arduino程序任务:根据被按下的按钮,向舵机控制板下达命令,让机器人执行相应的动作。*/

int adc_key_val[5] ={50, 200, 400, 600, 800 };

int NUM_KEYS = 5;

int adc_key_in;

int key=-1;

int oldkey=-1;

//初始化

void setup()

{

   Serial.begin(9600); // 9600 bps

}

//主程序

void loop()

{

  adc_key_in = analogRead(0);    //读取模拟端口0的五按钮模块模拟量值

  key = get_key(adc_key_in);  //调用函数get_key(),获得按钮编号值

  if (key != oldkey)   //如果有按钮按下状态更新

   {

    delay(50);  //等待,以度过按钮刚按下时的抖动期

    adc_key_in = analogRead(0);    //读取五按钮模块的模拟量值 

    key = get_key(adc_key_in);    //调用函数get_key(),获得按钮编号值

    //经过抖动期,按钮依然为按下状态,说明这个按钮不是因抖动触发,而是人为被按下

    if (key != oldkey)   

    {  

      oldkey = key;

      if (key >=0){       

        switch(key) //根据按钮编号值,向舵机控制板下达机器人动作命令

        {

           case 0: Serial.println("PL 0");  //如果S1按钮按下,则机器人停止

                  break;

           case 1:Serial.println("PL 0 SQ 2"); //如果S2按钮按下,则机器人左转

                  break;

           case 2:Serial.println("PL 0 SQ 3");//如果S3按钮按下,则机器人右转 

                  break;

           case 3:Serial.println("PL 0 SQ 1");//如果S4按钮按下,则机器人后退

                  break;     

           case 4:Serial.println("PL 0 SQ 0");//如果S5按钮按下,则机器人前进                 

                  break;

        }               

      }

    }

  }

 delay(100);//延时

}

 

//转换Arduino控制器模拟端口的读取值为按钮编号值

int get_key(unsigned int input)

{

    int k;  

    for (k = 0; k < NUM_KEYS; k++)

    {

      if (input < adc_key_val[k])

        {

            return k;

        }

   }  

    if (k >= NUM_KEYS)k = -1;  //没有有效按钮被按下

    return k;

}

    乐高六足机器人的机械组成和电控组成的详细内容,可以参看文章《能避障的自主型乐高六足机器人》,网址:http://blog.chinaaet.com/detail/32268.html 

    网络上很多对创客文化感兴趣的人总希望一开始就做个大项目,而且马上要借此赚到钱,所以总是夸夸奇谈,迟迟动不了手,即使动起手来,也因项目太大,而中途夭折,打击了自己的创客热情。而我喜欢快餐模式的创客制作,每个项目不大,可操作性强,完成度也比较高。这样快餐式的模型制作过程,对我来说,丰富了生活,陶冶了情操,扩展了知识。

     快餐式制作之所以快,就是用到了各种各样的机械和电控积木,由于积木基本上都是半成品,所以不需要进行底层设计和加工,只需一些搭建功夫,就可以迅速组建自己的创意。这个六足机器人的电控就用到了Arduino电子积木。

    Arduino电子积木是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE)。它适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。下面是Arduino团队成员的照片,都蛮帅的。从左到右分别David Cuartielles, Gianluca Martino, Tom Igoe, David Mellis,和Massimo Banzi。

图4 Arduino团队成员在纽约制汇节

    Arduino团队核心Massimo Banzi说过这样的一段话,我深表认同。

坐而言不如起而行地从事设计,正是Arduino的哲学。为了创造优良的原型,必须以更快速、更有效的方式持续尝试。手脑并用地尝试各种技术,才能让Arduino持续发展。

    Massimo Banzi在TED上的演讲,中文注释,大家亲自看看,体会下Arduino的理念。

视频网址:http://player.youku.com/player.php/sid/XNTE0MzMxNDE2/v.swf