首页 > 学院 > 开发设计 > 正文

[DIY]自制BB8机器人

2019-11-06 09:19:47
字体:
来源:转载
供稿:网友

上学期修读了设计与制造课程,完成了一个关于BB8(星球大战–原力觉醒)的作品,在此分享制作经历,供有兴趣爱好者浏览。


作者:yongchun_zha

QQ:1729465178


首先,来认识一下我们要制作的对象: 这里写图片描述 这里写图片描述

然后是制作完成效果图: 这里写图片描述

以下我主要通过3个方面来叙述:

实物建模组装与上漆电子控制

PartⅠ:实物建模

整体外观仿照BB8实物,大概确定其尺寸为直径90mm的球壳,然后完善里面的各个细节,最终的建模结果如下: 这里写图片描述

动力部分 选用两个6V直流电压的电机作为驱动力,由于电机空载转速为19000rpm,转速过大,需进行电机减速,故设计减速比为20:1的二级齿轮减速组,实现了机器人理论最大1.5m/s的运动速度。为了减小减速系统的摩擦系数,给减速组引进了深沟球轴承(618/2-Z)进行齿轮的轴定位,进而使实际的传动比逼近理论值,降低了系统误差,提高控制的可行性。 这里写图片描述

对于头部控制,在机身引进了一个舵机,并在舵机上放置磁铁(8mm),与头部放置的磁铁相互对应而被吸引,紧贴在机身上方。通过Arduino及蓝牙控制舵机,带动头部的转动和前后移动。在结构方案确定之后,小组按照实际比例对结构以及结构的布局进行了模型建模,同时也按照实际比例对电机、齿轮以及电磁等等零件进行建模。在通过零件与结构之间的装配得到了球形机器人理论机构模型。下图中的中间槽内放置舵机以及提供电源的电磁,与中间槽相连的耳部放置相关的传感器和芯片,耳部底槽为减速系统。图一整个结构底部在通过与放置有两电机的图二相连接,得到实际结构。 这里写图片描述最后为头部的建模,头部分成了两部分建模,一部分为50mm直径的空心半球,半球球面加一突起。底部为一定曲率的圆形底板,其内部建有深度2mm的圆形槽,用于放置磁铁,两槽上方也建有两个通槽并装配有小轮,用于减小头部与机身的摩擦,通过两部分的连接便得到了完整的头部模型。 这里写图片描述 这里写图片描述

PARTⅡ 组装与上漆

完成模型建模之后进行实物制作。首先,联系卖家进行3D打印,打印的材料根据我们所要求的强度和精度选定为未来8000树脂材料,零件精度为100微米,以下为零件实物: 这里写图片描述然后购买电子原件 这里写图片描述 这里写图片描述

开始组装机身部分:安装电机和齿轮组:首先挑选好两组3个齿轮,使其减速比约为20:1,然后在齿轮和铁轴上打定位孔,以便使二者不发生相对转动,然后在机身上安装轴承,使用502胶水固定,然后装入齿轮穿入轴,固定轴和齿轮。安装好齿轮组后,接着开始安装电机,使用电机固定片和m2螺丝螺母固定,安装后如下图: 这里写图片描述 这里写图片描述

然后安装上面的舵机结构,先把舵机装入,粘接好磁铁,使热熔胶固定舵机和连杆的接头。 这里写图片描述

接下来开始焊接芯片,首先,把3.7v锂电池放到电池槽里。然后用热熔胶把声控芯片粘到侧面,再用热熔胶依次粘:蓝牙芯片、双路电机控制板、Arduino芯片,无线充电模块。粘好之后焊接导线,其中焊接的电路板根据以下控制逻辑 这里写图片描述最后,把外轮固定上去。完成后的效果图: 这里写图片描述 这里写图片描述组装头部 首先用铁轴把小轮固定,然后使用502把四个小磁铁粘上。再把上面的壳套上即可 这里写图片描述 这里写图片描述 这里写图片描述添加固定圈 这里写图片描述 这里写图片描述上漆效果如下 这里写图片描述

PARTⅢ 电子控制

使用蓝牙控制,控制逻辑如下: 这里写图片描述Arduino代码#include<Servo.h>int m1l = 2, m1r = 3 , m2l = 4, m2r = 5; //电机控制引脚int ser = 9; //舵机控制引脚int spe = 100; //定义速度Servo myServo;//初始化舵机对象void setup() { Serial.begin(9600); myServo.attach(ser); pinMode(m1l, OUTPUT); pinMode(m1r, OUTPUT); pinMode(m2l, OUTPUT); pinMode(m2r, OUTPUT);}void loop(){ while (Serial.available()) { char c = Serial.read(); if (c == 'b') { digitalWrite(m1l, HIGH); digitalWrite(m1r, LOW); digitalWrite(m2l, LOW); digitalWrite(m2r, HIGH); delay(20); } if (c == 'f') { digitalWrite(m1l, LOW); digitalWrite(m1r, HIGH); digitalWrite(m2l, HIGH); digitalWrite(m2r, LOW); delay(20); } if (c == 'l') { digitalWrite(m1l, HIGH); digitalWrite(m1r, LOW); digitalWrite(m2l, HIGH); digitalWrite(m2r, LOW); delay(20); } if (c == 'r') { digitalWrite(m1l, LOW); digitalWrite(m1r, HIGH); digitalWrite(m2l, LOW); digitalWrite(m2r, HIGH); delay(20); } if (c == 's') { digitalWrite(m1l, LOW); digitalWrite(m1r, LOW); digitalWrite(m2l, LOW); digitalWrite(m2r, LOW); delay(20); } if (c == 'w') { for (int pos = 90; pos < 170; pos++) { myServo.write(pos); delay(10); } for (int pos = 170; pos > 89; pos--) { myServo.write(pos); delay(10); } for (int pos = 90; pos < 170; pos++) { myServo.write(pos); delay(10); } for (int pos = 170; pos > 89; pos--) { myServo.write(pos); delay(10); } for (int pos = 90; pos < 170; pos++) { myServo.write(pos); delay(10); } for (int pos = 170; pos > 89; pos--) { myServo.write(pos); delay(10); } for (int pos = 90; pos < 170; pos++) { myServo.write(pos); delay(10); } for (int pos = 170; pos > 89; pos--) { myServo.write(pos); delay(10); } for (int pos = 90; pos < 170; pos++) { myServo.write(pos); delay(10); } for (int pos = 170; pos > 89; pos--) { myServo.write(pos); delay(10); } } if (c == 'e') { for (int pos = 90; pos > 0; pos--) { myServo.write(pos); delay(10); } for (int pos = 1; pos < 90; pos++) { myServo.write(pos); delay(10); } } }}

PART Ⅳ 资源下载

演示视频:链接:http://pan.baidu.com/s/1miLlIvm 密码:dxz3课程报告:链接:http://pan.baidu.com/s/1pKUYQ1t 密码:slqj
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表