基于Micro:bit的太阳能遥控小车:STEM教育实践与无线控制方案
1. 项目概述一个可无线遥控的微型太阳能小车几年前我在一所中学的创新实验室工作那里堆满了3D打印机、激光切割机和各种开源硬件。我的同事们正带着高中生团队为参加“太阳能汽车挑战赛”而埋头苦干打造一辆真正的、能坐人的太阳能车。那场面很酷但投入的时间和资源也相当惊人。我当时就想有没有一种方法能把这种激动人心的工程体验“民主化”让更多学生哪怕是在普通的教室里也能亲手搭建、编程并理解一辆太阳能车是如何工作的这个想法最终催生了眼前这个项目一个基于Micro:bit的微型太阳能遥控小车。它不仅仅是一个玩具。这个小车完整地集成了能源采集太阳能电池板、能量存储与管理充电控制器和可充电电池、动力驱动直流电机与齿轮箱以及智能控制Micro:bit微控制器与无线通信四大系统。通过图形化的MakeCode编程你可以用另一块Micro:bit作为遥控器无线控制小车的前进、后退甚至后期可以扩展转向功能。整个项目就像一堂浓缩的STEM实践课涵盖了物理能量转换、齿轮传动、工程结构设计、系统集成和计算机科学传感器数据处理、无线通信协议的核心概念。如果你是一位教育工作者想为学生寻找一个综合性的动手项目或者你是一位创客爱好者、家长想和孩子一起完成一个既有趣又有深度的周末工程亦或是你刚接触Micro:bit和硬件想找一个有明确目标的应用来练手——那么这个项目都非常适合。它不需要你具备电子或编程的深厚背景我将一步步拆解每个环节从拧螺丝、焊接线头到拖拽代码积木把原理和“为什么这么做”讲清楚。我们不止于“让它跑起来”更要理解背后每一处设计的选择与考量。2. 核心硬件选型与系统设计思路制作这样一个项目硬件选型是第一步也是最关键的一步。它决定了项目的可行性、成本以及最终的学习效果。我的核心思路是在保证功能完整和教育意义的前提下尽可能采用成熟、易得且适合教学场景的组件。2.1 动力与机械底盘为什么选择“青少年太阳能冲刺”套件项目的机械部分我直接选用了Pitsco公司的“青少年太阳能冲刺”Junior Solar Sprint, JSS竞赛套件中的底盘、车轮、车轴、齿轮和直流电机。这是一个经过多年教学实践检验的选择。首先标准化与可靠性。JSS套件是专为中学生太阳能车竞赛设计的其零件尺寸标准、兼容性好。塑料底盘轻便且有一定强度齿轮和车轴的配合精度足以满足我们这种低速、低负载的小车需求。自己从零开始设计底盘和传动系统对于初学者来说门槛过高且容易在机械调试上耗费大量时间偏离了学习控制系统的主线。其次模块化与可扩展性。套件中的电机是标准的130型直流电机这种电机在创客领域极其常见电压范围宽3-6V易于驱动。更重要的是它自带一个可更换的小齿轮可以与底盘上的大齿轮形成减速增扭的齿轮组。通过更换套件内提供的不同齿数的大齿轮我们可以轻松改变小车的“速比”从而在速度和扭矩之间进行权衡这本身就是一个极佳的工程实践课题。例如使用更小的驱动轮齿轮相对于电机齿轮可以获得更高的扭矩帮助小车爬上小坡但最高速度会降低。实操心得关于电机的选择如果你手头没有JSS套件完全可以寻找替代品。核心是找到一个工作电压在3-5V之间与我们的供电系统匹配、带有轴套或D型轴以便安装齿轮的微型直流电机。很多玩具四驱车里的电机就非常合适。关键在于你需要同时解决电机在底盘上的固定问题可以用3D打印支架或热熔胶以及电机轴与车轮的传动问题可以用联轴器或摩擦传动。2.2 控制核心为什么是Micro:bit moto:bit组合控制部分是本项目的“大脑”。我选择BBC Micro:bit作为主控板并搭配SparkFun的moto:bit扩展板。Micro:bit的优势在于极低的学习门槛和丰富的内置功能。这块小小的板子上集成了加速度计、磁力计、蓝牙、无线电模块、两个可编程按钮和一个5x5的LED点阵。对于我们的遥控小车来说这意味着1遥控器端无需额外零件直接用另一块Micro:bit的加速度计来检测倾斜角度实现“体感”遥控2两块Micro:bit之间可以通过内置的无线电模块进行通信无需复杂的蓝牙配对或额外的无线模块3LED点阵和按钮可以提供直观的状态反馈和交互。所有这些功能在MakeCode图形化编程环境中都被封装成了直观的彩色积木块学生可以在几分钟内就实现“倾斜遥控器小车前进”的效果快速获得成就感。然而Micro:bit的GPIO引脚驱动能力很弱无法直接驱动直流电机。这就需要电机驱动扩展板。我选择SparkFun的moto:bit是因为它专为Micro:bit设计即插即用。它提供了两个独立的电机驱动通道每个通道可驱动一个直流电机内置了电机驱动芯片并直接引出了电源接口。这样一来我们只需要将电机的两根线接到moto:bit标注了“M1”或“M2”的端子上再将电源电池或太阳能系统接到moto:bit的DC电源接口就完成了所有动力连接简洁可靠。注意事项电源输入极性moto:bit的DC电源接口有明确的极性标识。在连接时务必确保电源的正极接到接口的中心针负极-接到外侧。接反了很可能损坏moto:bit或电机驱动芯片。使用万用表的直流电压档位确认电源输出极性是一个好习惯。2.3 能源系统太阳能充电的实用化设计能源系统是本项目的亮点也是将理论与实际连接起来的关键。它由三部分组成太阳能电池板、太阳能充电控制器、可充电电池。太阳能电池板我选用了Adafruit的一款小型太阳能板。它的输出电压约为6V在阳光直射下可以提供200mA以上的电流。选择它的一个重要原因是它出厂就焊接好了一个标准的5.5x2.1mm DC插头。这省去了我们焊接的麻烦可以直接插到充电控制器上。如果使用JSS套件中的太阳能板通常只有两根引线你就需要自己焊接一个DC母座这对焊接技能有一定要求。充电控制器是整个能源系统的“调度中心”。我使用的是Adafruit的一款微型太阳能充电器模块。它的作用非常关键1最大功率点跟踪MPPT自动调整工作点使太阳能板始终以最高效率输出电能2充电管理以合适的电压和电流为锂电池充电防止过充过放保护电池安全3电源路径管理当有阳光时优先使用太阳能电力驱动小车同时为电池充电当阳光不足时自动无缝切换到电池供电。没有这个控制器直接将太阳能板接到电池上是非常危险且低效的。可充电电池我选择了一枚3.7V、1200mAh的锂聚合物电池。它的电压范围3.7V-4.2V非常适合给Micro:bit和电机供电。选择它而不是普通的干电池是为了形成完整的“光能-电能-化学能-动能”能量转换闭环让项目更具教学完整性。整个能源系统的连接逻辑是太阳能板 → 通过DC线→ 充电控制器的“Solar In”接口可充电电池 → 通过JST接口→ 充电控制器的“BATT”接口充电控制器的“LOAD”输出接口 → 通过我们自制的转接线→ moto:bit的DC电源输入口。这样小车就拥有了一个可以自我补充能量的“心脏”。3. 硬件搭建与组装全流程解析有了清晰的系统设计接下来就是动手实现的环节。这个过程需要耐心和细致我会把每个步骤的意图和可能遇到的坑都讲明白。3.1 机械底盘组装与3D打印件的应用首先按照JSS套件附带的PDF指南组装底盘。但请注意我们只安装车轮、车轴、齿轮和电机。指南中关于安装太阳能板支架的部分可以跳过因为我们将使用自己的固定方式。核心改进一3D打印电机座。套件指南建议用胶水直接将电机粘在底盘上。这对于一次性项目可行但不利于调整和重用。我设计并3D打印了一个电机座。这个座子可以卡在底盘的槽位里然后用一个小螺丝将电机紧固在座子上。这样做的好处是你可以随时松开螺丝更换电机或者调整电机齿轮与驱动齿轮的啮合间距。齿轮啮合太紧会增加摩擦和噪音太松则会打滑。一个可调节的电机座让调试变得非常方便。核心改进二改良版轴套。套件提供的中空圆柱形轴套在粘到底盘上时容易滚动对不齐。我设计了一个带有一侧平面的轴套。这个平面可以稳稳地贴在底盘上用胶水固定时位置更容易把控确保了车轴与底盘的垂直度减少了车轮跑偏的可能。关于3D打印车轮我尝试过但实际效果不理想。PLA材料打印的车轮表面过于光滑在光滑的地面上抓地力很差容易空转。除非你在轮胎部分使用有弹性的TPU材料或者为车轮套上橡胶圈否则原套件的塑料轮子是更务实的选择。这里的经验是不要为了3D打印而3D打印。选择最有效、最可靠的方案3D打印应用于解决传统套件的不便之处如可调节的电机座而非简单替代现有成熟零件。3.2 电气连接与线材处理电气连接是保证系统稳定工作的基础涉及一些简单的焊接工作。1. 太阳能板接口准备如需要如果你使用的太阳能板没有DC插头只有红黑两根线那么你需要焊接一个DC母座。母座通常有三个引脚中心针正极、外侧负极和一个可选的外壳接地。将太阳能板红线焊接到中心针黑线焊接到外侧即可。焊接前最好先点上一点锡确保连接牢固。完成后用万用表测量一下输出电压在光照下应该有5-6V。2. 制作充电控制器到moto:bit的电源线充电控制器的“LOAD”输出是一个2针的JST接口红正黑负。而moto:bit的电源输入是一个DC插孔。我们需要制作一根转接线一端是DC公头用来插moto:bit另一端是JST母头用来接控制器。你可以购买现成的带DC头的电源线剪掉另一端焊上JST接头。务必再次确认极性DC公头的中心针应对应JST接头的红线正极。3. 连接电机与moto:bitJSS套件里的电机线末端是鳄鱼夹。为了方便连接和后续拆卸我将鳄鱼夹焊接在了杜邦跳线母头的另一端。这样我就可以直接将跳线的公头插到moto:bit的电机端子M1或M2上。焊接时注意将电机的两根线分别焊接到两个跳线上做好正负标记通常电机红线为正。你也可以跳过焊接直接购买一端是鳄鱼夹、一端是杜邦头的成品测试线。重要提示先测试后组装在将所有零件固定到小车上之前强烈建议进行“桌面测试”。用临时连线将moto:bit、电机、电池连接起来下载一个最简单的测试程序比如让电机转5秒确认电机能正常正反转。同样测试太阳能充电控制器看其能否给电池充电并在拔掉太阳能板时自动切换为电池供电。这能避免在组装完成后才发现问题导致返工拆卸的麻烦。3.3 总装与布局优化当所有部件都测试无误后就可以进行总装了。布局的原则是重心低、布线整洁、便于维护。固定moto:bit和Micro:bit将moto:bit插到作为“司机”的Micro:bit上然后用两颗小螺丝穿过moto:bit上的安装孔将其固定在底盘前部靠近中心的位置。确保螺丝不会短路背面的电路。这个位置要兼顾到电机线、电源线的长度以及为前方的转向舵机如果后续加装留出空间。安装太阳能板与充电控制器我使用黄铜螺柱和螺母将太阳能板架高固定在底盘上方。这样既保证了太阳能板能接收到光线又在下方的底盘上创造了一个空间可以放置充电控制器。用一根扎带或一点胶泥将充电控制器固定在底盘上注意不要遮盖其散热孔。将太阳能板的DC线插入控制器的“Solar In”电池的JST线插入“BATT”。布置电池与布线将锂电池用魔术贴或电工胶布暂时固定在底盘下方。这有助于降低整车重心提高行驶稳定性。最后整理所有线材用扎带或胶布将过长的线缆捆扎好防止其缠绕进车轮或齿轮中。一个整洁的布线不仅是美观更是可靠性的保障。4. 图形化编程与无线遥控逻辑实现硬件搭建完毕接下来是赋予小车“灵魂”的编程部分。我们将使用MakeCode for Micro:bit这个基于Blocks积木块的在线编辑器它让编程变得像搭积木一样直观。4.1 遥控器端程序设计从倾斜到指令遥控器端我们称之为“遥控Micro:bit”的任务是感知我们的操作意图通过加速度计或按钮并将其转化为无线信号发送出去。基础版本倾斜控制。我们利用Micro:bit内置的加速度计。它的“pitch”俯仰角可以测量板子前后倾斜的角度。逻辑很简单当启动时设置无线电组例如组1。这相当于为两台Micro:bit设定一个共同的通信频道只有组号相同的设备才能互相收发信息。同时显示一个图标比如爱心表示程序已启动。永远循环中持续检测板子的俯仰角。如果俯仰角 -10表示板子向前倾斜Logo朝下通过无线电发送数字0。否则如果俯仰角 10表示板子向后倾斜Logo朝上通过无线电发送数字1。否则俯仰角在-10到10之间即大致水平发送数字255或其他约定好的“停止”信号。改进版本按钮与速度控制。单纯的前进/后退控制有些生硬。我们可以升级程序实现用A/B按钮控制启停用倾斜角度来控制速度。当按钮A被按下时设置一个变量isMoving为true真表示允许运动。当按钮B被按下时设置isMoving为false假表示停止。在永远循环中只有当isMoving为true时才执行速度发送。读取当前的俯仰角范围-180到180。将这个角度值映射到电机的功率值范围-1023到1023但moto:bit的电机驱动通常使用0-1023或-255到255来表示速度和方向。例如可以将-180映射到-255全速后退0映射到0停止180映射到255全速前进。这个映射计算可以通过一个公式完成。将计算出的功率值通过无线电发送出去。编程技巧变量与映射在MakeCode中“变量”就像是一个可以存放数字或文字的盒子。我们创建power功率和isMoving是否移动这两个变量来存储状态。而“映射”函数可以将一个范围的值线性转换到另一个范围。例如将 pitch 从 [-180, 180] 映射到 [-255, 255]。这避免了复杂的if-else判断让代码更简洁。在MakeCode的“数学”类积木中可以找到这个功能。4.2 小车端司机端程序设计解码与执行小车端“司机Micro:bit”的任务是接收遥控器发来的信号并控制电机执行相应的动作。基础版本接收数字指令。当启动时同样设置无线电组为1必须与遥控器相同初始化电机可选显示一个图标表示就绪。当接收到无线电数据包这个事件会在收到数据时触发。如果接收到的数字receivedNumber等于 0设置右电机假设电机接在M1口以一定速度正转。如果接收到的数字receivedNumber等于 1设置右电机以相同速度反转。如果接收到的数字receivedNumber等于 255停止右电机。改进版本接收速度值与实现平滑控制。为了响应遥控器发来的连续速度值我们需要改进司机端的代码。当接收到无线电数据包将接收到的值存入变量receivedPower。由于电机驱动函数通常需要单独指定速度和方向或者直接支持正负值。对于moto:bit我们可以使用“设置电机M1速度为receivedPower”这样的积木如果receivedPower是正数则正转负数则反转。但更常见的做法是进行判断如果receivedPower 10电机正转速度 receivedPower。否则如果receivedPower -10电机反转速度 -receivedPower取绝对值。否则停止电机。这里的“10”是一个死区阈值用于防止因遥控器微小抖动导致的电机抽搐。4.3 代码调试与无线通信优化编写完代码后分别将程序下载到两块Micro:bit中。在组装上车前先进行桌面联调。信道干扰如果周围有很多Micro:bit项目可能会发生信道冲突。如果控制不灵可以尝试在代码中更改“无线电设置组”的数字换一个不常用的组号。信号范围与障碍物Micro:bit的无线电在空旷地带有效距离可达几十米但遇到墙壁或人体遮挡会大幅衰减。确保遥控时天线方向Micro:bit板子边缘没有完全被手挡住。电源不足导致复位电机启动瞬间电流很大如果电池电量不足或电源线接触不良可能导致Micro:bit电压瞬间被拉低而重启。表现为小车突然失控或停止。确保使用电量充足的电池并检查所有电源接头是否牢固。程序逻辑错误利用Micro:bit的LED点阵来调试。在司机端代码的关键位置如收到数据时、执行电机命令前加入“显示数字”或“显示图标”的积木可以直观地看到程序执行到了哪一步接收到的数据值是多少。这是硬件调试中最常用、最有效的方法。5. 功能扩展增加舵机转向系统让小车只能前进后退还不够酷加上转向才是一辆完整的车。这需要增加一个舵机Servo来控制前轮转向。5.1 硬件加装选择舵机选择一个微型舵机如SG90工作电压在4.8V-6V之间扭矩足够转动小车前轮。设计并安装转向机构这是机械上的难点。你需要设计一个连接件一端固定在舵机的摆臂上另一端连接到底盘的前轮转向横杆上。我使用Tinkercad在线建模工具参考了一个标准的舵机摆臂模型设计了一个连接件并3D打印出来。将舵机用螺丝或热熔胶固定在底盘前端确保舵机轴心与转向杆的转动中心对齐否则会产生卡滞。电气连接moto:bit上有两个标有P15和P16的舵机接口。将舵机的信号线通常是黄色或橙色连接到P15红线正极和棕线/黑线负极分别连接到旁边的VCC和GND排针上。注意舵机耗电较大最好确保整个系统特别是电池能提供足够的电流。5.2 编程实现联合控制现在遥控器需要发送两种信息速度Power和转向角度Steer。而Micro:bit的无线电一次只能发送一个数字。如何同时发送两种信息这里需要引入“数据包”或者“名值对”的概念。在MakeCode中我们可以使用“无线电发送键值对”积木。它允许我们发送一个“名称”字符串和一个对应的“值”数字。遥控器端程序升级在永远循环中我们不仅计算power来自俯仰角还计算steer来自滚转角“roll”或另一个模拟输入。然后连续发送两个数据包无线电发送 名称“power” 值 power无线电发送 名称“steer” 值 steer小车端程序升级当接收到无线电数据包时这次我们接收到的不是简单的数字而是一个“名称-值”对。使用“如果-那么”积木进行判断如果接收到的名称packet.receivedString等于 “power”那么将接收到的值packet.receivedNumber赋值给变量motorPower并用于控制电机。如果接收到的名称packet.receivedString等于 “steer”那么将接收到的值赋值给变量steeringAngle。由于舵机控制通常需要0-180度的角度值我们需要将接收到的值例如-180到180映射到舵机的有效角度范围如30度到150度避免打死方向。然后使用“设置舵机连接到P15角度为mappedAngle”积木来控制舵机。避坑指南舵机抖动与电源噪声加上舵机后你可能会发现舵机有时会无故抖动或者在小车电机启动时舵机乱转。这通常是电源噪声导致的。电机是“噪声大户”它启动和换向时会产生很大的电流波动干扰同一电源上的舵机和Micro:bit。解决方法有两个一是在电机的电源线两端并联一个100μF以上的电解电容注意极性可以吸收瞬间的电流冲击二是如果条件允许为舵机单独供电使用另一块电池但需要共地。在我们的集成系统中并联电容是最简单有效的方案。记得将电容尽量靠近电机焊接。6. 项目优化、问题排查与教学延伸小车跑起来之后我们可以从性能、可靠性和教学深度上进行更多探索。6.1 性能优化方向减轻重量这是提升速度和续航最直接的方法。检查是否有不必要的零件或过量的胶水。可以考虑使用更轻的电池或者在底盘上钻孔减重注意保持结构强度。调整齿轮比JSS套件通常提供多种尺寸的驱动齿轮。换用更大的驱动齿轮相对于电机上的小齿轮可以降低车速但增加扭矩适合在粗糙地面或爬坡换用更小的驱动齿轮则提高车速适合平坦光滑路面。这是一个很好的探究课题记录不同齿轮比下的车速和爬坡能力。改善牵引力如果车轮打滑严重可以尝试在轮胎上缠绕几圈橡皮筋或者使用双面胶贴上一些粗糙的砂纸条。优化程序逻辑在司机端程序中可以加入“缓启动”和“缓停止”逻辑。即不要将接收到的功率值直接赋给电机而是让电机功率逐渐变化到目标值。这可以减少机械冲击让行驶更平滑也更省电。6.2 常见问题速查表问题现象可能原因排查步骤与解决方案小车完全不动1. 电源未接通或没电。2. 电机线未接好或接反。3. Micro:bit程序未运行。1. 检查电池电量用万用表测量moto:bit电源接口电压应3.5V。2. 重新插拔电机线尝试交换电机两极。3. 按一下Micro:bit背后的复位键观察LED点阵是否显示启动图标。遥控无反应但手动给电机动1. 两块Micro:bit无线电组号不同。2. 遥控器程序未下载或出错。3. 无线电信号受干扰或距离太远。1. 检查两端代码中的“无线电设置组”数值是否一致。2. 重新下载遥控器程序并在遥控器上加入“发送时显示图标”以便确认。3. 拉近距离移除中间障碍物更换无线电组号。小车动作与遥控指令相反电机接线极性反了。交换接到moto:bit电机端子的两根线。电机转动无力或Micro:bit频繁重启电源功率不足电机启动时拉低电压。1. 给电池充电或更换新电池。2. 检查所有电源接头是否氧化或松动。3. 在电机两端并联一个100-470μF的电解电容。加上太阳能板后小车在阳光下跑阴天不跑太阳能充电控制器“LOAD”输出模式可能设置为“光控”或电池电压过低保护。1. 查阅控制器说明书确认其输出逻辑。有些控制器只有在电池电压足够高时才向负载供电。2. 确保电池已通过太阳能板充满电。舵机不转或乱转1. 信号线接触不良。2. 电源不足。3. 程序中的角度值超出舵机范围。1. 检查舵机三根线是否连接牢固。2. 测量舵机供电电压电机运行时是否低于4.5V。3. 在代码中限制舵机角度在20-160之间进行测试。6.3 作为教学项目的延伸思考这个项目可以作为一个起点衍生出许多有价值的探究课题能源效率探究在不同光照强度用手电筒模拟、在室内窗边、在室外正午下测量太阳能板的输出电压和电流计算输出功率。同时测量小车以恒定速度行驶时的电流计算行驶时间探究光照与续航的关系。编程思维深化从图形化编程MakeCode过渡到文本编程MicroPython或JavaScript。在MakeCode中可以点击“JavaScript”视图查看图形积木对应的代码理解程序的结构。尝试用文本代码实现更复杂的功能比如让小车自动沿着一条黑线行驶需要增加巡线传感器。数据科学与物联网利用Micro:bit的蓝牙功能将小车行驶时的速度、电池电压等数据实时发送到手机或电脑上进行记录和分析。这引入了物联网和数据分析的初级概念。竞赛与挑战组织一场班级或家庭内部的“太阳能小车挑战赛”。设定不同的赛道直线竞速、S弯道、爬坡鼓励学生对小车进行优化减重、改齿轮比、调整程序在竞争中深化对工程学原理的理解。从我个人的教学经验来看学生们最兴奋的时刻往往不是小车第一次动起来的瞬间而是在解决“为什么它不动了”或者“怎么能让它跑得更直”这些问题的过程中。这个项目提供的正是一个完整的、可触碰的、允许试错的工程实践环境。它所有的零件和代码都是开放的你可以修改、替换、升级。也许你的第一个版本跑得歪歪扭扭但当你理解了问题所在并亲手解决它后所获得的知识和信心远比组装一个完美的套件成品要深刻得多。这就是创客教育和项目式学习的魅力所在。