有同学说我这个机械臂很像挖掘机,好吧,考不上蓝翔的同学们看过来!
【点击此处下载机械臂结构的CAD图】可以直接发图给淘宝的店家加工,这里默认亚克力板的厚度为2.4mm。
工具:1、热熔胶枪;2、电烙铁;3、螺丝刀套件
材料:
Arduino UNO x 1
旋转式电位器 x 4
自锁开关 x 1
MG995舵机 x 4
SG90舵机 x 1
5-9V电源 —
一些线材 —
需要用到的标准件有:M4*10螺栓18个,M4螺母18个,M2*6圆头带垫自攻螺丝。M4螺母和螺栓可用【膨胀塑料卡扣】代替。
从视频中可以看到,机械臂实际上是在模仿一个4连杆机构的动作,而连杆的转动副就是旋转电位器。所以整个系统可以分为【机械臂主体】和【控制器】2个部分来制作。
一、机械臂主体
主要结构为标称3mm的(实际为2.4mm)亚克力板材。
舵机采用4个MG995(要求有十字、六角、圆盘配件包)和1个SG90(任意配件)。
SG90与机械爪子之间靠粘合剂固定。螺栓+螺母作为轴承时可用粘合剂固定螺母在螺栓上的位置。
由于加工精度和材料的物理特性,各板相接的榫位可能不能很好地卡住甚至出现断裂的情况,可以选择放弃榫接而采用热熔胶或者粘合剂进行固定。
本人在制作实物的过程中发现一些设计问题,由于疏忽,也许并未能把所有的问题都在设计图中重新修改,敬请原谅。
使用者可以一次加工更多的零件作为后备,防止在有零件损坏的情况下没有备用零件。
下载本文的附件,在淘宝搜索“亚克力加工 激光”搜索到相关店家,联系客服,选好合适的亚克力板材(3mm),发送dwg文件给客服,确认无误后下单即可。
ATTENTION:
【水深!对于价格一定要货比三家!同时要确认板材实际厚度为2.4mm!】






由于有些部分已用热熔胶固定,Ttable不再将其分解拍照了。附件里每个dwg文件都只是机械臂的一部分,使用者们可以对照着先拼装出各个部分,再总装起来。
使用的过程中,Ttable发现它容易倒,使用者可以通过修改底盘的设计或者为底盘增加一点配重来解决这个问题。
二、连杆控制器
这部分没什么好说的,随便找点杆状材料,转动副是电位器,用热熔胶粘成连杆就行,可谓简单粗暴。
不过要注意两点:一是要注意电位器的初始位置要能使每个节点的运动范围和机械臂对应关节的运动范围保持一致;二是,如果你使用碳膜电位器(如图),你会发现接触不良的频率非常高,所以要用足够的热熔胶来固定电位器引脚的接线。


制作完两个部分之后,就可以把所有东西连接起来了。
从上面可以看到控制器的接线非常混乱……线多没办法,而且线要足够长,避免影响控制器的活动范围。同理,机械臂的舵机线也要足够长。

为了防止干扰,机械臂和Arduino要使用两个独立的电源。我用的是2组串联的18650电池。另外,供给机械臂的电压不可以高于9V,否则会烧坏SG90。


最后,代码来了。
#include<Servo.h> Servo myservo1,myservo2,myservo3,myservo4,fang; int button = 0; int potpin1 = A0; int potpin2 = A1; int potpin3 = A2; int potpin4 = A3; int val1,val2,val3,val4; void setup() { pinMode(button,INPUT); // Serial.begin(9600); //必要时启动串口来进行调试 myservo1.attach(3); myservo2.attach(6); myservo3.attach(9); myservo4.attach(11); fang.attach(10); } void loop() { //根据你的情况修改所有带感叹号注释的数,获得准确的模仿效果 val1 = analogRead(potpin1); val1 = map(val1, 100/*!*/, 788/*!*/, 0, 180); val2 = analogRead(potpin2); val2 = map(val2, 180/*!*/, 888/*!*/, 0, 180); val3 = analogRead(potpin3); val3 = map(val3, 0/*!*/, 898/*!*/, 0, 180); val4 = analogRead(potpin4); val4 = map(val4, 180/*!*/, 883/*!*/, 0, 180); if(digitalRead(button)==0){ //修改fang.write()里面的数字,即舵机运动角度,以改变爪子张开时的位置。 fang.write(72); } else{ //修改fang.write()里面的数字,即舵机运动角度,以改变爪子咬合时的位置。 fang.write(12); } // Serial.print("val1="); // Serial.print(analogRead(0)); // Serial.print(" val2="); // Serial.print(analogRead(1)); // Serial.print(" val3="); // Serial.print(analogRead(2)); // Serial.print(" val4="); // Serial.println(analogRead(3)); myservo1.write(val1); myservo2.write(val2); myservo3.write(val3); myservo4.write(val4); delay(10); //修改括号里的数字,改变机械臂的运动速度。 }
啊。。。。照着你的做了下。。可是怎么弄都不行。。。我找不到哪里出问题了。。。
咦?有什么现象吗?