开源正在从软件仓库走向真实世界。电路图、结构件模型、物料清单和固件一旦能够被下载、修改和重新制造,一个硬件作品就不再只是展台上的孤立样机。北京开源创新赛硬件赛道面向全国创客开放,也把这种变化带到了更具体的场景:参赛者既可以探索具身智能,也可以从一个解决日常问题的桌面小装置开始。
真正可复现的硬件项目,需要开放什么
硬件开源不能只上传一段程序。别人要复刻作品,至少需要回答四个问题:用了哪些零件、怎样连接、如何构建固件、外壳怎样制造。
一个清晰的项目仓库可以这样组织:
open-desk-device/
├── README.md # 功能、照片、构建和使用说明
├── LICENSE # 软件许可证
├── LICENSE-hardware # 硬件设计许可证
├── bom/
│ └── bom.csv # 型号、数量、替代料与参考价格
├── hardware/
│ ├── schematic.pdf # 可阅读的原理图
│ └── source/ # KiCad 等工具的源文件
├── enclosure/
│ ├── case.step # 可编辑的结构模型
│ └── case.stl # 可直接切片打印的模型
├── firmware/
│ └── distance_alert.ino
└── docs/
├── wiring.md
└── troubleshooting.md
其中,PDF、STL 适合直接查看或制造,但不能替代源文件。若只发布导出文件,贡献者很难修改焊盘、调整尺寸或生成新版本。BOM 也不要只写“超声波模块”,最好记录具体型号、工作电压、引脚定义以及可替代器件。
许可证同样应拆开考虑。代码、硬件设计和文档可以分别选择适合的许可证,例如代码使用 Apache-2.0,电路与 PCB 设计使用 CERN-OHL 系列,文档使用 CC BY 4.0。具体选择要结合项目目标,并确认使用的第三方模型、模块和数据是否允许再分发。
从开发板到具身智能,难点是形成闭环
Arduino 降低了电子制作的门槛,RISC-V 提供了开放的指令集基础,3D 打印和低价传感器则让结构设计与环境感知进入个人工作台。接入开源 AI 模型后,开发板或边缘计算设备还可以完成视觉识别、语音交互和简单规划。
不过,“使用了 AI”并不自动等于具身智能。更值得验证的是一个完整闭环:
- 感知:摄像头、麦克风、距离或姿态传感器采集环境信息。
- 决策:规则、传统算法或模型把输入转成动作目标。
- 执行:电机、舵机、灯光或声音改变设备状态。
- 反馈:设备再次读取环境,判断动作是否有效。
例如,一辆小车识别障碍后改变方向,并继续测量新路径,已经形成最小闭环。相比之下,只在电脑上运行图像分类模型,还缺少对物理环境的持续作用。参赛项目不必一开始就追求复杂模型;稳定、可解释、能被复现的闭环,通常比堆叠功能更有工程价值。
可以这样实践:做一个桌面距离提醒器
下面是一个可直接改造的最小项目。这里假设使用 Arduino Uno、HC-SR04 超声波模块和板载 LED:TRIG 接 D9,ECHO 接 D10。当物体进入 30 厘米范围时,LED 点亮,并通过串口输出测量结果。
如果改用 3.3V 开发板,应先确认 ECHO 引脚电压,并按硬件规格增加分压或电平转换,避免损坏 GPIO。
将以下代码保存为 firmware/distance_alert.ino:
const int TRIG_PIN = 9;
const int ECHO_PIN = 10;
const int LED_PIN = LED_BUILTIN;
const float ALERT_DISTANCE_CM = 30.0;
float readDistanceCm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
unsigned long duration = pulseIn(ECHO_PIN, HIGH, 30000UL);
if (duration == 0) {
return -1.0;
}
return duration * 0.0343 / 2.0;
}
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
float distance = readDistanceCm();
if (distance < 0) {
digitalWrite(LED_PIN, LOW);
Serial.println("No echo");
} else {
digitalWrite(
LED_PIN,
distance <= ALERT_DISTANCE_CM ? HIGH : LOW
);
Serial.print("Distance: ");
Serial.print(distance, 1);
Serial.println(" cm");
}
delay(200);
}
安装 Arduino CLI 后,可以用下面的命令编译并上传。运行前将端口 /dev/ttyACM0 替换为自己的设备端口;Windows 用户通常会看到类似 COM3 的名称。
arduino-cli core update-index
arduino-cli core install arduino:avr
arduino-cli compile --fqbn arduino:avr:uno firmware
arduino-cli upload -p /dev/ttyACM0 --fqbn arduino:avr:uno firmware
arduino-cli monitor -p /dev/ttyACM0 -c baudrate=115200
这个项目虽然简单,却已经具备传感、判断和反馈。后续可以加入蜂鸣器、OLED 屏幕或 3D 打印外壳;也可以采集一段时间序列,用轻量模型区分“有人靠近”和“物体长期占用”。扩展时应同时更新接线图、BOM、功耗数据和测试方法,而不是只提交新代码。
让评审和社区都能复现
提交前,可以用一次“陌生人测试”检查仓库:让没有参与开发的人只阅读 README,从零完成采购、接线、编译和运行。如果对方必须通过私聊才能知道某个引脚、依赖版本或打印参数,说明文档仍不完整。
建议重点核对以下内容:
- README 是否说明作品解决的问题,而不只是罗列技术名词;
- BOM 是否包含准确型号、数量、关键规格和替代方案;
- 原理图、PCB、结构件是否同时提供可编辑源文件;
- 固件是否锁定依赖版本,并给出一条可复制的构建命令;
- AI 模型是否交代来源、许可证、输入格式和运行资源;
- 是否记录失败模式,例如传感器盲区、光照变化、网络中断或电机堵转;
- 是否删除 Wi-Fi 密码、令牌、个人地址等敏感信息。
全国性的开放硬件赛道降低了参与地域的限制,但项目能否继续生长,仍取决于它是否真正允许别人理解、制造和改进。无论作品是一辆会认路的小车,还是一个只有巴掌大的桌面提醒器,把复现路径铺平,本身就是开源创新的重要成果。