脑控微型无人机:基于 EEG 与 Arduino MKR1000 的思维飞行实验
项目背景与目标
将商用微型竞速无人机的遥控器“劫持”,用 NeuroSky MindWave EEG 头戴设备采集脑电“专注度”信号,经 Processing 处理后通过串口发送给 Arduino MKR1000,再经四路低通滤波器将 PWM 转为模拟电压驱动遥控器摇杆信号线,**仅实现油门(起飞/降落)单通道控制**,作为脑机接口(BCI)入门与 PCB 逆向改装的教学演示。
硬件清单
| 元件 | 数量 | 备注 |
|---|---|---|
| Arduino MKR1000 | 1 | 3.3 V 逻辑,匹配遥控器电池电压 |
| 微型竞速无人机 + 原装遥控器 | 1 套 | 双轴电位器摇杆,3.3 V 供电 |
| NeuroSky MindWave Mobile | 1 | 蓝牙 EEG,单干电极,输出专注度 0~100 |
| 100 µF 电解电容 | 4 | 低通滤波器 |
| 220 Ω 电阻 | 4 | 低通滤波器 |
| 面包板、跳线、焊接工具 | 1套 |
核心改装流程
Phase 1:遥控器 PCB 逆向
- 拆解遥控器,测量两节 AAA 电池电压(~3.3 V),确认与 MKR1000 兼容。
- 万用表测量左右摇杆四个信号线的中位/高/低电压(典型:中位 1.65 V,满量程 0~3.3 V)。
- 拆焊四个摇杆电位器,**保留焊盘**。测量电位器总阻值(如 10 kΩ),在正负极焊盘间并联焊接相同阻值电阻(或 10 Ω 占位)维持分压网络完整。
- 在信号线焊盘焊接实心导线引出,正负电源线也引出备用。
Phase 2:PWM → 模拟电压(四路 RC 低通滤波器)
MKR1000 analogWrite() 输出 490 Hz PWM,遥控器需要稳定 DC。每通道串联 220 Ω 电阻、并联 100 µF 电容到地,截止频率 ≈ 7.2 Hz,足以平滑 PWM 纹波,代价是响应延迟 ~100 ms,起降控制可接受。
MKR1000 PWM pin (D2~D5)
│
220 Ω
├───→ 遥控器信号线(摇杆中点焊盘)
│
100 µF
│
GND
Phase 3:Arduino 固件
// Drone Control - MKR1000
int throttle=0, yaw=127, pitch=127, roll=127;
const uint8_t P_THR=2, P_YAW=3, P_PIT=4, P_ROL=5;
void setup() {
Serial.begin(115200);
pinMode(P_THR, OUTPUT); pinMode(P_YAW, OUTPUT);
pinMode(P_PIT, OUTPUT); pinMode(P_ROL, OUTPUT);
// 初始中位
analogWrite(P_THR, 0); analogWrite(P_YAW, 127);
analogWrite(P_PIT, 127); analogWrite(P_ROL, 127);
}
void loop() {
if (Serial.available() > 0) {
throttle = Serial.parseInt();
yaw = Serial.parseInt();
pitch = Serial.parseInt();
roll = Serial.parseInt();
}
analogWrite(P_THR, throttle);
analogWrite(P_YAW, yaw);
analogWrite(P_PIT, pitch);
analogWrite(P_ROL, roll);
}
Phase 4:Processing + MindWave 闭环
- 安装 ThinkGear Connector 驱动,蓝牙配对 MindWave,记录虚拟串口号(如 COM5)。
- Processing 导入
MindSetProcessing库,连接 MindWave 与 Arduino 串口(如 COM10)。 - 核心映射:
throttle = map(attention, 40, 100, 30, 255),专注度 ≥ 40 起飞,越专注油门越大;分心则降落。 - 按 K 急停:发送油门=0、其它=127 并退出程序。
关键技术难点与对策
| 难点 | 解决方案 |
|---|---|
| 遥控器供电电压不匹配 | 选用 3.3 V 逻辑的 MKR1000,或用电平转换/稳压模块 |
| PWM 纹波导致抖动 | RC 低通滤波器(220 Ω + 100 µF),必要时改用 MCP4725 DAC |
| EEG 信号噪声大 | ThinkGear 信号质量指示(poorSignal),Processing 端过滤 200 值 |
| 串口通信阻塞 | Processing 端 receiver.available() 非阻塞轮询 |
| 安全风险 | 螺旋桨拆除测试、加装急停键、室内飞行网罩 |
安全与法律警示
- 改装遥控器**不可逆**,可能永久损坏原装设备。
- 脑控仅限**起飞/降落**,无法控制姿态,**严禁**在人员密集/禁飞区测试。
- 中国大陆需遵守《无人机飞行管理暂行条例》,微型室内机建议申请临时飞行空域或在室内网罩内操作。
扩展灵感
- 加入眨眼/眨眼检测控制偏航/俯仰。
- 用 OpenBCI 8 通道 EEG 替代 MindWave,提升分类精度。
- 引入强化学习,让无人机自主悬停,脑波仅给高层指令(前进/后退/悬停)。
- 结合 WebSocket 实现多用户“脑控接力赛”。
一句话总结:用 4 个 RC 低通滤波器把 Arduino PWM 变成模拟电压,劫持遥控器摇杆信号线,配合 NeuroSky EEG 与 Processing,跑通“意念 → 油门 → 起飞”最小闭环,为 BCI 无人机控制铺平入门之路。
制造工艺
- 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
- ATtiny85 迷你街机:贪吃蛇 — 打造掌上 OLED 游戏机
- 便携测距仪 DIY 套件:Arduino Nano + HC-SR04 + 18650 电池 + 3D 打印外壳
- DIY Arduino 加湿器控制器:继电器安全控制高压电路
- 进阶遥控夹爪机器人:精密抓取 DIY 指南
- 铜电镀智能系统:基于 Arduino UNO 的可控电解装置
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
- 使用 Arduino 移位寄存器创建绚丽灯光序列
- 智能插座:基于 Arduino 与 RTC 的 120V 定时开关插座