本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页
最热资讯


亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」
我“手工”制作了一个 Arduino 四足机器人,这意味着没有套件或 3D 打印机。它使用“长步”步态行走,看起来非常流畅和自然。虽然它并没有完全按照我想要的方式出现。然而,为了让我的机器人独一无二,我想在地板上创造一种掠过式的运动,类似于船夫水甲虫游泳的方式。在我所有的在线搜索中,我还没有遇到过被编程为以这种方式移动的四足机器人,所以这可能是第一个在线发布的此类机器人(?)。浏览动作是一种笨拙、生涩的移动方式,但非常有趣,而且比走路快得多。此外,它允许我编程一个“抓手模式”,前部让机器人能够拾取小的、重量轻的物体。在下面的第一个视频中,机器人先走,然后沿着地板掠过。在第二个视频中,机器人会走路,然后大约在视频播放到一半时它会抓住垃圾并在掠过之前将其处理掉。
这不是一个初学者项目,所以我假设你有一些关于使用 Arduino 和上传草图等的知识.
第 1 步:设计概述
每条腿由三个部分组成,并带有伺服电机来移动每个部分。这三个马达被命名为:臀部、股骨和胫骨,并为每条腿编号。例如,在第 1 腿的电机编程中,它们被称为“hip1”、“fem1”和“tib1”。每个臀部马达的底部是一个 ½ 英寸的小脚轮,可以在撇脂运动中滚动。
机器人使用两节 9 伏电池。一个为 Arduino Nano 供电,后者又为伺服电机驱动器和遥控接收器供电。另一个电池用于电机,它很轻但提供了足够的电压。
我使用红外线 (IR) 遥控器来控制机器人。它们易于使用,可通过 Internet 上的预编程代码使用,并且具有许多按钮,可以轻松运行机器人的所有不同功能。
第 1 步:获取零件
其他工具/用品:
主体由 3.2 毫米塑料聚苯乙烯制成。我是从多伦多的这家商店买的,但是你不能在他们的网站上搜索。较薄的片材(例如 2 毫米)可能足够硬,但重量不会太大。无论如何,聚苯乙烯很容易切割、钻孔和粘合在一起,所以我推荐它用于这个项目。模型胶将碎片熔化在一起,形成牢固的粘合。
第 2 步:制作每个可容纳两个电机的髋部框架
要制作臀部框架的模板,首先在纸上描绘出伺服电机底部的尺寸。这代表伺服器将滑入的孔(尽管最后您需要使孔比这大一点)。接下来绘制一个更大的矩形,使伺服孔周围至少有 0.5 厘米,但一侧应为 1 厘米。使用这个模板、一把尺子和一个正方形,在聚苯乙烯中标记框架的外边缘。然后用模板用你的刀尖通过模板按压所有角落的位置。重复直到有八个框架,外边缘标记为电机的内部矩形。
如果做直线,切割聚苯乙烯非常容易。用一把尺子或方形尺子,用 X-acto 刀划几下,在聚苯乙烯上划出划痕。它不需要太深。您应该能够用手弯曲纸张,它会沿着刻痕线折断。它并不总是一种精确的塑料切割方式,但它既快速又简单。对于太小而无法用手握住的零件,请使用尖嘴钳夹住,但用纸盖住塑料,以免钳子留下痕迹。切割后,用刀或砂纸修整边缘,使切割过程留下的凹凸不平。
因为伺服孔在塑料内,所以不能刻痕和折断。因此,对于每个伺服孔,使用尺子和刀在伺服孔内约 2 毫米处标出第二个较小的内部矩形。使用这个双矩形,外部矩形将大致是完成的伺服孔的尺寸,而较小的内部矩形为制作穿孔提供了有用的物理指南。这是通过使用带有 2 毫米钻头的钻头完成的,并在不损坏外部矩形的情况下沿着内部矩形打很多孔。然后按x-acto刀切割穿孔以获得一个粗糙的孔。用刀削掉矩形的内部,将其加宽,直到它大到足以让伺服器滑入而不会损坏电线。这个矩形需要更长一点,以防止在您稍后插入电机时损坏电线。(请注意,有些伺服器的电线从底部边缘而不是从外壳的侧面出来,这样更容易进入。)
要将两个矩形以 90 度放在一起,请在每个矩形的外边缘切一个 0.5 厘米深的槽。它们足够宽 (3.2 毫米) 可以将两个插槽互锁在一起。这最终会将八个部分变成四个臀部框架,但不要将它们粘合起来。确保插槽的深度不要太深,以免堵塞伺服孔。另外,请记住,每个臀部框架都是两个相邻电机的镜像:腿 1 和 4 的股骨电机齿轮面向前方,而两个后股骨伺服机构,腿 2 和 3 的齿轮面向落后。换句话说,腿 1 和 2 分别是腿 4 和 3 的镜像。
当所有的槽都完成后,用刀在角上划痕,然后用尖嘴钳夹住角,然后将它们一个一个地折断,将矩形做成六边形。用刀和锉刀清理边缘。现在将六边形粘合起来形成 4 个臀部框架,仔细检查方向,以便有两对彼此镜像。为了加强髋部框架的接合处,切下“L”形角塑料片并将它们沿着接合处粘上。
胶水干燥后,将电机滑动到位,而不会损坏电线。如果需要,将伺服器的孔变大。然后使用 2 毫米钻头和手持钻头支架标记孔的位置。对髋部框架中的所有 8 个电机重复上述操作,然后用 2 毫米钻头和电钻钻出这些孔。
第 3 步:准备伺服喇叭——钻 2 毫米孔
舵机通常带有许多不同形状的舵机喇叭。使用十字形喇叭将臀部电机连接到主体上。十字形舵机喇叭的两个较长的臂长不一样。使用最长手臂上的倒数第二个孔,以及另一只手臂上的倒数第三个孔。您应该只需要两颗螺钉即可将十字形喇叭连接到主体上。喇叭上的孔对于 M2 螺钉来说太小了,因此用手用 2 毫米钻头将它们加宽。对于每个股骨和胫骨伺服系统,使用单臂喇叭(总共八个)。这些喇叭末端的宽度也可能太窄而无法固定 M2 螺钉,因此请使用倒数第二个孔。
第 4 步:制作胫骨件
在其他项目中,胫骨块的形状有很多变化。这个机器人的顶部宽 2 厘米,长 7 厘米。在胫骨的顶部为伺服切割矩形孔,在两侧和顶端留下 0.5 厘米的聚苯乙烯。使用尺子、刀子和钳子,在胫骨件的锥形底端进行刻划和切割,并去除两个顶角。
第 5 步:制作股骨碎片
股骨与胫骨的宽度相同(2 厘米 x 7 厘米)。用铅笔沿着股骨中心画一条纵向线。这将用于对齐伺服喇叭并标记将喇叭固定到股骨块的螺钉的位置。为此,请在股骨片上标出 tib 和 fem 电机的齿轮中心所在的位置,距每端约 1 厘米。用小钻头打一个孔,然后用更大的钻头逐渐加宽这些孔,直到可以插入喇叭的圆形部分。重复使每个股骨块都有两个孔。然后一个一个地将喇叭对齐到位,并用 2 毫米钻头穿过喇叭标记在聚苯乙烯塑料上钻孔的位置。取下喇叭并钻出 2 毫米的孔。稍后,当需要安装时,一个 M2 螺丝会穿过每个喇叭。
第6步:制作主体
主体是一块 3.2 毫米的聚苯乙烯,尺寸为 9 厘米 x 12 厘米。身体前后比宽。要标记并钻出用于安装髋关节电机的孔,请将髋关节电机放入髋部框架和不带螺钉的十字形伺服系统中。髋部电机放置在臀部框架中,使前部电机的齿轮不在主体前部,后部髋部电机的齿轮不在后面。两个前股骨马达朝前,两个后股骨马达朝后。此外,确保伺服喇叭的方向一致——前电机(1 和 4)的最长臂指向后,后电机(2 和 3)指向前。确保这三个对齐点后,将臀部框架的边缘与主体的边缘对齐。例如,固定电机hip1的框架的前左侧与主体的左前角对齐。(臀部框架的前部和左侧与主体的前部和左侧)。将伺服喇叭放在正确的方向上,将其牢固地靠在主体上,然后卸下伺服和臀部部件,使喇叭靠在机器人主体的下侧就位。标记 M2 安装螺钉所在的两个扩大孔的位置。更换喇叭并三重检查 1) 定位喇叭到电机,2) 臀部框架的方向,3) 臀部与主体边缘对齐,以及 4) 钻孔前的孔位置用 2 毫米钻头钻孔。在顶面上,您可以使用更大的钻头小心地加宽开口,以便能够埋头钻螺钉。
第 7 步:组装腿
将所有舵机居中至 90 度。您可以在 Arduino IDE 的伺服示例草图中修改扫描草图。
现在是有趣的部分!使用四个 M2 螺钉和螺母将两个电机连接到臀部框架。记住臀部框架中臀部马达的方向,并将 fem 马达的方向与齿轮靠近底部。然后使用伺服随附的安装螺钉将十字形伺服喇叭连接到臀部电机。这是通过喇叭的顶部中心拧入电机的齿轮。然后将臀部电机安装到主体上,将臀部框架的边缘与主体边缘对齐,并用尖嘴钳夹住 M2 螺母,同时从主体顶部拧紧 M2 螺钉。股骨片应垂直安装,平行于主体。将短的单杠杆角压入股骨块,并用 M2 螺钉和螺母连接。我为 tib 电机的喇叭使用了 6 毫米 M2 螺钉,因为蓝色电机在喇叭下方的间隙较小,并且固定喇叭的 10 毫米螺钉的末端会接触到伺服的外壳。然后将胫骨电机安装到胫骨件上,使齿轮更靠近顶部。现在股骨上的角可以安装在股骨和胫骨电机上,这应该完成腿!当机器人掠过时,在每条腿的末端放置一个小的橡胶乐高轮胎将有助于牵引。
第 8 步:接线组件
将 Nano 插入面包板。我将跳线的公针连接到 9V 电池连接器的引线末端。这样,来自 9V 电池的红色引线和黑色引线分别连接到 Nano 的“Vin”和“GND”引脚。PWM 电机驱动器的连接方式如图表和 Fritzing 接线图所示。所有跳线的连接如下:
GND .......................GND SCL ...................... ......A5 SDA ......................A4 VCC ...................... ....5V |
电机连接到 PWM/伺服驱动器,确保来自伺服系统的 3 根电线正确定向到电机驱动器上的每排 3 个引脚。驱动器上伺服器的引脚标有 5V、接地 (GND) 和数据线。舵机的线一般为红色为5V,黑色或棕色为地线,橙色为数据线。在这个方向上,电机连接到 PWM/伺服驱动器,如下所示:
hip1 .....................0 fem1 ..................... ....1 tib1 .....................2 hip2 ..... .....4 hip3 ....................8 fem3 ... ......................9 tib3 ...................... 10 hip4 .....................12 fem4 ..................... ...13 tib4 ...................................14 |
注:3、7 和 11 未使用。
第二块 9V 电池通过连接线连接到 PWM 电机驱动器的螺丝端子,红色引线接正极,黑色引线接负极。
红外传感器通过跳线通过面包板连接到 Nano,如下所示:
Vcc ....................5V GND ........ ......GND 数据.......D12 |
发光二极管 (LED) 用于指示机器人何时等待另一个命令。因为步行动作需要一些时间。这很有帮助,因为如果您过早按下遥控器,机器人将错过命令。如果您连续多次按下,遥控器会发出机器人未编程的“重复”命令。LED 连接到面包板,LED 的阳极(长引线)连接到 Nano 的引脚 D13。1 kOhm 电阻器将阴极连接到 Nano 的地 (GND)。
第 9 步:将组件连接到主体
将带有 Nano、PWM 伺服驱动器、IR 接收器和两块电池的面包板放在主体的顶部中央,以确保东西居中并有足够的空间。
带有 Nano 的面包板位于机器人后部的中央。放置 Nano 时,请注意,如果您需要修改编程,则需要将 mini USB 电缆插入 Nano,同时腿仍然可以移动。一旦您对位置感到满意,您就必须能够安装面包板。面包板底部有一个双面胶垫,但如果你以后想移动它,你可以用螺丝代替。面包板有两个螺丝孔,但 10 毫米 M2 螺丝不够长,无法穿过面包板和 3.2 毫米聚苯乙烯。因此,在面包板就位后,使用 2 毫米的小钻头标记孔的位置。这意味着切割双面胶带并切入机器人的主体。取下面包板并完成两个 2mm 孔的钻孔。然后从机身底部取出 10 毫米 M2 螺丝,并在顶部用螺母固定。两个螺丝的轴从主体上伸出。将面包板放在这些螺丝上,以防止面包板四处滑动,但可以轻松地将面包板抬离原位。
PWM 伺服驱动器集中在机器人的前部。标记钻孔的位置。伺服驱动器用两个 M3 螺钉和螺母固定到位。对于每个螺钉,您可以在主体和伺服驱动器之间放一个螺母,以留出一点空间。
用胶水粘上四段“L”形聚苯乙烯,将电池固定到位,以免它们四处滑动。
红外接收器放置在左后方,靠近第二条腿,并用两个 6 毫米 M2 螺钉固定到位。请记住,红外接收器必须对遥控器“可见”,因此任何东西都不能阻挡接收器的视线。两个 M2 螺母可用作垫片,两个螺母可用作固定 IR 接收器。
第 10 步:将脚轮连接到臀部伺服器的底部
为了连接 1/2 英寸脚轮,我们构建了一个盒子以适合每个髋部伺服器的底部。盒子的底部是一块 3.2mm 的聚苯乙烯,大小与臀部舵机底部一样大。盒子的三 (3) 个侧面是“L”形角塑料片。这些位于 3.2 毫米的部件上,水平边的角以 45 度角切割,以形成盒子的紧角。(在图片中,您可以看到我在将它们粘在一起之前将要粘合的表面粗糙化,但这不是必需的,因为胶水会将表面熔化在一起。)此时,将脚轮放在盒子底部的中心并标记通过底部钻孔进入盒子的内部。在盒子中使用更大的钻头,以便能够埋头钻 M2 螺钉的头部。埋头孔将使伺服器尽可能深地放置在盒子中。盒子的第四面是一块较薄的聚苯乙烯,从盒子的侧面伸出约 0.5 厘米,制成一个标签。它比其他三个边高,因为这个凸片用于将螺钉安装到臀部框架的垂直部分。将一小块 3.2 毫米聚苯乙烯放在此标签上以紧密贴合。切割并粘合四小块“L”形角塑料以加固盒子。然后使用两个 6 毫米 M2 螺钉从盒子内部穿过舵机的安装孔。使用 M2 螺母和尖嘴钳将脚轮连接到盒子上。最后将盒子滑过伺服器的底部。
第 11 步:代码
有很多关于如何将代码上传到 Arduino(Arduino IDE、YouTube、带有 Arduino 套件等)的教程,所以我不会解释。但是,我将解释代码的一些亮点。代码远非完美,而且很长,所以我不会全部介绍。其中大部分基于 Adafruit 的 PWM/Servo 驱动程序示例草图(链接)和 Dronebot Workshop 的 IR 远程控制教程(链接)。
该代码依赖于三个库作为后台编程。这些是:
远程文件
Wire.h
Adafruit_PWMServoDriver.h
PWMServoDriver 可以从上面的 Adafruit 链接下载。顾名思义,它控制控制伺服电机的伺服驱动器。Wire 库是 Arduino IDE 软件附带的标准库。IRremote 库可以在 Arduino IDE 的库管理器中找到。
代码中的变量之一是在代码顶部附近声明的“togglePosture”。这会跟踪机器人的模式:行走、浏览或抓取。当机器人即将移动时,Nano 会检查 togglePosture 的值以确定当前的模式。如有必要,它将运行适当的函数来改变姿势,然后将togglePosture 变量更新为新模式(skimming=0,或standing=1,或grip/skimming=2,或这些都没有=3)。例如,这允许用户在机器人站立时激活“skimForward”功能。由于机器人不处于浏览模式,togglePosture 不等于0。因此,机器人将调用“skimPosture”函数,使机器人下降到脚轮,然后togglePosture 变量的值将是更新为等于 0,
由于电机的方向,有些电机顺时针转动以向上弯曲或前进,而另一些则逆时针转动以进行相同的运动。因此,例如,对于 tib1 和 tib3,值 100 是完全弯曲的。但是,对于 tib2 和 tib4,600 的值是完全弯曲的。
对于步行,前后运动意味着平滑的协调运动,一次移动多个关节。它需要一系列动作,机器人移动其重量以将重心保持在三条腿下方,同时抬起并缓慢移动第四条腿。为了做到这一点,向前和向后行走函数在代码中被分成几个“for”循环(类似于伺服库的“扫描”示例代码的编程,如果你已经使用过它的话)。例如,向前行走的第一个动作之一是将重心转移到第 4 腿。这有以下代码:
for (tib2 = 400; tib2 < 500; tib2 = tib2 + 1) { if (fem2 < 450) fem2 = fem2 + 1; if (hip3 < 500) hip3 = hip3 + 1; if (tib4 > 300) tib4 = tib4 - 1; if (hip1 > 350) hip1 = hip1 - 1;} pwm.setPWM(0, 0, hip1); pwm.setPWM(5, 0, fem2); pwm.setPWM(8, 0, hip3); pwm.setPWM(14, 0, tib4); pwm.setPWM(6, 0, tib2); delay(delayTime); } |
解释这一行:变量tib2对应第二条腿上胫骨电机的位置,从400开始。这一行还规定只要tib2的值低于500,Nano就会循环遍历11个代码行一遍又一遍,但每次都会将 tib2 值增加 +1。接下来的几行代码是几个“if”语句,其中随着 tib2 的增加,fem1 和 hip3 也会在每次循环中将位置值增加 1,而 tib4 和 hip1 每次都会减少 1。
带有“pwm.setPWM”的行是指示PWM伺服驱动器将电机推进到由“for”和“if”语句指示的新位置的函数。因为每个电机位置只变化1,所以运动只是很小的运动。通过一次增加这些变量一个值,腿将缓慢而平稳地移动。此外,由于 tib2、fem1、hip3、tib4 和 hip1 都受到影响,这五个电机将同时运动,就像机器人同时协调多个关节一样。
delay(delayTime) 行导致 Nano 在此代码的每个循环之前暂停。变量“delayTime”是在整个代码的最开始定义的,就像togglePosture 变量一样。但是,此变量以毫秒为单位表示暂停的持续时间。因此,它控制 Nano 一遍又一遍地执行这部分代码的速度。暂停时间必须足够短,以免电机在每次增量运动之间停止,否则它会像模拟手表上的秒针一样移动。通过在代码段的每个循环之间使用这个暂停,行走会故意变慢和平滑。
当 tib2 达到 500 时,“for”循环将结束,Nano 将转到下一段代码(此处未显示),这将使用不同的电机协调一组不同的运动。
与步行相比,撇去和抓握动作的代码要快得多,因此动作不会像步行那样在“for”循环中增加。例如,在“skimForward”函数的开头附近是这段代码的摘录:
fem2 = 330,fem3 = 390;// 股骨向上 pwm.setPWM(5, 0, fem2); pwm.setPWM(9, 0, fem3); if(togglePosture == 0){ fem1 = 375; pwm.setPWM(1, 0, fem1); fem4 = 300; pwm.setPWM(13, 0, fem4); } |
延迟(10);
在这段代码中, fem2 和 fem3 的值都改变了,这样两条腿就会抬起。两条 pwm.setPWM 线对电机执行这两个运动,没有增加运动,只有一个命令,所以它会突然而快速。这段代码中的“if”语句是为了检查机器人是否处于“skim”模式,在这种情况下,接下来的两行(大括号{}之间)将被执行,这也会带来前腿,腿1和4 ,也起来。如果togglePosture 变量不为零,则机器人将处于抓手模式,因此两条前腿不用于移动,因此此处不会移动腿1 和4。delay(10) 函数将机器人延迟 10 毫秒,让电机有足够的时间到达新位置。
void loop() |
如果红外传感器接收到来自遥控器的红外信号,这条线路将调用 Nano 解码来自遥控器的红外信号。
在“val=results.value”行中,IR 信号的值记录在名为“val”的变量中。然后在 switch 函数中使用这个变量,该函数将“val”与不同的情况进行比较,每个情况都对应于一个移动函数。Nano 将运行该移动函数,然后在代码中返回到循环部分的开头以解码下一个 IR 信号。
您可以在此处下载当前版本的代码:
Robot_WalkSkimGrip_July2021.ino
第 12 步:使用红外遥控器控制机器人
实际遥控器可以在这个教学的第一张图片中看到。遥控器的按钮将使 Nano 分别运行代码中的单个功能(请参阅遥控器和功能图)。按钮和函数名称(带引号)如下:
ON/Off = “ Pause ” 这会导致机器人下降到脚轮并收回所有 4 条腿。用于卸载电机,从而卸载电池
Vol+ = “ forward ” 如果还没有这样做,机器人将站立并向前走。这是腿部的一系列平滑运动。
Rev << = “ left ” 如果还没有这样做,机器人将站立并向左转。这是腿的快速洗牌
Play = “ stand ” 如果还没有这样做,机器人将站立
FastForward >> = “ right ” 如果机器人还没有站立,则机器人将站立并向右转。这是腿的快速洗牌
Vol- = “ back ” 如果机器人不这样做,机器人会站起来,然后向后走。这是腿部的一系列平滑运动。
Arrow up = “ GripUp ” 当机器人处于抓手模式时,机器人会抬高前腿的水平
Arrow down = “ GripDown ” 当机器人处于抓手模式时,机器人会降低前腿的水平
0 =“ gripTogether ”当机器人处于抓手模式时,机器人会将前腿拉近
EQ = “ GripPosture ” 机器人将采取抓手模式的姿势。前腿收起,后腿向两侧伸出
ST/REPT = “ GripTogether ” 因为当机器人处于抓手模式时,机器人会将腿拉得更远
2 = “ skimForward ” 机器人将向前撇去,用腿向外推。这是一个快速推动,可以在略读模式或抓手模式下完成
4 =“ skimLeft ”机器人将向左撇去,双腿向外。这是一个快速推动,可以在略读模式或抓手模式下完成
5 =“ skim ”机器人将采取撇渣器模式姿势(如果尚未这样做)。所有四条腿都将伸向两侧
6 = “ skimRight ” 机器人将向右撇去,双腿向外。这是一个快速推动,可以在略读模式或抓手模式下完成
8 = “ skimBack ” 机器人将向后掠过,将自己的腿向外推。这是一个快速推动,可以在略读模式或抓手模式下完成
以上就是项目的全部内容了,希望您能够喜欢!
利用树莓派+Python语言制作一部机器人就是如此简单!
2017-10-27
树莓派打造的多玩法机械臂 还能解锁更多姿势
2017-02-24
Kiva机器人如何做到如此可靠?我来拆给你看!
2018-09-14
9款创意Arduino套件盘点
2015-12-23
一种非动力可穿戴设备可以让你成为更好的跑步者
2018-10-25
如何将按钮与 Arduino 连接起?
2021-07-13
基于树莓派和Arduino打造的PLC EtherCAT电路设计
2020-02-25
2020年最新的基于树莓派4B打造的TOP10经典项目合集
2020-03-05
入门指南:TFT彩色显示屏,带Arduino和ESP8266
2020-04-23
Arduino最小系统板设计PCB板及原理图
2020-01-17
讨论