Hackaday.io上的树莓派项目-开放式自主家用机器人
收藏
分享
脑图
 Hackaday.io上的树莓派项目-开放式自主家用机器人
关于项目
项目描述:我是那种会竭尽全力避免无聊任务的人,尽管事实上,避免这些任务所花费的工作大大超过了任务本身的工作。大多数时候,我试图通过聪明来避免这些任务。我能够想到的最乏味的任务之一是吸尘我的公寓,因此我愿意投入大量的工作工程系统,为我做这项工作。虽然买 Roomba 要简单得多,但它似乎不应该花费数百美元购买绑在一些电机上的真空。相反,我会尝试完成一些类似的功能与廉价硬件。此外,由于目前市场上有机器人需要为每个目标功能(吸尘、拖地等)购买单独的机器人,因此我将努力设计一个模块化系统,以降低成本和减少不同机器人之间的冗余。
项目图片
1 X 一组 3D 打印导航机箱部件
5 X HC-SR04 超声波距离传感器
2 X 黄色机器人电机
1 X TCS3200 彩色传感器
1 X 一组 3D 打印真空模块部件
1 X 一组 3D 打印的 Mop 模块零件
在我上一篇文章中,我描述了 OpenADR 的第一个模块的开头,即真空。不过,随着哈卡迪奖竞赛自动化回合本周末的结束,我决定在完善真空模块之前,开始开发第二个模块,一个拖把。机器人吸尘器市场现在看起来相当拥挤,大多数设计难题是由主要制造商解决的。另一方面, 机器人拖把远不常见, 唯一的主要拖把是 iRobot 的Scooba和Braava系列。在这一点上,这两个机器人似乎都几乎没有市场渗透率,所以陪审团仍然对消费者在机器人拖把中想要什么。
我已经思考了一段时间这个模块的设计了。真空模块的设计非常简单;它所需的只是一个滚筒来干扰污垢和风扇吸进去。相比之下,拖把模块会复杂得多。鉴于市场仍然如此新, 我不打算为拖把制定任何严格的设计目标, 就像我用真空一样。相反,我将提出一些基本的设计想法,我的第一个实现。
我设想的基本设计如下:水/清洁溶液从水箱泵到地板上,在那里它与污垢和污垢混合。然后用吸水布擦洗和擦拭这种脏污液体。我知道这听起来可能相当神秘,但我会描述我的计划,这个过程的每个阶段下面。
水库
Scooba 450 和 Braava Jet 都有储罐(分别是 750mL 和 150mL),用于存储清洁溶液或水来润湿地板。将坦克添加到拖把模块的最简单方法是将一个储罐集成到模块的 3D 打印设计中,我在前面的一篇文章中描述了。然而,这是有点风险,因为3D打印部分可能很难使水紧(正如我与可持续雕塑的斗争证明)。将机器人的电子设备和电池放在水库附近,可能会带来灾难性的后果。一个更安全的赌注是使用预制容器,甚至切割塑料瓶。
然而,作为一个乐观主义者,我宁愿冒险在3D打印坦克利用它将提供的可定制性和集成性。就雕塑而言,我想保持墙壁的薄和透明。在这种情况下,我不会有如此严格的限制,可以使用更有效的密封剂来防水的坦克。为了安全起见,我可以在机箱底部(即水箱周围)的附近包括小孔,以便水从机器人中滴出,然后它才能到达任何电子设备。
水的分配
下一个设计决策是确定如何实际将水从水箱中取水到地板上。当我寻找一个容易采购的水泵,我找不到一个便宜的,是小到足以很好地适合在底盘。幸运的是, 有一些绝对惊人的, 可定制的, 3D打印泵的 Thingiverse,我可以使用, 而不是!
令人不安的迪尔特
当涉及到机器人拖把时,最大的抱怨似乎是在擦洗污垢时缺乏有效性,尤其是瓷砖之间的灌浆中,污垢被困在了。Braava 使用振动布垫进行擦洗,而 Scooba 似乎使用 Roomba 的拉丝辊之一。根据用户的评论,这两个选项似乎都缺乏;最好的选择是使用专为水一起使用的磨砂刷(而不是 Roomba 的,在吸尘过程中用于干扰地毯纤维)。然而,与真空模块一样,我很难找到刷毛或刷子来集成到我的设计中。不幸的是,在这种情况下,使用由柔性灯丝(即我的真空模块解决方案)做的滚筒不是一个选项,因为它不能像普通拖把那样具有同样的洗涤功效。
对于我的第一个版本,我只打算用超微纤维清洁布。这与 Braava 上的清洁垫不同,具有可清洗和可重复使用的益处,但我仍然可以通过将清洁布安装到旋转马达来实现一些擦洗功能。
水回收
将脏水放在地板上的拖把不是非常有效的拖把,所以需要某种水和污垢回收。Scooba 使用真空和挤压器将地板上的水吸回废水池中。另一方面,Braava 的清洁垫提供双重职责,同时充当洗涤器和海绵,以吸收脏水。这两个选项似乎都非常有效,但 Braava 的方法似乎是第一次修订的更容易实现。这也是传统拖把使用的方法。我决定用于擦洗的超纤维布也可以吸收地板上的水和污垢。
然而,重要的是要注意,使用吸收法回收水会限制机器人的水容量和可以清洁的地板数量。拖把可以有一个10L的储水罐,但如果布只能吸收100mL的,仍将有9.9L的水留在地板上。Braava 只有 150mL 的油箱和 150 平方英尺。其清洁垫只能容纳 150mL 的水。我必须对使用的超纤维布做一些测试,以确定拖把模块的最大容量。
现在,真空模块大部分组装,它的时间进行第一次测试!我基本上只是想确保风扇产生足够的吸力来吸入污垢和碎屑。以下是模块到目前为止的外观:
正如我在上一篇文章中提到的,我还没有为真空模块设计盖子,因为我想在顶部使用清晰的涂层。使垃圾箱内部可见,将更容易测试和查看里面发生了什么。现在,我已经用胶带封住了垃圾箱的顶部,用胶带贴在一个切开的Ziploc包上。
鼓风机风扇的额定电压为 12V,所以我有它直接连接到我的 12V 板凳电源使用鳄鱼夹。
测试本身是在标准狗毛上进行的(因为我有很多它躺在周围)。我不得不将头发直接输入到垃圾箱输入中,因为真空模块尚未连接到主机器人机箱,因此没有直接的气流通道通过滚轮组件并进入垃圾箱。我正在考虑将滚轮组件直接集成到真空体中,以便整个模块是自成一体的,无需将其连接到主机箱即可测试通过真空的灰尘的完整路径。
因此,第一次测试证明适度成功!头发确实稍微卡住了,但主要可以归因于灵活的Ziploc袋材料被向下吸,从而减少头发进入垃圾箱的开口高度。对于下一个修订, 我可能会曲线输入空气通道, 所以头发和灰尘不会使任何 90° 转弯。接下来,测试整个事情作为主机箱的一部分!
现在,主机箱的导航功能大部分已启动并运行,我已经过渡到设计适合机箱的模块,并给 OpenADR 提供它所需的所有功能(请参阅我的最后一篇帖子)。我设计和构建的第一个模块是真空,因为它是目前市场上最流行的国内机器人应用。因为这是我第一次迭代真空(而且因为我的妻子对我在地板上积累的灰尘和狗毛的数量感到恼火,"为了测试目的"),我保持设计非常简单:只是滚筒,身体(它加倍作为垃圾箱),和风扇。
滚轮组件
刷组件是真空中最复杂的方面。我选择从零开始设计整个装配体,而不是在eBay上找到一个容易采购的滚筒。我使用相同类型的纯黄色电机,为主底盘上的车轮驱动滚轮。
滚轮本身由两部分组成,即刷子和中心芯。刷子是一个灵活的套筒,印有用于导航底盘轮胎的TPU灯丝,在外面有螺旋状的山脊,以干扰地毯,并敲出灰尘和污垢颗粒松动。中心芯是一个实心圆柱,电机轴的一端有一个孔,另一端有一个突出的小圆柱体,用作轴。一个滚轮安装在模块的两侧,由中间的电机驱动。
要打印真空模块,我必须修改我在上一篇文章中 描述的模块基础设计。我缩短了前部,刷组件将去,使灰尘将被吸进主机箱的后壁和真空模块的垃圾箱前面,并沉积在垃圾箱。
风扇安装
对于风扇,我会使用Sparkfun的松鼠鼓风机。我计划最终建立一个风扇的 3D 模型,以便它紧贴在模块中,但与此同时,鼓风机安装只是模块背面的一个洞,鼓风机出口将入并热粘到位。在最终版本中,我将在此安装中包括一个碳过滤器插槽,但鉴于我只是在第一个版本中为鼓风机出口器使用一个孔,我在我的桌面烟气提取器上切出一个额外的碳过滤器,并贴在空气进入鼓风机的位置,以确保灰尘不会进入风扇内部。
鼓风机本身位于垃圾箱顶部,进气口(空气流入的地方)指向向下。一旦鼓风机堵塞,真空将不再吸吸(或者现在会吸?
垃圾箱
模块的其余部分只是作为真空垃圾箱的空位。我最大限度地减小了这个垃圾箱区域内的部件数量,以减少灰尘和碎屑导致问题的风险。将滚轮组件放置在模块前部的箱体外部,则垃圾箱内的唯一部件是鼓风机。
真空模块对垃圾箱的尺寸进行粗略估计,其尺寸可能高达 1.7L!这是假设整个垃圾箱是满的,这可能是不可能的,但仍大大超过0.6L的 Roomba 980 和 0.7L 的 Neato Botvac。
未来改进
在真空模块的下一版本中,我想改进一些内容,因为这真的只是 alpha 测试。首要任务是设计适合鼓风机并提供适当支持的风扇支座。与这同时,过滤器需要一个易于访问的插槽在风扇输入之前滑入(与我现在使用的胶带相反)。
我还想设计和测试几种不同类型的滚轮,以便比较效率。我现在使用的滚筒比我想的要僵硬得多,至少,我需要重新设计它们,以便更加灵活。或者,我可以去的东西更像Roomba 的 Aeroforce 滚轮,它减少了空气通道的横截面面积,从而增加了空气速度。这些滚筒提供更好的吸力和更少的机会,头发被包裹在滚筒周围,但对较厚的地毯效果要小一些。
此外,我需要确保垃圾箱实际上是气密的,这样灰尘不会进入主机箱或回到地板上。我在垃圾箱的地板上安装螺栓,将单独的碎片连接在一起,但我的垃圾箱墙壁上没有安装,因此我使用胶带在垃圾箱顶部将碎片固定在一起。由于垃圾箱中的任何孔都为其内装物泄漏到地板上提供了机会,因此确保我这里有一个好的密封是至关重要的。将来,我想重新设计这些接缝,以便它们密封更安全,可能通过使用重叠的侧壁。
最后,真空模块需要盖。对于当前版本,我故意将盖子放在外,以便在测试时查看所有内容。我计划为此这个版本添加一个透明的覆盖物 (所以灰尘不会到处飞!在最终版本中,盖子需要提供良好的密封和易于拆卸,以便可以清空垃圾箱。
虽然我一直主要在 OpenADR 的真空组件上工作,但我的最终目标是让这个模块成为机器人可以操作的几个可互换模块之一。通过使整个东西模块化,我可以尝试一系列功能,而不必重新创建处理运动和导航的基本硬件(即硬的东西!今天,我想分享更多关于我是如何构建此功能的,尽管我现在只处理一个模块。
OpenADR 模块将插入我在主机箱中留下的开口。模块将滑入机箱的缺失部分(如上图所示),使机器人在完全组装时成为圆。将插入模块的插槽是中心 15o x 150 mm 的正方形和整个机器人 300 mm 直径圆的四分之一。下图可能会让您更好地了解我描述的。
虽然每个模块将有所不同,但基础设计将是相同的。这样,无论您需要使用哪个模块(例如,吸尘、拖地、除尘),一切都应该很好地适合同一主机箱,只需最少的修改。
为了协助设计单独的模块,我创建了一个适合主机箱的基准 OpenSCAD 模型。模型被分成四块,使打印零件更容易,我包括螺栓安装,将它们连接在一起。该模型还包括轨道,允许模块滑入到位的山脊,我已经添加到主机箱的相邻墙壁。我将构建此模型来创建每个模块,以确保一切易于互换且顺利拟合(尤其是我的新灯丝!
OpenADR 是模块化的伟大的事情是,我始终可以添加新的模块的基础上,什么将是有用的那些使用它。这就是我需要你帮助的地方。您希望看到什么功能?地板上是否有可以自动使用的清洁用品或技术?
从工作周期的结束到上周的假期,我没有像往常那样的时间在 OpenADR 上工作。在 3D 打印零件方面,我也遇到了一个很大的障碍,并在这个过程中学到了一个有关 3D 打印的一课:投资优质灯丝。
几周前, 当我用完了我使用的黑色,解放军灯丝,并切换到白色的阿戈斯解放军,因为成本较低。我开始注意到我的挤出机发出令人担忧的噪音一小会儿,但没有立即使连接到新的,更便宜的灯丝。挤出机电机开始跳过,并发出咔嗒声,因为它试图喂塑料失败。
打印层布局不均匀,甚至缺少的地方。上图是使用此灯丝打印的导航模块侧壁之一的图片。假设打印机出了问题,我开始在线搜索,并尝试用挤出机调试问题。我拧紧它,松开它,改变了热端温度,并增加了一个冷却风扇到电机,但我仍然没有成功打印,即使在10毫米/s(打印机器人简单金属额定80mm/s)。最后,我点了一些新的灯丝,瞧,问题消失了!我又回到了以正常速度打印零件。
上面是印有新灯丝的侧壁。使用与白色 PLA 大致相同的设置进行打印时,图层线几乎不可见。所以吸取教训,质量好的灯丝很重要!我试着用便宜的灯丝, 付了钱。我已经落后了一点,我想在 OpenADR,但意外的延迟都是设计过程的一部分,我会努力赶上之前,比赛结束周一。
由于以前版本的机箱处于工作状态,我只对版本 0.3 进行了两次更改。第一个变化是一个重大的变化。正如我前面提到的,我仍然对机箱上一个版本的地面间隙有点不满。它在硬木和瓷砖地板上运行良好,但往往被金属过渡条抓住。在我的公寓里的中桩地毯上, 它仍然有些麻烦。
由于我连接电机的方式,增加地面间隙需要对底盘设计进行一些重大更改。在我上次修订的机箱 (0.1 到 0.2), 所有我该怎么做, 以增加离地间隙是降低电机安装, 所以它更接近底盘底座.然而,由于我已经搬下电机几乎尽可能远,它可以去在上一个修订,我没有更多的空间,在这里做同样的事情!或者,我本来可以只是增加车轮的直径,但我担心电机没有足够的扭矩来移动机器人。
剩下的唯一选择是不再直接驱动车轮从电机,而是使用齿轮。使用齿轮可以抵消电机与底盘底座,但仍与车轮保持牢固的连接。另一个好处是,通过牺牲速度来增加车轮的扭矩。
为了设计齿轮,我使用齿轮发生器站点生成一个 16 齿和 8 齿齿轮 DXF 文件。使用 OpenSCAD 的导入函数,我导入了 DXF 文件,然后线性投影它们以创建 3D 齿轮对象。
对于小齿轮,我减去电机轴的3D对象,以便它可以安装在电机。
我将大齿轮与车轮物体合并,以便轻松驱动车轮。我现在使用 2 毫米钢轴安装车轮和齿轮组合。
通过稍微重新定位电机,我能够将齿轮移动到位,以便车轮正确驱动。通过将 8 齿齿轮安装到电机上,将 16 齿齿轮安装到车轮上,车轮现在看到扭矩增加 2 倍,以 0.5 倍的速度运行。此外,由于车轮不再直接安装在电机上,我能够将车轮轴移动得更低。这使得车轮直径从 50mm 减少到 40mm,同时仍然将整体接地从 7.5mm 减小到 15mm。我做了上述计算的力和速度的底盘0.2版,以及新的力和速度的基础上,我从Sparkfun的版本这个电机的电机规格。
底盘的另一部分,不得不改变,以增加地面间隙是脚轮。如上所述,0.2 版在机箱上有一个孔,为直接安装在底盘地板上的半球形脚轮提供空间。然而,将地面间隙翻倍,需要脚轮,通过延伸孔,增加到更大的尺寸。
为了避免这种情况,我让脚轮与底盘完全分开。使用两个安装,一个2毫米钢轴和一个椭圆形轮,脚轮不再需要大孔在底盘和释放一些内部空间。我有点担心,这些新脚轮将无法处理地毯和硬木之间的过渡,由于其较小的尺寸,但我总是可以恢复使用底盘上的孔,使他们大得多。
我对机箱的第二个更改是次要的。在我看来,与导航机箱一起最终的模块将是即插即用,这意味着无需拧或拧开它们只是为了交换模块。为了做到这一点,我知道我需要某种安装方法固有的3D设计的机箱。
我预计某种 USB 或 0.1" 头连接器用于保持模块就位和电气连接的方法,但为了帮助引导模块进入,我在机箱内壁的左侧和右侧添加了导轨。这些导轨将便于正确对齐模块,还可以保持模块垂直稳定。
原理
以上是四芯LiFePO4充电器的最终电路。出于安全、测试和电源考虑,我调整了原始设计的某些部分。在主电压输出后添加了二极管,以便能够并行多个电池组。另一件事是,我使用的是通用PNP和功率电阻器,以便设计的最大充电电流可以根据需要进行调整。由于电池的充电电流松散地基于其容量(参见C额定值),因此在理论上可以使用任何电池尺寸。我也计划使用 100mA 的充电电流, 我第一次这样做。这样做可以让电池充电速度变慢,并在测试充电电路时给我更多的分辨率。
Bom
我从此设计中使用的组件如下所示:
4x 2N3906 PNP 晶体管 – 来自SparkFun 离散半导体套件
1x 功率二极管 – 来自SparkFun 离散半导体套件
1x LM317 电压调节器 – 来自SparkFun 离散半导体套件
4x TL431 电压参考 — 来自Sparkfun
4x 10 kohm 通过孔电阻器, 躺在我的办公室周围
4x 100 欧姆通过孔电阻器, 躺在我的办公室周围
4x 修剪电位计 – 来自Sparkfun
6x 螺钉端子 – 来自Sparkfun
6x 各种电容器 – 来自Sparkfun 电容器套件
1x 8 欧姆功率电阻器 – 来自Sparkfun 电源电阻器套件
1x PCB + 从OSH 公园
最后需要注意的是,为了调试,我特意选择使用孔部分。多余的空间和外露的连接器使得使用鳄鱼夹测量电压和信号更加容易,确保一切正常。
步骤
焊接、组装和测试!
由于已经为LiFePO4电池充电器设计了充电电路,我必须想出一种方法来模拟电池,以便模拟电路。电池真的只是一个具有一些内部电阻的电压源,因此为了我的模拟,我只是将一个.02欧姆电阻器与电压源一起放置。
实事求是地说,我的电压源大致遵循了LiFePO4电池的充电电压曲线。为了彻底,我也稍微改变四个单元的电压,使它们总是稍微失去平衡。这更好地反映了现实世界的条件,因为细胞永远不会相同,电路需要能够正确平衡细胞。
对于四个重复电池电路中,我通过电池(使用 R2、R3、R10 和 R14)、通过 TL431(使用 R4、R7、R11 和 R15)的电流、通过 PNP 晶体管(使用 Q1、Q2、Q3 和 Q4)测量电流,以及通过每个电池的电压。
结果显示,四个电路中每个电路的电压曲线几乎完全相同。恒定电流电路的充电电压跟随电池的电压,通过每个单元保持一致的1A电流。一旦每个电池达到所需的 3.65V,电流会迅速变小并保持该电压,不断将顶部电流向每个电池流。然后打开晶体管,将多余的电流路由到电池周围,正确平衡每个电池。
步骤
总的来说,一切看起来都是正确的,并且正如预期的那样运行,因此接下来是把这一切都放在PCB上。我的下一个帖子将显示充电器的最终原理图和电路板布局。
评论
0 / 100
查看更多
Sen
2020-08-25
720
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号