手把手教你制作“开瓶盖的机器人”

2014-9-16 17:18| 发布者: anfzh| 查看: 4242| 评论: 0|来自: instructables

摘要: 本文所建立的机器人设备是由Rhino机器人构成的。用来控制它的代码是通用的,足以适用于任何类型的直流电动机机器人。控制一个机器人,让它和特殊形状的物体进行互动并操作重物,这项任务富有挑战性,且需要象征性的原型设计和建模。经过多次试验和无数次失败,我们很高兴能够看到机器人成功地操纵手臂去打开啤酒瓶。现在我们可以放松一下了,此时我们的机器人也打开了几瓶啤酒,来答谢我们的辛苦工作!

手把手教你制作“开瓶盖的机器人”

手把手教你制作“开瓶盖的机器人”

当初开始做这个项目时,我们希望救活一个已死的机器人。若说我从Bender那里学到了什么,那就是若想使一个机器人复原,没有比让它去开啤酒瓶盖更好的办法了。

控制一个机器人,让它和特殊形状的物体进行互动并操作重物,这项任务富有挑战性,且需要象征性的原型设计和建模。经过多次试验和无数次失败,我们很高兴能够看到机器人成功地操纵手臂去打开啤酒瓶。现在我们可以放松一下了,此时我们的机器人也打开了几瓶啤酒,来答谢我们的辛苦工作!

步骤1:设备及材料

手把手教你制作“开瓶盖的机器人”

手把手教你制作“开瓶盖的机器人”

我们建立的机器人设备是由Rhino机器人构成的。用来控制它的代码是通用的,足以适用于任何类型的直流电动机机器人。

电子设备:

• 直流电机(见大图,我们对电动机没有规范)

• Arduino Duemilanove(或任何Arduino板)

• Arduino继电器保护

• 1个单刀单掷继电器(12V,1A)

• 1个2N3904 NPN晶体管(或类似的)

• 1个LED指示灯(任何颜色)

• 3个限位开关

• 4个10K欧姆的电阻

• 1个330欧姆的电阻

• 带DC插孔的12V电源

• 导线

硬件:

• 扎带

• 螺母、螺栓和垫圈(1/4”)

• 用于安装的短螺丝

• 8听锡罐头

• 用于安装的各种金属废料和焊条

工具:

• 烙铁

• 电钻/ Dremel

• 用于测试的电压表

• 剥线钳/切刀

• 扳手

• 六角键

步骤2:硬件

手把手教你制作“开瓶盖的机器人”

手把手教你制作“开瓶盖的机器人”

手把手教你制作“开瓶盖的机器人”

手把手教你制作“开瓶盖的机器人”

手把手教你制作“开瓶盖的机器人”

为机器人配备硬件,有四项主要任务:

1. 减轻机器人手臂的重量,以使其能够产生最大扭矩/力;

2. 装啤酒瓶的支座。我们把啤酒瓶放入被掏空的锡罐头中,再将这些锡罐头安装到机器人设备的旋转盘上;

3. 为机器人安装开瓶器和限位开关;

4. 将机器人部件安装于中纤板(MDF)上并保持一致。

减重

为减轻手臂的重量,我们简单地摘下机器人臂的最后两个电动机,使托架头部更轻。这给我们带来了一只更容易被有效控制的机器人手臂,同时该手臂能够提供足够打开瓶盖的扭矩。

酒瓶支座

我们清空8个锡罐,并在其底部钻出间隔为5cm(底座上的间距)的孔。在螺栓头部和锡罐底部之间放入垫圈,以防止摆动。把螺母装于底部并收紧,但如果我们再次这样做的话,我们会采用锁紧螺母或垫圈,以防止螺母在运行时松动。

安装开瓶器及开关

借助于定位棒,用扎带把开瓶器捆绑在机械手臂的前部。以一个安全的方式捆绑开瓶器,除了使它方向朝上,并没有其他特别的安装要求。

限位开关在它们被安装的地方也有一些变化。打开瓶盖后,代码通过开关来找到可靠位置(这有时会导致电机打滑而失去位置记忆),然后在它需要的方向上继续移动电机。因此,限位开关被安装在一个特殊位置,该位置能够让机器人先拉回手臂,然后再移回至起始位置,同时避免再次碰到瓶子。关于旋转底座上的限位开关,固定锡罐的螺栓被用于触发该开关,以便于它们在旋转过程中每转过22.5度就碰一次开关。由于每罐间隔45度分开,所以每2次触发开关意味着下一个瓶子已经就位。

安装机器人

我们使用了一块2’×4’中密度纤维板(MDF)来固定机器人手臂和旋转底座板。使用4”的螺栓和螺钉来组装这两部分。

步骤3:电子设备

手把手教你制作“开瓶盖的机器人”

该电路是都是由Arduino的9个引脚所控制。这里用到了3个数字输入引脚和6个数字输出引脚。引脚使用情况详述如下:

• Arduino的引脚0 - 输出 ——控制旋转平台

• Arduino的引脚1 - 输入 ——控制头部倾斜的限位开关

• Arduino的引脚2 - 输入 ——手臂的限位开关

• Arduino的引脚3 - 输入 ——旋转平台的限位开关

• Arduino的引脚4 - 输出 ——头部向下倾斜

• Arduino的引脚5 - 输出 ——头部向上倾斜

• Arduino的引脚6 - 输出 ——控制手臂下降

• Arduino的引脚7 - 输出 ——控制手臂上升

• Arduino的引脚8 - 输出 ——控制一个LED指示灯

