[3D+Arduino课程(中学生)]3D+Arduino——精舞堂BOB(详细教程) 精华

2015-7-2 20:06:14 [显示全部楼层]
14760浏览
查看: 14760|回复: 13

[3D+Arduino课程(中学生)] 3D+Arduino——精舞堂BOB(详细教程)

[复制链接]
本帖最后由 hnyzcj 于 2015-7-5 09:27 编辑

【项目介绍】
        想不想在你的书桌上放一个呆萌可爱的小机器人呢?在无聊的时候,控制它来为你“跳个舞”,缓解一下百无聊赖的心情。今天这里给大家分享案例是精舞堂BOB。它是一个根据前方物体远近距离,改变舞蹈动作的3D打印机器人。
样图

3D+Arduino——精舞堂BOB(详细教程)图19

视频
http://www.tudou.com/programs/view/Qlfs4aYtFZI/
广告之后马上回来……
       有网友想了解DF新机Overlord的打印质量,我也答应了下来。为了兑现承诺就在这里做一下DM OL的打印效果对比。为了能够让广大网友对打印效果有个清晰的对比,我准备从视觉和触觉两个方面做对比。
      
       视觉:(看照片吧……)
3D+Arduino——精舞堂BOB(详细教程)图2

3D+Arduino——精舞堂BOB(详细教程)图1


       (打出来自己摸吧) 细腻、光滑。
      
