亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Nunchuk 控制机械臂(使用 Arduino)

组件和用品

6 自由度机械臂
× 1
双节棍
× 1
Arduino Mega 2560
× 1
控制盾
× 1

应用和在线服务

Arduino IDE

关于这个项目

机械臂太棒了!世界各地的工厂都有它们,他们在那里精确地喷漆、焊接和搬运东西。它们还可以在太空探索、海底遥控车辆,甚至医疗应用中找到!

现在您可以在自己的家中、办公室或实验室中拥有更便宜的版本!厌倦了重复的工作?编程你自己的机器人来帮助你……或者把事情搞砸! :D

在本教程中,我将向您展示如何安装机械臂,以及如何使用 Arduino Mega 对其进行编程。对于这个项目,我还想体验一种不同的控制机械臂的方法:使用任天堂双节棍!它们很便宜,很容易找到,而且有很多传感器。

您可以通过多种方式使用本教程。如果您没有机械臂套件(并且不想购买或构建),您仍然可以使用它来学习有关 Arduino 编程的知识,以及如何将 Wii Nunchuk 连接到您自己的项目。您还可以用它来练习电子和机械技能。

第 1 步:工具和材料

本项目使用了以下工具和材料:

工具和材料:

  • 烙铁和电线。 我不得不将一些端子焊接到 Nunchuk 的电线上,以便将其连接到 Arduino;
  • 收缩管。 一些收缩管用于更好地隔离导体;
  • 螺丝刀。 该结构使用一些螺栓和螺母安装;
  • 6 轴机械桌面机械臂 (关联)。这个很棒的套件已经带有几个组件,如下所述。它可靠且易于组装;
  • 12V 电源(2A 或更多);
  • 双节棍控制器 (关联)。与Arduino板接口,用于控制机械臂;
  • 公跳线(4根);
  • Arduino Mega (链接/链接/链接)。请注意,我使用的机械臂套件也有一个板和控制器包,已经随此 Arduino 板提供。如果您不使用这些套件,您也可以使用其他 Arduino 板;

后来我得知有一个 Nunchuk 适配器 使与面包板的连接更容易(链接/链接)。如果您想在焊接时保持相同的时间并且不想像步骤 9 中描述的那样破坏原始连接器,这是一个不错的选择。

Sain Smart 6 轴机械桌面臂已经带有以下组件:

  • Arduino Mega 2560 R3(链接)
  • 控制板屏蔽(链接)
  • NRF24L01+ 无线收发器模块(链接)
  • MPU6050 3 轴陀螺仪和 3 轴加速度计(链接)
  • 71 x M3X8 螺丝
  • 47 x M3 螺母
  • 2 x U 支架
  • 5 x 伺服支架
  • 4 x 9kg 舵机(链接)
  • 2 x 20kg 舵机(链接)
  • 6 x 金属伺服托盘
  • 3 x U 支架
  • 21 x 直角括号
  • 3 x 法兰轴承
  • 1 个抓手

您可能会在网上找到其他机械臂套件,甚至可以设计自己的。例如,您可以 3D 打印一些很棒的项目。

在接下来的 7 个步骤中,我将向您展示如何在连接电路之前组装臂套件。如果您没有类似的套件,请随意跳一些步骤。您可以使用另一个机械臂套件,组装它并直接跳转到电子和编程步骤。

每一步都有一个 gif 动画,显示我的机械臂是如何组装的。它仅在网站的桌面版本上运行。

第 2 步:组装机械臂 Pt1 - 底座

第一个要组装的部分是机器人的底座。

它由两个 U 形支架组成,使用四个 M3 螺栓和螺母背靠背连接,如图所示。这大概是最容易安装的部分。

第 3 步:组装机械臂 Pt2 - 伺服 #1

第一个伺服电机使用伺服支架垂直安装在底座上。如图所示,该型材使用四个 M3 螺栓和螺母连接到底座上。伺服 #1 位于其顶部,并使用四个 M3 螺栓和螺母连接。

一个圆形金属喇叭连接到伺服轴上。该套件配有几个塑料喇叭。它们不会用于组装机器人。

第 4 步:组装机械臂 Pt3 - 伺服 #2

另一个伺服支架与前一个垂直安装。它使用四个 M3 螺栓连接到伺服 #1 喇叭。舵机#2用四个M3螺栓和螺母安装,同样使用圆形金属喇叭。

然后使用四个螺栓将 U 形支架连接到喇叭上。请注意,在伺服轴的对面使用了 M3 螺栓。它使结构具有稳定性。轴承安装在该螺栓上,并使用另一个 M3 螺母将其锁定到位。这样 U 型支架就紧紧地连接到伺服 #2 中心轴上。

第 5 步:组装机械臂 Pt4 - 伺服 #3

