OpenBCI(Open-source Brain-Computer Interface)는
누구나 뇌파(EEG), 근전도(EMG), 심전도(ECG) 등의 생체 신호를 수집하고 분석할 수 있도록 만든 오픈소스 기반의 플랫폼입니다.
2013년 MIT 미디어랩 출신의 Joel Murphy와 Conor Russomanno가 시작했으며, 킥스타터 크라우드펀딩을 통해 초기 자금을 확보했습니다.
웹사이트: https://www.openbci.com
GitHub: https://github.com/OpenBCI
OpenBCI의 출현은 다음과 같은 요구에 부응한 결과입니다:
- 고가의 EEG 장비를 대체할 저비용 솔루션 필요
- 개발자 및 메이커 커뮤니티의 참여 확대
- 뇌-기계 인터페이스에 대한 접근성 향상
핵심 가치
오픈소스 하드웨어 & 소프트웨어
낮은 진입 장벽
개발자 및 메이커 커뮤니티 중심
오늘날 OpenBCI는 뉴로피드백 연구, BCI 앱 개발, 뇌-로봇 인터페이스, 심리학 실험 등 다양한 분야에서 활용되고 있습니다.
과거에는 뇌파나 생체 신호를 측정하기 위해 수천만 원짜리 의료 장비가 필요했습니다.
하지만 연구자, 해커, 예술가, 스타트업 등은 손쉽고 저렴한 대안을 원했습니다.
OpenBCI는 다음과 같은 이유로 큰 반향을 일으켰습니다:
- 저렴한 가격: 전문 EEG 장비의 10~20% 수준
- 확장성: 4~16채널까지 자유롭게 구성 가능
- 개방성: 아두이노 기반으로 누구나 수정 가능
- 커뮤니티 공유: GitHub, Discord, Forum 기반의 사용자 생태계
즉, 기존의 고가, 폐쇄적인 뇌파 연구의 장벽을 허물고 '뇌 데이터를 민주화'한 도구입니다.
3-1. 하드웨어
- Cyton Board (8채널)
OpenBCI의 대표 제품. 뇌파를 측정하는 기본 장치로, 아두이노와 호환됩니다.
- Daisy Module
Cyton에 추가하면 16채널까지 확장 가능.
- Ganglion Board (4채널)
엔트리급 보드로, 저렴하고 간단한 실험에 적합.
- Ultracortex Headset
EEG 전극을 쉽게 고정할 수 있는 3D 프린터 기반의 헤드셋.
- WiFi Shield
Bluetooth 대신 WiFi로 데이터를 빠르게 전송하는 모듈.
3-2. 소프트웨어
- OpenBCI GUI
뇌파 신호 시각화, 기록, 간단한 분석 기능 제공.
- BrainFlow
다양한 보드를 통합 제어할 수 있는 Python, C++, JavaScript용 SDK.
- OpenViBE, BCILAB 등 외부 툴 연동도 가능.
* Cyton Board (사이톤 보드)
- 뇌파 신호를 수집하는 EEG 보드
- 8채널의 신호를 수집 가능하며, 뇌파를 빠르게 디지털 신호로 변환함
- EEG 센서에서 들어오는 매우 미세한 신호를 정확하게 측정하여 컴퓨터로 전달하기 위한 핵심 장치
참고: ‘채널’이란, 측정하는 뇌 부위의 수를 의미. 8채널이면 8곳의 뇌파를 동시에 측정 가능.
* Ultracortex Headset (울트라코텍스 헤드셋)
- EEG 센서를 머리에 고정하기 위한 3D 프린팅 헤드셋
- 전극을 정확한 위치에 고정하기 위한 틀로, 머리형에 맞게 조절 가능
- 뇌파의 정확한 측정을 위해 센서를 두피의 특정 위치에 고정할 필요가 있음
참고: EEG 센서 위치는 국제적으로 정해진 ‘10-20 시스템’을 따름 (예: Fp1, Fp2, Cz 등)
* BrainFlow SDK란?
OpenBCI 하드웨어에서 받은 데이터를 프로그래밍적으로 제어할 때 쓰는 것이 BrainFlow SDK입니다.
역할: OpenBCI 보드에서 실시간 데이터 수신, 필터링, 시각화 가능
왜 필요한가?: Python, JavaScript, C++ 등 다양한 언어에서 OpenBCI를 쉽게 활용할 수 있게 해줌
- 집중도 분석 : 베타파 활동을 기반으로 집중 정도를 실시간 시각화.
- 뉴로피드백 앱 : 사용자가 집중하거나 이완할 때 색상이 변하는 시각 피드백 제공.
- BCI 게임 : 집중하면 캐릭터가 앞으로 전진, 이완하면 멈추는 미니게임 구현.
- 드론 제어 : EEG 패턴을 명령으로 변환해 드론의 방향 조작 가능.
- VR/AR 연동 : 뇌 상태에 따라 VR 콘텐츠를 변화시키는 인터랙션 구현.
import argparse
import time
from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds
def main():
BoardShim.enable_dev_board_logger()
parser = argparse.ArgumentParser()
# use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port
parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False,
default=0)
parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0)
parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False,
default=0)
parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='')
parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='')
parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='')
parser.add_argument('--other-info', type=str, help='other info', required=False, default='')
parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='')
parser.add_argument('--board-id', type=int, help='board id, check docs to get a list of supported boards',
required=True)
parser.add_argument('--file', type=str, help='file', required=False, default='')
parser.add_argument('--master-board', type=int, help='master board id for streaming and playback boards',
required=False, default=BoardIds.NO_BOARD)
args = parser.parse_args()
params = BrainFlowInputParams()
params.ip_port = args.ip_port
params.serial_port = args.serial_port
params.mac_address = args.mac_address
params.other_info = args.other_info
params.serial_number = args.serial_number
params.ip_address = args.ip_address
params.ip_protocol = args.ip_protocol
params.timeout = args.timeout
params.file = args.file
params.master_board = args.master_board
board = BoardShim(args.board_id, params)
board.prepare_session()
board.start_stream ()
time.sleep(10)
# data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer
data = board.get_board_data() # get all data and remove it from internal buffer
board.stop_stream()
board.release_session()
print(data)
if __name__ == "__main__":
main()
비침습형이기 때문에 정확도나 정밀성은 의료기기보다 낮고,
착용이 번거롭고, 외부 잡음에 민감함 , 뇌파는 매우 개인차가 크므로 학습이 필요합니다.
그러나...
Neuralink와 같은 침습형 기술에 비해 안전하고 접근성 높으며,
머신러닝 기술과 결합되면 정밀도도 지속 향상 중에 있습니다.
향후 웨어러블화, 디자인 개선을 통해 일상에서도 사용 가능합니다.
OpenBCI는 뇌파를 연구하고 응용하고 싶은 사람에게 최고의 입문 도구입니다.
무엇보다 중요한 것은, 이 기술이 이제 연구실 밖으로 나와 "누구나 직접 체험할 수 있게" 되었다는 점입니다.
당신이 학생이든 개발자든 예술가든, OpenBCI는 뇌파 데이터라는 새로운 언어를 배우고 세상과 소통할 수 있는 기회를 열어줍니다.
상세한 내용은 아래 내용을 참고해주세요