💡 划重点

  • 芯片选型:nRF52840 搞定 BLE 低功耗与高速处理,直接驱动震动马达
  • 传感器:LSM6DS3 六轴加速度计精准捕捉碰撞加速度突变
  • 反馈方式:微型震动马达贴合后脑,碰撞即震,毫秒级触觉预警
  • 成本严控:全部物料低于140元,适合批量出街
  • 接线简洁:I2C 双线读取加速度,PWM 驱动马达,抗干扰易封装

需求洞察

目标用户 城市通勤骑行族、外卖骑手、夜骑爱好者。他们在复杂交通中频繁穿梭,低头看手机导航或回头观察时极易忽略后方来车,普通头盔只是被动防护,无法提前报警。

真实痛点

  1. 碰撞发生前毫无感知,等身体感受到时伤害已成定局。
  2. 传统头盔缺乏主动提醒,骑行者无法获知尾部碰撞风险。
  3. 市面上智能头盔售价动辄800元以上,大众难以接受。

为什么值得做

用不到140元的硬件成本,为普通骑行头盔赋予碰撞检测+触觉告警能力。nRF52840 既有 BLE 又可做本地实时计算,LSM6DS3 加速度计灵敏度高、功耗低,震动马达反馈直接,不依赖视觉和听觉,适合嘈杂骑行环境。方案可快速集成到头盔内衬,不改变外形,安全合规,真正落地的低成本智能安全装备。

方案设计

感知层

LSM6DS3 三轴加速度计通过 I2C 连接主控,以 200 Hz 采样率实时采集 X/Y/Z 加速度值。设置动态阈值算法:当合加速度突然超过 2.5g 且持续 10ms 以上,判定为碰撞事件。支持倾斜检测辅助判断头盔是否脱落。

控制层

nRF52840 负责读取传感器、运行碰撞逻辑、触发马达震动、管理 BLE 广播。主控内置 FPU,可做轻量级滤波(滑动平均消除骑行振动误报)。状态机分普通骑行、碰撞报警、低电量三种模式。

执行层

震动马达接 P0.05 输出 PWM,碰撞发生后以 100% 占空比震动 2 秒,给予骑手最直接的体感预警。静默模式下可做短震确认开机或低电提醒。

日志/联网层

利用 nRF52840 内建 BLE 5.0,将碰撞事件、加速度峰值、时间戳广播给手机 APP。不需要持续连接,采用广播包传递紧急数据,并预留 GATT 服务用于事后读取黑匣子记录,保留最近 20 次碰撞日志。

物料清单

序号 物料名称 数量 用途 估算单价(元) 小计(元)
1 nRF52840 模块 (Seeed XIAO BLE) 1 主控+BLE 55 55
2 LSM6DS3 六轴加速度计模块 1 碰撞感知 22 22
3 微型震动马达 (10mm 纽扣式) 1 触觉反馈 8 8
4 3.7V 300mAh 锂聚合物电池 1 供电 18 18
5 TP4056 充电保护模块 1 充电管理 5 5
6 贴片 MOSFET (SI2302) + 电阻电容 1套 马达驱动 3 3
7 软排线、绝缘胶、头盔内衬魔术贴 1套 连接与固定 5 5
合计 116

总成本116元,远低于140元预算,留有充足余量。

接线与结构

基于 nRF52840 模块的 GPIO 分配:

微调理由:原建议只提到 I2C 未指定具体引脚,现选用模块默认 I2C 接口引脚,方便直接使用 Wire 库,无需重新映射,提高兼容性;震动使用 P0.05 保持与原建议一致,该引脚支持硬件 PWM,驱动稳定。

核心代码

基于 Arduino 框架,使用 Adafruit_LSM6DS 和 Bluefruit 库。


#include <Arduino.h>
#include <Adafruit_LSM6DS3.h>
#include <bluefruit.h>

#define VIB_PIN 5   // P0.05
#define COLLISION_THRESHOLD 2.5  // g
Adafruit_LSM6DS3 lsm6ds3;
BLEDis bledis;
BLEUart bleuart;

volatile bool collision_detected = false;

void setup() {
  pinMode(VIB_PIN, OUTPUT);
  digitalWrite(VIB_PIN, LOW);
  Serial.begin(115200);
  if (!lsm6ds3.begin_I2C()) {
    while(1) delay(10);
  }
  
  Bluefruit.begin();
  Bluefruit.setTxPower(4);
  bledis.begin();
  bleuart.begin();
}

void loop() {
  sensors_event_t accel;
  lsm6ds3.getEvent(&accel;);
  float total_g = sqrt(sq(accel.acceleration.x) + sq(accel.acceleration.y) + sq(accel.acceleration.z)) / 9.8;
  if (total_g > COLLISION_THRESHOLD && !collision_detected) {
    collision_detected = true;
    analogWrite(VIB_PIN, 255);
    delay(2000);
    analogWrite(VIB_PIN, 0);
    // BLE广播碰撞包
    uint8_t data[6];
    memcpy(data, &total;_g, 4);
    bleuart.write(data, 6);
    collision_detected = false;
  }
  // 每秒慢闪 LED 或低电检测省略
  delay(10);
}

代码骨架实现了加速度读取、碰撞阈值判断、马达震动及 BLE 数据发送,可直接在 PlatformIO 下编译。

调试步骤

  1. 硬件连通性测试:用万用表确认 I2C 上拉正常,扫描设备地址 0x6A 回应。
  2. 静止态校准:水平放置模块,串口输出三轴加速度,确认 Z 轴约 1g。
  3. 碰撞阈值调试:用手掌拍击模块,观察串口输出总加速度峰值,据此调整阈值。
  4. 马达驱动验证:单独置高 P0.05,确认马达正常震动,MOSFET 不发热。
  5. BLE 抓包:使用 nRF Connect 手机 APP 扫描设备,查看广播包内容。
  6. 整机佩戴测试:戴上头盔模拟骑行,做急刹、甩头,确保不误报,真实撞击能触发。
  7. 功耗测试:串入电流表,静态功耗低于 5mA,300mAh 电池可续航 >48 小时。

设计图

骑行头盔碰撞检测结构flow
1
感知输入
2
控制处理
3
执行反馈
4
数据上报