35| 8
|
[项目] 【Arduino 动手做】开源 3D 打印、Arduino 驱动的快乐机器人 |
机器人无处不在,从工业应用到水下和太空探索,应有尽有。但我最喜欢的还是那些用于娱乐的机器人!这个项目设计了一个DIY机器人,用于儿童医院的娱乐活动,为孩子们带来乐趣。该项目致力于分享知识和推动技术创新,以协助在儿童医院开展慈善工作的非政府组织。 本教程将展示如何构建我们2017版的机器人:一个远程操作的人形机器人,通过Wi-Fi网络进行控制,使用连接到ESP8266 Wi-Fi模块的Arduino Uno。它使用一些伺服电机来控制头部和手臂的运动,一些直流电机来控制小距离的移动,以及一个由LED矩阵组成的面部。该机器人可以通过普通的网络浏览器使用HTML设计的界面进行控制。安卓智能手机用于将机器人的视频和音频传输到操作员的控制界面。 细节 “Robô da Alegria”(快乐机器人)项目于2016年在巴西拜沙达桑蒂斯塔地区启动,旨在发展科技并吸引社区参与创客运动。该项目受到非政府组织在儿童医院开展的志愿项目的启发,旨在利用开放硬件和APEN软件工具开发一款机器人,为儿童医院环境增添乐趣,并为其他组织的工作做出贡献。 该项目的种子在2015年底萌芽。当时,一场关于拜沙达斯桑蒂斯塔初创企业协会(ASEBS)推动的技术创新与发展的讨论开始了。该项目理想化地设定为一个不设奖金的项目,旨在让人们以利他的方式参与其中,以帮助他人为目标。 从最初的构思到如今的形态,机器人经历了各种改造。从只有一个头部、配备机械眼和眉毛,到如今的人形形态,我们进行了多次迭代,测试了不同的结构材料和电子设备。从亚克力原型和激光切割的中密度纤维板,我们过渡到了3D打印的机身。从简单的界面(带有两个由蓝牙控制的伺服电机),到如今由6个伺服电机和2个由Wi-Fi网络控制的Web界面直流电机组成的机身。 机器人结构完全由 Fusion 360 3D 打印而成。为了能够在创客空间或制造实验室生产机器人复制品,最大限度地延长打印机的使用寿命至关重要,机器人的设计被划分为多个部件,每个部件的打印时间不超过三个小时。这些部件通过胶水或螺栓固定,用于车身安装。 由LED阵列组成的面部赋予机器人表达情感的能力。伺服电机驱动的手臂和颈部赋予了机器人与用户互动所需的灵活性。在机器人的控制中心,Arduino Uno与所有外设接口,包括与ESP8266模块的通信,该模块使用户能够通过连接到同一Wi-Fi网络的任何设备控制机器人的表情和动作。 该机器人胸部还安装了一部智能手机,用于机器人操作员与儿童之间传输音频和视频。设备屏幕仍可用于与游戏和其他旨在与机器人身体交互的应用程序进行交互。 ![]() ![]() |
组成 1×3D打印机 http://bit.ly/2kqVOdO 1×Arduino Uno http://bit.ly/2xGflPy 1×18650电池座 http://bit.ly/2h8WSAw 2×1N4001二极管 3×10千欧姆电阻 查看所有 20 个组件 建立说明 折叠式 工具和材料 工具: 3D打印机 - 机器人的整个机身都是3D打印的。整个结构的构建需要几个小时的3D打印时间; PLA 长丝 - 白色和黑色 PLA 长丝用于打印身体; 螺丝刀 ——大部分部件采用螺栓连接; 强力胶 ——一些部件使用强力胶粘合; 钳子和剪钳 烙铁和焊锡丝 电子产品: Arduino Uno (链接 / 链接)- 用作机器人的主控制器。它向电机发送信号并与 WiFi 模块通信; ESP8266-01 (链接 / 链接)- 用作“WiFi 调制解调器”。它接收来自控制接口的信号,并由 Arduino Uno 执行; SG90 伺服电机 (x6)(链接 / 链接)——四个伺服电机用于手臂运动,两个伺服电机用于头部运动; 带减速器和橡胶轮的直流电机 (x2)(链接 / 链接) - 它们允许机器人行进一小段距离; L298N 双通道 H 桥 (x1)(链接 / 链接) - 它将 Arduino 数字输出转换为电机的电源电压; 16 通道伺服控制器 (链接 / 链接) - 使用此板,仅使用两个 Arduino 输出即可控制多个伺服电机; MAX7219 8x8 LED 显示屏 (x4) (链接 / 链接) - 它们用作机器人的面部; Micro USB 线 - 用于上传代码; 母对母跳线 (一些); 公母跳线 (一些); 智能手机 ——使用了摩托罗拉 4.3 英寸 Moto E 智能手机。其他类似尺寸的智能手机也可以使用; 18650 电池 (x2) (链接) - 它们用于为 Arduino 和其他外围设备供电; 18650 电池座 (x1)(链接 / 链接) - 它们将电池固定到位; 1N4001二极管 (x2) 10 千欧姆电阻 (x3) 20mm 开关 (x1) Protoshield (链接)——它有助于连接电路。 机制: 滚珠轮 (x2) M2x6mm螺栓 (+-70) M2x10mm螺栓 (+-20) M2x1.5mm 螺母 (x10) M3x40mm 螺栓 (x4) M3x1.5mm 螺母 (x4) 以上链接仅供参考,方便您找到本教程中使用的物品,并支持本项目的开发。您也可以在其他地方搜索,并在您喜欢的本地商店或在线商店购买。 ![]() |
3D打印 机器人结构完全采用 Autodesk Fusion 360 3D 打印技术制作。为了能够在创客空间或制造实验室生产机器人复制品,最大限度地延长打印机的使用寿命至关重要,机器人的设计被划分为多个部件,每个部件的打印时间不超过三个小时。这些部件通过胶粘或螺栓固定,用于车身安装。 该模型由36个不同的部件组成。其中大部分部件打印时没有支撑,填充率为10%。 头顶(右/左) 头部底部(右/左) 头侧盖(右/左) 面背板 面部前板 颈轴1 颈轴2 颈轴3 颈部中心 手臂(右/左) 肩膀(右/左) 肩杯(右/左) 肩盖(右/左) 臂轴(右/左) 胸围(右/左) 胸部(右/左/前) 车轮(右/左) 根据 手机支架 后方(右/左) 旋钮(右/左) 储物柜(右/左) 机器人的安装过程按以下步骤描述。 这是一个实验原型。部分功能需要改进(用于项目后续更新)。目前已知存在以下问题: 部分舵机接线与肩部干扰; 头部与胸部之间的摩擦; 车轮与结构之间的摩擦; 有些螺丝孔太紧,需要用钻头或美工刀将其扩大。 ![]() |
电路概述 该机器人的核心控制板是 Arduino Uno。Arduino 连接 ESP8266-01 模块,用于通过 Wi-Fi 网络远程控制机器人。 一个 16 通道伺服控制器通过 I2C 通信连接到 Arduino,并控制 6 个伺服电机(颈部两个,每条手臂两个)。Arduino 为五个 8x8 LED 矩阵供电并控制。Arduino 的四个数字输出通过 H 桥控制两个直流电机。 电路使用两个 USB 移动电源供电:一个给电机供电,一个给 Arduino 供电。我尝试过用一个移动电源给整个机器人供电。但是 ESP8266 过去经常会因为直流电机开关时产生的尖峰而失去连接。 机器人胸部装有一部智能手机。它用于与普通计算机上的控制界面进行视频和音频的传输。它还可以向 ESP6288 发送命令,从而控制机器人本身。 你可能会注意到,这里使用的组件可能并未针对其用途进行优化。例如,可以使用 NodeMCU 来代替 Arduino + ESP8266 的组合。带摄像头的树莓派 (Raspberry Pi) 可以取代智能手机,并控制电机。甚至可以使用安卓智能手机作为机器人的“大脑”。没错……我们之所以选择 Arduino Uno,是因为它非常容易上手,人人都可以轻松使用。在我们开始这个项目的时候,ESP8266 和树莓派开发板在我们居住的地方仍然相对昂贵……而当我们想要构建一个价格低廉的机器人时,Arduino 开发板在当时是最佳选择。 ![]() |
组装脸部 机器人的脸上使用了四个 8x8 LED 矩阵。 该结构分为两部分(面板背板和面板前板),使用黑色 PLA 3D 打印。我花了大约 2.5 小时进行 3D 打印,填充率为 10%,没有支撑。 由于空间限制,必须拆焊 LED 矩阵的连接器并按如下所述改变其位置: 移除LED矩阵; 拆焊输入和输出连接器; 将其重新焊接到电路板的另一侧,使针脚指向电路板的中心。 您可以在图像中看到最终结果。 然后使用 16 个 M2x6mm 螺栓将四个 LED 矩阵固定到背板上。引脚按照原理图连接。 第一个矩阵使用 5 线公母跳线连接。公端随后连接到 Arduino 引脚。母端连接到矩阵输入引脚。每个矩阵的输出都使用母母跳线连接到下一个矩阵的输入。 矩阵连接完成后,使用四个 M2 螺栓安装前面板。将跳线绕在前后面板上,确保没有松散的线。 面部模块随后被安装在机器人的头部内部,这将在接下来的步骤中解释。 安装头部 机器人的头部被分成八个 3D 打印部件,全部采用白色 PLA 打印,分辨率为 0.2 毫米,填充率为 10%,无支撑: 头顶(右侧和左侧) 头部底部(右侧和左侧) 头帽(左右) 颈轴1 颈轴2 我花了将近 18 个小时来打印直径 130 毫米的结构。 头顶和底部被分成两部分。用强力胶把它们粘在一起。涂上胶水,静置几个小时。 然后使用固定在头部顶部和底部两侧的螺栓安装侧盖。这样,只需卸下固定在头部顶部部件上的螺丝,即可拆卸头部进行维修。在关闭头部之前,请先组装机器人的面部(如上一步所述)和半身像(如后续步骤所述)。 伺服电机 #5 安装在颈部 1 轴上。我将伺服电机定位在轴的中间,然后安装喇叭,并用螺钉锁定其位置。我用两颗 M2x6mm 螺栓将颈部 2 轴安装在伺服电机上。伺服电机 #6 也以同样的方式安装在颈部 2 轴上。 颈部轴 2 随后连接到颈部中心,如下一步所示。 脸部模块安装在头部内部。 ![]() ![]() |
组装爆裂和肩部 我花了大约 12 小时才打印出胸围和肩部的尺寸。 本节由五个不同的部分组成: 胸围(右/左) 肩膀(右/左) 颈部中心 颈轴 胸围部件用强力胶粘合。肩膀用 M2x10mm 螺栓固定在侧面,伺服电机(伺服电机 2 号和 4 号)分别安装在两侧。伺服电机穿过肩膀上的一个矩形孔(电线实际上很难穿过),并用 M2x10mm 螺栓和螺母固定。 领口中心有一个矩形孔,用于插入颈轴3部件。使用四颗M2x6mm螺栓将这两个部件连接起来。之后,将领口中心安装到肩部。它使用的螺栓与将肩部安装到胸围上的螺栓相同。使用四颗M2x1.5mm螺母将其锁定到位。 伺服电机 #6 用两颗螺丝连接到琴颈 3 号轴。然后,我将琴颈 3 号轴安装在琴颈中心的矩形孔内,并用四颗 M2x6mm 螺栓将其锁定。 组装手臂 我花了大约 5 个小时来打印每只手臂。 每条手臂由四部分组成: 肩杯 肩盖 臂轴 手臂 臂轴位于中心位置,并使用三个M2x6mm螺栓安装在臂本身上。伺服喇叭安装在轴的另一端。 使用一些螺丝将伺服电机(1号和3号)安装在肩杯内,然后安装其角状件(连接到臂轴的那个)。肩杯上有一个孔,用于安装另一个角状件,该角状件连接到已安装在肩部的伺服电机(2号和4号)上,如上一步所示。 杯体(以及肩部)上还有一个孔,用于穿过伺服电机的线缆。之后,用两个 M2x6mm 螺栓安装盖子,盖住机器人的肩部。 安装箱子 胸部是连接机器人胸部和底部(轮子和底座)的部分。它只由两部分组成(左右两部分)。我花了4个小时打印它们。 机器人的肩部位于胸部上方。肩部上有一个螺栓孔,用于对齐和固定这两个部件。建议将这两个部件粘合在一起。 这个部件的底部有六个孔,用于与车轮的连接,稍后将会展示。 此时,我用一些贴纸标记了伺服电机,以便更容易地连接电路。 组装车轮 机器人的轮子采用了三个3D打印部件: 车轮(左/右) 正面 我花了大约 10 小时来打印这些部件。 我按照以下步骤组装车轮: 首先,我必须将一些电线焊接到直流电机的连接器上。这些电线后来用于通过 H 桥电路为电机供电; 然后,用两个M3x40螺栓和螺母将电机固定在结构上。实际上也可以使用更短的螺栓(但我在网上没找到)。 之后我粘合了前面板,它将结构的其他部分连接起来; 此部件顶部有一些孔。这些孔用于将其连接到之前所示的箱子上。六颗 M2x6mm 螺栓用于连接两个部分。 手机支架 手机支架是一个单独的 3D 打印部件,打印大约需要 1 小时。 这个机器人的腹部有一部智能手机。它是为摩托罗拉 Moto E 设计的。它拥有 4.3 英寸的显示屏。其他类似尺寸的智能手机也可能适用。 手机支架部分用于将智能手机固定在所需位置。首先将智能手机定位,然后使用手机支架和四个 M2x6mm 螺栓将其压在机器人主体上。 在拧紧螺栓之前,务必先将 USB 线连接到智能手机上。否则以后连接起来会很困难。可惜空间非常有限,所以我不得不切掉一部分 USB 接口…… :/ 安装底座 底座只有一个3D打印部件。我花了大约4个小时来打印这个部件。 它有几个孔用于安装其他组件,例如滚珠轮和电路板。组装底座的步骤如下: 使用四个 M2x6mm 螺栓安装 16 通道伺服控制器; 使用四个 M2x6mm 螺栓安装 L298N h 桥电路; 使用四个 M2x6mm 螺栓安装 Arduino Uno; 在机器人顶部安装原型防护罩; 连接电路(如后面几个步骤所述); 安装滚珠轮,每个滚珠轮用两颗螺丝固定。电线的排列方式应使其夹在底座和安装滚珠轮的螺丝之间; 底座使用一些螺丝固定在轮子部分上。 背部和电源组 机器人的后盖设计使得人们可以轻松打开它来访问电路、给电池充电或打开/关闭智能手机。 它由六个 3D 打印部件组成: 后方(左/右) 旋钮(x2) 锁(左/右) 我打印这些部件花了大约5小时30分钟。左右后背部件用强力胶水粘合。一定要等胶水完全干透,否则盖子很容易破。 电源组由两节18650电池和一个电池座组成。我需要焊接一些电线(在1号电池负极和2号电池正极之间)。电源组的负极连接到Arduino的GND(使用一些电线和跳线)。在正极和Arduino的Vin输入之间安装了一个开关。 开关用一颗M2x6mm螺栓和M2x1.5mm螺母固定在背面的3D打印部件上。电池座用四颗M2x6mm螺栓固定在背面。 为了更好地安装,锁的圆柱形部分必须用砂纸打磨。它们穿过盖子上的孔。旋钮连接并粘合在另一侧。 盖子安装在机器人的背面。可以旋转旋钮锁定盖子,保护机器人的内部。 ![]() ![]() |
连接电路 电路按照示意图连接起来。 阿杜伊诺: Arduino 引脚 D2 => L298N 引脚 IN4 Arduino 引脚 D3 => L298N 引脚 IN3 Arduino 引脚 D6 => L298N 引脚 IN2 Arduino 引脚 D7 => L298N 引脚 IN1 Arduino 引脚 D9 => MAX7219 引脚 DIN Arduino 引脚 D10 => MAX7219 引脚 CS Arduino 引脚 D11 => MAX7219 引脚 CLK Arduino 引脚 D4 => ESP8266 RXD Arduino 引脚 D5 => ESP8266 TXD Arduino 引脚 A4 => SDA Arduino 引脚 A5 => SCL Arduino 引脚 Vin => 电池 V+(二极管之前) Arduino 引脚接地 => 电池 V- ESP8266-01 ESP8266 引脚 RXD => Arduino 引脚 D4 ESP8266 引脚 TXD => Arduino 引脚 D5 ESP8266 引脚接地 => Arduino 引脚接地 ESP8266 引脚 Vcc => Arduino 引脚 3V3 ESP8266 引脚 CH_PD => Arduino 引脚 3V3 L298N H桥 L298N 引脚 IN1 => Arduino 引脚 D7 L298N 引脚 IN2 => Arduino 引脚 D6 L298N 引脚 IN3 => Arduino 引脚 D3 L298N 引脚 IN4 => Arduino 引脚 D2 L298N 引脚 +12V => 电池 V+ (二极管之后) L298N 引脚接地 => Arduino 接地 L298N OUT1 => 电机 1 L298N OUT2 => 电机 2 MAX7219(第一个矩阵) MAX7219 DIN 引脚 => Arduino 引脚 D9 MAX7219 引脚 CS => Arduino 引脚 D10 MAX7219 引脚 CLK => Arduino 引脚 D11 MAX7219 引脚 Vcc => Arduino 引脚 5V MAX7219 引脚接地 => Arduino 引脚接地 MAX7219(其他矩阵) MAX7219 引脚 DIN => MAX7219 引脚 DOUT(前一个矩阵) MAX7219 引脚 CS => MAX7219 引脚 CS (前一个矩阵) MAX7219 引脚 CLK => MAX7219 引脚 CLK(前一个矩阵) MAX7219 引脚 Vcc => MAX7219 引脚 VCC(前一个矩阵) MAX7219 引脚 gnd =: MAX7219 引脚 gnd (前一个矩阵) 16通道伺服控制器 伺服控制器引脚 SCL => Arduino 引脚 A5 伺服控制器引脚SDA => Arduino引脚A4 伺服控制器引脚 Vcc => Arduino 引脚 5V 伺服控制器引脚 gnd => Arduino 引脚 gnd 伺服控制器引脚 V+ => 电池 V+(二极管之后) 伺服控制器引脚 gnd => Arduino 引脚 gnd 有人说SG90舵机的供电电压可以在3.0到6.0V之间,也有人说可以在4.0到7.2V之间。为了避免麻烦,我决定在电池后串联两个二极管。这样,舵机的供电电压就是2*3.7 - 2*0.7 = 6.0V。直流电机也一样。 请注意,这不是最有效的方法,但对我来说却有效。 ![]() ![]() |
Arduino代码 安装最新的 Arduino IDE。无需任何库即可与 ESP-8266 模块通信或控制直流电机。 我需要添加以下库: LedControl.h:用于控制 LED 矩阵的库; Adafruit_PWMServoDriver.h:用于控制伺服电机的库。 Arduino代码分为9个部分: RobodaAlegria.ino: 这是主程序,它调用其他部分。库在这里导入。它还定义并初始化全局变量; _05_Def_Olhos.ino: 这里定义了每只眼睛的矩阵。每只眼睛用一个 8x8 矩阵表示,并定义了 9 个选项:中性、睁大眼睛、闭上眼睛、闭上眼睛、愤怒、无聊、悲伤、恋爱和无神眼神。左右眼的矩阵不同; _06_Def_Boca.ino: 这里定义了嘴巴的矩阵。嘴巴用一个 16x8 的矩阵表示,定义了 9 个选项:高兴、悲伤、非常高兴、非常悲伤、中性、吐舌头、张开嘴、张大嘴巴和厌恶嘴巴; _10_Bracos.ino: 此文件定义了手臂和颈部的预定义动作。共配置了 mov1() 至 mov9() 九个动作; _12_Rosto.ino: 此文件中有一些用于更新机器人面部的功能,结合了_05_Def_Olhos.ino和_06_Def_Boca.ino中定义的矩阵; _13_Motores_DC: 定义其他直流电机的功能; _20_Comunicacao.ino: 此文件定义了向ESP8266发送数据的函数; _80_Setup.ino: Arduino 启动时运行。它设置机器人电机的初始朝向和位置。它还会发送连接到指定 Wi-Fi 网络的命令; _90_Loop: 主循环。它查找来自 ESP8266 的传入命令,并调用特定函数来控制输出。 下载 Arduino 代码。在“_80_Setup.ino”文件中,将 XXXXX 替换为您的 WiFi 路由器 SSID,将 YYYYY 替换为您的路由器密码。请检查您的 ESP8266 的波特率,并在代码(“_80_Setup.ino”)中正确设置。将 Arduino 开发板连接到计算机 USB 端口并上传代码。 Android 应用 我使用一部安卓智能手机将机器人的视频和音频传输到控制界面。你可以在 Google Play 商店找到我使用的应用程序(https://play.google.com/store/apps/details?id=com.pas.webcam)。 智能手机的屏幕也可以传输到控制界面,以便操作员查看屏幕上的内容。您也可以在 Google Play 商店找到我用来镜像屏幕的应用程序 ( https://play.google.com/store/ap ... ajungg.screenmirror )。 一款安卓视频游戏也被设计用于与机器人互动。目前该游戏还不太稳定,因此无法下载。 控制接口 我们设计了一个 HTML 界面来控制机器人。下载 interface.rar 并将所有文件解压到指定文件夹。然后在 Firefox 中打开它。界面分为两部分。左侧是摄像头和屏幕镜像的显示屏。右侧是用于执行命令的控制按钮。 该界面使用文本框表单输入 ESP8266 模块的 IP 地址(“Endereço IP Arduino:”)、来自 Android IP Webcam 应用程序的视频/音频服务器(“IP Webcam (IP):”)和屏幕镜像 IP 地址(“Screen Mirror (IP):”)。 在“预定义动作”选项卡下,用户可以选择 9 种预设的身体动作和 13 种不同的面部表情。在“个性化动作”选项卡下,用户可以为 6 个伺服器分别设置角度,并分别选择 9 种眼睛和 8 种嘴巴表情。点击其中一个按钮时,JavaScript 函数就会运行,并向 ESP8266 的 IP 地址发送一条消息。 键盘箭头键用于移动机器人向前或向后,以及向左或向右旋转。 界面启动时,会显示一条警告,询问用户是否要共享麦克风。如果选择此选项,麦克风的声音强度将用于向机器人发送预配置的命令。该命令将触发动画,***器人面部的语音动作。右上角的设置按钮可用于设置麦克风的灵敏度。 此设置菜单还可用于配置手臂和颈部运动的速度。 ![]() |
附录 项目荣获:Instructables Wheels 比赛一等奖、 Instructables Arduino 比赛二等奖以及儿童设计挑战赛亚军。 项目链接:https://hackaday.io/project/1430 ... legria-2017-edition 项目作者:igorfonseca83 项目视频 :https://www.youtube.com/watch?v=QEKTgiajdAM https://www.youtube.com/watch?v=PVLlt4cmwBI https://www.youtube.com/watch?v=3qOmBY0NQ3E&t=1s 项目代码:https://cdn.hackaday.io/files/1430176118839328/RoboAlegria.rar 3D 文件:https://pinshape.com/items/42221 ... bot-robo-da-alegria 电路资料:https://hackaday.io/project/143017/files# 表情驱动库:https://cdn.hackaday.io/files/1430176118839328/interface.rar ![]() ![]() |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed