这个机械手很久之前就在做了,但是没有做完,直到看到张禄的同步机械臂。我又开始了制作并完成了机械臂。最近收到LEE大大的赞助,准备把这次制作过程,写成详细教程,让小白无障碍制作 !机械部分(可以说完成了机械部分,基本上完成了制作的大部分工作)
先从手指开始,手指5根,分别打印出来,经过打磨、钻孔,安装螺丝。器材:
螺丝 20、25、30
PLA 白色
风筝线或鱼线
舵机
……(持续更新)
3D打印模型文件分别为:
Auriculaire(小指)、ringfinger(无名指)、Index(食指)、Majeure(中指)、thumb(大拇指)
打印出手指部件
用锉刀修饰模型
钻孔后用AB胶粘接
穿线
注意线头打结!
再将指头盖用胶与指粘接
其余手指安装与之类似,注意每根手指两根线,分别用于弯曲和伸直手指。穿线时不要让两根线缠绕在一起。
五根手指打齐并正确穿线。
打印文件:WristsmallV3.stl
打印文件:WristlargeV4.stl
将大拇指两根线穿过手掌,注意我们使用了,上下两孔洞。
(持续更新中)6月4日外出一天陪朋友去常州看创客空间 。
rotawrist3V2
rotawrist2.stl
rotawrist1V3.stl
组合后形态,构成手腕部分
robpart5V3.stl,将模型文件打印出来后,去除支撑如下图所示。
去除支撑后的模型
robpart4V3.stl如上述模型一样打印后去除支撑
组合后形态
RobServoBedV5,打印上图所示舵机床,将5个舵机按上图所示方式安装上。
servo-pulleyX5.stl,打印好以后,将舵机圆形多盘安装到此模型中,如上图所示
今天是高考,不过今年我不用监考,所以在家休息,烧锅接送孩子之余,继续我们的机械手安装。
小指无名指中轴安装,适当打磨后将中轴从孔中插入,注意控制手指弯曲和伸展的控制线不要缠绕,且分布与中轴两侧。
拇指中轴安装,适当打磨后,将其正确安装,方法如上。
安装注意确保中轴尾部进入孔内,如上图所示,否则会影响腕部中轴的安装。
用螺丝将手表面固定LOGO ——INMOOV
打印腕部齿轮
将齿轮与腕部固定
再将rotawrist3V2与其连接如上图。
内部齿轮组安装如图所示
腕部中轴安装,还是要注意线分布在中轴两侧。
中轴另一端用扣子扣住。
手掌与腕部安装完毕
手臂前后片用AB胶水,粘接,为了使其粘接更为牢固可用夹子加以固定。
6月8号
物理电路连接图如下所示(使用5根弯曲传感器)
代码编写:原理很简单通过5根弯曲传感器的弯曲度,将其映射为舵机的旋转角度。
- // Controlling a servo position using a potentiometer (variable resistor)
- // by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
-
- #include <Servo.h>
-
- Servo thumbservo,indexservo,middleservo,ringservo,littleservo; // create servo object to control a servo
-
- int thumbpin = 0; // analog pin for thumb connect the flex sensor
- int indexpin = 1; // analog pin for index connect the flex sensor
- int middlepin = 2; // analog pin for middle connect the flex sensor
- int ringpin=3; // analog pin for ring connect the flex sensor
- int littlepin=4; // analog pin for little connect the flex sensor
- int val1,val2,val3,val4,val5; // variable to read the value from the analog pin
-
- void setup()
- {
- thumbservo.attach(5); // attaches the servo on pin 5 for the thumb
- indexservo.attach(6); // attaches the servo on pin 6 for index finger
- middleservo.attach(9); // attaches the servo on pin 9 for the middle finger
- ringservo.attach(10); // attaches the servo on pin 10 for the ring finger
- littleservo.attach(11); // attaches the servo on pin 11 for the little finger
-
- }
-
- void loop()
- {
- val1 = analogRead(thumbpin); // reads the value of the potentiometer (value between 0 and 1023)
- val1= map(val1, 768, 853, 0, 179); // scale it to use it with the servo (value between 0 and 180)
- thumbservo.write(val1); // sets the servo position according to the scaled value
-
- val2 = analogRead(indexpin); // reads the value of the potentiometer (value between 0 and 1023)
- val2= map(val2, 768, 853, 0, 179); // scale it to use it with the servo (value between 0 and 180)
- indexservo.write(val2); // sets the servo position according to the scaled value
-
- val3 = analogRead(middlepin); // reads the value of the potentiometer (value between 0 and 1023)
- val3= map(val3, 768, 853, 0, 179); // scale it to use it with the servo (value between 0 and 180)
- middleservo.write(val3); // sets the servo position according to the scaled value
-
- val4 = analogRead(ringpin); // reads the value of the potentiometer (value between 0 and 1023)
- val4= map(val4, 768, 853, 0, 179); // scale it to use it with the servo (value between 0 and 180)
- ringservo.write(val4); // sets the servo position according to the scaled value
-
- val5 = analogRead(littlepin); // reads the value of the potentiometer (value between 0 and 1023)
- val5= map(val5, 768, 853, 0, 179); // scale it to use it with the servo (value between 0 and 180)
- littleservo.write(val5); // sets the servo position according to the scaled value
- delay(10); // waits for the servo to get there
- }
复制代码
以上代码是联机版本。拓展应用:
无线连接版本
|