作者:科采通
关键词:OpenBCI、BCI、脑电图 EEG、Python、Arduino、人机交互、脑控设备
适用人群:科研人员、创客、BCI 爱好者、OpenBCI 初学者
📌 一、项目概述
本教程将带你一步步完成一个“脑控灯光”的简单 BCI 应用:通过 OpenBCI 设备采集脑电信号(如 alpha 波),经过 Python 实时处理,并控制 Arduino 板点亮 LED 灯泡。
这个项目不仅适合作为 脑机接口入门实践,也展示了 EEG + Python + 硬件控制 的完整工作流程。
🔧 二、所需硬件与软件
硬件设备
名称 | 说明 |
---|---|
OpenBCI Cyton Board(8 通道) | 核心脑电采集设备 |
EEG 电极 + 导电膏 | 推荐采用 OpenBCI 官方 Electrode Cap |
Arduino UNO | 控制 LED 灯的微控制器 |
LED、220Ω 电阻、杜邦线若干 | 搭建简单电路用 |
USB 数据线(分别连接 OpenBCI 与 Arduino) | 保证数据传输稳定 |
软件工具
名称 | 用途 |
---|---|
OpenBCI GUI | 查看脑电数据 |
Python 3.8+ | 主程序编写环境 |
brainflow | OpenBCI Python SDK |
pyserial | 与 Arduino 通信 |
matplotlib / numpy | 简单信号处理可选项 |
⚙️ 三、系统流程结构
graph LR
A[用户佩戴电极帽] --> B[OpenBCI 采集 EEG]
B --> C[Python 解析 alpha 波]
C -->|判断值超过阈值| D[串口通信]
D --> E[Arduino 控制 LED]
🧪 四、代码实战:Python × OpenBCI × Arduino
1️⃣ Arduino 控制代码(上传至 Arduino IDE)
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char command = Serial.read();
if (command == '1') {
digitalWrite(13, HIGH); // 开灯
} else {
digitalWrite(13, LOW); // 关灯
}
}
}
💡 LED 默认连接 Arduino UNO 的 13 号引脚。
2️⃣ Python 主控脚本(使用 BrainFlow 获取 alpha 值)
from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds
import serial
import time
import numpy as np
# 设置 OpenBCI 参数
params = BrainFlowInputParams()
params.serial_port = 'COM5' # 替换为实际串口
board = BoardShim(BoardIds.CYTON_BOARD.value, params)
board.prepare_session()
board.start_stream()
# Arduino 串口连接
arduino = serial.Serial('COM3', 9600)
time.sleep(2) # 等待串口初始化
def get_alpha_power(data, channel=1, sampling_rate=250):
from scipy.signal import welch
f, pxx = welch(data, fs=sampling_rate)
alpha_band = (f >= 8) & (f <= 13)
return np.mean(pxx[alpha_band])
try:
while True:
data = board.get_current_board_data(250)
eeg_channel = board.get_eeg_channels()[0]
alpha = get_alpha_power(data[eeg_channel])
print(f"Alpha Power: {alpha:.4f}")
if alpha > 100: # 经验值,请根据个体调节
arduino.write(b'1')
else:
arduino.write(b'0')
time.sleep(0.5)
except KeyboardInterrupt:
print("程序中止。")
board.stop_stream()
board.release_session()
arduino.close()
🎯 五、测试与调试建议
-
电极位置:建议参考国际 10-20 系统,重点监测 O1、O2(枕叶区域)来观察 alpha 波。
-
阈值调节:alpha 的功率值因人而异,建议多采样几次确定合适的触发门槛。
-
滤波处理:可引入带通滤波器提升信噪比,例如滤除肌电或电源噪声(50Hz/60Hz)。
💡 六、进阶拓展建议
-
使用 脑控按钮/灯泡界面 与前端交互(WebSocket + 前端框架)
-
将数据同步至 LSL(Lab Streaming Layer),方便后续分析与跨平台兼容
-
集成 视觉诱导(SSVEP) 或 运动想象(Motor Imagery) 模式,开发更高级的控制系统
📝 七、总结
OpenBCI 提供了一个低门槛、高自由度的脑电开发平台。通过本实战项目,我们实现了:
-
OpenBCI EEG 采集 → Python 实时处理 → Arduino 控制硬件的完整闭环
-
初步理解了脑机接口的基本开发流程与信号处理逻辑
-
学习了 brainflow 等常用工具库的使用方法
👉 若你有兴趣,我们还可以制作视觉脑控键盘、脑电游戏输入器等更有趣的 BCI 项目,欢迎留言交流!
相关链接:
-
官方网站:OpenBCI