【项目器材】
          1.75mm PLA  (1公斤) 3D打印耗材     (橙色
          DFBeetle控制器                                        1
                                 
          DFBeetle住控制器扩展板                        1
  
          DFrobot SG90舵机                                   4  
          Risym HC-SR04超声波模块                    1
          DFrobot 3.7V锂电池                                 1
          DFrobot 3.7V锂电池充电器                     1
          单芯杜邦线(10根母-母)                       1                        
          基础焊接工具套装                                    1(选配)

【制作步骤】
  第一部分机械结构
  A.3D打印模型        

        本次3D打印机器人共有4部分组成:头部、底板、腿部、脚部。经过多次试验测试分析BOB在运动过程中的稳定性、可靠性以及打印所需的时间、原材料的消耗,以及强度等综合考虑。对打印的部件设置了不同的填充率,其设置为头部20%底板20%腿部100%脚部50%。部件数量:头部和底板各1个,腿部和脚部各2个。

3D+Arduino——精舞堂BOB(详细教程)图6

3D+Arduino——精舞堂BOB(详细教程)图4
3D+Arduino——精舞堂BOB(详细教程)图3

3D+Arduino——精舞堂BOB(详细教程)图5
B.结构组装
        通过3D打印机打印完成四个部分的组件,如下图所示
3D+Arduino——精舞堂BOB(详细教程)图7

底板机械部分安装
        取出两只舵机,按下图所示方向安装,作为机器人腿根部的关节控制部分。(注意:打印件仍然需要适当修模,使用锉刀,简单清理一下舵机的槽位,以便轻松的安装舵机)

3D+Arduino——精舞堂BOB(详细教程)图8

腿部机械部分安装
        取出舵机的单向舵盘,按下图所示的方向安装好以后,用螺丝固定。(注意,固定舵盘旋转轴的地方使用较长点的螺丝,保证舵机在转动过程中,腿部与其能够同步转动。)

3D+Arduino——精舞堂BOB(详细教程)图9

脚部机械部分安装将上述组合件翻身,用螺丝将2个单向舵盘固定在腿部的垂直面内侧,

3D+Arduino——精舞堂BOB(详细教程)图10
再取出两只舵机安放在两只脚上如下图所示。

3D+Arduino——精舞堂BOB(详细教程)图11

将上述组合件与左右脚部分组合为一整体,此时BOB下半身已经完成机械结构的安装。
3D+Arduino——精舞堂BOB(详细教程)图12


头部组合安装
        
      
       头部的安装比较简单,只要按正确的方向将头部卡在下半身上即可。整体效果如下图所示。可以看到BOB已经初具雏形了。
3D+Arduino——精舞堂BOB(详细教程)图13


第二部分BOB电子部分
       此次推荐使用 的控制板是Beetle控制器和Beetle主控器拓展板,说起Beetle大家一定不陌生。作为DFRobot全新一代微型控制器Beetle了它只有硬币大小!但是它的功能依然强大:10个数字口,4个PWM,5个模拟输入,2组电源端口,满足你对Leonardo的高要求。相信各位小伙伴在制作一个小巧美观的互动作品时,常常为选择合适大小的主控器而苦恼。现在你可以把Beetle隐藏到任何作品当中,例如本例中的BOB。
      Beetle引脚定义
      3D+Arduino——精舞堂BOB(详细教程)图143D+Arduino——精舞堂BOB(详细教程)图15

Beetle主控器PWM口分别为(3,9,10,11)。(注意:数字口3对应SCL,而在Beetle 扩展板上是没有SCL的,因此需要我们自己焊接一根线将SCL引出如下图所示
3D+Arduino——精舞堂BOB(详细教程)图17
再将Beetle主控器安装在Beetle扩展板上,依次焊接各引脚。
3D+Arduino——精舞堂BOB(详细教程)图16
BOB眼睛部分使用的是HC-SR04超声波测距传感器,其四根引脚VCC、TRIG、 ECHO 、 GND分别用红、蓝、黄、绿四根杜邦线引出。
3D+Arduino——精舞堂BOB(详细教程)图18
电路连线:
        舵机连线:左右脚部舵机(左脚接数字口11,右脚接数字口3,由于数字口3是我们引出的,所以将引出的SCL引脚引入右脚舵机的数字口,再将其VCC和GND接入拓展板)左右腿部分舵机左腿接数字口10,右腿接数字口9。
        超声波连线:超声波传感器的VCC\GND\Echo\Trig引脚分别接扩展板的VCC\GND\A0\A1口。
      连线接好以后烧录一下程序,调整舵机初始位置为90度。(注意Beetle控制器的Board类型为Arduino Lenardo
#include <Servo.h>
// creating the servo objects for front, rear and mid servo
Servo myservorhip;
Servo myservolhip;
Servo myservorankle;
Servo myservolankle;
// setting the servo angle to 90° for startup
byte LlegAngle = 90;
byte RlegAngle = 90;
byte LnetAngle = 90;
byte RnetAngle = 90;
// Setup function
void setup(){
myservorhip.attach(9);
myservolhip.attach(10);
myservorankle.attach(3);
myservolankle.attach(11);
// move servos to center position -> 90°
myservorhip.write(LlegAngle);
myservolhip.write(RlegAngle);
myservorankle.write(LnetAngle);
myservolankle.write(RnetAngle);
delay(2000);
} // The loop remains empty
void loop(){
}
上述程序烧录以后,修正BOB腿部和脚部,使其成为正直姿态。
再次烧录下列程序代码:该代码的功能当超声波测距测得的距离小于100时,脚部舵机转动,BOB做45度角倾斜动作;当距离大于100时,BOB左右腿做扭动舞蹈。
#define ECHOPIN A0                            // Pin to receive echo pulse
#define TRIGPIN A1                            // Pin to send trigger pulse
#include <Servo.h>                              // 声明调用Servo.h库
Servo myservorhip;                              // 创建一个舵机对象
Servo myservolhip;                              // 创建一个舵机对象
Servo myservorankle;                         // 创建一个舵机对象
Servo myservolankle;                         // 创建一个舵机对象
int pos = 0;                                          // 变量pos用来存储舵机位置
void setup(){
  Serial.begin(9600);
  pinMode(ECHOPIN, INPUT);
  pinMode(TRIGPIN, OUTPUT);
   myservorhip.attach(9);  // 将引脚9上的舵机与声明的舵机对象连接起来
   myservolhip.attach(10);
   myservorankle.attach(3);
   myservolankle.attach(11);
}

void loop(){
myservorankle.write(90);
myservolankle.write(90);   
myservorhip.write(90);
myservolhip.write(90);   
  digitalWrite(TRIGPIN, LOW);                            // Set the trigger pin to low for 2uS
  delayMicroseconds(2);
  digitalWrite(TRIGPIN, HIGH);                          // Send a 10uS high to trigger ranging
  delayMicroseconds(10);
  digitalWrite(TRIGPIN, LOW);                            // Send pin low again
  int distance = pulseIn(ECHOPIN, HIGH);        // Read in times pulse
  distance= distance/58;                                     // Calculate distance from time of pulse
  if (distance<100){
    for(pos = 90; pos < 120; pos += 1){   
              myservolhip.write(pos);
              myservorhip.write(pos);  
              delay(30);                    // 延时30ms让舵机转到指定位置                    
    }
     // 舵机从180°转回到0°,每次减小1°                              
    for(pos = 120; pos>=90; pos-=1) {      
            myservorhip.write(pos);  

             myservolhip.write(pos);           // 写角度到舵机
          delay(30);                     // 延时30ms让舵机转到指定位置
    }   
  }
else{
   for(pos = 80; pos>=60; pos-=1) {      
           myservorankle.write(pos);// 写角度到舵机
           myservolankle.write(pos);// 写角度到舵机
          delay(30);                     // 延时30ms让舵机转到指定位置
    }
   for(pos = 60; pos < 80; pos += 1){   
             myservorankle.write(pos);   // 写角度到舵机 // 给舵机写入角度   
              myservolankle.write(pos);// 写角度到舵机
            delay(30);                    // 延时30ms让舵机转到指定位置                    
    }
}
  Serial.println(distance);                     
  delay(50);                                    // Wait 50mS before next ranging
}

现象:        
        Beelte正常使用,加载新程序后,在电脑上找不到Beetle的虚拟串口?
原因:
        在排除线问题后,此现象一般是新程序影响了USB通讯导致。Beetle/Leonardo的USB转串口是由相应的软件实现的(Arduino IDE中实现),它和用户程序都在ATMEGA32U4中,如果用户程序影响了USB的相关操作将导致看不到USB虚拟串口。此时需要重新加载可用的用户程序(比如Blink)。 由于Beetle/Leonardo已经和电脑失去联系,不能自动复位,需要人工复位方式进行加载。Beetle的复位需要通过跳线短接ICSP接口中的RESET和GND来实现。 注意Beetle/Leonardo上电启动时将直接运行用户程序,因此通过插拔USB不能使其进入Bootloader。
方法:
手动复位下载程序过程:
1)在Arduino IDE中打开blink程序,单板类型选择为“Leonardo”,点击“upload”上载程序;
2)当IDE中显示“uploading”时,用跳线进行软复位(将ICSP接口中的RESET和地短路一下后断开);
3)等待程序加载完毕。

【测试运行】
          将3.7V锂电池 的正负极插在Beetle扩展板的电源接口上,按下开关。BOB 根据前方物体的距离,跳出不同的舞蹈。

【总结拓展】         本次BOB的外形比较中规中矩,如果你有不错的创意可以发挥出来,打造个性化的BOB。另外在功能上,我们也可以进行拓展,本例中我们只是给BOB制定了两种动作,你可以修改程序代码玩出更多的花式。让BOB伴随音乐起舞。(加个MP3播放模块),或则你想用手机控制你的BOB,那么换块Bluno Beetle主控板来玩蓝牙BOB。(完结)




BOB打印文件.rar

165.82 KB, 下载次数: 9027

大连林海  初级技神

发表于 2015-7-2 20:20:01

不够详细 再萌哒哒的
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2015-7-2 20:20:30

大连林海 发表于 2015-7-2 20:20
不够详细 再萌哒哒的

还没有写完你就跟上了。
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2015-7-5 00:29:13

写完了,你又不来了
回复

使用道具 举报

luna  初级技神 来自手机

发表于 2015-7-5 09:55:17

写得很赞!我又看到你微信里的小视频~萌萌哒~有空放上来啊!
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2015-7-5 21:27:42

BOB长出犄角会是什么样呢?
3D+Arduino——精舞堂BOB(详细教程)图1

回复

使用道具 举报

大连林海  初级技神

发表于 2015-7-5 21:55:19

hnyzcj 发表于 2015-7-5 21:27
BOB长出犄角会是什么样呢?

看到这个 我来了 好梦 你换一个颜色
回复

使用道具 举报

丄帝De咗臂  高级技匠

发表于 2015-7-5 22:04:02

长犄角的Bob好奇怪
回复

使用道具 举报

luna  初级技神

发表于 2015-7-6 09:52:41

看到视频~~摩擦摩擦~魔鬼的步伐
回复

使用道具 举报

luna  初级技神

发表于 2015-7-6 09:53:08

hnyzcj 发表于 2015-7-5 21:27
BOB长出犄角会是什么样呢?

你确定不是手吗?
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2015-7-6 09:54:45

luna 发表于 2015-7-6 09:53
你确定不是手吗?

确定以及肯定不是手,是犄角,哈哈
回复

使用道具 举报

hnyzcj  版主
 楼主|

发表于 2015-7-6 10:37:58

其实BOB也可以是这样子的
鸡蛋BOB.jpg
回复

使用道具 举报

luna  初级技神

发表于 2015-7-6 11:38:36

hnyzcj 发表于 2015-7-6 10:37
其实BOB也可以是这样子的

T T 你到底把他怎么了…… 为什么瘦了这么多……为什么脸变尖了~~
回复

使用道具 举报

jrjinglin  学徒

发表于 2017-4-6 10:03:43

很不错,我也做一个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail