1. 项目概述与设计初衷去年夏天在完成学业后的一个漫长假期里我一直在琢磨一个能把我对工程、设计和电子的兴趣都融合起来的项目。做一架模型火箭是个经典选择它能很好地挑战我的制造和设计能力尤其是在重量与强度的平衡上。但我觉得这还不够“过瘾”市面上用传统方式比如延时引信实现分级和回收的火箭套件太多了。我想玩点不一样的用电子系统来控制它。为了让这个电子系统有存在的必要我得让它做到传统机械或化学方式难以实现或无法优化的事情。于是我决定制作一架双级火箭并让我的系统能在空中一个可编程的时间点自动点燃第二级发动机。这个想法最终催生了这个基于Raspberry Pi Pico微控制器的双级电子模型火箭项目。简单来说这架火箭的核心是一个自制的“飞行电脑”。它通过一个外部开关感知发射指令按预设时序控制两级固体燃料发动机的点火并利用加速度计判断火箭何时到达飞行顶点速度为零的时刻然后触发舵机释放降落伞确保箭体安全回收。整个系统从电路设计、编程到箭体结构制造大部分都由我亲手完成其中大量部件利用了3D打印技术。虽然最终发射遇到了一些“小插曲”但整个过程充满了工程实践的乐趣也积累了宝贵的经验教训。2. 核心系统架构与选型思路设计这样一个电子控制系统首先要明确需求然后选择合适的硬件来搭建骨架。我的核心需求很明确感知发射、控制点火、判断开伞时机。此外我还希望它能记录飞行数据比如加速度这样我事后能分析出最大速度等参数。2.1 微控制器为什么是Raspberry Pi Pico微控制器是整个系统的大脑。我需要一个能编程、有足够GPIO引脚、功耗不能太高、并且性价比出色的芯片。当时正值Raspberry Pi Pico刚刚发布它以其双核ARM Cortex-M0处理器、丰富的I/O和仅4美元的价格迅速吸引了我的注意。相比于ArduinoPico的性能更强内存更大对于需要处理传感器数据并做出快速响应的应用来说更游刃有余。更重要的是其社区支持正在快速增长资源丰富。选择它意味着我能用一个非常低的成本获得一个相当强大的处理核心。2.2 传感器Lis3DH加速度计的作用为了判断火箭何时到达弹道顶点Apoapsis我需要知道它何时停止加速并开始减速。虽然理论上可以通过计时来估算但不同发动机的推力曲线、天气因素都会影响实际飞行时间。一个加速度计能提供更直接、更可靠的判断依据。我选择了Adafruit的Lis3DH三轴加速度计模块。它体积小、重量轻通过I2C或SPI与Pico通信非常方便并且有现成的CircuitPython库支持。当火箭发动机工作完毕仅受空气阻力和重力影响时其加速度会发生显著变化这个节点就是释放降落伞的理想时机。2.3 执行机构MOSFET与舵机控制系统需要驱动两个高功耗设备发动机点火器和回收用舵机。发动机点火模型火箭发动机的电点火头Igniter需要较大的电流通常1-3A才能瞬间发热点燃推进剂。微控制器的GPIO引脚无法直接提供这样的电流和电压。因此我使用了两个N沟道逻辑电平MOSFET如IRLZ44N作为电子开关。Pico的GPIO输出一个3.3V的信号来控制MOSFET的栅极GateMOSFET导通后允许一个独立的高功率电源我用的是一节D型电池的大电流流过点火头完成点火。降落伞释放我采用了一个小型9克舵机来控制鼻锥的锁闭机构。当加速度计判断到达顶点时Pico控制舵机旋转一定角度解除对鼻锥的固定依靠发动机的** ejection charge**抛射药产生的气压将鼻锥弹开带出降落伞。这是一种非常经典且可靠的回收方式。2.4 电源系统设计电源是确保系统稳定工作的基石。我的系统中有两种电压需求微控制器与传感器Raspberry Pi Pico需要5V供电。点火电路为了可靠点燃点火头需要更高的电压和电流我使用一节1.5V的D型电池。如果使用两个独立电池会增加重量和复杂度。我的解决方案是使用单节D型电池作为总电源通过一个DC-DC降压模块如MP1584EN将其稳定到5V为Pico和传感器供电。同时D型电池也直接作为点火电路的主电源。这里的关键点是必须建立共地Common Ground即将Pico的GND、DC-DC模块的GND和点火电路的GND全部连接在一起以确保所有电压都有一个共同的参考点信号才能被正确识别。3. 电路设计与PCB制作详解有了清晰的架构下一步就是把想法在电路板上实现。我遵循了“先原型后成品”的流程。3.1 在面包板上搭建原型在焊接任何东西之前面包板是无价的测试工具。我将焊接好排针的Pico、Lis3DH加速度计模块、MOSFET、电阻和LED等全部插在面包板上用跳线连接。这个阶段的目标是验证逻辑编写简单的测试程序确保Pico能读取加速度计数据能控制MOSFET开关LED模拟点火能驱动舵机。测试点火用真正的点火头连接安全电阻进行通电测试确认D电池能将其点燃。调试代码通过串口打印数据调整判断逻辑比如“零加速度”的阈值设定多少合适。注意测试点火电路时务必在安全空旷的环境进行并将点火头固定好因为它会瞬间发热并可能产生小火花。永远不要将点火头连接在火箭发动机上进行室内测试。3.2 从原型到定制PCB为什么选择万孔板面包板连接不可靠且笨重不适合最终飞行。我需要一个坚固、轻量化的解决方案。虽然可以设计定制PCB但对于单件或小批量原型万孔板Perfboard是更快捷、灵活的选择。我用的是单面覆铜万孔板。焊接过程与要点规划布局在纸上或脑海中先规划好主要元件Pico、电压模块、MOSFET、接口的位置尽量使走线简短高功率部分点火电路与低功率部分数字电路适当分开。焊接元件先焊接高度较低的元件如电阻、二极管再焊接芯片座、排母等。我将Pico通过排母安装在板上方便日后拔插。飞线连接使用绝缘导线在板子背面进行连接。对于电源线和地线我使用了较粗的导线。关键一步我在电源输入、点火输出、舵机信号等处焊接了杜邦线母头这样整个“飞行电脑”可以通过线束与火箭其他部分电池、点火头、舵机快速插拔连接极大方便了地面测试和发射前的总装。添加保护二极管在MOSFET的栅极和源极之间我并联了一个10kΩ的下拉电阻确保在Pico初始化期间MOSFET处于关闭状态防止误触发。同时在点火器回路中串联了二极管防止感应电压冲击。3.3 最终电路原理图解析我的核心控制电路可以简化为以下几个部分主控与传感单元Pico通过I2C总线连接Lis3DH。一个GPIO引脚配置为上拉输入连接发射按钮按钮按下时引脚从高电平变为低电平。一级点火通道GPIO14 - 10kΩ电阻 - MOSFET1栅极。MOSFET1的漏极连接D电池正极源极连接一级点火头正极。点火头负极接电池负极。二级点火通道GPIO15 - 10kΩ电阻 - MOSFET2栅极。连接方式同一级。舵机控制GPIO16输出PWM信号至舵机信号线。舵机电源由经过稳压的5V线路供电。电源D电池正极分两路一路直接通往点火MOSFET的漏极另一路进入5V降压模块输出稳定的5V为Pico和舵机供电。所有地线共接。4. 飞行控制程序开发CircuitPython硬件就绪后软件是赋予其灵魂的关键。我选择使用CircuitPython因为Adafruit为其传感器提供了极其完善的库支持开发体验类似Python非常友好。4.1 程序主逻辑流程程序的核心是一个状态机循环执行以下逻辑初始化与待命启动后初始化所有引脚设置点火MOSFET引脚为输出低电平舵机引脚为PWM输出发射检测引脚为上拉输入初始化I2C和加速度计。然后让一个LED开始慢速闪烁表示系统已上电处于“待命”状态。发射检测持续检测发射检测引脚的电平。当发射按钮按下引脚被拉低程序进入发射序列。一级点火与数据记录立即设置一级点火引脚为高电平导通MOSFET点燃一级发动机。同时开始以高频率如100Hz读取加速度计数据并写入到Pico的存储空间中。二级点火定时启动一个计时器。根据我使用的Estes D12-3发动机的官方数据其推力持续时间约为1.8秒但为了确保一级完全分离并建立安全距离我将二级点火延迟设置为4.5秒。计时到达后设置二级点火引脚为高电平。开伞条件判断二级点火后程序持续监测加速度数据。我计算了合加速度的大小。当合加速度持续低于某个阈值例如小于1.5倍重力加速度超过一小段时间如0.5秒我判断火箭已过顶点开始减速。此时控制舵机旋转到释放位置。冗余开伞定时器这是一个重要的安全备份。无论加速度条件是否满足在发射后8秒强制触发舵机开伞。因为根据模拟火箭无论如何也应该在这时到达顶点并开始下坠了。数据保存着陆后或通过复位按钮程序将记录的数据写入到一个文本文件中以便后续分析。4.2 关键代码片段与解析import time import board import digitalio import busio import adafruit_lis3dh import pwmio from adafruit_motor import servo # 初始化引脚 launch_switch digitalio.DigitalInOut(board.GP2) launch_switch.switch_to_input(pulldigitalio.Pull.UP) stage1_igniter digitalio.DigitalInOut(board.GP14) stage1_igniter.switch_to_output(valueFalse) stage2_igniter digitalio.DigitalInOut(board.GP15) stage2_igniter.switch_to_output(valueFalse) status_led digitalio.DigitalInOut(board.GP25) status_led.switch_to_output() # 初始化I2C与加速度计 i2c busio.I2C(board.GP5, board.GP4) lis3dh adafruit_lis3dh.LIS3DH_I2C(i2c, address0x19) lis3dh.range adafruit_lis3dh.RANGE_16_G # 初始化舵机 pwm pwmio.PWMOut(board.GP16, frequency50) parachute_servo servo.Servo(pwm) parachute_servo.angle 0 # 初始位置为锁定 # 状态变量 launch_detected False stage1_fired False stage2_fired False parachute_deployed False launch_time 0 data_log [] # 主循环 while True: if not launch_detected: status_led.value not status_led.value # 闪烁LED time.sleep(0.5) if not launch_switch.value: # 按钮被按下 launch_detected True launch_time time.monotonic() status_led.value True # LED常亮 print(Launch detected!) # 点火一级 stage1_igniter.value True stage1_fired True print(Stage 1 Ignited!) time.sleep(0.5) # 保持点火信号一段时间 stage1_igniter.value False else: current_time time.monotonic() elapsed current_time - launch_time # 记录加速度数据 x, y, z lis3dh.acceleration accel_mag (x**2 y**2 z**2) ** 0.5 data_log.append((elapsed, x, y, z, accel_mag)) # 二级点火定时 if not stage2_fired and elapsed 4.5: stage2_igniter.value True stage2_fired True print(Stage 2 Ignited!) time.sleep(0.5) stage2_igniter.value False # 基于加速度的开伞判断 if not parachute_deployed and stage2_fired: # 简单判断如果最近几次采样的加速度均值接近1G9.8 m/s^2说明发动机已熄火主要受重力 if len(data_log) 10: recent_accels [d[4] for d in data_log[-10:]] avg_accel sum(recent_accels) / len(recent_accels) if 8.0 avg_accel 11.0: # 约1G附近 parachute_servo.angle 90 # 释放位置 parachute_deployed True print(Parachute Deployed (Accel Trigger)!) # 冗余定时开伞 if not parachute_deployed and elapsed 8.0: parachute_servo.angle 90 parachute_deployed True print(Parachute Deployed (Redundant Timer)!) # 如果开伞且已过去较长时间停止记录以节省存储可选 if parachute_deployed and elapsed 30: break time.sleep(0.01) # 主循环延迟实操心得在测试时务必先将点火输出引脚连接到LED而不是真正的MOSFET和点火头通过观察LED的亮灭来验证时序逻辑是否正确。确认无误后再连接高功率电路进行点火测试。安全永远是第一位的。5. 箭体结构设计与制造工艺电子系统是大脑箭体则是承载它的躯体。我的目标是制造一个轻量化、坚固且能容纳所有电子设备的双级火箭。5.1 箭体材料与工具箭体管我使用了一个直径约40mm的硬纸管来自包装纸的卷芯。它轻便、易加工且成本极低。对于更高端的项目可以使用玻璃纤维管或碳纤维管。整流罩鼻锥与级间段这些复杂曲面部件是3D打印的理想选择。我使用PLA材料在Creality Ender 3打印机上制造。PLA足够坚固且重量可控。尾翼为了平衡强度和重量我选择了轻木Balsa。使用2.4mm厚的轻木板根据OpenRocket软件模拟出的最优形状进行切割。发动机舱同样由3D打印完成需要精确匹配Estes D12发动机的尺寸直径约24mm。连接件大量使用M3规格的螺栓、螺母和垫片进行各部件间的连接确保可拆卸和维护性。5.2 利用OpenRocket进行模拟与设计在动刀切割任何材料之前仿真至关重要。我使用了免费的OpenRocket软件。建立虚拟模型我输入了箭体管直径、长度、预估的电子设备重量、发动机参数等。优化重心与压心通过调整尾翼的大小、形状和位置以及内部配重确保火箭的重心CG在压心CP之前。这是火箭保持气动稳定的黄金法则。OpenRocket可以实时显示这两个点的位置。模拟飞行性能软件可以预测飞行高度、速度、加速度曲线等。这帮助我验证了D12-3发动机能否推动我预估重量的火箭并确定了二级点火的大致时间点虽然最终由加速度计判断但模拟值提供了重要参考。5.3 关键部件制作要点尾翼处理轻木质地较软。我沿着翼展方向从根部到尖端排列木纹以获取最大的纵向强度。为了防水和增强表面硬度我使用了经典的**“纸蒙皮”**技术用稀释的PVA胶木工白胶将轻质书写纸紧密包裹粘贴在尾翼表面干燥后打磨光滑。这能形成一层坚固的复合外壳。级间连接器这是双级火箭的关键机械结构。它需要在一级工作时牢牢锁住两级在一级熄火后又能干净利落地分离。我的设计是一个3D打印的套筒内径略小于箭体外径依靠摩擦力保持连接。通过调整打印的缩放比例我找到了一个“紧配合”的平衡点既不会因太松而在发射时脱开也不会因太紧而阻碍分离。分离的动力来自一级发动机顶部的抛射药Ejection Charge它在延时结束后爆炸产生气体压力推动两级分离。电子设备舱在箭体中部设计了一个独立的舱段用于固定Pico电路板、9V舵机电池和舵机本身。舵机臂通过一个机构与鼻锥的锁销相连。当舵机转动时释放锁销鼻锥被抛射药的压力弹出。发射导轨适配器火箭需要通过发射导轨在起飞初期获得导向直到速度足够高尾翼能提供稳定作用。我设计了小巧的3D打印滑块用螺栓固定在箭体上能严丝合缝地卡入标准的2020铝型材导轨中确保滑动顺畅无晃动。6. 系统集成、测试与问题排查将所有零件组装成一个能工作的整体是挑战最大的部分。这个过程充满了地面测试和调试。6.1 总装与布线分层组装从尾部开始依次安装发动机舱、尾翼、级间连接器、电子设备舱、二级箭体、最终是鼻锥。每完成一步都检查重心位置。内部线束使用不同颜色的杜邦线制作线束连接“飞行电脑”与各级点火头、舵机、发射开关。所有连接都使用插接头便于故障排查和更换部件。用扎带或胶带固定线束防止在飞行中晃动。重量控制每次增重后都称重。我的目标是将总重不含发动机控制在200克以内以确保D12发动机有足够的性能裕度。3D打印部件可以通过降低填充率我用20%、使用更薄的壁厚来减重。6.2 全系统地面测试在前往发射场之前必须进行全面的地面测试。通电自检连接电池检查LED闪烁模式通过串口监视器查看加速度计数据是否正常。发射序列模拟短接发射开关引脚观察程序是否按顺序触发一级点火信号用LED模拟、等待4.5秒、触发二级点火信号、最后根据条件触发舵机。同时观察数据记录是否启动。点火电路负载测试将真正的点火头连接至电路但将其放置在一个安全、防火的容器中如水泥砖块上。执行发射序列确认点火头能成功点燃。重要此测试仅连接点火头绝不连接发动机分离与开伞机构测试手动模拟抛射药动作可以用嘴吹气检查级间段能否顺利分离舵机动作能否释放鼻锥。6.3 发射日遭遇的“小麻烦”与复盘发射当天事情并没有完全按计划进行。问题一一级未能点火。火箭在发射架上毫无反应。检查后发现是现场接线错误。在发射前匆忙连接各级点火头时我误将一级点火头的线路接到了错误的端口上导致电路未形成回路。问题二二级按程序点火并起飞。尽管一级失效但二级在4.5秒后准时点火。得益于改进后的发射滑块设计单级火箭依然沿着导轨稳定起飞并成功与“死重”的一级分离。这证明了级间分离机构的设计是成功的。问题三抛射药未工作箭体坠毁。二级飞行正常但到达顶点后发动机的延时抛射药未能点燃后来检查发现是发动机本身的生产瑕疵粘土封堵未被吹出。导致降落伞无法弹出箭体高速坠地箭体管完全损毁。问题四数据记录不完整。回收的Pico虽然幸存但加速度数据只记录到4.4秒恰好在二级点火前停止。推测是二级点火时产生的高电流噪声或物理冲击导致了加速度计或数据写入过程的中断。6.4 经验教训与改进方案这次发射是一次宝贵的“成功失败”部分成功但暴露了问题。我总结了以下关键改进点简化现场操作流程将发射前的连接工作最小化。理想状态是火箭在出发前就已完全组装好内部电池连接妥当仅通过一个外部的安全开关或钥匙来激活整个系统。这样能避免在发射场因紧张或匆忙而接错线。增强开伞冗余不能只依赖发动机的抛射药。可以考虑双冗余开伞主开伞由发动机抛射药驱动。备份开伞由电子系统控制的小型烟火弹射器Pyrotechnic Ejection Charge或机械弹簧机构。当电子系统检测到开伞条件加速度或定时满足而主开伞未触发可通过压力传感器检测舱内压力是否骤升来判断时启动备份开伞。电源与信号隔离点火电路产生的大电流瞬变是数字电路的杀手。未来设计应加强隔离使用光耦Optocoupler或继电器模块来彻底隔离Pico控制信号与点火电路。为Pico和传感器使用独立的稳压电源模块并与电池电源之间使用磁珠或电感进行滤波。在数据线如I2C上增加滤波电容和上拉电阻。数据记录可靠性考虑使用外部SPI Flash芯片或SD卡模块来存储数据而非直接写入Pico的内部存储。这些存储介质对电源噪声的抵抗力可能更强。同时实现更健壮的数据写入逻辑例如使用缓冲区并在每次写入后验证数据。7. 总结与项目价值这个基于Raspberry Pi Pico的双级电子模型火箭项目远不止是组装一个套件。它涵盖了从需求分析、硬件选型、电路设计、嵌入式编程、机械设计、3D建模与打印、气动仿真到系统集成测试的完整工程闭环。虽然最终发射未能实现完美回收但整个过程中学到的知识——关于系统可靠性设计、故障排查、安全规范以及理论与实践之间的差距——是任何现成套件都无法给予的。对于想要深入嵌入式系统和机电一体化的爱好者来说模型火箭是一个绝佳的实践平台。它成本相对可控涉及的技术面广并且有立即的、可视化的反馈成功或失败都非常壮观。这个项目清晰地展示了即使像Pico这样廉价的微控制器也能作为核心构建出能够执行复杂时序逻辑和实时决策的自主控制系统。下一步我计划修复一级箭体并应用这次学到的教训设计一个更可靠、集成度更高的单级或双级火箭控制系统或许还会加入遥测数据传输模块实现真正的“遥测火箭”。