一板网电子技术论坛

风筝
发表于: 2018-10-26 15:13:22 | 显示全部楼层

在本篇文章中,我们将学习如何使用Arduino开发板制作一个简易的机械臂(Robot Arm),可以使用定制的Android应用程序进行无线控制和编程。我将向您展示制作的整个过程,从设计和3D打印机器人部件,到连接电子元件和编程Arduino,以及开发我们自己的Android应用程序来控制机械臂。


简介

使用应用程序中的滑块,我们可以手动控制机械臂的每个伺服或轴的运动。使用“保存”按钮,我们可以记录每个位置或步骤,然后机器人手臂可以自动运行并重复这些步骤。使用同一个按钮,我们可以暂停自动操作以及重置或删除所有步骤,以便我们可以记录新的步骤。


Arduino机械臂的3D模型

首先,我使用Solidworks 3D建模软件设计了机械臂的模型。机械臂有5个自由度。

Arduino-Robot-Arm-3D-Model.jpg


对于前面的3个轴:腰部、肩部和肘部,使用的是MG996R伺服电机,而另外2个轴,腕部滚动和腕部间距,以及夹具我使用了较小的SG90微型伺服电机。


您可以通过下面的链接下载这些3D模型。

●    Arduino机械臂3D模型STEP文件: Arduino Robot Arm 3D Model STEP File.rar (318.43 KB, 下载次数: 161)

跳转到指定楼层
风筝
发表于: 2018-10-26 17:10:59 | 显示全部楼层

Arduino机械臂代码

由于代码有点长,为了更好地理解,我将分段解释程序的源代码。 在本文的末尾处,我将列出完整的源代码。


首先,我们需要包含SoftwareSerial库,用于蓝牙模块的串行通信和servo库。 这两个库都包含在Arduino IDE中,因此您无需从外部安装它们。 然后我们需要定义六个伺服电机、HC-05蓝牙模块和一些用于存储伺服电机当前和先前位置的变量,以及用于存储自动模式的位置或步骤的数组。

  1. #include <SoftwareSerial.h>
  2. #include <Servo.h>
  3. Servo servo01;
  4. Servo servo02;
  5. Servo servo03;
  6. Servo servo04;
  7. Servo servo05;
  8. Servo servo06;
  9. SoftwareSerial Bluetooth(3, 4); // Arduino(RX, TX) - HC-05 Bluetooth (TX, RX)
  10. int servo1Pos, servo2Pos, servo3Pos, servo4Pos, servo5Pos, servo6Pos; // current position
  11. int servo1PPos, servo2PPos, servo3PPos, servo4PPos, servo5PPos, servo6PPos; // previous position
  12. int servo01SP[50], servo02SP[50], servo03SP[50], servo04SP[50], servo05SP[50], servo06SP[50]; // for storing positions/steps
  13. int speedDelay = 20;
  14. int index = 0;
  15. String dataIn = "";
复制代码

setup()函数中,我们需要初始化伺服电机和蓝牙模块,并将机械臂移动到其初始位置。 我们使用write()函数来做到这一点,它只是将伺服电机移动到0到180度的任何位置。

  1. void setup() {
  2.   servo01.attach(5);
  3.   servo02.attach(6);
  4.   servo03.attach(7);
  5.   servo04.attach(8);
  6.   servo05.attach(9);
  7.   servo06.attach(10);
  8.   Bluetooth.begin(38400); // Default baud rate of the Bluetooth module
  9.   Bluetooth.setTimeout(1);
  10.   delay(20);
  11.   // Robot arm initial position
  12.   servo1PPos = 90;
  13.   servo01.write(servo1PPos);
  14.   servo2PPos = 150;
  15.   servo02.write(servo2PPos);
  16.   servo3PPos = 35;
  17.   servo03.write(servo3PPos);
  18.   servo4PPos = 140;
  19.   servo04.write(servo4PPos);
  20.   servo5PPos = 85;
  21.   servo05.write(servo5PPos);
  22.   servo6PPos = 80;
  23.   servo06.write(servo6PPos);
  24. }
复制代码

接下来,在loop()函数中,使用Bluetooth.available()函数,我们不断检查是否有智能手机传入的数据。 如果为true,则使用readString()函数将数据读取为字符串并将其存储到dataIn变量中。 根据到达的数据,我们将告诉机械臂该做什么。

  1. // Check for incoming data
  2.   if (Bluetooth.available() > 0) {
  3.     dataIn = Bluetooth.readString();  // Read the data as string
复制代码

Arduino机械臂控制Android应用程序

我们现在来看看Android应用程序,看看它实际发送给Arduino开发板的数据类型。

Arduino-Robot-Arm-Control-Android-App.png


我使用MIT App Inventor在线应用程序制作了该应用程序,以下是它的工作原理。在顶部,我们有两个按钮,用于将智能手机连接到HC-05蓝牙模块。然后在左侧我们有一个机械臂的图像,在右侧我们有六个用于控制伺服电机的滑块和一个用于速度控制的滑块。

Android-App-development-with-MIT-App-Inventor-768x545.png


每个滑块都有适合机械臂关节的不同的初始值、最小值和最大值。在应用程序的底部,我们有三个按钮:SAVE、RUN和RESET,通过它我们可以编程机械臂使其实现自动运行。下面还有一个标签,显示我们保存的步骤数。

现在让我们看看应用程序背后的程序或模块。首先,在左侧,我们有用于将智能手机连接到蓝牙模块的模块。

Android-App-Bluetooth-Connection-with-Arduino-768x781.png


然后我们有用于伺服位置控制的滑块和用于编程机械臂的按钮块。因此,如果我们更改滑块的位置,通过使用蓝牙函数.SendText,我们会向Arduino开发板发送一段文本。该文本由一个前缀组成,该前缀指示哪个滑块被更改以及滑块的当前值。

Android-Apps-Sliders-Blocks-768x610.png


以下是上述的MIT App Inventor项目的下载文件:

●    Arduino机械臂控制MIT App Inventor项目文件: Arduino_Robot_Arm_Control.rar (24.15 KB, 下载次数: 116)

回复

使用道具 举报

1153635534
发表于: 2018-11-1 13:44:43 | 显示全部楼层

这个控制我控制不好,拖动控制不知道怎么回事,请问是往右拖是逆时针还是顺时针,还是一下顺时针一下逆时针
回复

使用道具 举报

风筝
发表于: 2018-11-1 21:55:37 | 显示全部楼层

1153635534 发表于 2018-11-1 13:44
这个控制我控制不好,拖动控制不知道怎么回事,请问是往右拖是逆时针还是顺时针,还是一下顺时针一下逆时针 ...

向右是顺时针 以最终的设置为角度
回复

使用道具 举报

1153635534
发表于: 2018-11-9 14:03:17 | 显示全部楼层

这个舵机都是多少角度的
回复

使用道具 举报

1153635534
发表于: 2018-11-9 14:15:45 | 显示全部楼层

风筝 发表于 2018-11-1 21:55
向右是顺时针 以最终的设置为角度

关于舵机是数字舵机还是模拟舵机都是什么角度的
回复

使用道具 举报

风筝
发表于: 2018-11-10 07:51:44 | 显示全部楼层

1153635534 发表于 2018-11-9 14:15
关于舵机是数字舵机还是模拟舵机都是什么角度的

模拟舵机 角度180度就可以了
回复

使用道具 举报

1153635534
发表于: 2018-11-13 20:32:43 | 显示全部楼层

大神,QQ是多少,我有一些问题想问你
回复

使用道具 举报

1153635534
发表于: 2018-11-14 09:50:07 | 显示全部楼层

我用的是数字舵机,但是每次转变位置时,舵机会卡在一个位置,这是为什么
回复

使用道具 举报

Urian
发表于: 2019-1-11 13:14:43 | 显示全部楼层

你好,请问你是怎么供电的呢?用Arduino UNO板可以驱动得了6个舵机吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 377 | 回复: 685



手机版|

GMT+8, 2019-10-21 23:27 , Processed in 0.171877 second(s), 31 queries . Powered by Discuz! X3.4

YiBoard一板网 © 2015-2018 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表