bobo | NPC | 创造力: | 帖子: | 发消息 | 串个门 | 加好友 | 打招呼
2013-7-30 10:29:48 [显示全部楼层]
10753浏览
查看: 10753|回复: 0

[项目] Wii Nunchuck手柄控制的6自由度机械臂

[复制链接]
机械臂、机械手相信大家都不陌生了,医院里的手术机械手、工厂的里的工业机械手,虽然大家从电视里或现场见过,但其庞大的身躯和高额的售价,使我们望而却步,如今一款小型廉价的6自由度机械臂,能圆大家一个玩机械手的梦!
   DFRA6DOFRobotic Arm 6 Degrees of Freedom6自由度机械臂由6个微型伺服电机(舵机)组成,分别对应于臂、肘、腕(2个自由度)、张合5个关节和1个旋转底座,每个关节可在一定范围内运动,底座可以实现左右90度旋转。通过上位机控制软件给舵机控制器发送控制指令,从而实现机械臂在空间中的精确作业,任务完成情况可通过在机械臂上安装摄像头反馈图像。机械臂也可安装到移动平台上,可完成远程无线可视作业,适用于对人体有害的场所。关节部分杯士轴承的安装螺丝均使用圆帽螺母,防止刮伤您的手,人性化设计确保您能尽情享受那份DIY的乐趣!
一、6自由度机械臂的安装
所有舵机在使用前,都必须使用舵机控制器将角度调整到90度。或者通过对Arduino编程控制这个舵机旋转到90度再调整舵盘安装。

Wii Nunchuck手柄控制的6自由度机械臂图1
使码盘四个圆孔成正十字。

Wii Nunchuck手柄控制的6自由度机械臂图2
将标有1号的旋转盘找出来,在其下面安装四个M3*10的单头铜柱,
上面用圆帽螺母拧好。

Wii Nunchuck手柄控制的6自由度机械臂图3

接着在1号盘上面的对应位置安装5M3*30的单头铜柱。
Wii Nunchuck手柄控制的6自由度机械臂图4
·将标有4号的旋转盘找出来,在其下面对应位置安装4M3*10的单头铜柱,上面用圆帽螺母固定好。

Wii Nunchuck手柄控制的6自由度机械臂图5
4号盘放在1号盘对应位置,用2M3*10的单头铜柱固定好。

Wii Nunchuck手柄控制的6自由度机械臂图6
2号盘和一只归位好的DF05BB舵机准备好。
Wii Nunchuck手柄控制的6自由度机械臂图7
将舵机按照如图位置安装在2号盘上。
Wii Nunchuck手柄控制的6自由度机械臂图8
2号盘上安装3个万向轮。

Wii Nunchuck手柄控制的6自由度机械臂图9
详细制作过程文档及其实例代码见附件:下载附件Robot_Arm.zip

源代码:
[mw_shl_code=applescript,true]#include <Servo.h>
#include <math.h>
#include <stdlib.h>
#include "Wire.h"
#include "WiiChuck.h"
//定义舵机
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
WiiChuck wii = WiiChuck();
int x,y,xa,xa1=2,xa2,xa3,xa4,ya,ya1,ya2,ya3,ya4,c,z;//定义变量
void act_init()//初始化动作子函数
{
  servo1.write(90);
  servo2.write(70);
  servo3.write(30);
  servo4.write(90);
  servo5.write(90);
  servo6.write(30);
}
void setup()
{
  //定义舵机控制口
  servo1.attach(8);
  servo2.attach(9);
  servo3.attach(10);
  servo4.attach(11);
  servo5.attach(12);
  servo6.attach(13);
  act_init();//初始化
  wii.initWithPower();//初始化电源引脚
}
void loop()
{
  while(1)
  {
    if(true==wii.read())
    {
      //读取手柄的值
     //读取手柄的值
      x=wii.getJoyAxisX();//摇杆x轴的值
      y=wii.getJoyAxisY();//摇杆y轴的值
      xa1=wii.getAccelAxisX();//手柄x方向摆动的值
      ya1=wii.getAccelAxisY();//手柄y方向摆动的值
      c=wii.getButtonC();//手柄按键c的值
      z=wii.getButtonZ();//手柄按键z的值
      delay(30);
      x=wii.getJoyAxisX();//摇杆x轴的值
      y=wii.getJoyAxisY();//摇杆y轴的值
      xa2=wii.getAccelAxisX();//手柄x方向摆动的值
      ya2=wii.getAccelAxisY();//手柄y方向摆动的值
      c=wii.getButtonC();//手柄按键c的值
      z=wii.getButtonZ();//手柄按键z的值
      delay(30);
      x=wii.getJoyAxisX();//摇杆x轴的值
      y=wii.getJoyAxisY();//摇杆y轴的值
      xa3=wii.getAccelAxisX();//手柄x方向摆动的值
      ya3=wii.getAccelAxisY();//手柄y方向摆动的值
      c=wii.getButtonC();//手柄按键c的值
      z=wii.getButtonZ();//手柄按键z的值
      delay(30);
      x=wii.getJoyAxisX();//摇杆x轴的值
      y=wii.getJoyAxisY();//摇杆y轴的值
      xa4=wii.getAccelAxisX();//手柄x方向摆动的值
      ya4=wii.getAccelAxisY();//手柄y方向摆动的值
      c=wii.getButtonC();//手柄按键c的值
      z=wii.getButtonZ();//手柄按键z的值
      delay(30);
      xa=(xa1+xa2+xa3+xa4)/4;//取均值
      xa=xa-40;//为了让90成为中点值
      ya=(ya1+ya2+ya3+ya4)/4;//取平均值
      ya=ya-40;
    }
    if((x==130||x==131)&&y==255&&z==1)//摇杆位置为向前
    {
      if(xa<30)//限制最小值
        xa=30;
      if(xa>150)//限制最大值
        xa=150;
      servo1.write(xa);//给舵机旋转的度数
      delay(10);
    }
    else if((x==130||x==131)&&y==0)//摇杆位置向后
    {
      if(ya<30)
        ya=30;
      if(ya>150)
        ya=150;
      servo2.write(ya);//给舵机旋转的度数
      delay(10);
    }
    else if(x==0&&(y==130||y==129))//摇杆的位置向左
    {
      ya=175-ya;//为了让手柄在Y轴向前的时候,舵机3也向前
      if(ya<20)
        ya=20;
      if(ya>150)
        ya=150;
      servo3.write(ya);//给舵机旋转的度数
      delay(10);
    }
    else if(x==255&&(y==130||y==129))//摇杆的位置向右
    {
      ya=175-ya;
      if(ya<30)
        ya=30;
      if(ya>80)
        ya=80;
      servo4.write(ya);//给舵机旋转的度数
      delay(10);
    }
    else if(c==0)//手柄按键c按下
    {
      if(xa<30)
        xa=30;
      if(xa>150)
        xa=150;
      servo5.write(xa);//给舵机旋转的度数
      delay(10);
    }
    else if(z==0)//手柄按键z按下
    {
      if(ya<40)
        ya=40;
      if(ya>110)
        ya=110;
      servo6.write(ya);//给舵机旋转的度数
      delay(10);
    }
  }
}[/mw_shl_code]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail