本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于Arduino板开发的机器人三指夹持器

发布时间:2021-09-20
分享到:

基于Arduino板开发的机器人三指夹持器

发布时间:2021-09-20
分享到:

该项目是基于阿斯塔纳机器人和智能系统实验室(ALARIS)的研究而创建的,通过重新创建 3D 打印的三指欠驱动机器人抓手。这种机器人抓手是为教育和研究目的而设计的,因此除了抓取物体外,还可以通过集成进一步的测量可能性来重新生产它。因此,通过相应地调整初始设计来引入不同的传感器。

第1步:项目分析

问题定义
该项目的目标是改进开源机器人抓手,其中可能包含可用于进一步科学研究的技术。出于这个原因,作为第一步,给出了夹持器背后的技术描述,然后提出了针对不同案例场景的建议。

考虑到该论文是从 ALARIS 实验室提供的,已经完成了机械手作为欠驱动机械链的机械分析。然而,设计本身并没有任何用于数据获取和与用户交互的控制或反馈方法。

因此,最初在需要时集成了一个 ON/OFF 开关作为系统的手动电源。此外,还考虑了两种不同的 LED 作为实现伺服电机位置的指示方法,以响应用户可以操纵的滑动电位计的值。这样,抓手的手指可以根据电位器的给定值闭合,从而抓住物体。

然而,为了避免对设备本身或放置在夹具中的物体造成任何损坏,使用了力敏传感器,可以估计用户滑动电位器时施加在手指上的压力,手指会聚并且物体稳定在所需的位置。在力可能超过上限的情况下,红色 LED 亮起作为警告,伺服电机停止工作,指示用户将电位计返回到初始位置,以便可以移除物体。

利益相关者
可以从该设备中受益的人可能主要处于教育和研究水平,其中空间甚至进一步发展可能是一个选择。

项目目标
已经提供了三指机器人抓手,通过提供用于操纵手指的替代解决方案,可以将其提升到用于教育目的的水平。因此,在本项目结束时应完成以下步骤:

  • 使用不同的电子元件可以使夹持器更加自动化
  • 基于这些组件控制夹具
  • 学习根据其功能对 Arduino 板进行编程
  • 了解可以使用的电子元件的原理以及它们如何与 Arduino 板连接
  • 根据问题的要求进行3D建模并生成有用的真实零件
  • 了解和每个组件/零件的制造过程
  • 创建一个可以在现实生活中有效使用的最终机器人
  • 设计任务
  • 该项目的一个挑战是在机器人抓手的每个指骨中调整额外的传感器,使其不会因电线而限制运动,特别是由于它是欠驱动的,并且有一个线性组件可以保持系统的连续性。此外,它不会挑战手指位置的准确性,也不会挑战传感器本身

此外,用于压力数据采集的手指内部传感器的操作可以相应地固定,并且具有操作的能力而不会丢失大量信息或它与可能的潜在环境的任何接触的噪音。因此,一个矩阵被 3D 打印出来,它可以给出一个硅指尖的形状,其中封装了压电传感器。

要求清单
在项目结束时,伺服电机将需要响应滑动电位器的运动,返回 LED 的相应光强度,并且在高压的情况下,FSR 传感器可以正确指示。

第 2 步:项目综合 - 3D 建模

根据选择的电子元件,对给定的设计进行了小的更改,以满足要求。更准确地说,覆盖手指的软垫被用硅橡胶材料模制的类似组件取代。那些被设计成可以在特定位置携带用于测量所需力并根据编程任务做出响应的压力传感器。

每个手指都由相同的设计修改和制造程序组成,以便可以放置可能的第二个力敏传感器,以提高系统的安全性,或者将它们的位置从远端指骨更改为中间指骨。最后,设计了一个额外的底层,可以在底部承载微处理器和电源,而在上层,则放置了一个带有 ON/OFF 开关的滑动电位器。

制造工艺和组件
大多数组件都是为这种机器人抓手设计的,因此可以使用现成的组件,也可以通过 3D 打印或激光切割轻松制造。在这种特殊情况下,所有手指部件都被设计为可以进行 3D 打印,类似于用于安装夹具的基层。这两层被认为是通过 M4 螺纹杆蜗杆连接的,并由小金属轴支撑,这是抓手的第一批设计者所考虑的。不过,在时间和成本安全的情况下,可以通过使用激光切割机和 MDF 木质材料为后面的部分提供替代选择。

此外,夹持器的指尖覆盖有橡胶材料,在这种情况下,考虑到压力传感器应位于其中心,因此对其进行了铸造和成型,但可以根据情况取回或更改它. 为此,支持此类应用程序的额外矩阵是 3D 设计的,并被视为可以 3D 打印的组件。有了它和橡胶材料的适当化学成分,就可以铸造支撑垫,当愈合后,垫本身和形成承载传感器的斜坡的内部部分都可以被移除。浇铸的橡胶材料随后可以粘在机器人手指的正确位置上,用于测试的应用和执行。

现成的组件
用于组装和固定构成机器人抓手的每个部件的机械部件由在线和本地商店提供,这些部件列在所提供的附加 excel 文件中。

设计分析
每个组件都根据项目的规格和要求进行设计和调整。考虑到项目的目标,夹具的 3D 模型应该在三组不同的组件中进行处理。首先,手指本身可能发生的变化,其次是底座上可能支持所有电子设备的潜在变化被选择集成到一个复合设计中,最后是任何可能有助于生产或支持基本模型的额外部件的设计。

安装夹具和所有其余部件的底座的两层是根据提供的现有模型设计的。在此基础上,根据 ON/OFF 开关、滑动电位器、Arduino 和电池底座的大小,绘制并挤压出相似的几何形状。因此,对底板进行了许多修改,以便可以为每个组件提供支撑。作为滑动电位器的一个例子,考虑了额外的材料去除,其中可以连接到组件的三个基本引脚上的电线可以穿过底座,而不是绕过整个结构,直到到达 Arduino 板。此外,在电位计可以用粗体安装的地方开孔,在使用过程中提供舒适和稳定性,如图所示。最后,两个不同的底板被设计成可以用金属杆连接,金属杆通过使用螺纹杆蜗杆将两个不同的层互连。

同样,为了将 FSR 传感器集成到手指上,铸造橡胶垫需要有一个中空空间,传感器可以在其中安装并随时移除或更换。为此,在最初的设计师提供的原始焊盘的形状和尺寸上设计了一个额外的组件,该组件由两个不同的部分组成。一种是放置硅材料的矩阵和可以为放置 FSR 传感器提供中空形状的“内部部分”。为了支撑内部直到硅固化,设计了一个额外的微型支撑挤压件,可以保持第二部分稳定并平行于基体。在固化结束时,从第 1 部分移除硅垫,然后从垫中小心取出第 2 部分。第 2 部分的设计使其可以在不损坏硅垫或干扰制造过程的情况下发挥作用。几何细节可以在附图中显示。

第 3 步:项目综合 - 电路原理图

电子产品清单
在这个阶段,使用名为 Fritzing 的免费应用程序创建了包含所有电子设备的电路图。考虑了以下组件,如下所示:

1x 力敏电阻器,
1x 伺服电机,
2x LED(绿色和红色),
3x 电阻器(10 kΩ、220 Ω),
1x 线性电位器 (10 kΩ),
1x 开/关开关,
1x 9(V) 电池。
系统的电路是根据每个组件的参考教程创建的,在 Arduino 板上单独执行它们的代码,最初,然后作为项目所需的所有组合。因此,通过在不违反能量供应平衡的情况下将所有这些组合起来,所需的任务由夹持器根据最初的考虑来执行。根据此原理图,对电路进行了测试和验证。

电子元件原理
FSR传感器

用于该项目且必须控制的基本组件主要有四个,即伺服电机、线性电位器、力敏电阻器和开关。解释每一个的原理,可以说力敏电阻(FSR)是两个导电层的组合,其中一个导电层印有交叉电极,伸出塑料密封盖,中间有一层粘合层。导电材料。当对它们施加压力时,所有这些都用于电阻大小变化,其范围在未施加压力时的 10 [MΩ] 和传感器可承受的最大压力 200 [Ω] 之间变化。

因此,力与电阻 F(R) 的关系描述了传感器的对数行为,主要是施加压力时传感器的响应,考虑到力越大,电阻值可能越低。鉴于可以创建电压变化,传感器的值可以由 Arduino 的 ADC 读取。因此,已经创建了分压器电路和下拉电阻器,如原理图所示,描述测量的 Arduino 输出电压的方程可能是 V_{out} = V_{sorce} * R / (R + R_{FSR}),其中 V_{sorce} = 5 [伏特]。因此,根据下拉电阻值,输出可能会相应变化,这可以用作对传感器本身设定点的理解。

开/关

选择开关来打开和关闭机器人是一个两态的离散开关,仅用于手动控制整个机器人系统在使用或不使用时的能量供应。该项目中唯一没有实施的额外考虑是使用额外的串联电阻,但由于提供的电流最小,并且除了电源之外没有其他用于该传感器的信息采集的用途,因此避免了这种情况。供应。

线性电位器

线性电位器是一种无源电子元件,可以被视为一种可变电阻器,它基于滑块的位置,可以导出相应的输出分压。因此,推导该传感器电压的原理可能与 FSR 传感器的原理类似,因为为了获得可调电压,需要考虑可变分压器。类似地,作为 FSR 传感器,由 Arduino 微处理器测量的信号是模拟的,可以被认为是连续的,这可能需要相应的编程,可以在公共范围/间隔内分配其潜在值。

伺服电机

