作者:互联网 时间: 2026-09-11 13:10:01
真正理解brain,要从它处理的任务开始:用于读取 Neurosky EEG 脑电波数据的 Arduino 库, (使用 MindFlex 和力量训练器玩具进行测试,)。实际做部署与运行环境时,经常会碰到权限、依赖和环境差异会放大维护成本,所以功能列表并不能代替验证。试跑可以从在非生产环境复现一次安装与运行开始,并把依赖锁定、权限边界、日志、回滚和资源消耗写进验收记录。它更像给愿意维护环境并重视故障恢复的工程团队准备的可审查方案,是否长期使用应由试跑数据决定。
Arduino 大脑库
概述
Brain 是一个 Arduino 库,用于解析来自 Neurosky 的 EEG 耳机的数据。测试的装置包括星球大战原力训练器和 Mattel MindFlex。
它的设计目的是让您可以轻松地通过串行发送 ASCII 逗号分隔值字符串,或者直接在 Arduino 草图中访问处理后的脑电波信息。请参阅演示每个用例的代码示例。
有关此黑客攻击的硬件端的说明可在此处找到:
https://frontiernerds.com/brain-hack
该库与基于处理的 BrainGrapher 完美搭配。
getCSV() 函数返回一个列出最新大脑数据的字符串 (char*),格式如下:
signal strength, attention, meditation, delta, theta, low alpha, high alpha, low beta, high beta, low gamma, high gamma
信号强度范围为 0 – 200。与直觉相反,0 表示设备已连接成功,200 表示没有信号。
注意力和冥想值都在 0 到 100 之间。直观上,数字越高代表注意力或冥想越多。
EEG 功率值(delta、theta 等)是不同大脑波长中相对活动的经过严格过滤的表示。这些值不能直接映射到物理值(e.g.伏),但随着时间的推移或相对于彼此考虑时仍然有用。
兼容性
该库需要来自连接设备的特定串行协议。使用不同协议的硬件将无法工作,您将看到串行或解析相关的错误。
| 设备 | 兼容性 |
|---|---|
| 星球大战原力训练师 | ✅ 是的 |
| 美泰Mindflex | ✅ 是的 |
| 星球大战原力训练器 II | ❌ 没有 |
| Neurosky MindWave 手机 2 | ❌ 没有 |
如果您已经使用其他耳机进行了测试,请随时提出问题来报告您的发现。
对其他设备的支持绝对是可行的,并且欢迎拉取请求,但我目前没有时间或硬件访问权限来自己实现这一点。
存储库重命名
该项目以前是 GitHub 上的 Arduino-Brain-Library,但在 2014 年更名为 Brain,以便与 Arduino IDE 的新“Sketch → Import Library...”菜单项很好地配合。
软件系列
该库的过去版本依赖于一个单独的分支来实现对 NewSoftSerial 的支持。对 Arduino 1.0 中捆绑的 SoftwareSerial 库和底层类层次结构的改进使得单一版本的 Brain 库能够涵盖这两个用例。请不要使用该库的旧 软件序列号 分支!
示例
该库提供了三个示例:
BrainBlinker.ino
当您的“注意力”值增加时,LED 的闪烁速度会加快。
BrainSerialTest.ino
通过串行打印出 CSV 大脑数据。
BrainSoftSerialTest.ino
通过 SoftwareSerial 读取大脑数据并通过硬件串行打印 CSV。
安装
有两种方法安装该库:
通过Arduino IDE安装
下载最新版本,然后在Arduino IDE中转到“Sketch → Import Library...”并将文件对话框指向您刚刚下载的Brain.zip文件。
手动安装
下载最新版本的,解压,重命名为Brain,然后将“Brain”文件夹拖到Arduino的sketch文件夹中的“libraries”文件夹中。 (在 Mac 上,默认为 ~/Documents/Arduino/libraries。如果该文件夹不存在,您可能需要创建该文件夹。)重新启动 Arduino 环境。
功能概述
Brain(HardwareSerial &_brainSerial)
在硬件串行端口上实例化大脑库。
boolean update();
在主循环中调用此函数以从耳机读取数据。如果有新鲜数据包则返回 true。
char* readErrors();
包含最近错误的字符串。如果您遇到问题,值得通过串行打印出来。
char* readCSV();
包含所有最新大脑值的字符串,采用逗号分隔格式。旨在通过串行打印。数据按以下顺序返回:signal strength, attention, meditation, delta, theta, low alpha, high alpha, low beta, high beta, low gamma, high gamma
byte readSignalQuality();
返回最新的信号质量读数。 200表示无信号,0表示信号良好。此功能(以及其余功能)主要供您希望 Arduino 在内部使用大脑数据时使用。 (节省您解析 CSV 的麻烦/内存消耗。)
byte readAttention();
返回NeuroSky“eSense”关注值。
byte readMeditation();
返回NeuroSky“eSense”冥想值。
unsigned long* readPowerArray();
返回八个功率带 (FFT) 值的数组,顺序与 CSV 相同。
unsigned long readDelta();
返回增量 (1–3Hz) 功率值,通常与睡眠相关。
unsigned long readTheta();
返回与放松、冥想状态相关的 theta (4–7Hz) 功率值。
unsigned long readLowAlpha();
返回低 alpha (8–9Hz) 功率值,当眼睛闭上或放松时更高/
unsigned long readHighAlpha();
返回高 alpha (10–12Hz) 功率值。
unsigned long readLowBeta();
返回低 beta (13–17Hz) 功率值,当您警觉且注意力集中时,该值会更高。
unsigned long readHighBeta();
返回高 beta (18–30Hz) 功率值。
unsigned long readLowGamma();
返回与多感官处理相关的低伽马 (31–40Hz) 功率值。
unsigned long readMidGamma();
返回高伽马 (41–50Hz) 功率值。
细节
请注意,与 Neurosky 耳机的连接是半双工的 - 它将耗尽 Arduino 上的 RX 引脚,但您仍然可以通过 USB 将数据发送回 PC。 (尽管在这种情况下,您将无法从 PC 向 Arduino 发送数据。)
您可能希望通过软件串行连接而不是 Arduino 的硬件串行连接读取大脑数据(这可以释放硬件串行以进行全双工操作)。该库有一个不同的分支,专为与 NewSoftSerial 一起使用而设计:https://github.com/kitschpatrol/Arduino-Brain-Library/tree/softserial
MindFlex 可以访问比力量训练器更多的大脑数据 - 除了信号强度、注意力和冥想值之外,MindFlex 还可以访问 8 个频段的 EEG 力量数据。
大脑数据的获取速度相当缓慢。预计每隔一秒左右就会有一个新的数据包。
版画
由 Eric Mika 在 NYU ITP 于 2010 年春季创建。 2013 年更新为 Arduino 1.0。 2014 年初进行了修改、重新测试和清理。
我感谢 Tom Igoe 在开发过程中提供的帮助。感谢我的合作者 Sofy Yuditskaya 和 Arturo Vidich。 (E>)
还要感谢 Eero af Heurlin 对他的前叉进行了一些深思熟虑的更改。