在本教程中,我们将使用一些纸板和伺服电机来设计基于Arduino Uno的机械臂 。下面将详细解释整个构建过程。在此项目中, Arduino Uno已编程为控制用作机器人手臂关节的伺服电机。此设置看起来也像是机械起重机,也可以通过一些简单的调整将其转换为起重机。对于想学习以低成本开发简单机器人或者只是想学习使用Arduino和伺服电机的初学者而言,该项目将非常有用。
该Arduino机械臂可以由与其连接的四个电位器控制,每个电位器用于控制每个伺服器。您可以通过旋转锅来拾取一些物体来移动这些舵机,通过一些练习,您可以轻松地将物体从一个地方移到另一个地方。我们在这里使用了低扭矩伺服器,但是您可以使用功能更强大的伺服器来拾取重物。整个过程已在视频末尾很好地演示。另外,请在此处查看我们的其他机器人项目。
所需组件
- Arduino Uno
- 1000uF电容器(4个)
- 100nF电容器(4个)
- 伺服马达(SG 90-四片)
- 10K电位器-可变电阻器(4个)
- 电源(5v,最好是两个)
伺服马达
首先,我们谈谈伺服电机。伺服电机主要用于需要精确的轴运动或位置的场合。不建议将这些用于高速应用。建议将伺服电动机用于低速,中等转矩和精确的位置应用。因此,这些电动机最适合设计机械臂。
伺服电机有不同的形状和尺寸。我们将使用小型伺服电机,这里我们使用四个SG90伺服器。伺服电机主要有电线,一个用于正电压,另一个用于接地,最后一个用于位置设置。红线连接到电源,黑线连接到地,黄线连接到信号。仔细阅读本教程使用Arduino控制伺服电机以了解更多信息。在Arduino中,我们有预定义的库来控制伺服,因此控制伺服非常容易,您将在本教程中学习。
机械臂的构造
采取平坦稳定的表面,例如桌子或硬纸板。接下来,将伺服电机放在中间并将其粘在适当的位置。确保旋转角度在图中所示的区域内。该伺服器充当手臂的基础。
将一小块纸板放在第一个伺服器的顶部,然后将第二个伺服器放在这块板上并将其胶合到位。伺服旋转必须与图相符。
取一些纸板,切成3厘米x 11厘米的小块。确保未软化一块。在一端切一个矩形孔(与底部的距离至少为0.8cm),以适合另一个伺服器,并在另一端用螺丝或胶水将伺服齿轮紧紧地安装。然后将第三个伺服器安装在第一个孔中。
现在,切下另一块硬纸板,其长度如下图所示,并在该薄片的底部粘上另一个齿轮。
现在,如图所示,将第四个也是最后一个伺服器粘在第二个零件的边缘。
这样,两块看起来就像。
当我们将此设置附加到底座上时,它看起来应该像
差不多了 我们只需要像机械手一样用钩子抓住和捡起物体即可 。对于钩子,再切两块长度为1cmx7cm和4cmx5cm的纸板。如图所示,将它们粘在一起,并在最终边缘粘贴最终齿轮。
将其安装在顶部,并以此完成了机械臂的构建。
这样,我们的基本机械臂设计就完成了,这就是我们构建低成本机械臂的方式。现在,按照电路图将电路连接到实验板上。
电路图及工作说明:
Arduino Uno机械臂的电路连接如下所示。
可变电阻两端的电压不是完全线性的。会很吵。因此,要滤除此噪声,请在每个电阻器之间放置电容器,如图所示。
现在,我们将这些可变电阻器提供的电压(代表位置控制的电压)馈入Arduino的ADC通道。为此,我们将使用从A0到A3的四个UNO ADC通道。ADC初始化之后,我们将获得电位计的数字值,代表用户所需的位置。我们将采用该值并将其与伺服位置匹配。
Arduino具有六个ADC通道。我们已经使用了四个机器人手臂。UNO ADC的分辨率为10位,因此整数值的范围为0-1023(2 ^ 10 = 1024值)。这意味着它将把0到5伏之间的输入电压映射为0到1023之间的整数。因此,每单位(5/1024 = 4.9mV)。在此处了解有关使用ADC通道映射电压电平的更多信息。
现在,为使UNO将模拟信号转换为数字信号,我们需要在以下功能的帮助下使用Arduino Uno的ADC通道:
1. AnalogRead(pin); 2. AnalogReference(); 3. AnalogReadResolution(bits);
Arduino ADC通道的 默认参考值为5V。这意味着我们可以在任何输入通道上为ADC转换提供5V的最大输入电压。由于某些传感器提供的电压范围为0-2.5V,因此使用5V基准电压时,我们获得的精度较低,因此我们有一条指令使我们能够更改该基准值。因此,为了更改参考值,我们有 “ analogReference();”
默认情况下,我们获得的最大板载ADC分辨率为10位,可以使用指令(“ analogReadResolution(bits);”)更改此分辨率。
在我们的机械手电路中,我们将该参考电压保留为默认值,因此我们可以通过直接调用函数 “ analogRead(pin);” 从ADC通道读取值 , 这里的“ pin”代表连接模拟信号的引脚,例如我们想读“ A0”。ADC的值可以存储为整数,例如 int SENSORVALUE0 = AnalogRead(A0); 。
现在让我们谈谈SERVO,Arduino Uno具有一项功能,使我们能够通过仅提供度值来控制伺服位置。假设我们希望伺服为30,则可以直接在程序中表示该值。SERVO标头( Servo.h )文件负责内部的所有占空比计算。
#包括
这里的第一条语句表示用于控制伺服电机的头文件。第二句话是命名伺服;我们将其保留为 Servo0, 因为我们将使用4。第三条陈述了伺服信号引脚的连接位置;这必须是PWM引脚。在这里,我们将PIN3用于首次伺服。第四个语句给出了以度为单位定位伺服电机的命令。如果给定30,则伺服电动机旋转30度。
现在,SG90伺服位置从0到180,ADC值从0-1023。我们将使用一个特殊功能,该功能会自动匹配两个值。
sensorvalue0 = map(sensorvalue0,0,1023,0,180);
该语句自动映射两个值,并将结果存储在整数 'servovalue0'中 。
这就是我们使用Arduino在Robotic Arm项目中控制Servos的方式。检查下面的完整代码。
如何操作机械臂:
有四个锅提供给用户。通过旋转这四个电位器,我们可以在UNO的ADC通道上提供可变电压。因此,Arduino的数字值在用户的控制之下。这些数字值被映射以调整伺服电机的位置,因此伺服位置由用户控制,并且通过旋转这些电位器,用户可以移动机械臂的关节并可以拾取或抓住任何物体。