伺服电机是可以提供精确定位的组件组合,主要作为一个系统,由控制装置、直流电机和反馈系统组成。通过使用正反馈误差旋转并确认电机轴的位置,系统即使受到干扰也能正常保持其位置。直流电机连接到齿轮组件,用于降低 RPM 和增加扭矩,而电位计每次都会确认其位置,这可以生成测量误差所需的信号,并最终将这些信息输入微处理器; 在这种情况下,Arduino 板。因此,伺服电机由三个基本引脚组成,一个用于输入电源、GND 和离散 PWM 连接器。

伺服电机可以基于脉宽调制 (PWM) 原理进行控制,这意味着轴的旋转取决于伺服电机控制器接收到的应用电脉动的持续时间 (ms)。伺服电机通常可以在 90 到 180 度角之间旋转,在这个特定项目中,使用电机或 180 度旋转角,并根据项目本身的要求调整旋转范围。

第 4 步:项目综合 - 3D 手指机器人脚本

在图片上,下面给出了编写脚本的执行,其中可以显示伺服电机的许多手动步骤。此外,还提供了代码的流程图,如图所示。

#include <Servo.h>
// Set the pins were used on Arduino UNO for each sensor/actuator. 
const int ServoMotor = 11;
const int RedLed = 5;
const int GreenLed = 6;
const int SlidingPot = A2;
const int FSR = A1;
// Define the variables are used in the script.
int LEDbrightness;
int ServoVal;
float FSRData;
float PotVal;
// Declaration of a new variable "sm" that links the functions of the "Servo.h" library with the code.
Servo sm;
void setup()
{
    Serial.begin(9600);

     // Configuring the behaviour of the sensors.
    pinMode(RedLed, OUTPUT);
    pinMode(GreenLed, OUTPUT);
  
      // Attaches the servo motor to the pin was set, with an optional operating PWM interval.
    sm.attach(ServoMotor);
      sm.write(0);

}

void loop()
{
      // Reading analog values of the potentiometer and alocate it in the range of motion of the ServoMotor.
    PotVal = analogRead(SlidingPot);
     PotVal = map(PotVal, 0, 1023, 0, 180);
  
      if (PotVal > 0)
      {
            // Print the mapped values of the ServoMotor.
            sm.write(ServoVal);
            Serial.print("Servo_Motor_Value:");
           Serial.print(ServoVal);
            Serial.print(", ");

            // Print the values of the potentiometer.
            Serial.print("Potentiometer_Value:");
            Serial.print(PotVal);
            Serial.print(", ");
    
            // Print the values of the FSR sensor.
          FSRData = analogRead(FSR);
            Serial.print("FSR_Value:");
            Serial.println(FSRData);

            // Alocate the values of the ServoMotor into the range of the LED brightness.
            LEDbrightness = map(PotVal, 0, 180, 0, 255);
            analogWrite(GreenLed, LEDbrightness);

        // Setting a threshold of 800 could be according to the intuition of the user considering
        //  the range between [0,5] Volts the sensor operates and therefore the board allocates 
        // those values into an intiger range of numbers between [0, 1023].
          if (FSRData > 800)
          {
                 // LED light turns on and the ServoMotor detaches from its pin.
                 digitalWrite(GreenLed, LOW);
                digitalWrite(RedLed, HIGH);
                 sm.detach();
    
                 Serial.print("WARNING -  WAIT \n");
                 delay(5000);
                digitalWrite(RedLed, LOW);
                 Serial.println("Zero the potentiometer and remove the object.");
    
                 // Attaches the ServoMotor again on its pin and zeros the ServoMotor.
                 sm.attach(ServoMotor);
                 sm.write(0);
                 delay(5000);
           } 
    }
    else
    {
            Serial.println("Start_sliding_the_potensiometer.");
            delay(500);
      }
}

第 5 步:讨论
该项目的进一步改进可能是对伺服电机的高级控制,它可以准确、精确和最低的能源成本运行。此外,还可以引入对设计的进一步改进。关于提供的图形和数据示例,如所附照片所示,Arduino IDE 不提供从传感器导出获取的数据、保存绘制的图形或适当灵活地处理轴标题的选项、图例等,而相对于测量数据的标题自动命名存在敏感性和不一致,这些数据在图表上以彩色线条表示。

这意味着可以通过在单词之间使用额外的下划线“_”更改间距来控制代码,例如 "Serial.print("FSR_values")" ,或者通过消除 Serial.Print 的数量() 函数在代码内部并破坏所呈现记录的组织。因此,对此的替代解决方案可能是不同的 IDE 或可与 Arduino 板结合使用的方法,以便更好地控制微控制器的功能和能力。像 Matlab 等的案例可以提供这样的可能性,具有更好的可控性和从可以使用的电子元件获取数据。

最后,考虑到所描述的工作流程和步骤,从头到尾,达到了操纵伺服电机以执行特定动作的目标。3D模型、原理图和实际实验表明,抓手已经提升到一个水平,可以根据项目的要求和目的有效地使用。

3-Finger_Robot.fzz

Gripper_Assembly.STEP

组件列表.xlsx - Sheet2.csv

三指_Robot.ino

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论