1. 项目概述与核心思路最近在整理工作室时翻出了一个之前在学校做的项目——一个能用手机蓝牙遥控的机器人杯架。当时做这个的初衷挺简单的就是觉得每次在书桌或工作台前想喝口水还得伸手去够杯子有点打断思路。如果能有个“小跟班”把杯子送过来岂不美哉这个想法催生了这个结合了Arduino、蓝牙遥控、简易机器人底盘和3D打印附件的创客项目。它本质上是一个两轮差速驱动的移动平台顶部搭载了一个可定制的杯架通过手机App就能指挥它前进、后退、转弯把饮料平稳地送到你手边。这个项目非常适合有一定电子和编程基础想深入体验从设计、制作到调试全流程的爱好者。它涵盖了机械结构设计激光切割/3D打印、电路搭建电机驱动、蓝牙模块、嵌入式编程Arduino以及无线通信蓝牙等多个环节是一个综合性很强的练手项目。做完之后你不仅能收获一个实用的“懒人神器”更能系统掌握如何让一个想法从图纸变成能动的实物。下面我就把自己当时的设计思路、踩过的坑以及详细的制作步骤分享出来。2. 核心部件选型与设计考量2.1 主控与通信方案为什么是Arduino Uno HC-05/06主控芯片的选择是项目的基石。我直接使用了经典的Arduino Uno R3。原因很简单资源丰富、社区支持强大、引脚数量完全够用。我们需要控制两个直流电机用于移动和两个舵机用于可能的抬升或转向机构本项目中杯架为固定式舵机可作为扩展预留Uno的6个PWM引脚和足够的数字I/O口绰绰有余。对于初学者它的稳定性是首要考虑因素。无线通信方面蓝牙模块如HC-05或HC-06是性价比和易用性的最佳平衡点。HC-05可以主从一体更灵活HC-06只能作为从机但价格通常更低对于本项目手机作为主机机器人作为从机完全够用。选择蓝牙而非Wi-Fi或射频模块主要是考虑手机控制的便利性——几乎每个人的手机都自带蓝牙无需额外硬件且App开发或使用现成App门槛较低。它的有效控制距离一般在10米以内对于室内桌面或房间内的移动送水场景完全足够。注意购买蓝牙模块时务必留意其工作电压。常见的HC-05/06模块逻辑电平是3.3V虽然很多型号标明兼容5V TTL但为稳妥起见建议在Arduino的TX发送引脚到模块的RX引脚之间串联一个1k-2kΩ的电阻分压避免5V信号长期损坏模块。模块的VCC接5V通常没问题。2.2 动力与驱动系统电机、驱动板与电源配置机器人的移动采用经典的两轮差速驱动方案。这意味着通过控制左右两个轮子的转速和方向就能实现前进、后退、原地转弯和弧形运动。电机选择我使用了两个普通的TT减速直流电机。这种电机价格低廉自带减速箱输出扭矩较大能轻松带动木质底盘和一杯水的重量。关键参数是工作电压常用3-6V和空载转速。我选用的是工作电压为4.5-6V的型号。电机驱动板Arduino的I/O引脚无法直接驱动电机需要电机驱动板。我选择了L298N双H桥驱动模块。它一片就能驱动两个直流电机并且可以方便地控制电机的正反转和PWM调速。它的驱动能力单桥2A峰值对于TT电机来说富富有余。电源管理这是容易出问题的地方。整个系统存在两个电源动力电源为L298N和电机供电。我使用了一个4节AA电池盒6V。为什么不用锂电池AA电池盒更容易获取电压标准且无需复杂的充电和保护电路适合入门项目。实测驱动电机和底盘负载电量足够持续运行数小时。控制电源为Arduino Uno和蓝牙模块供电。这里有个关键细节千万不要只用电电池盒通过L298N的5V输出给Arduino供电当电机启动或堵转时电压会被拉低可能导致Arduino复位或蓝牙模块断开。正确的做法是电池盒正负极接入L298N的电源输入端同时用一根单独的USB线为Arduino供电调试时连接电脑运行时可以连接一个手机充电宝。这样实现了动力电与控制电的隔离系统稳定性大大提升。2.3 机械结构设计底盘与杯架底盘设计材料我选择了**3mm厚的MDF中密度纤维板**进行激光切割。MDF成本低易于切割强度对于小型机器人足够。你也可以用亚克力视觉效果更好但价格更贵。设计软件使用Adobe Illustrator或Fusion 360导出DXF绘制矢量图。核心是设计一个**“榫卯”结构**的盒子所有部件通过卡扣和手指槽拼装无需螺丝只用木胶加固。这能极大简化组装。关键尺寸底盘大小要能容纳Arduino、L298N、电池盒等所有电路。必须为电机的轮子预留缺口这是我踩过的坑第一版设计侧板是完整的装轮子时发现会卡住。后来在侧板底部开了半圆形的缺口。考虑重心。电池、电机等较重部件应尽量靠近底盘中心且位置偏低防止转弯时倾倒。从动轮/万向轮两轮驱动必须有一个或多个从动点保持平衡。我设计了一个简单的**“雪橇”式塑料片**作为尾部拖曳滑轨用3D打印制作。你也可以直接购买一个万向球轮。杯架附件设计核心功能就是一个固定在底盘上的容器。设计思路我用了更取巧的办法——MakerCase网站。这是一个在线生成激光切割盒子图纸的工具。输入你想要的内部长宽高例如为了放一个直径77mm的杯子我设置内径为80mm x 80mm高度110mm它就能自动生成带卡扣的六面体盒子图纸。定制化将MakerCase生成的DXF文件导入Illustrator在顶板上画一个直径76mm的圆并切割出来这就是放杯子的孔。你还可以在侧板设计一些图案或镂空减轻重量。固定方式在杯架底部和机器人底盘顶部设计对应的螺丝孔位用螺丝螺母固定。如果需要可拆卸可以考虑使用强磁铁。3. 详细制作步骤与实操要点3.1 第一步机器人底盘的设计与激光切割确定整体尺寸我最终确定的底盘内部尺寸约为长150mm x 宽100mm x 高60mm。这个尺寸能宽松放下所有元件。绘制侧板在Illustrator中绘制底盘的前板、后板、左侧板、右侧板和底板。关键点是设计卡扣。卡扣的宽度通常等于材料厚度3mm卡扣“脖子”的长度建议为4-5mm以确保咬合牢固。在需要拼接的板件边缘均匀分布卡扣和对应的卡槽。预留关键孔位电机安装孔在左侧板和右侧板靠近底部的位置根据你的TT电机外形开出方形或圆形的安装孔。电机轴心要略高于底板下沿确保轮子能触地。轮子缺口在安装了电机的侧板下方开一个半径略大于轮子半径的半圆形缺口。电路板固定孔在底板上根据Arduino Uno和L298N的安装孔位置用圆形工具画出小孔直径约3mm用于后续拧螺丝。线材通道在侧板或后板上开一些小圆孔或方孔方便电机线、电源线穿过。导出与切割将所有画好的部件排列在一个画板内确保线条均为0.001mm的极细描边这是激光切割机识别切割路径的通用设置。将文件发送给激光切割机使用3mm MDF板材进行切割。切割参数通常需要测试对于3mm MDF功率约40-50%速度约10-15mm/s。后期处理切割完成后小心地将零件从板材上取下。可以用砂纸轻轻打磨卡扣边缘使其更容易组装。如果需要可以在这个阶段给木板上色或上清漆。3.2 第二步电路焊接与底盘组装这是将电子部分和机械部分结合的关键一步顺序很重要。电路焊接与连接准备线材剪裁杜邦线并将电机、电源线等焊接上合适的接插件如杜邦头或端子方便插拔。连接电机与L298N两个TT电机的四根线每根电机两根分别接到L298N的OUT1、OUT2电机A和OUT3、OUT4电机B。连接L298N与ArduinoL298N的IN1,IN2,IN3,IN4分别接Arduino的数字引脚4,5,6,7这些引脚都支持PWM方便后续调速。L298N的ENA和ENB接Arduino的9和10脚PWM引脚用于调速。连接蓝牙模块HC-06的VCC- Arduino5VHC-06的GND- ArduinoGNDHC-06的TX- ArduinoRX(引脚0)HC-06的RX- ArduinoTX(引脚1)注意如前述建议在TX-RX间加1kΩ电阻。连接电源电池盒正负极接L298N的12V和GND输入端子。暂时不要连接L298N上的5V输出到任何地方。Arduino通过USB线独立供电。底盘机械组装先不安装轮子。按照设计图将所有侧板、底板通过卡扣拼装起来。拼装时在卡扣结合处涂抹少量木工白胶然后组装并用橡皮筋或夹子固定等待胶水干透通常需要几小时。这一步确保底盘结构牢固。将3D打印的“雪橇”从动轮用螺丝或胶水固定在底盘尾部正中央。电路安装与固定待底盘胶水干透后将组装好的电路ArduinoL298N已连接好线放入底盘内。对照底板上预先画好的孔位用M3螺丝和螺母将Arduino和L298N固定到底板上。这能防止机器人运动时元件晃动脱落。将电池盒也用尼龙扎带或双面胶固定在底板上。最后将两个TT电机安装到侧板的电机孔中从外部用配套的螺丝固定。然后将轮子压装到电机轴上。3.3 第三步杯架附件的设计与制作在线生成基础盒体访问MakerCase网站选择“Box Joint”盒子拼接类型。输入你期望的杯架内部尺寸。例如我输入的是Width宽度80mm Depth深度80mm Height高度110mm Material Thickness材料厚度3mm。点击“Download Plans”下载SVG文件。个性化修改用Illustrator打开下载的SVG文件。你会看到展开的六面体图纸。在顶板的中心画一个直径76mm的圆这是放杯子的孔。将这个圆的线条也设置为0.001mm描边这样激光切割机会把它切出来。你还可以在侧板上切割出名字、图案或者散热孔。在底板上设计2-4个螺丝孔位位置要与机器人底盘顶部的固定孔对应。切割与组装将修改后的文件送去激光切割同样用3mm MDF。切割完成后将所有板件拼装成一个开口向上的盒子并用木胶粘牢。顶部的圆孔就是杯座。3.4 第四步Arduino程序编写与上传这是让机器人“活”起来的大脑。代码的核心是解析蓝牙指令并控制L298N驱动电机。// 蓝牙遥控两轮小车杯架机器人 // 引脚定义 const int IN1 4; const int IN2 5; const int ENA 9; // 左轮PWM const int IN3 6; const int IN4 7; const int ENB 10; // 右轮PWM // 蓝牙指令字符 char btCommand; void setup() { // 设置所有控制引脚为输出 pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); // 初始状态停止所有电机 stopMotors(); // 启动串口通信与蓝牙模块通信 Serial.begin(9600); // 确保与你的HC-06模块波特率一致通常是9600 Serial.println(Robot Cup Holder Ready!); } void loop() { // 如果串口有数据蓝牙指令到来 if (Serial.available() 0) { btCommand Serial.read(); // 读取一个字符 Serial.print(Received: ); Serial.println(btCommand); // 回传指令用于调试 // 根据接收到的字符执行相应动作 switch (btCommand) { case F: // 前进 forward(); break; case B: // 后退 backward(); break; case L: // 左转原地逆时针 turnLeft(); break; case R: // 右转原地顺时针 turnRight(); break; case S: // 停止 stopMotors(); break; // 可以扩展更多指令如 1, 2, 3 对应不同速度档位 default: // 如果是未知指令可选择忽略或停止 // stopMotors(); break; } } } // 电机控制函数 void forward() { // 左轮前进 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 200); // PWM速度值范围0-255 // 右轮前进 digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 200); } void backward() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 200); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, 200); } void turnLeft() { // 左轮后退右轮前进 - 原地左转 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 200); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 200); } void turnRight() { // 左轮前进右轮后退 - 原地右转 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 200); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, 200); } void stopMotors() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); analogWrite(ENA, 0); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); analogWrite(ENB, 0); }代码要点解析定义了控制L298N所需的全部引脚。setup()函数中初始化引脚并停止电机这是一个好习惯防止上电瞬间电机乱转。主循环loop()不断检查蓝牙串口是否有数据。指令采用单字符形式简洁高效。每个动作前进、后退等都封装成了函数代码结构清晰易于维护和扩展。analogWrite(pin, value)中的value是PWM值控制电机速度。这里设为200约78%功率你可以根据实际情况调整。值太小可能扭矩不足太大则速度过快不易控制。上传程序用USB线将Arduino连接到电脑。在Arduino IDE中选择正确的板卡Arduino Uno和端口。上传前务必先拔掉蓝牙模块与Arduino RX/TX的连接因为程序上传也使用这两个引脚蓝牙模块连接会导致冲突上传失败。点击上传。上传成功后再重新接回蓝牙模块。3.5 第五步蓝牙连接与手机控制蓝牙配对给机器人上电插上电池盒Arduino通过USB供电或连接充电宝。打开手机蓝牙设置搜索新设备。你应该能找到一个名为“HC-06”或类似的设备默认密码通常是1234或0000。进行配对。选择控制端App方案一最简单在手机应用商店搜索“Arduino Bluetooth Controller”或“蓝牙串口”会有大量现成的App。选择一个界面简洁、好评多的。在App内连接你的HC-06模块然后自定义按钮将按钮按下发送的字符设置为F,B,L,R,S即可对应控制。方案二可定制使用MIT App Inventor等图形化工具自己开发一个简单的App自由度更高可以设计更酷的界面和添加摇杆控制。联调测试连接成功后按下手机App上的“前进”按钮发送F观察两个轮子是否都向前转。如果有一个轮子反转说明该电机接线顺序反了只需将该电机接到L298N上的两根线对调即可。测试转向功能检查机器人转弯是否灵活。4. 调试心得、问题排查与优化建议4.1 常见问题与解决方案问题现象可能原因排查与解决步骤上电后毫无反应Arduino灯不亮1. 电源未接通2. USB线或电源线故障3. 电源短路1. 检查电池盒开关、电池电量、USB线连接。2. 用万用表测量Arduino Vin或5V引脚是否有电压。3. 检查电路是否有短路点特别是L298N接线。蓝牙模块指示灯不亮或快速闪烁1. 电源接反或电压不对2. 模块损坏1. 确认VCC接5VGND接GND。2. 尝试更换模块。HC-06未配对时指示灯慢闪配对后常亮。手机搜不到蓝牙设备1. 模块未进入配对模式2. 模块已与其他设备配对1. 重启机器人电源模块上电初期会进入配对模式。2. 尝试用AT命令重置模块需断开与Arduino的RX/TX连接通过USB转TTL模块连接电脑设置。手机已连接但发送指令机器人不动1. 蓝牙串口通信波特率不匹配2. Arduino程序未运行或出错3. 电机驱动部分故障1. 检查程序Serial.begin(9600);与模块波特率是否一致HC-06默认9600。2. 打开Arduino IDE的串口监视器波特率9600看发送指令时是否有回显。确认程序已上传。3. 拔掉蓝牙用串口监视器直接发送F,B等字符测试。如果还不行检查L298N使能引脚ENA, ENB是否接好电机线是否接牢。机器人运动时Arduino频繁重启动力电源干扰控制电源这是最经典的问题确保Arduino通过独立的USB口电脑或充电宝供电而不是依靠L298N的5V输出。电机启停会造成电压骤降。机器人走不直两个电机存在细微差异或轮子摩擦力不同这是两轮小车的通病。在程序中为左右轮设置不同的PWM补偿值。例如如果总是右偏可以尝试analogWrite(ENA, 200); analogWrite(ENB, 190);微调ENB的值直到走直线。杯架在移动中晃动或倾倒1. 杯架重心过高2. 底盘速度过快或启停太猛3. 连接不牢固1. 尽量使用矮胖的杯子或降低杯架高度。2. 在程序中加入加速度控制让启动和停止更平缓。3. 检查杯架与底盘的螺丝是否拧紧。4.2 项目优化与扩展思路这个基础版本完成后你可以从多个维度进行升级让它变得更智能、更实用增加速度控制在手机App上添加滑块或多个按钮发送不同的字符如1,2,3在Arduino代码中对应不同的analogWrite值实现多档调速。加入超声波避障在机器人前方加一个HC-SR04超声波模块。修改代码使其在前进时持续测量距离当遇到障碍物比如小于20cm时自动停止或转向实现半自动巡航送水。升级为Wi-Fi控制与摄像头将Arduino Uno换成NodeMCUESP8266或ESP32接入本地Wi-Fi。你就可以通过网页或手机App在任意网络内控制它甚至加一个ESP32-CAM模块实现第一人称视角FPV遥控看看杯子到底送到哪了。实现自动循迹或定点巡航在底盘底部增加几个红外反射传感器让它能沿着地上的黑色胶带行走循迹。或者结合超声波和编码器测量轮子实际转动的传感器尝试编写简单的程序让它从A点移动到B点。美化与个性化给木制部件涂上喜欢的颜色或图案。用LED灯带装饰杯架让它成为房间里一个有趣的智能摆设。这个项目最吸引人的地方在于它从一个非常具体的小需求出发串联起了机械、电子、编程和通信多个领域的知识。过程中遇到的每一个问题从轮子卡住到电机干扰都是宝贵的实践经验。当你最终看到这个自己亲手打造的小机器人听话地载着你的水杯滑过来时那种成就感是无可替代的。希望这份详细的教程能帮你少走弯路顺利做出属于自己的蓝牙遥控机器人杯架。如果在制作中遇到新的问题不妨把它看作是下一个优化功能的起点创客的乐趣就在于此。
Arduino蓝牙遥控机器人杯架:从零打造智能送水小车的完整指南
1. 项目概述与核心思路最近在整理工作室时翻出了一个之前在学校做的项目——一个能用手机蓝牙遥控的机器人杯架。当时做这个的初衷挺简单的就是觉得每次在书桌或工作台前想喝口水还得伸手去够杯子有点打断思路。如果能有个“小跟班”把杯子送过来岂不美哉这个想法催生了这个结合了Arduino、蓝牙遥控、简易机器人底盘和3D打印附件的创客项目。它本质上是一个两轮差速驱动的移动平台顶部搭载了一个可定制的杯架通过手机App就能指挥它前进、后退、转弯把饮料平稳地送到你手边。这个项目非常适合有一定电子和编程基础想深入体验从设计、制作到调试全流程的爱好者。它涵盖了机械结构设计激光切割/3D打印、电路搭建电机驱动、蓝牙模块、嵌入式编程Arduino以及无线通信蓝牙等多个环节是一个综合性很强的练手项目。做完之后你不仅能收获一个实用的“懒人神器”更能系统掌握如何让一个想法从图纸变成能动的实物。下面我就把自己当时的设计思路、踩过的坑以及详细的制作步骤分享出来。2. 核心部件选型与设计考量2.1 主控与通信方案为什么是Arduino Uno HC-05/06主控芯片的选择是项目的基石。我直接使用了经典的Arduino Uno R3。原因很简单资源丰富、社区支持强大、引脚数量完全够用。我们需要控制两个直流电机用于移动和两个舵机用于可能的抬升或转向机构本项目中杯架为固定式舵机可作为扩展预留Uno的6个PWM引脚和足够的数字I/O口绰绰有余。对于初学者它的稳定性是首要考虑因素。无线通信方面蓝牙模块如HC-05或HC-06是性价比和易用性的最佳平衡点。HC-05可以主从一体更灵活HC-06只能作为从机但价格通常更低对于本项目手机作为主机机器人作为从机完全够用。选择蓝牙而非Wi-Fi或射频模块主要是考虑手机控制的便利性——几乎每个人的手机都自带蓝牙无需额外硬件且App开发或使用现成App门槛较低。它的有效控制距离一般在10米以内对于室内桌面或房间内的移动送水场景完全足够。注意购买蓝牙模块时务必留意其工作电压。常见的HC-05/06模块逻辑电平是3.3V虽然很多型号标明兼容5V TTL但为稳妥起见建议在Arduino的TX发送引脚到模块的RX引脚之间串联一个1k-2kΩ的电阻分压避免5V信号长期损坏模块。模块的VCC接5V通常没问题。2.2 动力与驱动系统电机、驱动板与电源配置机器人的移动采用经典的两轮差速驱动方案。这意味着通过控制左右两个轮子的转速和方向就能实现前进、后退、原地转弯和弧形运动。电机选择我使用了两个普通的TT减速直流电机。这种电机价格低廉自带减速箱输出扭矩较大能轻松带动木质底盘和一杯水的重量。关键参数是工作电压常用3-6V和空载转速。我选用的是工作电压为4.5-6V的型号。电机驱动板Arduino的I/O引脚无法直接驱动电机需要电机驱动板。我选择了L298N双H桥驱动模块。它一片就能驱动两个直流电机并且可以方便地控制电机的正反转和PWM调速。它的驱动能力单桥2A峰值对于TT电机来说富富有余。电源管理这是容易出问题的地方。整个系统存在两个电源动力电源为L298N和电机供电。我使用了一个4节AA电池盒6V。为什么不用锂电池AA电池盒更容易获取电压标准且无需复杂的充电和保护电路适合入门项目。实测驱动电机和底盘负载电量足够持续运行数小时。控制电源为Arduino Uno和蓝牙模块供电。这里有个关键细节千万不要只用电电池盒通过L298N的5V输出给Arduino供电当电机启动或堵转时电压会被拉低可能导致Arduino复位或蓝牙模块断开。正确的做法是电池盒正负极接入L298N的电源输入端同时用一根单独的USB线为Arduino供电调试时连接电脑运行时可以连接一个手机充电宝。这样实现了动力电与控制电的隔离系统稳定性大大提升。2.3 机械结构设计底盘与杯架底盘设计材料我选择了**3mm厚的MDF中密度纤维板**进行激光切割。MDF成本低易于切割强度对于小型机器人足够。你也可以用亚克力视觉效果更好但价格更贵。设计软件使用Adobe Illustrator或Fusion 360导出DXF绘制矢量图。核心是设计一个**“榫卯”结构**的盒子所有部件通过卡扣和手指槽拼装无需螺丝只用木胶加固。这能极大简化组装。关键尺寸底盘大小要能容纳Arduino、L298N、电池盒等所有电路。必须为电机的轮子预留缺口这是我踩过的坑第一版设计侧板是完整的装轮子时发现会卡住。后来在侧板底部开了半圆形的缺口。考虑重心。电池、电机等较重部件应尽量靠近底盘中心且位置偏低防止转弯时倾倒。从动轮/万向轮两轮驱动必须有一个或多个从动点保持平衡。我设计了一个简单的**“雪橇”式塑料片**作为尾部拖曳滑轨用3D打印制作。你也可以直接购买一个万向球轮。杯架附件设计核心功能就是一个固定在底盘上的容器。设计思路我用了更取巧的办法——MakerCase网站。这是一个在线生成激光切割盒子图纸的工具。输入你想要的内部长宽高例如为了放一个直径77mm的杯子我设置内径为80mm x 80mm高度110mm它就能自动生成带卡扣的六面体盒子图纸。定制化将MakerCase生成的DXF文件导入Illustrator在顶板上画一个直径76mm的圆并切割出来这就是放杯子的孔。你还可以在侧板设计一些图案或镂空减轻重量。固定方式在杯架底部和机器人底盘顶部设计对应的螺丝孔位用螺丝螺母固定。如果需要可拆卸可以考虑使用强磁铁。3. 详细制作步骤与实操要点3.1 第一步机器人底盘的设计与激光切割确定整体尺寸我最终确定的底盘内部尺寸约为长150mm x 宽100mm x 高60mm。这个尺寸能宽松放下所有元件。绘制侧板在Illustrator中绘制底盘的前板、后板、左侧板、右侧板和底板。关键点是设计卡扣。卡扣的宽度通常等于材料厚度3mm卡扣“脖子”的长度建议为4-5mm以确保咬合牢固。在需要拼接的板件边缘均匀分布卡扣和对应的卡槽。预留关键孔位电机安装孔在左侧板和右侧板靠近底部的位置根据你的TT电机外形开出方形或圆形的安装孔。电机轴心要略高于底板下沿确保轮子能触地。轮子缺口在安装了电机的侧板下方开一个半径略大于轮子半径的半圆形缺口。电路板固定孔在底板上根据Arduino Uno和L298N的安装孔位置用圆形工具画出小孔直径约3mm用于后续拧螺丝。线材通道在侧板或后板上开一些小圆孔或方孔方便电机线、电源线穿过。导出与切割将所有画好的部件排列在一个画板内确保线条均为0.001mm的极细描边这是激光切割机识别切割路径的通用设置。将文件发送给激光切割机使用3mm MDF板材进行切割。切割参数通常需要测试对于3mm MDF功率约40-50%速度约10-15mm/s。后期处理切割完成后小心地将零件从板材上取下。可以用砂纸轻轻打磨卡扣边缘使其更容易组装。如果需要可以在这个阶段给木板上色或上清漆。3.2 第二步电路焊接与底盘组装这是将电子部分和机械部分结合的关键一步顺序很重要。电路焊接与连接准备线材剪裁杜邦线并将电机、电源线等焊接上合适的接插件如杜邦头或端子方便插拔。连接电机与L298N两个TT电机的四根线每根电机两根分别接到L298N的OUT1、OUT2电机A和OUT3、OUT4电机B。连接L298N与ArduinoL298N的IN1,IN2,IN3,IN4分别接Arduino的数字引脚4,5,6,7这些引脚都支持PWM方便后续调速。L298N的ENA和ENB接Arduino的9和10脚PWM引脚用于调速。连接蓝牙模块HC-06的VCC- Arduino5VHC-06的GND- ArduinoGNDHC-06的TX- ArduinoRX(引脚0)HC-06的RX- ArduinoTX(引脚1)注意如前述建议在TX-RX间加1kΩ电阻。连接电源电池盒正负极接L298N的12V和GND输入端子。暂时不要连接L298N上的5V输出到任何地方。Arduino通过USB线独立供电。底盘机械组装先不安装轮子。按照设计图将所有侧板、底板通过卡扣拼装起来。拼装时在卡扣结合处涂抹少量木工白胶然后组装并用橡皮筋或夹子固定等待胶水干透通常需要几小时。这一步确保底盘结构牢固。将3D打印的“雪橇”从动轮用螺丝或胶水固定在底盘尾部正中央。电路安装与固定待底盘胶水干透后将组装好的电路ArduinoL298N已连接好线放入底盘内。对照底板上预先画好的孔位用M3螺丝和螺母将Arduino和L298N固定到底板上。这能防止机器人运动时元件晃动脱落。将电池盒也用尼龙扎带或双面胶固定在底板上。最后将两个TT电机安装到侧板的电机孔中从外部用配套的螺丝固定。然后将轮子压装到电机轴上。3.3 第三步杯架附件的设计与制作在线生成基础盒体访问MakerCase网站选择“Box Joint”盒子拼接类型。输入你期望的杯架内部尺寸。例如我输入的是Width宽度80mm Depth深度80mm Height高度110mm Material Thickness材料厚度3mm。点击“Download Plans”下载SVG文件。个性化修改用Illustrator打开下载的SVG文件。你会看到展开的六面体图纸。在顶板的中心画一个直径76mm的圆这是放杯子的孔。将这个圆的线条也设置为0.001mm描边这样激光切割机会把它切出来。你还可以在侧板上切割出名字、图案或者散热孔。在底板上设计2-4个螺丝孔位位置要与机器人底盘顶部的固定孔对应。切割与组装将修改后的文件送去激光切割同样用3mm MDF。切割完成后将所有板件拼装成一个开口向上的盒子并用木胶粘牢。顶部的圆孔就是杯座。3.4 第四步Arduino程序编写与上传这是让机器人“活”起来的大脑。代码的核心是解析蓝牙指令并控制L298N驱动电机。// 蓝牙遥控两轮小车杯架机器人 // 引脚定义 const int IN1 4; const int IN2 5; const int ENA 9; // 左轮PWM const int IN3 6; const int IN4 7; const int ENB 10; // 右轮PWM // 蓝牙指令字符 char btCommand; void setup() { // 设置所有控制引脚为输出 pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); pinMode(ENA, OUTPUT); pinMode(ENB, OUTPUT); // 初始状态停止所有电机 stopMotors(); // 启动串口通信与蓝牙模块通信 Serial.begin(9600); // 确保与你的HC-06模块波特率一致通常是9600 Serial.println(Robot Cup Holder Ready!); } void loop() { // 如果串口有数据蓝牙指令到来 if (Serial.available() 0) { btCommand Serial.read(); // 读取一个字符 Serial.print(Received: ); Serial.println(btCommand); // 回传指令用于调试 // 根据接收到的字符执行相应动作 switch (btCommand) { case F: // 前进 forward(); break; case B: // 后退 backward(); break; case L: // 左转原地逆时针 turnLeft(); break; case R: // 右转原地顺时针 turnRight(); break; case S: // 停止 stopMotors(); break; // 可以扩展更多指令如 1, 2, 3 对应不同速度档位 default: // 如果是未知指令可选择忽略或停止 // stopMotors(); break; } } } // 电机控制函数 void forward() { // 左轮前进 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 200); // PWM速度值范围0-255 // 右轮前进 digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 200); } void backward() { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 200); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, 200); } void turnLeft() { // 左轮后退右轮前进 - 原地左转 digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); analogWrite(ENA, 200); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); analogWrite(ENB, 200); } void turnRight() { // 左轮前进右轮后退 - 原地右转 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); analogWrite(ENA, 200); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); analogWrite(ENB, 200); } void stopMotors() { digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); analogWrite(ENA, 0); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW); analogWrite(ENB, 0); }代码要点解析定义了控制L298N所需的全部引脚。setup()函数中初始化引脚并停止电机这是一个好习惯防止上电瞬间电机乱转。主循环loop()不断检查蓝牙串口是否有数据。指令采用单字符形式简洁高效。每个动作前进、后退等都封装成了函数代码结构清晰易于维护和扩展。analogWrite(pin, value)中的value是PWM值控制电机速度。这里设为200约78%功率你可以根据实际情况调整。值太小可能扭矩不足太大则速度过快不易控制。上传程序用USB线将Arduino连接到电脑。在Arduino IDE中选择正确的板卡Arduino Uno和端口。上传前务必先拔掉蓝牙模块与Arduino RX/TX的连接因为程序上传也使用这两个引脚蓝牙模块连接会导致冲突上传失败。点击上传。上传成功后再重新接回蓝牙模块。3.5 第五步蓝牙连接与手机控制蓝牙配对给机器人上电插上电池盒Arduino通过USB供电或连接充电宝。打开手机蓝牙设置搜索新设备。你应该能找到一个名为“HC-06”或类似的设备默认密码通常是1234或0000。进行配对。选择控制端App方案一最简单在手机应用商店搜索“Arduino Bluetooth Controller”或“蓝牙串口”会有大量现成的App。选择一个界面简洁、好评多的。在App内连接你的HC-06模块然后自定义按钮将按钮按下发送的字符设置为F,B,L,R,S即可对应控制。方案二可定制使用MIT App Inventor等图形化工具自己开发一个简单的App自由度更高可以设计更酷的界面和添加摇杆控制。联调测试连接成功后按下手机App上的“前进”按钮发送F观察两个轮子是否都向前转。如果有一个轮子反转说明该电机接线顺序反了只需将该电机接到L298N上的两根线对调即可。测试转向功能检查机器人转弯是否灵活。4. 调试心得、问题排查与优化建议4.1 常见问题与解决方案问题现象可能原因排查与解决步骤上电后毫无反应Arduino灯不亮1. 电源未接通2. USB线或电源线故障3. 电源短路1. 检查电池盒开关、电池电量、USB线连接。2. 用万用表测量Arduino Vin或5V引脚是否有电压。3. 检查电路是否有短路点特别是L298N接线。蓝牙模块指示灯不亮或快速闪烁1. 电源接反或电压不对2. 模块损坏1. 确认VCC接5VGND接GND。2. 尝试更换模块。HC-06未配对时指示灯慢闪配对后常亮。手机搜不到蓝牙设备1. 模块未进入配对模式2. 模块已与其他设备配对1. 重启机器人电源模块上电初期会进入配对模式。2. 尝试用AT命令重置模块需断开与Arduino的RX/TX连接通过USB转TTL模块连接电脑设置。手机已连接但发送指令机器人不动1. 蓝牙串口通信波特率不匹配2. Arduino程序未运行或出错3. 电机驱动部分故障1. 检查程序Serial.begin(9600);与模块波特率是否一致HC-06默认9600。2. 打开Arduino IDE的串口监视器波特率9600看发送指令时是否有回显。确认程序已上传。3. 拔掉蓝牙用串口监视器直接发送F,B等字符测试。如果还不行检查L298N使能引脚ENA, ENB是否接好电机线是否接牢。机器人运动时Arduino频繁重启动力电源干扰控制电源这是最经典的问题确保Arduino通过独立的USB口电脑或充电宝供电而不是依靠L298N的5V输出。电机启停会造成电压骤降。机器人走不直两个电机存在细微差异或轮子摩擦力不同这是两轮小车的通病。在程序中为左右轮设置不同的PWM补偿值。例如如果总是右偏可以尝试analogWrite(ENA, 200); analogWrite(ENB, 190);微调ENB的值直到走直线。杯架在移动中晃动或倾倒1. 杯架重心过高2. 底盘速度过快或启停太猛3. 连接不牢固1. 尽量使用矮胖的杯子或降低杯架高度。2. 在程序中加入加速度控制让启动和停止更平缓。3. 检查杯架与底盘的螺丝是否拧紧。4.2 项目优化与扩展思路这个基础版本完成后你可以从多个维度进行升级让它变得更智能、更实用增加速度控制在手机App上添加滑块或多个按钮发送不同的字符如1,2,3在Arduino代码中对应不同的analogWrite值实现多档调速。加入超声波避障在机器人前方加一个HC-SR04超声波模块。修改代码使其在前进时持续测量距离当遇到障碍物比如小于20cm时自动停止或转向实现半自动巡航送水。升级为Wi-Fi控制与摄像头将Arduino Uno换成NodeMCUESP8266或ESP32接入本地Wi-Fi。你就可以通过网页或手机App在任意网络内控制它甚至加一个ESP32-CAM模块实现第一人称视角FPV遥控看看杯子到底送到哪了。实现自动循迹或定点巡航在底盘底部增加几个红外反射传感器让它能沿着地上的黑色胶带行走循迹。或者结合超声波和编码器测量轮子实际转动的传感器尝试编写简单的程序让它从A点移动到B点。美化与个性化给木制部件涂上喜欢的颜色或图案。用LED灯带装饰杯架让它成为房间里一个有趣的智能摆设。这个项目最吸引人的地方在于它从一个非常具体的小需求出发串联起了机械、电子、编程和通信多个领域的知识。过程中遇到的每一个问题从轮子卡住到电机干扰都是宝贵的实践经验。当你最终看到这个自己亲手打造的小机器人听话地载着你的水杯滑过来时那种成就感是无可替代的。希望这份详细的教程能帮你少走弯路顺利做出属于自己的蓝牙遥控机器人杯架。如果在制作中遇到新的问题不妨把它看作是下一个优化功能的起点创客的乐趣就在于此。