FEATURED · 精选文章

基于Arduino与红外遥控的Otto DIY机器人制作全攻略

发布时间 / 2026/8/18 21:34:52
来源 / 创域科博编辑部
栏目 / 资讯中心
基于Arduino与红外遥控的Otto DIY机器人制作全攻略 1. 从一堆零件到会跳舞的机器人Otto DIY的乐趣与挑战如果你和我一样对桌面上的小玩意儿总有种“拆开看看”的冲动或者看着那些会动的小机器人心里痒痒那“Otto DIY”绝对是你不能错过的项目。它不像乐高那样按图索骥也不像买成品玩具那样开箱即玩。Otto的魅力在于你亲手将一堆看似毫无关联的电子元件——几块亚克力板、几个舵机、一个Arduino主板——组装成一个有模有样的小机器人然后通过编程赋予它生命让它走路、跳舞、甚至躲避障碍。这个过程充满了从无到有的创造快感和解决问题的成就感。而今天我们要聊的是在这个基础上再加点“魔法”用你家里那个可能已经积灰的电视机红外遥控器来无线控制你的Otto机器人。想象一下不用连着电脑按一下遥控器你的小Otto就开始跳起你编好的舞蹈或者执行复杂的动作序列这体验可比单纯用串口指令酷多了。这个项目的核心其实就是将“红外遥控”这个古老但极其稳定的无线技术与“开源机器人平台”结合起来。它不涉及复杂的蓝牙配对或Wi-Fi配置成本极低一个红外接收头不到一块钱却能让你的项目互动性大增。无论你是想给孩子做一个有趣的科教玩具还是自己探索嵌入式开发和机器人控制的入门亦或是想为你的创客作品增加一个简单可靠的控制方式这个“Otto DIY with IR Remote”的组合都是一个绝佳的起点。接下来我会带你从零开始完整走一遍制作流程并分享那些只有真正动手做过才会知道的细节和坑。2. 项目核心物料清单与选型逻辑动手之前理清你需要什么以及为什么需要它比盲目购买更重要。Otto DIY本身有很多版本和变体为了配合红外遥控我们需要一个基础且扩展性好的配置。2.1 主控板为什么是Arduino NanoOtto机器人官方推荐过Arduino Nano、Uno、Pro Mini等多种板卡。对于红外遥控项目我强烈建议使用Arduino Nano。原因有三点尺寸与功耗Nano板型小巧能轻松塞进Otto的头部或身体结构里为其他传感器预留空间。其功耗也相对较低适合电池供电。引脚资源Nano拥有足够的数字IO口来驱动4个舵机Otto的腿和连接红外接收器。经典的Otto需要4个舵机控制两条腿的髋关节和膝关节。成本与生态Nano价格低廉引脚布局标准网上有海量的教程和库支持遇到问题容易找到解决方案。当然你也可以使用功能更强大的ESP32它自带Wi-Fi和蓝牙但对于“红外遥控”这个单一需求来说ESP32显得有些“杀鸡用牛刀”其复杂的电源管理和相对较大的体积对于Otto的小身板可能是个负担。因此Arduino Nano是这个项目性价比和易用性平衡的最佳选择。2.2 动力核心舵机的选择与参数解读舵机是Otto能动的关节选错了它要么无力要么抖得厉害。你需要4个微型舵机常见的是SG90或MG90S。SG90塑料齿轮扭矩约1.5kg/cm价格极其便宜。适合初版验证和轻量级动作。缺点是塑料齿轮不耐冲击长时间运行或卡住时容易扫齿。MG90S金属齿轮扭矩约2.0kg/cm。价格稍高但耐用性远超SG90。对于需要稳定、长期运行的Otto我强烈推荐MG90S。多花几块钱能避免你因为一个齿轮损坏而不得不拆开整个机器人的沮丧。这里有个关键参数工作电压。大多数这类舵机标称电压是4.8V-6.0V。如果你直接用5V的USB供电或者稳压模块供电问题不大。但如果你打算用电池如18650锂电池标称3.7V满电4.2V直接供电会导致舵机速度慢、无力。这时你需要一个升压模块如MT3608将电池电压稳定升压到5V或6V再给舵机供电。而Arduino Nano的VIN引脚可以接受5V-12V输入其板载稳压器会为MCU提供稳定的5V。所以一个合理的供电方案是电池-升压模块输出5V/6V-同时给舵机和Nano的VIN引脚供电。2.3 感知“指令”红外接收模块红外接收头通常是一个三引脚的小黑块常见型号是VS1838B或HS0038。它们的作用是接收红外遥控器发出的、调制在38kHz载波上的信号并解调成数字信号输出给Arduino。你只需要一个连接非常简单VCC接5VGND接GNDOUT或DAT接一个数字引脚比如D11。注意接收头对电源噪声比较敏感尽量在其VCC和GND引脚附近并联一个10uF-100uF的电解电容可以显著提高接收稳定性避免误触发。2.4 结构骨架机身与连接件你可以选择激光切割的亚克力板套件也可以自己用3D打印。亚克力板美观但较脆螺丝孔位容易开裂3D打印建议用PLA材料韧性更好可以自定义设计。无论哪种都需要准备相应的螺丝M2或M3规格、螺母和铜柱。一个小技巧在组装舵机到结构件上之前先用舵机测试器或一段简单的Arduino代码将每个舵机转到90度位置中立位然后再安装舵臂。这能确保你组装出来的Otto初始姿态是站直的为后续编程省去很多调校的麻烦。2.5 完整物料清单基于以上分析一份稳妥的清单如下Arduino Nano 开发板 x1MG90S 金属齿轮舵机 x4红外接收模块VS1838Bx1Otto机器人结构件套件亚克力或3D打印x1套M3*6mm螺丝、螺母、铜柱 若干18650锂电池及电池盒 x15V升压模块MT3608x1杜邦线公对公、公对母若干通用红外遥控器电视、空调遥控器均可x1微型开关用于电源总控x1可选超声波传感器HC-SR04用于后续避障扩展、蜂鸣器用于添加音效3. 硬件组装从散件到雏形的关键步骤组装过程是机械和电子的结合顺序很重要。错误的组装顺序可能导致最后无法接线或调试。3.1 结构件预处理与舵机安装首先处理好你的结构件。如果是亚克力板小心地将各部件从板上取下用细砂纸轻轻打磨切割边缘的毛刺防止划伤手或电线。如果是3D打印件检查所有轴孔和螺丝孔是否畅通必要时用合适尺寸的钻头或螺丝刀手动清理一下。接下来是核心——安装舵机。以一条腿为例将舵机放入腿部的舵机槽。通常槽的设计是紧配合可能需要稍微用力按压。确保舵机输出轴对准结构件上的孔。关键步骤设定舵机初始角。不要急着上螺丝。用杜邦线将舵机临时连接到Arduino Nano红线接5V黑线接GND黄线接一个PWM引脚如D9。上传一段简单的测试代码让该舵机转动到90度。#include Servo.h Servo myservo; void setup() { myservo.attach(9); // 连接在引脚9 myservo.write(90); // 转到90度位置 delay(2000); } void loop() {}在舵机处于90度位置时将随舵机附带的舵臂通常是十字或一字形安装到输出轴上。对于Otto通常让舵臂处于与舵机本体垂直的状态。然后用配套的小螺丝固定舵臂。现在将带有舵臂的舵机用提供的螺丝固定在结构件上。拧紧螺丝但注意不要过度用力导致亚克力板开裂或3D打印件滑丝。重复以上过程安装好四个舵机两条腿每条腿的髋关节和膝关节。3.2 电路连接构建可靠的神经系统电路连接的原则是电源优先信号其次布局清晰。电源总线这是最易出错的地方。取一块小面包板或直接焊接建立两条公共线路5V正极VCC和地GND。你的升压模块的5V输出端接到这个VCC总线上GND接到GND总线。Arduino Nano的VIN引脚接VCC总线注意是VIN不是5V引脚GND接GND总线。微型开关串联在电池正极和升压模块输入之间用于控制总电源。舵机连接4个舵机的红线正极都接到VCC总线黑线负极都接到GND总线。舵机的信号线黄线或橙线分别连接到Arduino Nano的四个PWM引脚。我常用的配置是左髋 D5左膝 D6右髋 D9右膝 D10。务必在VCC总线靠近舵机群的位置并联一个至少100uF的电解电容用于吸收舵机突然启动或停止时产生的电流冲击防止电压骤降导致Arduino复位。红外接收头连接其VCC接VCC总线GND接GND总线OUT引脚接Arduino的任意数字引脚例如D11。同样在接收头本身的VCC和GND引脚间并联一个10uF电容。最终检查连接完成后对照电路图哪怕是自己手画的仔细检查三遍有没有短路特别是VCC和GND所有正负极是否正确信号线是否接对了引脚确认无误后再接通电源。3.3 机身总装与走线管理将安装好舵机的腿部结构通过螺丝和铜柱与Otto的身体通常是承载Arduino的主板部分连接。连接时注意舵机线的走向尽量让线从结构内部或预留的线槽中穿过避免外露被关节夹住。可以用一点点扎带或胶带固定线束。将Arduino Nano、升压模块、红外接收头用双面胶或热熔胶固定在身体内部空余位置。确保所有连接牢固不会因为机器人运动而松脱。最后装上头部装饰件。一个完整的Otto机器人硬件部分就搭建完成了。4. 软件编程让Otto听懂遥控器的语言硬件是身体软件是灵魂。这部分我们将编写Arduino代码实现红外信号解码和舵机动作控制。4.1 开发环境搭建与核心库介绍首先确保你安装了Arduino IDE。我们需要两个核心库IRremote库用于解码红外信号。在Arduino IDE的“工具”-“管理库”中搜索“IRremote”选择由“Arduino-IRremote”或“shirriff”维护的版本进行安装。这个库封装了红外接收、解码和发送的复杂操作让我们用几行代码就能读取遥控器按键。Servo库这是Arduino内置库用于控制舵机。无需额外安装。4.2 红外信号解码与按键映射每个红外遥控器的每个按键都会发射一个独特的编码通常是NEC、Sony、RC5等格式。我们的第一步是“学习”遥控器的编码。编写一个简单的解码程序并上传到Nano#include IRremote.h const int RECV_PIN 11; // 红外接收头连接的引脚 IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); // 启动红外接收 Serial.println(红外解码器就绪请按下遥控器按键...); } void loop() { if (irrecv.decode(results)) { Serial.print(解码类型: ); Serial.print(results.decode_type, HEX); Serial.print(, 解码值: ); Serial.println(results.value, HEX); // 以16进制打印按键值 irrecv.resume(); // 准备接收下一个信号 } }打开串口监视器波特率设为9600用遥控器对准红外接收头按下你计划使用的按键如方向键、数字键。串口会打印出类似解码类型: 1, 解码值: FF629D的信息。记录下每个按键对应的16进制值。这个值就是该按键的“身份证”。4.3 舵机控制与动作函数封装控制Otto走路、跳舞本质是精确控制4个舵机在特定时间序列内转动到特定角度。直接在主循环里写角度序列会非常混乱。好的做法是封装成函数。初始化与舵机对象定义#include Servo.h Servo hipLeft, kneeLeft, hipRight, kneeRight; // 定义四个舵机对象 const int HL_PIN 5, KL_PIN 6, HR_PIN 9, KR_PIN 10; // 引脚定义 void setupServos() { hipLeft.attach(HL_PIN); kneeLeft.attach(KL_PIN); hipRight.attach(HR_PIN); kneeRight.attach(KR_PIN); homePosition(); // 调用归中函数 } void homePosition() { hipLeft.write(90); kneeLeft.write(90); hipRight.write(90); kneeRight.write(90); delay(500); // 给舵机时间转到位置 }封装一个简单的步行动作走路是一个周期性动作。我们可以写一个函数让Otto完成一步。void takeStepForward() { // 阶段1重心移到右腿左腿抬起 hipLeft.write(70); // 左髋后摆 kneeLeft.write(110); // 左膝微曲准备抬起 delay(200); kneeLeft.write(130); // 左膝进一步弯曲脚离地 delay(200); // 阶段2身体前移 hipRight.write(110); // 右髋前摆推动身体向前 hipLeft.write(90); // 左髋回中 delay(200); // 阶段3左腿放下重心转移 kneeLeft.write(90); // 左腿放下 delay(200); // 阶段4右腿抬起准备下一步对称动作 // ... 此处省略对称的右腿动作代码 homePosition(); delay(300); }注意上面的角度值70, 110, 130等需要根据你实际组装中舵机的安装方向、舵臂角度进行大量调试。没有一个标准值能适用于所有组装。这就是DIY的必经之路——反复测试和微调。4.4 主程序逻辑将红外指令与动作绑定现在我们将红外解码和动作控制结合起来。在主程序循环中持续监听红外信号一旦检测到预先映射的按键值就触发对应的动作函数。#include IRremote.h #include Servo.h // ... 引脚定义、舵机对象、初始化函数、动作函数如takeStepForward, turnLeft, dance等在此处定义 const long IR_KEY_UP 0xFF629D; // 示例上箭头键值 const long IR_KEY_DOWN 0xFFA857; // 示例下箭头键值 const long IR_KEY_LEFT 0xFF22DD; // 示例左箭头键值 const long IR_KEY_RIGHT 0xFFC23D; // 示例右箭头键值 const long IR_KEY_OK 0xFF02FD; // 示例OK键值 IRrecv irrecv(RECV_PIN); decode_results results; void setup() { Serial.begin(9600); setupServos(); // 初始化舵机并归位 irrecv.enableIRIn(); Serial.println(Otto IR Remote Control Ready!); } void loop() { if (irrecv.decode(results)) { Serial.println(results.value, HEX); // 调试用可注释掉 switch(results.value) { case IR_KEY_UP: takeStepForward(); break; case IR_KEY_DOWN: takeStepBackward(); // 需要你实现后退函数 break; case IR_KEY_LEFT: turnLeft(); // 需要你实现左转函数 break; case IR_KEY_RIGHT: turnRight(); // 需要你实现右转函数 break; case IR_KEY_OK: performDance(); // 执行一段编排好的舞蹈 break; // 可以添加更多按键映射 default: // 对于未定义的按键可以忽略或蜂鸣提示 break; } irrecv.resume(); // 至关重要重新开始接收 } // 这里可以添加其他非阻塞任务比如超声波避障检测 }这样一个通过红外遥控控制Otto机器人基本运动的主程序框架就完成了。上传代码到Arduino Nano断开USB线用电池供电拿起遥控器你的Otto就应该能响应指令了。5. 调试、优化与进阶玩法代码跑起来只是第一步让Otto动作流畅、稳定才是真正的挑战。5.1 舵机抖动与电源噪声排查你可能会遇到舵机在静止时嗡嗡作响或轻微抖动。这通常是电源问题或信号干扰。症状舵机到达指定角度后不停抖动发出“滋滋”声。排查与解决电源容量不足这是最常见原因。多个舵机同时运动时瞬时电流很大可能超过升压模块或电池的供电能力。解决方法使用容量更大的电池如两节18650并联或选择持续输出电流更大的升压模块至少2A以上。电源线太细或太长细长的导线电阻大导致舵机端的电压下降。尽量使用粗短的导线连接电源总线到舵机。未使用滤波电容务必在VCC总线靠近舵机群的位置和红外接收头旁边加上电解电容如前文所述。软件消抖在Servo.write()函数后可以尝试添加一个极短的延时delay(5)有时能缓解由MCU信号微小波动引起的抖动。5.2 红外接收不灵敏或误触发症状遥控器要对得很准才有反应或者偶尔自己触发动作。排查与解决供电与电容确保红外接收头供电稳定5V且并联了10uF电容。引脚干扰尝试更换红外接收头的信号引脚避开那些可能产生PWM干扰的引脚如D3, D5, D6, D9, D10, D11。虽然我们用了其中一些控制舵机但可以试试将红外接到D2、D4、D7、D8等数字引脚。环境光干扰强烈的日光灯或自然光可能包含红外成分。可以给接收头套上一小段黑色热缩管或使用不透明的外壳遮挡。库函数调用确保在每次irrecv.decode()之后都调用了irrecv.resume()否则库无法接收下一个信号。5.3 动作平滑性与轨迹规划直接让舵机从A角度转到B角度动作会显得生硬。可以通过分段移动来实现平滑。void smoothMove(Servo servo, int targetAngle, int stepDelay 15) { int currentAngle servo.read(); int step (targetAngle currentAngle) ? 1 : -1; for (int angle currentAngle; angle ! targetAngle; angle step) { servo.write(angle); delay(stepDelay); // 延迟越小运动越快 } servo.write(targetAngle); // 确保到达目标 }在动作函数中调用smoothMove(hipLeft, 70, 20)来代替直接的hipLeft.write(70)动作会柔和很多。你可以为每个舵机的每个动作阶段设计不同的目标角度和步进延迟来创造出更拟人、更复杂的步态或舞蹈。5.4 项目扩展从遥控到“自治”一旦红外遥控玩熟了你可以很容易地扩展Otto的能力增加超声波避障在头部加装HC-SR04模块。在主循环中当没有红外指令时持续测量前方距离。如果距离小于设定阈值如10厘米自动触发一个后退转弯的动作实现简单的自主避障。这时红外遥控就变成了一个高级干预手段。添加声音反馈连接一个无源蜂鸣器。可以为不同的动作开始、结束、遇到障碍配上不同的简短音效让互动更有趣。使用tone()函数可以轻松实现。设计更复杂的动作序列将舞蹈动作编排成数组例如int danceRoutine[][4] {{90,100,90,80}, {85,110,95,75}, ...}每一行代表四个舵机在某一时刻的角度。通过循环播放这个数组就能实现复杂的编舞。红外遥控的按键可以用来切换不同的舞蹈序列。从一堆散件开始到最终一个听从你指尖命令翩翩起舞的小机器人“Otto DIY with IR Remote”这个项目贯穿了机械结构、电子电路、嵌入式编程和问题调试的全过程。它带给你的不仅仅是一个玩具更是一套解决问题的思维方法和动手实现的自信。当你按下遥控器看着自己亲手打造的Otto做出第一个动作时那种成就感是无可替代的。最重要的是这个平台是开放的你的想象力是它唯一的边界。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