hnyzcj 发表于 2015-7-2 20:06:14

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

本帖最后由 hnyzcj 于 2015-7-5 09:27 编辑

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


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




       触觉:(打出来自己摸吧) 细腻、光滑。
      
【项目器材】
          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个。






B.结构组装
      通过3D打印机打印完成四个部分的组件,如下图所示

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

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

脚部机械部分安装将上述组合件翻身,用螺丝将2个单向舵盘固定在腿部的垂直面内侧,
再取出两只舵机安放在两只脚上如下图所示。


将上述组合件与左右脚部分组合为一整体,此时BOB下半身已经完成机械结构的安装。

头部组合安装            
       头部的安装比较简单,只要按正确的方向将头部卡在下半身上即可。整体效果如下图所示。可以看到BOB已经初具雏形了。


第二部分BOB电子部分
       此次推荐使用 的控制板是Beetle控制器和Beetle主控器拓展板,说起Beetle大家一定不陌生。作为DFRobot全新一代微型控制器Beetle了它只有硬币大小!但是它的功能依然强大:10个数字口,4个PWM,5个模拟输入,2组电源端口,满足你对Leonardo的高要求。相信各位小伙伴在制作一个小巧美观的互动作品时,常常为选择合适大小的主控器而苦恼。现在你可以把Beetle隐藏到任何作品当中,例如本例中的BOB。
      Beetle引脚定义
      
Beetle主控器PWM口分别为(3,9,10,11)。(注意:数字口3对应SCL,而在Beetle 扩展板上是没有SCL的,因此需要我们自己焊接一根线将SCL引出如下图所示)再将Beetle主控器安装在Beetle扩展板上,依次焊接各引脚。
BOB眼睛部分使用的是HC-SR04超声波测距传感器,其四根引脚VCC、TRIG、 ECHO 、 GND分别用红、蓝、黄、绿四根杜邦线引出。
电路连线:      舵机连线:左右脚部舵机(左脚接数字口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 servoServo myservorhip;Servo myservolhip;Servo myservorankle;Servo myservolankle;// setting the servo angle to 90° for startupbyte LlegAngle = 90;byte RlegAngle = 90;byte LnetAngle = 90;byte RnetAngle = 90;// Setup functionvoid 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 emptyvoid 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。(完结)




大连林海 发表于 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长出犄角会是什么样呢?


大连林海 发表于 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也可以是这样子的

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

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

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

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

很不错,我也做一个
页: [1]
查看完整版本: 3D+Arduino——精舞堂BOB(详细教程)