使用 OpenBCI + Python + Arduino 实现脑控灯光系统(完整实战教程)

作者:科采通

关键词: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+主程序编写环境
brainflowOpenBCI 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 项目,欢迎留言交流!

相关链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值