用杯子做垃圾分类(熊工巧匠不会垃圾分类)
分享一篇捣鼓车间李嘉诚老师(没错,就是首富)写的瓦力机器人制作教程。
瓦力机器人 WALL-E(Waste Allocation Load Lifter Earth Class)的首次出场来自于 2008 年上映的电影《机器人总动员》,全片讲述了人类因为垃圾问题而乘坐飞船离开地球几百年后,地球上只剩下了最后一台机器人,每天的工作是将垃圾压缩成方块堆叠起来,它的性格像一个小男孩一样,喜欢收集各式各样有意思的小玩意,喜欢老歌舞片,向往荧幕中的爱情,并且仿佛拥有一定的思维能力,因为它是地球仅存的一台机器人,所以也只能自己为自己更换受损的零件,机器人世间最孤独的事情莫过于此吧!后来 WALL-E 遇到了返回地球探测绿色植物的机器人 EVE 伊娃(Extraterrestrial Vegetation Evaluator),展开了一段冒险、搞笑与爱情的故事。
随着我们生活质量的不断提高,产生垃圾的速度也越来越快,如果不采取相应的措施,有一天我们生活的地球也一定会像电影《机器人总动员》中描述的那样,无法住人。所以自 2019 年 7 月 1 日起,一些大城市已经开始执行全面的垃圾分类行动,更有网友在网上分享了一些关于垃圾分类的搞笑表情包。
待到人类需要瓦力机器人来帮助我们打扫一团乱满是垃圾的地球时,我们人类能否发展出电影中高科技的飞船仍是未知数,人类目前还没有退路,能与地球和平共处,保护我们的生存环境才是我们当下该做的事情!
# 效果预览
说起来,这个瓦力机器人是去年 8 月份的作品,曾在去年 9 月份的淘宝造物节上吸引了很多人的目光,这只能卖萌的瓦力机器人在杭州西湖边的淘宝造物节上大放光彩。具体运行视频以及外观照片如下。
先来张美照!
这个是去年捣鼓车间参加杭州西湖边淘宝造物节时的视频,让我们一起来看看这个萌萌的瓦力机器人吧!
是不是很可爱很诱人,忍不住想要自己做一个了?
别急,接下来我就开始教大家如何制作一个可爱的垃圾收集机器人 WALL-E,不乱丢垃圾,从瓦力机器人做起!我将从外形设计、整体制作、电路连接、程序编写、运行效果等几个方面对该作品进行详细的说明。想要得到该 WALL-E 机器人的全部模型、图纸、程序,请至文末获取下载链接。
# 外形设计
众所周知,一个瓦力机器人需要两个漂亮的履带轮,以及望远镜式的头部,还有一个略微突出的后背。结合电影中的故事背景,除了在瓦力机器人中安装电路部分,我还会在前方设计一定的空间来让该瓦力机器人可以收集一些东西,并且两只手臂都需要可以运动,此处设计参照了“吃硬币的怪兽”作品。
先来看一下完成的实物斜视图:
瓦力机器人的身体部分,是采用激光切割木板进行搭建的,头部采用 3D 打印进行制作,通过胶水与身体进行连接。动力部分,使用了两个直流减速电机与履带相邻控制瓦力的行走,再通过两个舵机连接瓦力的左右手臂,使之可以向你挥手。在它的前方盖板下面,还安装有一个舵机,可以用来支撑起盖板,让我们往瓦力的肚子中丢一些干垃圾或者小玩意。
头部三维模型来自 Thingiverse,这个图纸原为全套的瓦力打印图纸,我选用了其中的 3 个构成瓦力头部的模型,另外尺寸是不对的,如果需要打印,需要读者在导入打印机切片软件时适当修改比例以改变头部的大小。我会在文末给出头部的 STL 打印文件,如果需要全套打印文件欢迎访问原地址:thingiverse/thing:1350079
履带轮部分,我将采用某宝上一家玩具配件店铺的四驱车履带轮,形状大小都与想要制作的瓦力机器人契合,故决定购买现成的履带轮进行改装,买回来以后发现该履带轮的轴是内正六边形,而 TT 马达是一个槽型,于是我们需要在这个连接的位置设计一个尺寸合适的联轴器。
其余部分结构都是通过 SolidWorks 软件绘制而成的。
全部零件画好以后,新建一个装配图,将所有的零件插入并确定每个零件之间的配合关系,将所有零件都配合起来的好处是可以直观的看到装配后的效果,在一些木板带有角度的安装时,计算尺寸是很麻烦的,如果能够直观的看到装配起来的效果,就可以根据需求进行对每个零件的编辑, SolidWorks 的一个好处是,如果装配图在预览编辑,这时我们去修改单独的零件时,装配图就会自动的更新每个零件的最新状态,对于绘制三维图纸是一个很好用的点。
当修改好所有的零件以后,我们新建一张工程图,也就是机械制图中一般用来画三视图的图纸。我们不需要绘制每个零件的三维图,我们只需要把所有零件按照 1:1 的比例全部添加到工程图内,注意需要我们每个激光切割零件的俯视图。SolidWorks 可以将工程图另存为 AI 格式。
绘制好工程图以后,我们就可以将另存为 AI 格式图纸使用 Adobe Illustrator 矢量图软件进行打开编辑了,一般操作是需要删掉机械工程图内的图纸边框与每个孔和零件的中位线,这些线对于激光切割是不需要的。我们还需要在 AI 软件中对全部的零件进行一定的排版,方便我们后续的切割。
我会在文末将三维模型和激光切割图纸分享给大家,欢迎大家在我的基础上进行 Update!
接下来就是对图纸进行加工了!如果没有激光切割机也可以选择某宝代加工。
# 电路连接
首先,根据上述瓦力机器人的功能,我们共需要控制三个舵机、两个直流减速电机。直流减速电机需要一块直流电机驱动模块进行驱动。另外,让瓦力自主运动并不是一个好的选择,所以我们选择了遥控的方式进行对瓦力机器人进行控制,可以选择通讯的方式有蓝牙、WiFi、NRF 等,最终我选择了更为方便的 PS2 游戏手柄模块,对于方向的控制摇杆堪称完美,而且我们还不需要手工制作一个瓦力机器人遥控器了,岂不美哉!
硬件电路图如图所示:
如果手头没有 PS2 接收端的转接板,可以根据下面这张图进行接线。
# 整体组装
首先准备所有的零件,清点瓦力机器人需要的激光切割的零件,接下来我们逐步将所有部分进行组装。
组装瓦力机器人的后背部分,我们后续要将电路全部藏在瓦力的身体里,故后背部分设计了一个可以开合的结构。
组装瓦力机器人的手臂以及小手,我们通过多层木板叠加与螺丝作为旋转轴的方式进行安装。
准备好身体部分的零件,对瓦力机器人身体部分进行组装。
我们将联轴器、履带轮进行安装,并测试能否安装在瓦力机器人的底板上。组装好的身体部分如图所示,并使用热熔胶将两个电机也固定在底板上,电机位置需要通过履带轮的两个固定孔和旋转轴进行确定。
最后,我们将手臂连接好舵机安装在身体的两侧,把两个 TT 马达也安装在底板上,我们完成了大部分关于外形的组装与处理工作,注意先不要全部粘好,等电路全部安装调试好以后再将全部部件安装起来。
# 程序编写
程序很简单,同样会在文末给出,我希望该部分各位读者只要理解编程思路就可以了,大部分编程工作基本是在调试电机,我们只需要在 PS2 遥控器给出的例程里,根据我们按下不同的按键执行对应的机器人运动以及控制舵机就可以了。需要注意的一点就是记得设置 stop() 函数让机器人停下来。
代码说明:通过 PS2 手柄接收模块,收到按键或摇杆信号后控制瓦力机器人电机以及舵机,执行运动函数和瓦力机器人手臂运动。按照教程连接好线以后上传程序,可以根据按下的按键,串口返回不同的值来确定程序运行在什么位置,然后通过找到对应的位置增加一定的控制函数,全部按键均已保留,方便大家进行二次开发!
下面贴出一部分代码,方便大家理解。首先是库函数的调用以及对管脚的定义。
1#include <PS2X_lib.h> //for v1.6 2#include <Servo.h> //Servo 3 4Servo servo_3; //定义舵机管脚 5Servo servo_5; 6Servo servo_6; 7 8#define PS2_DAT A0 //定义PS2接收管脚 9#define PS2_CMD A1 // 10#define PS2_SEL A2 // 11#define PS2_CLK A3 //
左右滑动查看完整代码
然后分别建立了控制瓦力运动的一些函数,这里只是简单的前后左右和停止控制。注意这里只做了高低电平的控制,经我测试,我的主控板供电采用了一块 3.7V 锂电池,高低电平让电机全速旋转的速度也还可以接受,如果同学们采用 7.4V 或其他的供电方式,我们可以使用 Arduino 自带的 PWM 功能,实现对电机的调速。
1void advance() { //控制瓦力前进 2 digitalWrite(9,LOW);digitalWrite(11,HIGH);digitalWrite(10,HIGH);digitalWrite(12,LOW);delay(10); 3} 4 5void left() { //左转 6 digitalWrite(9,LOW);digitalWrite(11,HIGH);digitalWrite(10,LOW);digitalWrite(12,HIGH);delay(10); 7} 8 9void back() { //后退 10 digitalWrite(9,HIGH);digitalWrite(11,LOW);digitalWrite(10,LOW);digitalWrite(12,HIGH);delay(10); 11} 12 13void right() { //右转 14 digitalWrite(9,HIGH);digitalWrite(11,LOW);digitalWrite(10,HIGH);digitalWrite(12,LOW);delay(10); 15} 16 17void Stop() { //停止 18 digitalWrite(9,LOW);digitalWrite(10,LOW);digitalWrite(11,LOW);digitalWrite(12,LOW); 19}
左右滑动查看完整代码
最后,将 Arduino 读取到的 PS2 手柄的值进行处理,通过几个判断函数就可以实现对瓦力机器人的前后左右控制了!代码虽然看起来很简单,对于简单的运动控制已经足够了。
1 if(ps2x.Analog(PSS_LY)>160) back(); 2 if(ps2x.Analog(PSS_LY)< 96) advance(); 3 if(ps2x.Analog(PSS_LX)< 96) left(); 4 if(ps2x.Analog(PSS_LX)>160) right(); 5 if(ps2x.Analog(PSS_LY)==127 && ps2x.Analog(PSS_LX)==128) Stop();
左右滑动查看完整代码
那么我分享出的代码只是对于瓦力运动控制的部分,在文末的代码中,还包含了 PS2 手柄模块在 Arduino 库中的全键检测部分,同学们如果使用 PS2 手柄模块对自己的作品进行控制的话,可以通过在代码中增加判断部分,从而增加不同的控制函数,实现多种模式的切换或执行不同的功能。
目前只实现手柄遥控瓦力机器人的运动以及手臂,接下来还会有很多的改进方向,例如可以安装多种传感器让机器人与人进行互动,这部分就交由大家自由发挥了!
上传程序后,我们就可以对瓦力机器人进行调试,调试程序达到自己满意的效果以后,我们就将我们开头提到的 3D 打印头部安装上去了,头部因为打印机的特点,所以分了 3 个部分进行组装,我选用了风格相近的灰色打印料进行打印。
安装好身体内的电路部分以后,我们就可以对瓦力机器人进行调试,调试程序达到自己满意的效果以后,我们就将我们开头提到的 3D 打印头部安装上去了,头部因为打印机的特点,所以分了 3 个部分进行组装,我选用了风格相近的灰色打印料进行打印。
# 技术总结
涉及到的技术如下,硬件方面用到了 Arduino 主控板、以及如何使用电机驱动控制电机、舵机控制、PS2手柄模块的使用等。外观上使用了 SolidWorks 进行建模,小伙伴们使用熟悉的建模软件就可以了!软件编程上会学习到舵机的控制以及读取PS2手柄模块。全部组装的过程中还需要同学们一定的动手能力,有些位置可能需要手工再次进行加工。另外,在建模的过程中我还需要测量履带轮的两个固定位置与主轴的位置,然后来确定激光切割孔位以及底板突出用来固定的尺寸与位置,另外还设计了配套的联轴器。希望同学们不要直接拿来使用,通过现有材料测量建模的过程才是能学习到建模以及培养工程能力的环节,至于做出来的是瓦力还是其他机器人,就看各位同学们的外观设计能力啦!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com