63| 9
|
[项目] 【Arduino 动手做】更安静、更容易构建的球平衡机器人 |
## 用品 工具 尖嘴钳 剪线钳 剥线钳 2.5mm 内六角扳手 烙铁 Exacto 刀 热胶枪 电子学 Teensy 4.1 微控制器 Nema 17 59 Ncm 步进电机(双极) TMC2208 步进电机驱动器 迷你原型板 + 螺丝端子 100uF 电容器 35V 公头和母头引脚 30V 台式电源(或任何 24V 电源) 22 AWG 电线 5V 稳压器 通用零件 8.4“ 4 线电阻式触摸屏 1“ 钢制轴承球 22mm 长 M3 拉杆 M3 x 6mm 螺纹嵌件 M3 x 5mm 支座 M3 x 5mm 螺丝 M3 x 8mm 螺丝 M3 x 10mm 螺丝 M3 x 35mm 螺丝 M3 尼龙锁紧螺母 M4 x 20mm 螺丝 M4 x 25mm 螺丝 M4 尼龙锁紧螺母 ![]() ![]() |
## 第 1 步:3D 打印部件 首先打印零件。共有 9 个不同的部分,如下所示: base_stand base_plate 垫片 (x3) link_#1 (x3) link_#2 (x3) platform_frame retainer_clip (x4) slot_insert_1 (x3 可选) slot_insert_2 (x3 可选) 我用 PLA 细丝打印了所有这些部件。我建议使用以下打印机设置: 20% 填充 自动生成的支撑 PLA(210° 挤出机和 45° 床身) 细丝使用量约为 310 克。打印所有内容累计花费了 25 小时。 3RPS 并联机械手 附件 下载 {{ file.name }}link_#1 (x3).stl下载 下载 {{ file.name }}retainer_clip (x4).stl下载以 3D 形式查看 下载 {{ file.name }}垫片 (x3).stl下载以 3D 形式查看 下载 {{ file.name }}slot_insert_1 (x3).stl下载以 3D 形式查看 下载 {{ file.name }}platform_frame.stl下载以 3D 形式查看 下载 {{ file.name }}base_stand.stl下载以 3D 形式查看 下载 {{ file.name }}slot_insert_2 (x3).stl下载以 3D 形式查看 下载 {{ file.name }}link_#2 (x3).stl下载 下载 {{ file.name }}base_plate.stl下载以 3D 形式查看 ![]() ![]() ![]() ![]() |
## 第 3 步:创建 Circuit 按照原理图构建电路。我为微型微控制器指定了一个原型板,为3步进电机驱动器指定了另一个原型板。我建议使用接头引脚,以便将 teensy 和电机驱动器可拆卸。 将台式电源设置为 24V 或使用备用 24V 电源。 5V 稳压器 teensy 4.1 由 5V 供电。稳压器将电源的 24V 降至 5V。 将电源的正负端子分别连接到 IN+ 和 GND 引脚。一旦您调整稳压器上的电压,VO+ 引脚就会输出 5V。通过转动电位计并使用电压表测量电压来调整此电压。 Teensy 4.1 微控制器 驱动器和电阻式触摸板连接到 teensy 4.1 微控制器。 您必须剪断 teensy 上的 5V 走线。此走线将 USB 5V 连接到微小的 5V。我们将使用 5V 稳压器通过台式电源为 teensy 供电。请参阅图像以查看此跟踪的位置。 TMC2208 步进电机驱动器 电阻式触摸板有 4 个引脚,连接到微小的模拟引脚 A0、A1、A2 和 A3。请参阅图片以查看哪个触摸板引脚连接到哪个模拟引脚。 TMC2208 步进电机驱动器 每个步进电机都连接到一个驱动器,每个驱动器都连接到小驱动器。 每个驱动器上的 VIO 引脚连接到电源的正极端子。 每个驱动器上的 GND 引脚连接到电源的负极端子。 您需要在每个驱动器上添加一个 100 微法拉电容器,并将其并联到 VIO 和 GND 引脚上。这样做是为了防止电压尖峰损坏驱动器。 该项目使用 16 微步,这意味着步进器具有 3200 步/转或 0.1125° 的步距角。为了将步进器设置为 16 微步,请将所有驱动器上的 MS1 和 MS2 引脚连接到 teensy 上的 3.3V 引脚。这是驱动程序上最高的微步设置。与常规的 200 步/转或 1.8° 步距角相比,您会发现步进电机以 16 微步非常精确地转动。 每个驱动器上的 VM 引脚连接到 teensy 上的 3.3V 引脚,以便为每个驱动器的逻辑板供电。 Teensy Pin 分配: 引脚 0 连接到每个驱动器上的 ENA 引脚(我们希望能够同时启用和禁用所有步进电机) 引脚 1 和 2 连接到驱动器 A 上的 STEP 和 DIR 引脚 引脚 3 和 4 连接到驱动器 B 上的 STEP 和 DIR 引脚 引脚 5 和 6 连接到驱动器 C 上的 STEP 和 DIR 引脚 引脚 A0、A1、A2 和 A3 连接到触摸板 **确保您有一个公共接地,即所有组件上的所有接地引脚都应连接** 附件 下载 {{ file.name }}电子Schematic.pdf下载 ![]() ![]() ![]() |
## 第 4 步:组装底座 首先在每个步进电机上添加一个垫片。 使用 M3 x 10mm 螺钉 (x12) 将每个步进电机拧到底板上 使用 M3 x 5mm 螺钉 (x4) 将带有电子元件的原型板安装到底座上 通过将每个步进电机的引脚连接到每个驱动器上的引脚 M1B、M1A、M2A 和 M2B,将步进电机 A、B 和 C 连接到驱动器 A、B 和 C。记住哪些步进电机被分配了 A、B 和 C。这对于步骤 #6 很重要。 使用 M4 x 20mm 螺钉和 M4 锁紧螺母将每个 link_ #1 拧到每个步进电机上。 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
## 第 5 步:上传草图 上传 Sketch 首先下载这三个 Arduino 库 加速步进器 反向运动学 Adafruit_TouchScreen 大师 通过将 Stepper_Test Arduino 草图上传到 teensy 来确认步进电机沿正确的方向移动。所有步进电机都应向内移动。如果任何 Moved 向外移动,则将其连接翻转到其驱动程序。 接下来,将球平衡草图上传到 teensy。这是允许机器人平衡球的代码。 附件 下载 {{ file.name }}Stepper_Test.ino下载 下载 {{ file.name }}Ball_Balancing.ino下载 下载 {{ file.name }}图案.ino下载 ## 第 6 步:完成组装 在每个 link_#2 上,使用 M3 x 8mm 螺钉将拉杆拧到末端。 使用 M3 x 35mm 螺钉将每个 link_#2 拧到平台框架(在拉杆端)。您还需要使用 M3 x 5mm 支座 (x2) 来填充每个拉杆两侧的间隙。 使用 M4 x 25mm 螺钉和 M4 锁紧螺母将每个 link_#2 的另一端拧到每个 link_#1 的末端。执行此作时,请确保 Stepper A 连接到图像 #3 上标记的平台框架的一侧。 使用 M3 x 8mm 螺钉 (x3) 将底板拧到底架上。 使用四个固定夹,将电阻式触摸板夹在平台框架上。 ![]() ![]() ![]() |
## 第 7 步:操作 要使机器人启动并运行,只需确保平台从完全向下和平坦的位置启动,打开机器人,然后将钢球放在上面。平台现在应该平衡球。 模式: 最初上传的程序设置为平衡球,但我也编写了几种不同的模式来移动球。通过取消注释代码中的其他行,您可以使平台在一条线、三角形、矩形、圆等中移动球。 更改偏移值 如果您发现球没有完全移动到平台的中心,则可以更改代码中的 X 和 Y 偏移值。如果您喜欢冒险(并且您对 PID 算法有所了解),您还可以更改代码中的比例增益 (kp)、积分增益 (ki) 和微分增益 (kd) 值,以便从机器人获得更尖锐或更柔和的反应。 附件 下载 {{ file.name }}图案.ino下载 ![]() |
## 第 8 步:如何运作 设计方法 该机器人是一个 3RRS 并联机械手。这本质上是一个 3DOF 平台,有 3 条腿,每条腿有 2 个两个旋转关节。延长或收缩每条腿将导致平台以不同的方式倾斜。这是由每个步进电机完成的。设计平衡器时,我最大的考虑因素是时尚和简单。为了时尚,我确保电子设备和大部分电线都隐藏得很好。为简单起见,我决定使用 3 个电机 (3DOF),而不是版本 1 中使用的 6 个电机 (6DOF)。权衡成本效益,我还选择不在步进电机中使用位置编码器。使用编码器只会消除机器从公共位置启动的需要。没有它们,您只需每次都将平台向下推即可。 逆向运动学 该机器能够通过使用逆运动方程来调整自身角度。这些方程式计算了移动每个步进电机的位置,以实现所需的平台方向。我自己主要使用矢量微积分、三角学和大量的耐心来推导出这些方程。这些方程是完全参数化的,这意味着它们可以与任何形状或大小的任何 3RRS 并行机械手一起使用。 球平衡 PID 算法 代码的球平衡方面使用 PID 算法。该算法不断找到最有效的平台方向来平衡球。 Error - 误差定义为从球到设定值的距离。在这种情况下,设定值是平台的中心。 比例项 (P) = kp*误差 --- 比例项与误差成正比 积分项 (I) = ki*∫误差 ---积分项是误差随时间推移而累积的。积分项有助于微调球的位置并确保球正好位于中心。 导数项 (d) = kd*(d/dt)*误差 -- 导数项是误差的导数,它本质上是球的速度。这个术语有助于减慢球的速度。 输出 = P + I + D ---输出值是比例项、积分项和导数项之和。此输出本质上是定位平台以防止球下落的最有效方向。机器人不断将球向中心 (P) 移动,微调球的位置 (I),并减慢球的速度 (D)。输出中的每个项都使用其各自的常数 (kp, ki, kd) 进行调谐,也称为比例增益、积分增益和微分增益。我在测试过程中发现的一件事是,机器人可以使用 PD 算法平衡球,就像使用 PID 算法一样。积分项只是让球准确地到达平台的中心,如果它有点偏离。 控制算法由误差的 X 和 Y 方向的 2 个 PID 算法组成。 步进电机控制 仅仅有一个球平衡算法只能让我在这个项目中走到这一步。在我最初的测试中,我发现我的动作非常紧张。为了解决这个问题,我决定使每个步进电机的速度和加速度与电机的当前位置和目标位置之间的差异成正比。换句话说,当电机靠近目标位置时,其速度和加速度较低,而当远离目标位置时,其速度和加速度较高。除此之外,我还决定将驱动程序切换到 1/16th微步进,这意味着它们不是 200 步/转,而是 3200 步/转,这使得驱动更加平稳和精确。 活动概要 触摸板读取球的位置,等待 20 毫秒,然后再次读取球的位置。 然后,程序计算 PID 算法中的项。输出(即平台的投影方向)被馈送到逆运动方程。这些方程式推导出移动每个步进电机的位置,以实现平台的投影方向。 使用新的步进电机位置,可以计算和设置步进电机的速度和加速度。然后将步进电机移动到其目标位置,使平台处于最能减慢球速并将其移动到中心的方向。然后重复该过程。 模式 平衡器还可以以不同的模式移动球。实现这一点相当简单。球平衡算法将球移动到平台的中心。但是,如果您更改平台认为的中心(即更改设定值),则可以将球移动到平台上的不同点。不断执行此作会产生运动,而使用方程式执行此作会创建形状。基本上,您可以创建任何可以用矩形方程、参数方程或极坐标描述的形状。 ![]() ![]() |
【Arduino 动手做】更安静、更容易构建的球平衡机器人 项目链接:https://www.instructables.com/Ball-Balancer/ 项目作者:佛罗里达州杰克逊维尔 阿德穆萨 项目视频:https://www.youtube.com/watch?v=v4F-cGDGiEw 项目代码与3D 文件:https://www.instructables.com/Ball-Balancer/ https://myhub.autodesk360.com/ue ... a6e8a1bdd403930aff7 ![]() ![]() |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed