1、Wii Nunchuck 手柄控制的 6 自由度机械臂之控制电路的安装在 4 号板上安装三个 M3*10 的单头铜柱,下面用圆帽螺母固定好。将 DFRduino Duemilanove 328 控制板安装在 4 号盘上。将 Xbee 传感器扩展板 V5 插在 328 控制板上面。将电池盒安装上。将电源正负极线连接在扩展板上。将最先安装的舵机作为 1 号舵机,依次按照舵机安装的顺序排号,将 16 号舵机线插在813 数字口上。舵机线的黄色线为信号线,红色为 VCC,褐色为 GND。长度不够的舵机线可以连接一个舵机延长线。所有的舵机线都插好后,准备一个黑塑料管。将舵机线缠好。至此机械手臂就安装完成
2、了,可以通过 arduino 进行编程操作。在机械臂套件的基础上可以添加一个 Wii Nunchuck 手柄 组成有趣的运动控制。准备好 Wii Nunchuck 手柄准备好 Wii Nunchuck 手柄 Arduino 适配器。一共有 4 个接线端分别是: - :电源地 GND,+ :电源+5V,d :IIC 引脚通信 SDA 口,c : IIC 引脚 通信 SCL 口将适配器上的各个 IIC 引脚和扩展板上的 IIC 引脚一一对应连接好。将适配器和 Wii Nunchuck 手柄连接好这样我们的电路部分就安装好了。接下来就可以编写程序,利用手柄来控制机械手。源代码:#include #i
3、nclude #include #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);servo
4、4.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
5、.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.
6、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.getJo
7、yAxisY();/摇杆 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)servo1.write(xa);/给舵机旋转的度数delay(10);else
8、if(x=130|x=131)servo2.write(ya);/给舵机旋转的度数delay(10);else if(x=0/为了让手柄在 Y 轴向前的时候,舵机 3 也向前if(ya150)ya=150;servo3.write(ya);/给舵机旋转的度数delay(10);else if(x=255if(ya80)ya=80;servo4.write(ya);/给舵机旋转的度数delay(10);else if(c=0)/手柄按键 c 按下if(xa150)xa=150;servo5.write(xa);/给舵机旋转的度数delay(10);else if(z=0)/手柄按键 z 按下if(ya110)ya=110;servo6.write(ya);/给舵机旋转的度数delay(10);