先聊一个很多刚开始玩开源硬件的朋友都会遇到的问题网上搜“Arduino 小车”“Micro:bit 机器人”资料确实多但大多各讲各的。有人用 Arduino UNO 搭了一台避障车换到 Micro:bit 又得重新学一套接线有人买了一堆舵机、传感器、扩展板最后发现车架限制太多根本装不回去。ProtoBot 这类开源机器人套件解决的就是这个“折腾起来太散”的痛点。它本质是一套以主控板为核心、带统一车架和扩展接口的小型机器人平台Arduino 和 Micro:bit 都能直接安装使用。本文就把我的实际搭建经验整理成一份完整速通笔记从环境准备、接线思路、最小可运行代码到 20 种改装方向和一个完整的避障小车实战案例最后补充高频问题排查与工程建议。新手可以照着一步步搭有基础的也能直接跳到自己关心的章节。1. ProtoBot 是什么一台值得折腾的开源机器人小钢炮1.1 项目背景与定位ProtoBot 从命名就能看出来它偏向“原型验证 机器人教育”。市面上的机器人套件通常分两类一类是成品遥控车买回来只能按固定玩法跑另一类是零散开发板加传感器模块需要自己设计结构。ProtoBot 走的是中间路线它保留了开源硬件的灵活性又通过统一的扩展板和车架把“自己搭结构”的成本降了下来。这种定位在学习和比赛场景里非常实用。因为多数情况下我们并不需要从零画 PCB、设计底盘而是希望把时间花在控制逻辑和功能实现上。ProtoBot 相当于给你提供了一个可靠的“骨架”你只需要往上面叠加传感器、执行器和代码。1.2 适合哪些人入手如果你属于下面几类人ProtoBot 这类开源套件应该会比较对胃口Arduino 初学者想从 LED 闪烁进阶到“让一台车动起来”需要一个简单但完整的学习载体。Micro:bit 教学用户学校社团或编程课上用 Micro:bit 做小型机器人项目。机器人比赛备赛选手需要快速验证方案比如巡线、避障、遥控再迭代结构。DIY 折腾爱好者手里有闲置舵机、传感器模块想找个稳定车架把它们组合起来。1.3 为什么不二选一而是“双主控兼容”很多套件只支持一种主控ProtoBot 强调 Arduino 和 Micro:bit 全兼容这对入门阶段的好处是你可以先用 Micro:bit 的图形化编程跑通逻辑再用 Arduino 写更精细的控制代码同一套车架和电机不用换。我自己的体验是Micro:bit 适合快速验证算法流程比如先测试“遇到障碍就转弯”这个逻辑是否合理Arduino 则适合做最终版本因为引脚控制更灵活对 PWM 调速、舵机角度、多传感器并发处理都更顺手。双兼容设计让同一台小车在不同学习阶段都能继续使用不需要重复购买硬件。2. 上手前的环境准备与硬件清单2.1 基础硬件清单在开始接线前先把硬件准备齐。ProtoBot 本身是一个半成品套件通常包含车架、电机、轮子、扩展板或安装孔位。你需要根据自己手上的主控板准备不同方案组件Arduino 方案Micro:bit 方案主控板Arduino UNO / NanoMicro:bit V2电机驱动L298N 或 TB6612 模块扩展板带电机驱动供电18650 电池盒或 7.4V 锂电池电池盒通过扩展板供电传感器超声波、红外、光敏等同左接口按扩展板调整注意ProtoBot 不同批次、不同版本的扩展板引脚定义可能不同。焊接或接线前先看套件附带原理图或者用万用表量一下扩展板丝印不要直接照搬网上的引脚号。2.2 Arduino 开发环境准备Arduino 的开发环境建议使用 Arduino IDE 1.8.x 或 2.x 版本2.x 的界面更现代自动补全也更友好但 1.8.x 在低配电脑上更流畅。安装完成后还需要做两件事安装开发板支持包。如果使用 Arduino UNO默认支持包已经包含如果使用 Nano、ESP32 等型号需要在“开发板管理器”中搜索安装。确认端口和开发板设置。将主控板通过 USB 连接电脑在“工具 → 开发板”中选择对应型号在“工具 → 端口”中选中新出现的 COM 口。对于 ProtoBot 项目还需要用到舵机控制库。Arduino IDE 自带的 Servo 库已经够用不需要额外安装第三方库。2.3 Micro:bit 编程环境Micro:bit 有两条主要编程路线MakeCode 图形化编程浏览器访问 makecode.microbit.org不需要安装软件。适合初学者快速上手。MicroPython 代码编程适合已经掌握基础编程概念的读者可以用文本方式控制引脚。无论哪条路线最终都会生成一个 hex 文件把它拖入 Micro:bit 的 U 盘即可完成烧录。Micro:bit 使用过程中需要保持 USB 线连接稳定拔插时会有一个盘符出现和消失的过程这是正常现象。2.4 网络资料与中文硬字幕ProtoBot 相关的视频教程资料里有一部分内置了中文硬字幕。这在中文化教程里是一个比较实用的设计——软字幕依赖播放器硬字幕直接嵌入画面虽然不能关闭但对照接线、调参时不容易看漏。建议你在跟着视频操作时准备一个暂停键看到接线细节就停下来对照实物确认。3. 核心控制原理拆解3.1 机器人的控制闭环一台机器人小车本质上是一个“输入 — 处理 — 输出”的控制闭环输入传感器采集环境信息比如超声波测距、红外检测黑线、光敏检测光照。处理主控板读取传感器数据根据预设逻辑决定动作。输出电机驱动产生转速差舵机改变角度LED 显示状态。理解这个闭环比记住某一行代码更重要。因为无论是 Arduino 还是 Micro:bit所有机器人项目的代码都是在实现这个闭环。避障车是“超声波输入 → 逻辑判断 → 电机转向输出”循迹车是“红外输入 → 判断偏离 → 修正电机速度输出”。3.2 电机驱动H 桥与 PWM直流电机不能直接用 Arduino 引脚驱动因为电机工作电流大而引脚只能提供很小的电流。这里就需要电机驱动模块常见的是 L298N 和 TB6612。它们的核心原理是 H 桥电路通过四个开关管组合控制电机两端电压方向从而实现正转、反转和刹车。电机调速用 PWM脉冲宽度调制也就是以很高的频率改变引脚高低电平的占空比。占空比越高等效电压越高电机转速越快。在 Arduino 中使用analogWrite()输出 0 到 255 的数值在 Micro:bit 中可以使用引脚的模拟写入功能。很多初学者会直接把电机电源和主控板电源接在一起导致电机启动瞬间拉低电压主控板复位。这一点会在后面“供电设计”中专门说明。3.3 传感器输入数字量与模拟量传感器输出分为两类数字量只有高电平或低电平比如红外循迹模块输出 0 或 1。模拟量连续变化的值比如光敏电阻模块读取光照强度超声波模块返回脉冲宽度。在 Arduino 中数字信号用digitalRead()读取模拟信号用analogRead()读取。超声波模块比较特殊它通过发送一个触发脉冲再测量回波持续时间来计算距离所以使用的是 GPIO 引脚的脉冲操作。3.4 供电设计为什么 USB 供电偶尔会重启一个非常常见的现象小车用 USB 线连电脑调试时一切正常一旦拔掉 USB、改用电池供电电机就转不动或者主控板反复重启。原因通常是电压和电流不足。Arduino 的 5V 引脚不能直接带动两个电机同时满速运行尤其是电机堵转瞬间电流会骤增。正确做法是电机电源和主控电源分开电机驱动模块直接接电池主控板通过 USB 或独立稳压模块供电。共地两路电源的 GND 必须连接在一起否则控制信号没有参考电平无法形成回路。选择合适电压电机驱动模块的供电范围通常在 6V 到 12V 之间具体看模块规格。ProtoBot 套件如果配了电源模块通常已经考虑了两路供电问题如果你是自己改造这一点要格外注意。4. 5 分钟速通从零搭建第一台 ProtoBot这一节用最短路径完成一个能前进后退的小车。4.1 安装车架与主控板先把车轮安装到减速电机上再把电机固定到车架对应孔位。然后根据 ProtoBot 车架的安装孔距选择对应主控板固定板。如果你用 Arduino UNO通常需要用铜柱和螺丝固定如果用 Micro:bit则需要用到扩展板将其插到车架的卡槽或螺丝孔上。这一步的关键是不要拧死螺丝。先固定到能保持位置等所有接线完成并测试通过后再统一拧紧避免反复拆装。4.2 接线以 Arduino TB6612 为例以常见的双路电机驱动模块 TB6612 为例接线逻辑如下驱动模块引脚连接到VM电池正极7.4VVCCArduino 5VGND电池负极和 Arduino GNDAIN1 / AIN2Arduino D5 / D6BIN1 / BIN2Arduino D9 / D10PWMA / PWMBArduino D3 / D11AO1 / AO2电机 A 两根线BO1 / BO2电机 B 两根线具体引脚号要根据你手上的扩展板或自己定义的连接方式调整这个表是常见通用映射。接好后记住电机两根线如果接反会导致正转变成反转代码里可以用HIGH/LOW互换来纠正。4.3 Arduino 最小可运行代码下面的代码实现“前进 2 秒 → 停止 1 秒 → 后退 2 秒 → 停止”// 文件路径ProtoBot_Test/ProtoBot_Test.ino const int motorA1 5; const int motorA2 6; const int motorB1 9; const int motorB2 10; void setup() { pinMode(motorA1, OUTPUT); pinMode(motorA2, OUTPUT); pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); } void loop() { // 前进 2 秒 digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); delay(2000); // 停止 1 秒 digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); delay(1000); // 后退 2 秒 digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); delay(2000); // 停止 1 秒 digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); delay(1000); }这段代码的逻辑很简单把驱动模块的 IN 引脚拉高或拉低电机就会转交换两个引脚的电平电机反转。如果小车一侧轮子反转说明那侧电机两根线接反了把电机两根线交换即可。4.4 Micro:bit 小彩蛋用 MicroPython 跑通电机Micro:bit 扩展板通常会把电机引脚映射到 P0、P1、P8、P12 等引脚。这里给出一个 MicroPython 示例# 文件路径main.pyMicro:bit MicroPython from microbit import * # 按扩展板实际丝印调整引脚号 motorA1 pin0 motorA2 pin1 motorB1 pin8 motorB2 pin12 while True: # 前进 2 秒 motorA1.write_digital(1) motorA2.write_digital(0) motorB1.write_digital(1) motorB2.write_digital(0) sleep(2000) # 停止 motorA1.write_digital(0) motorA2.write_digital(0) motorB1.write_digital(0) motorB2.write_digital(0) sleep(1000)把这个文件编译成 hex 后拖入 Micro:bit同样可以看到小车前进和停止。由于不同扩展板引脚映射差异较大上面代码中的引脚号需要根据你的扩展板文档修改。4.5 验证通电后应该看到什么插上电池打开 Arduino 的串口监视器如果代码里有Serial.println()会看到字符串输出。如果只跑上面的最小测试代码上电后小车应该执行“前进 → 停止 → 后退 → 停止”的循环。如果小车没反应先不要急着改代码按这个顺序排查电池是否有电电压是否足够。电机驱动模块的电源指示灯是否亮。Arduino 是否正常供电电源 LED 是否亮。接线是否松动特别是电机线。代码中使用的引脚与实物接线是否一致。5. 20 种改装方案全览ProtoBot 的乐趣在于改装。下面把常见改装方向分成五类一共 20 种。可以根据自己的水平选择难度用星级标注。5.1 方案速查表序号改装方向功能说明难度核心模块1超声波避障车检测前方障碍自动转弯★☆☆超声波 HC-SR042红外循迹车沿黑线行驶★☆☆红外循迹模块3光敏追踪车朝向光源移动★☆☆光敏电阻模块 x24蓝牙遥控车手机 App 控制★★★蓝牙模块 HC-055舵机云台摄像机支持上下左右转动★★☆二自由度舵机云台6机械爪抓取控制机械爪开合★★☆舵机驱动机械爪7两轮自平衡依靠姿态传感器保持平衡★★★★MPU6050 陀螺仪8四足迷你机器人四舵机行走★★★四路舵机9语音控制车语音指令控制动作★★★语音识别模块10手势识别控制手势控制前进后退★★★手势传感器 APDS996011温湿度监测车移动采集环境参数★★☆DHT11 / DHT2212火焰报警巡逻车检测火源并报警★★☆火焰传感器、蜂鸣器13智能风扇底座根据温度自动开风扇★☆☆DHT11、直流风扇14自动寻光向日葵舵机调整太阳能板朝向★☆☆光敏、舵机15色块分拣小车识别颜色并分类★★★颜色传感器 TCS23016麦克纳姆轮全向车实现横移、斜向移动★★★★麦克纳姆轮 x417履带越野版换成履带轮提高通过性★☆☆履带轮组18RGB 氛围灯板根据状态变化颜色★☆☆WS2812 LED 灯条19蜂鸣器音乐车播放音效和旋律★☆☆无源蜂鸣器20多车编队两车之间通信协同★★★★无线模块 nRF24L015.2 第一类感知与避障超声波避障是最经典的入门改装。核心逻辑就是使用超声波模块测距距离小于阈值就转弯。红外循迹车更适合在有黑白路径的场地玩。两个红外模块分别负责检测左右两侧如果左侧压到黑线说明车偏左需要右转修正反之亦然。光敏追踪车的原理类似把两个光敏电阻放在左右两侧比较两边光照强度哪边光强就往哪边转模拟向日葵的向光性。这三类方案共用同一个控制闭环传感器不同逻辑框架不变。建议新手先从超声波避障改起因为它对场地要求最低不需要额外铺设黑色胶带。5.3 第二类交互与控制蓝牙遥控车是最容易获得成就感的改装之一。HC-05 蓝牙模块通过串口与 Arduino 通信手机端使用任何“蓝牙串口”类 App 发送字符Arduino 根据字符决定前进、后退、左转、右转。注意 HC-05 默认波特率通常是 9600可以通过 AT 指令修改。语音控制车的思路和蓝牙遥控类似区别在于输入源变成了语音识别模块。模块识别到“前进”“后退”“停止”等关键词后输出对应的串口指令或 IO 电平。手势识别控制使用 APDS9960 这类手势传感器可以检测上下左右滑动对手掌距离敏感。改装时把它固定在小车前方做出不同的手势就能控制方向在展示场景中效果很好。5.4 第三类抓取与结构机械爪是很多机器人爱好者喜欢的改装方向。通常需要一个舵机驱动爪子的开合另一个舵机控制爪子抬起或放下。舵机的控制方式是向信号线发送 50Hz 的 PWM 波脉冲宽度决定转动角度。Arduino 中通过 Servo 库的write()方法控制角度。下面是一个舵机机械爪的控制片段#include Servo.h Servo clawServo; void setup() { clawServo.attach(11); // 舵机信号线接 D11 } void loop() { clawServo.write(0); // 爪子张开 delay(1000); clawServo.write(90); // 爪子闭合 delay(1000); }四足迷你机器人需要四个舵机分别控制四条腿代码复杂度明显提升需要设计步态也就是每条腿运动的时序。建议先在软件中模拟步态再接入真实舵机。5.5 第四类特殊底盘常规小车是两轮差速驱动只能前进后退和原地转向。如果你想实现横移、斜向漂移可以考虑麦克纳姆轮。四个轮子上的小滚轮呈 45 度角排列通过组合四轮转速方向可以实现全向移动。控制逻辑上要对四个电机的 PWM 值做矩阵运算难度较高但视觉效果很强。履带越野版是成本最低的改装直接把轮子换成履带轮组即可。履带车在草地、地毯上的通过性明显好于普通轮子缺点是转弯半径大、能耗高。两轮自平衡是最硬核的改装之一需要 MPU6050 读取加速度和角速度通过 PID 算法实时调整电机速度。这个项目会用到中断、滤波、PID 调参适合作为进阶学习目标不建议新手一上来就做。5.6 第五类场景功能温湿度监测车把 DHT11 固定在车架上方小车在室内移动采集不同位置的温湿度数据可以通过串口输出也可以加上 OLED 显示屏实时显示。火焰报警巡逻车在超声波避障的基础上叠加火焰传感器。火焰传感器对红外光敏感检测到火焰时蜂鸣器响铃并停车报警。改装时注意火焰传感器不能探头对准阳光直射的地方否则容易误报。RGB 氛围灯板使用 WS2812 灯条通过一根信号线就能控制多个灯珠的颜色和亮度可以把它粘在车架底部或四周根据小车状态显示不同颜色比如前进显示绿色、后退显示红色对于调试状态判断非常直观。6. 改装实例从方案到代码的完整闭环选择超声波避障车作为完整实例因为它的功能闭环清晰需要的硬件少代码逻辑容易理解也是后续很多改装的基础。6.1 功能拆解超声波避障车的任务可以拆成两部分测距超声波模块每 100ms 触发一次测距返回距离值。决策距离小于阈值例如 25cm时执行后退和转弯否则前进。在代码实现上测距函数可以复用到其他项目决策逻辑则是 Arduino 代码的核心也是未来添加更多传感器时扩展的位置。6.2 接线在之前电机测试接线的基础上增加超声波模块超声波模块引脚连接到VCCArduino 5VGNDArduino GNDTrigArduino D3EchoArduino D4注意 Echo 脚输出的是 5V 高电平脉冲如果你的主控板是 3.3V 供电的 Micro:bit需要通过分压电阻把 Echo 信号降到 3.3V 以下否则可能损坏引脚。6.3 Arduino 完整避障代码// 文件路径ProtoBot_Ultrasonic/ProtoBot_Ultrasonic.ino const int trigPin 3; const int echoPin 4; const int motorA1 5; const int motorA2 6; const int motorB1 9; const int motorB2 10; const int threshold 25; // 距离阈值单位 cm void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motorA1, OUTPUT); pinMode(motorA2, OUTPUT); pinMode(motorB1, OUTPUT); pinMode(motorB2, OUTPUT); Serial.begin(9600); } // 超声波测距返回单位 cm long getDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); long duration pulseIn(echoPin, HIGH); return duration * 0.034 / 2; } // 设置两个电机方向 void setMotor(int a1, int a2, int b1, int b2) { digitalWrite(motorA1, a1); digitalWrite(motorA2, a2); digitalWrite(motorB1, b1); digitalWrite(motorB2, b2); } void loop() { long dist getDistance(); Serial.print(Distance: ); Serial.println(dist); if (dist threshold) { // 后退 0.5 秒右转 0.6 秒 setMotor(LOW, HIGH, LOW, HIGH); delay(500); setMotor(LOW, HIGH, HIGH, LOW); delay(600); } else { // 正常前进 setMotor(HIGH, LOW, HIGH, LOW); } }这段代码的流程是先触发超声波模块发送声波再用pulseIn()等待回波计算距离。如果距离小于阈值先倒车再右转这是为了给小车足够的转弯空间。6.4 参数调优实际测试时有两个参数需要调整threshold距离阈值。速度越快的电机需要越大的阈值才能及时刹车转向。如果小车频繁原地打转说明阈值太大如果撞上障碍物才转向说明阈值太小。转弯持续时间代码中的delay(600)决定转向角度。地面摩擦力不同需要的持续时间不同。在地毯上转向慢时间要加长在光滑地面上要缩短。调优时可以用串口监视器观察距离值先确认超声波读数稳定再调整动作参数。这样可以把“传感器问题”和“控制问题”分开排查。7. 常见问题与排查思路下面整理 ProtoBot 改装过程中的高频问题按排查顺序给出解决方案。问题现象常见原因解决思路电机完全不转电源未接通、接线松动、驱动模块受损检查电源电压确认驱动模块指示灯重新插拔电机线小车前进时跑偏两侧电机转速不一致或一侧轮胎打滑在代码中给慢速一侧增加 PWM 补偿或检查轮胎磨损电机反转电机两根线接反交换电机线或在代码中交换 IN1/IN2 的逻辑电平舵机抖动供电不足或信号线接触不良舵机使用独立电源供电确保信号线连接牢固主控板反复重启电机启动瞬间拉低电压电机和主控分开供电增加大容量电容超声波距离不准传感器安装角度偏斜或 Echo 信号电平不匹配检查传感器是否垂直朝前3.3V 主控需分压Micro:bit 无法下载程序USB 线是充电线不支持数据传输更换可传输数据的 USB 数据线蓝牙连不上波特率不匹配或模块未进入配对模式设置相同波特率按住模块按键进入 AT 模式重新配置烧录时端口占用串口被串口监视器或其他软件占用关闭串口监视器和其他使用该 COM 口的程序代码编译报错缺少库文件或选错开发板型号检查库是否安装确认工具菜单中的开发板与实际一致这里要特别提醒一个最容易踩的坑很多 Micro:bit 随机附赠的 USB 线是供电专用的不能传数据。插上后电脑只显示充电图标但 Micro:bit 不会出现盘符。解决办法是换一根能传数据的 USB 数据线或使用手机充电线中支持数据传输的那一种。8. 最佳实践与工程建议8.1 供电与电气安全供电是整个机器人项目中最容易出问题的地方也是安全风险最高的部分。电机和主控尽量分开供电两路电源要共地。18650 电池不要混用新旧电池避免放电能力不一致。裸露的焊点和接线端子用热缩管或绝缘胶带包裹防止短路。锂电池充放电要在有人看护的环境下进行不要过充过放。调试时建议先用 USB 供电测试逻辑确认程序正确后再切换电池供电。这样能避免因为程序问题导致电机不受控制造成小车高速撞击墙壁。8.2 代码组织与版本管理代码看起来不长但改装方案增多后维护成本会快速上升。建议从一开始就养成几个习惯引脚定义集中放在文件开头不要散落在代码中。以后换接线方式只改一处。每个功能封装成独立函数比如getDistance()、setMotor()、turnLeft()。这样新增功能时不需要重写主循环。使用 Git 管理每次改装版本。比如v1-ultrasonic、v2-bluetooth每次改完一个功能提交一次。出现问题可以回退也能对比不同版本的代码差异。Arduino 项目通常是一个文件夹包含.ino文件。Git 仓库直接建立在项目文件夹外层即可。8.3 机械结构加固ProtoBot 的塑料车架在轻量改装下没有问题但如果加装了机械爪、二自由度云台、多个传感器需要留意结构强度。使用铜柱和螺母加固主控板不能只靠扎带。舵机安装时避免使用过长螺丝防止穿入舵机内部损坏齿轮。电池盒固定在车架重心位置避免小车头重脚轻导致翻车。频繁拆卸的位置可以考虑使用尼龙螺母减少螺丝滑丝概率。8.4 从套件到项目的思维转变玩 ProtoBot 到后面你会发现套件只是一个开始。真正的收获是建立“拆解需求 → 选择传感器 → 设计控制逻辑 → 迭代测试”的完整思路。比如你要做一个“自动整理桌面的机器人”核心功能拆出来可能包括循迹到目标点、舵机抓取物品、超声波避开障碍、蓝牙上报状态。这四个功能正好对应 ProtoBot 改装方案中的四个方向。先在套件上验证每个功能再考虑独立设计底盘和电路项目的成功率会高很多。如果你准备动手我的建议是先别急着把所有传感器都装上从最简单的前进后退开始跑通一个方案后再逐个叠加。这个从“能跑”到“会思考”的过程正是开源硬件最值得体验的部分。