使用四个 M3 螺栓和螺母安装另一个 U 型支架。

在另一端,使用圆形金属喇叭和四个螺栓安装伺服 #3。伺服支架连接到伺服电机上,L形型材通过一些螺栓和螺母连接到伺服支架上。

请注意,如前所述,在伺服轴的对面使用了另一个轴承。

第 6 步:组装机械臂 Pt4 - 伺服 #4

另一个 U 形支架使用一组四个 M3 螺栓和螺母连接到 L 形型材。与上一步类似,伺服 #4 使用四个螺栓安装到 U 型支架上。另一个舵机支架连接到舵机。

第 7 步:组装机械臂 Pt4 - 伺服 #5

第五个舵机使用另一个舵机支架与舵机 #4 垂直连接,使用四个 M3 螺栓和螺母安装。

第 8 步:组装机械臂 Pt4 - 伺服 #6

然后将夹具连接到伺服 #5 轴。在它的顶部,伺服 #6 使用一些螺栓、螺母和金属喇叭连接。夹持器有一些齿轮,可以将舵机的旋转变成夹持器的直线运动。

第 9 步:准备 Nunchuk 控制器

对于这个项目,出于多种原因,我决定使用 Nintendo Nunchuk 控制器:

  • 它们很便宜! 副本可能质量较差,但我不需要这个项目的强大控制器;
  • 它们很容易找到! 网上有几个原始和廉价的复制品。
  • 它有很多传感器! 每个控制器有两个按钮(Z 和 C 按钮),一个两轴操纵杆(X 和 Y)和一个三轴加速度计;
  • 它有一个 Arduino 库。 Robert Eisele 设计了一个惊人且易于使用的库,用于读取 Nunchuk 传感器。看看:https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

不幸的是,Nunchuk 操纵杆有一个复杂的连接器,很难与其他电子设备连接。为了将它连接到 Arduino,我不得不切断它的电缆并暴露它的电线。这样,它就不再适用于 Nintendo Wii... :/

首先,我必须切断操纵杆的连接器并去除电线的绝缘层。使用万用表,根据每根导线的颜色,我根据图中所示的连接器原理图确定每根导线(Vcc、GND、SCL 和 SDA)的功能。电线的颜色没有标准。我已经听说过以下可能性:

原文:

  • SDA =绿色
  • SCL =黄色
  • 3V3 =红色
  • GND =白色

副本#1:

  • SDA =黄色
  • SCL =白色
  • 3V3 =绿色
  • GND =红色

副本#2:

  • SDA =蓝色
  • SCL =白色
  • 3V3 =粉红色
  • GND =绿色

我将电线焊接到公跳线,以便更轻松地连接到 Arduino 板。为此,我使用了烙铁和一些收缩管,如图所示。

后来我得知有一个 Nunchuk 适配器可以更轻松地连接到面包板(链接/链接)。如果您想在焊接时保持相同的时间并且不想破坏原始连接器,这是一个不错的选择。

第 10 步:连接电路

组装好结构并完成 Nunchuk 连接器后,您就可以准备好连接电路了。我使用了机械臂套件随附的控制板防护罩。它使组件的连接更容易,因为它已经带有用于伺服电机、电源等的特定连接器。

按如下方式连接组件:

双节棍:

  • Nunchuk pin 6 (SCL) => Arduino Mega Pin 21 (SCL)(在屏蔽上)
  • Nunchuk pin 1 (SDA) => Arduino Mega Pin 20 (SDA)(在屏蔽上)
  • Nunchuk pin 3 (Vcc) => Ardino Mega Pin 3V3(在屏蔽上)
  • Nunchuk pin 4 (Gnd) => Arduino Mega Pin Gnd(在屏蔽上)

如果您使用的是 Arduino Uno,Nunchuk 的 SCL 和 SDA 引脚应连接到不同的 Arduino 引脚,如下所示:

  • Nunchuk 引脚 6 (SCL) => Arduino Uno 引脚 A5
  • Nunchuk 引脚 1 (SDA) => Arduino Uno 引脚 A4
  • Nunchuk 引脚 3 (Vcc) => Ardino Uno 引脚 3V3
  • Nunchuk pin 4 (Gnd) => Arduino Uno Pin Gnd

伺服:

  • 控制屏蔽端子 11 => 伺服 #1
  • 控制屏蔽端子 12 => 伺服 #2
  • 控制屏蔽端子 13 => 伺服 #3
  • 控制屏蔽端子 8 => 伺服 #4
  • 控制屏蔽端子 9 => 伺服 #5
  • 控制屏蔽端子 10 => 伺服 #6

如果您不使用控制屏蔽,则应使用以下引脚配置:

  • Arduino Pin 11 => 伺服 #1 (Sgn)
  • Arduino Pin 12 => 伺服 #2 (Sgn)
  • Arduino Pin 13 => 伺服 #3 (Sgn)
  • Arduino Pin 8 => 伺服 #4 (Sgn)
  • Arduino Pin 9 => 伺服 #5 (Sgn)
  • Arduino Pin 10 => 伺服 #6 (Sgn)
  • Arduino 接地 => 伺服接地
  • 6V 电源 => 伺服 Vcc

您还需要连接外部 12V 电源。我建议一个输出超过 2A 的。舵机耗电很大,如果电源不够大,舵机会振动并变得很热。他们也会失去力量。

在上传 Arduino 代码之前不要连接电源(在后面的步骤中显示)。盾牌上有一个电源按钮。保持在关闭位置。

将 USB 电缆插入 Arduino 并继续下一步。

第 11 步:设置 Arduino IDE

现在硬件已准备就绪,是时候处理 Arduino 代码了。

1.下载并安装 Arduino IDE 最新版本 您可以在 Arduino 的网站上找到适用于 Windows、Linux 或 MAC OSX 的最新版本:https://www.arduino.cc/en/main/software

免费下载,将其安装到您的计算机上并启动。

2.添加库

对于这个项目,我使用了 Robert Eisele 令人惊叹的 Nunchuk Arduino 库!你可以在他的网站上找到更多关于它的信息:

https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

在 https://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk 下载库

导航到 Sketch-> 包含库 -> 管理库 ...在您的 Arduino IDE 上添加库。

图书馆如何运作?

Nunchuk 库带有一组用于读取控制器传感器的函数:

nunchuk_buttonZ() :如果 Z 按钮被按下,则返回 1,否则返回 0; nunchuk_buttonC() :如果按下 C 按钮,则返回 1,否则返回 0; nunchuk_joystickX() :返回操纵杆的 x 值(-127 到 127 之间); nunchuk_joystickY() :返回操纵杆的 y 值(-127 到 127 之间); nunchuk_pitch() :以弧度为单位返回控制器的角度(在 -180º 和 180º 之间); nunchuk_roll() :以弧度为单位返回控制器的滚动角(-180º 到 180º 之间)。

角度以弧度返回。我在 Arduino 代码中将这些值转换为度数。

第 12 步:Arduino 代码

下载Arduino的草图文件。

将 USB 电缆插入计算机的 USB 端口并上传代码。上传代码需要一些时间。您可以利用这段时间在等待时“喜欢”和“分享”本教程! :D

上传完成后,拔掉USB线,连接电源,打开电源按钮。代码将立即开始运行。

警告:当代码开始运行时,机械臂会非常快速地移动到它的初始位置。启动时注意不要受伤或损坏附近的设备!

您可能需要更换每个伺服电机的起始角度,具体取决于您的伺服器的安装方式。

代码解释:

在设置之前,代码会导入草图上使用的库(nunchuk.h、wire.hservo.h ).

定义要使用的引脚,并声明全局变量。 角度# 整数变量存储每个伺服的初始位置。如果您希望机器人从不同的位置开始,请更改这些变量的值。

伺服#_speed 变量定义了每个伺服的运动速度。如果您希望特定伺服器移动得更快,请增加其值。 角度#minangle#max 变量用于限制每个伺服的最大和最小角度。您可以设置这些变量以避免机器人的连续关节之间发生碰撞。

//包含库#include #include #include //定义变量#define SERV1 8 //数字端口8上的伺服1#define SERV2 9 //舵机2在数字端口9#define SERV3 10 //舵机3在数字端口10#define SERV4 11 //舵机4在数字端口11#define SERV5 12 //舵机5在数字端口12#define SERV6 13 / /servo 6 在数字端口 13Servo s1 上; //舵机1舵机s2; //伺服2伺服s3; //伺服3Servo s4; //伺服4Servo s5; //伺服5Servo s6; //servo 6//定义每个舵机的起始角度//选择一个安全的位置开始//它会在通电时立即尝试移动到那个位置!//这些角度将取决于每个舵机的角度组装角1 =90; //伺服1当前角度int angle2 =30; //伺服2当前角度int angle3 =0; //伺服3当前角度int angle4 =90; //伺服4当前angleint angle5 =90; //伺服5当前角度int angle6 =45; //舵机6当前角度intservo1_speed =3; //伺服1 speedintservo2_speed =3; //伺服2 speedintservo3_speed =3; //伺服3 speedint 伺服4_速度=1; //伺服4 speedint伺服5_速度=1; //伺服5速度//定义每个伺服的限制//这些角度将取决于组装期间每个伺服的角度angle1min =0; //伺服1最小角度int angle1max =180; //伺服1最大角度int angle2min =0; //舵机2最小角度int angle2max =180; //伺服2最大角度int angle3min =0; //伺服3最小角度int angle3max =180; //伺服3最大角度int angle4min =0; //舵机4最小角度int angle4max =180; //伺服4最大角度int angle5min =0; //舵机5最小角度int angle5max =180; //伺服5最大角度int angle6min =0; //舵机6最小角度int angle6max =180; //伺服6最大角度boolean display_angles =true; //boolean 用于更新串行监视器上每个舵机的角度 

在设置过程中,每个舵机都连接到一个特定的引脚,并开始其位置。

串行通信(到串行监视器)和与 Nunchuk 的 I2C 通信也从这里开始。

//SETUPvoid setup() { //将每个舵机连接到一个引脚并开始其位置 s1.attach(SERV1); s1.write(angle1); s2.attach(SERV2); s2.write(angle2); s3.attach(SERV3); s3.write(angle3); s4.attach(SERV4); s4.write(angle4); s5.attach(SERV5); s5.write(angle5); s6.attach(SERV6); s6.write(angle6); //开始串行通信Serial.begin(9600); //启动双节棍线.begin(); nunchuk_init();} 

主循环一遍又一遍地重复。在每个周期读取 Nunchuk 状态。根据读数,执行不同的命令。

void loop() { //读取双节棍传感器 if (nunchuk_read()) { int x =nunchuk_joystickX(); //操纵杆 X 位置 int y =nunchuk_joystickY(); //操纵杆 Y 位置 boolean z =nunchuk_buttonZ(); //z 按钮状态 boolean c =nunchuk_buttonC(); //c 按钮状态浮动间距 =nunchuk_pitch(); //俯仰角浮动滚动 =nunchuk_roll(); //滚动角度 

操纵杆 X 将用于移动舵机 #1。

使用了以下代码块。首先它检查操纵杆的值是否足够大。这样,噪音和小的变化就被忽略了。如果该值满足要求,则舵机角度以给定速度增减。

//左转/右转(以固定速度) //左转 if (x> 90) { angle1 -=servo1_speed; display_angles =true;如果(角度 1 <角度 1 分钟){ 角度 1 =角度 1 分钟; } } //右转 if (x <-90) { angle1 +=servo1_speed; display_angles =true;如果(角度 1> 角度 1 最大值){ 角度 1 =角度 1 最大值; s1.write(angle1); //更新舵机位置 

类似的块用于操纵杆 y。它用于改变伺服 #3 的角度。伺服 #2 在此代码中保持固定。

夹具的旋转由控制器的滚动角和俯仰角给出,由其加速度计测量。为了更容易控制手臂,只有在按下C或Z按钮时才会更新夹具的角度。

仅按下 C 按钮时,代码会读取横滚角并将其用作设定点。伺服 #5 旋转直到达到设定点。它的速度与实际位置和所需位置之间的误差成正比。类似的代码用于伺服 #4,它跟踪 Nunchuk 的俯仰角。

// 仅在按下按钮时启用加速度计 // 旋转夹具(仅按下 Z 按钮) if (c &&!z) { roll =roll * 57.0 + 90.0; //转换度数servo5_speed =abs(angle5 - roll)/10 + 1; //速度成比例做实际和期望角度之间的误差 if (roll> angle5) {angle5 +=servo5_speed; display_angles =true; } if (roll  

只要同时按下 C 和 Z 按钮,夹具就会关闭。当这些按钮中的任何一个被释放时,机器人将打开其抓手。

//打开/关闭夹具(两个按钮都按下) if(z &&c) { s6.write(90); //关闭抓手 display_angles =true; } else { s6.write(45); //打开抓手 } 

草图末尾有一段代码。它将在串行监视器上显示每个伺服电机的实际角度。可能有助于选择每个电机的启动角度。

双节棍

第 13 步:使用

现在一切都准备好了,给机器人加电,玩得开心!

Nunchuk 用于控制图中所示的五种运动:右/左旋转、上/下运动、夹爪旋转、夹爪上/下运动和夹爪打开/关闭运动。你可以结合这些动作来执行不同的任务。

您可以根据摇杆的按钮和角度的组合修改代码以实现不同的动作。

代码

  • nunchuk.ino
nunchuk.inoArduino
无预览(仅限下载)。
Github
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukhttps://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk

制造工艺

  1. 使用 Arduino 和 Raspberry Pi 构建您的 Internet 控制的视频流机器人
  2. 使用 Arduino 控制硬币接收器
  3. 使用物联网远程控制机械臂
  4. 操纵杆控制的遥控车
  5. Arduino 带蓝牙控制 LED!
  6. Arduino 3D 打印机械臂
  7. 语音控制机器人
  8. 通过以太网控制的机械臂
  9. 带有 OK Google 的蓝牙语音控制设备
  10. 使用 Arduino 的简单智能机械臂
  11. DIY Arduino 机械臂——由手势控制
  12. 本地和远程可编程机械臂