引脚4—7控制继电器保护以操控机器人的手臂和头部。所有的电子产品都内置到继电器保护中。在继电器保护中,继电器1的公共引脚被连接到手臂电机的正线上。继电器2的公共引脚被连接到手臂电机的负线上。每个继电器的常闭(NC)触点接地,常开(NO)触点连接到12V。12V电源必须由二次电源通过导线提供,或者以12V电压为Arduino供电,并在该12V电压在Arduino上被调节之前采用它。电动机的挂接方式意味着电动机可以在任意一个方向上启动,这取决于哪个继电器接通12V电源并且触点接地。如果两个继电器同时打开或关闭,那么电机不会转动。注意:具有两个继电器可能是不稳定的,因为在通过一个继电器的12V线路与通过另一个继电器的12V线路之间, 仍然存在微小变化,该变化通过继电器开关产生不稳定的电流。

旋转轮以类似的方式运行,除非只有一个继电器被打开或关闭,所以电机仅在一个方向上运行。如下图所示,继电器可以接通或断开通往电机的12V线路。

步骤1的LED指示灯已经告诉我,当它一切OK时就插入12V的电源线路。当Arduino开启并运行通过其设置周期时,我把它断开,因为一些电机会在设置期间随机开启。因此,LED指示灯在代码中给出一个4秒钟的暂停,其中指示灯亮起则通知我是时候插上12V电源了。在此之后,LED不再有任何目的。

限位开关都遵循相同的电路来连接到Arduino。机器人使用数字读取来通知何时开关被触发,并且使用该信息来完成对准每个电机。

步骤4:软件

手把手教你制作“开瓶盖的机器人”

下面的代码是为Arduino IDE控制机械手臂而编写的。值得注意的是,它充分利用了电路的优势,由于带状电缆连接件的不同,它本来不应该用于指挥Rhino机器人手臂的!

   代码以建立所有的输入/输出引脚为开端,并将它们全部设为低电平。然后,它会短暂打开LED,让我们知道我们可以插入12V电源插头。然后开始循环,其中每个周期通过校准手臂和头部开始。校准后,头部被留在将去除瓶盖的位置上。然后电机按照我们预先定义的一组动作抬起并向前倾斜开瓶器。然后为了下一个酒瓶,重复校准并且旋转转盘,这样一切又重新开始!

   在下面的代码中,“motor 1A”意味着继电器控制电动机引脚一侧,而“motor 1B”则是控制电机引脚的另一侧。例如,你将需要通过1A “HIGH”和1B “LOW”在一个方向上驱动电机,或1A “LOW”和1B “HIGH”在另一个方向上驱动电机,抑或两者皆“LOW”停运电机。

/*

 motor 1A (relay 1) on digital pin 7  

 motor 1B (relay 2) on digital pin 6

 motor 2A (relay 3) on digital pin 5

 motor 2B (relay 4) on digital pin 4

*/


void setup()

{                

 pinMode(8, OUTPUT);  // LED

 pinMode(7, OUTPUT);  // arm up

 pinMode(6, OUTPUT);  // arm down

 pinMode(5, OUTPUT);  // head up

 pinMode(4, OUTPUT);  // head down

 pinMode(3, INPUT);   // wheel switch

 pinMode(2, INPUT);   // arm switch

 pinMode(1, INPUT);   // head switch

 pinMode(0, OUTPUT);  // wheel

 

 digitalWrite(7,LOW);

 digitalWrite(6,LOW);

 digitalWrite(5,LOW);

 digitalWrite(4,LOW);

 digitalWrite(0,LOW);

 

 digitalWrite(8,HIGH);        // turn on LED to indicate ready

 delay(2000);

 digitalWrite(8,LOW);

 delay(2000);                 // insert 12V source during this pause

}


void loop()

{  

 calibrate();

 digitalWrite(4,HIGH); // tilt head down

 delay(500);

 digitalWrite(7,HIGH); // lift arm up

 delay(2000);

 digitalWrite(7,LOW);  

 delay(3000);

 digitalWrite(4,LOW);

 delay(10);

 digitalWrite(4,HIGH);

 digitalWrite(7,HIGH);

 delay(1000);

 digitalWrite(7,LOW);

 digitalWrite(4,LOW);

 delay(10);  

}


void calibrate()

{

 while(!digitalRead(3))       // rotate wheel 22.5 degrees so that bottle isnt in the way

 {

   digitalWrite(0,HIGH);

   delay(10);

 }

 delay(100);

 digitalWrite(0,LOW);

 

 while(digitalRead(1))        // move head away from bottle

 {

   digitalWrite(5,HIGH);

   delay(10);

 }

 digitalWrite(5,LOW);

 digitalWrite(4,HIGH);

 delay(2000);

 digitalWrite(4,LOW);

 delay(10);

 

 while(!digitalRead(2))        // calibrate arm

 {

   digitalWrite(6,HIGH);

   delay(10);

 }

 delay(50);

 digitalWrite(6,LOW);

 

 while(digitalRead(1))        // calibrate head

 {

   digitalWrite(5,HIGH);

   delay(10);

 }

 digitalWrite(5,LOW);

 digitalWrite(4,HIGH);

 delay(250);

 digitalWrite(4,LOW);

 delay(10);

 

 while(!digitalRead(3))       // rotate wheel 22.5 degrees into position for next bottle

 {

   digitalWrite(0,HIGH);

   delay(10);

 }

 delay(100);

 digitalWrite(0,LOW);

}

步骤5:测试

我们的测试成功了!我们在第一次尝试中打开了7、8瓶酒哦!

译自:http://www.instructables.com/id/Robot-Bottle-Opener/

本文版权属于研发埠所有,如需转载请注明出处!



鲜花

握手

雷人

路过

鸡蛋

最新评论

阅读次数
4242
回复
0
若内容精彩,赶快告诉您伙伴吧

相关专题

    推荐下载 相关帖子

      热门内容

      360网站安全检测平台