作者:黃無名
相信不少的朋友對於腦波很有興趣,也想對此做一些有趣的應用,本次我將介紹如何在 Raspberry Pi上讀取神念科技 Mindwave Mobile 腦波儀上的腦波數據。
話不多說,我們準備開始吧!
1. 事前準備
- Raspberry Pi的開發板:Raspberry Pi須具備藍牙連線功能,若是使用Pi 2或Pi zero,請自行準備藍牙的USB dongle。這次我用的是Raspberry Pi 3及Raspberry Pi Zero W。
- 神念科技Mindwave Mobile頭戴式藍牙腦波儀。
2. 新增腦波儀到Pi
首先我們在RaspBian的右上角按下藍牙的圖示,它會跳出一個菜單,接著我們點選Add Device,系統即進入搜尋藍牙裝置的畫面。
再來開啟神念科技的腦波儀,撥動開關到中央即為開機,此時會看到腦波儀的藍燈閃爍(每秒閃一次),這是一般狀態,而非藍牙配對模式喔!我們再把開關往上(前)推,持續約3~5秒,腦波儀的藍燈變成快閃(每秒閃二次),這才是藍牙配對模式,Raspbian也才能偵測到腦波儀。
若有偵測到設備,就會如上圖所示,接著點選MindWave Mobile後,按Pair進行配對。配對完成後,系統會跳出一個對話框,告知你配對已完成,但設備並沒有任何服務可供Pi使用。
這時可直接按「OK」關閉視窗,因為設備目前當然沒有提供任何服務,要「提供什麼服務」,不就是我們要做的嗎?
接下來,我們就做點服務給Pi用吧!
3. 安裝Neurosky的Python庫
MindWave Mobile是透過藍牙的SPP (Serial-Port-Profile)傳輸的,若要用Serial Port讀取,可以將Serial Port的參數設成57600,8,N,1,讀取對應的Serial Port,即可看到腦波的資料。
我們在 Neurosky Think Gear Serial 資料格式探究(一)及Neurosky Think Gear Serial 資料格式探究(二) 中有詳細的資料格式說明,有興趣的朋友可以參研參研。
網路上有一些已實作完成的Python的函式庫可供使用,這次我們使用的是Robintibor實作的mindwavemobile庫,請到Github下載。
第一步要開啟一個terminal,首先在home目錄下建立一個Project目錄,然後輸入字串:git clone https://github.com/robintibor/python-mindwave-mobile。
自Github複製一份到本地端,再進入python-mindwave-mobile的目錄,將函式庫安裝到Python的repository中。
輸入指令:sudo python setup.py install。
它會將mindwavemobile安裝到/usr/local/lib/python2.7/dist-packages的目錄下,之後我們就可以直接引用啦!
4. 開始Coding吧!
用你最習慣的編輯器創建一個Python檔,這邊我用notepad++ 創建一個read_eeg.py。
>>>>>>
<<<<<<
程式說明:
import bluetooth
我們用藍牙與腦波儀連線,所以引用 Bluetooth 庫:
from mindwavemobile.MindwaveDataPoints import RawDataPoint
from mindwavemobile.MindwaveDataPointReader import MindwaveDataPointReader
下面程式有用到RawDataPoint及MindwaveDataPointReader類別。
mindwaveDataPointReader = MindwaveDataPointReader(address=’20:68:9D:70:BD:71′)
宣告mindwaveDataPointReader,請注意後面address要輸入你的腦波儀的address;雖然依照Robin庫的寫法,理論上可以不用輸入,它會自己搜尋後建立連結,然而我實驗後結果並非如此,所以在此需要自己將address填入。
不知道address嗎?沒關係,點選Raspbian右上角的藍牙圖示,在菜單中選Remove Device選項,系統就會跳出目前已配對完成的設備,將鼠標移到MindWave Mobile選項上,即會顯示你的腦波儀的address。詳如下圖,dev_ 後方的字串即為你的腦波儀的address,只要將’20:68:9D:70:BD:71’改成你的address即可。
mindwaveDataPointReader.start()
開始連接腦波儀囉!
if (mindwaveDataPointReader.isConnected()):
while(True):
dataPoint = mindwaveDataPointReader.readNextDataPoint()
if (not dataPoint.__class__ is RawDataPoint):
print(dataPoint)
else:
pass
else:
print(“Exiting because the program could not connect to the TGAM device.”)
若連接成功,輸出除了RawDataPoint以外的所有資訊。
5. 上傳執行
將read_eeg.py上傳到Pi中,執行:python read_eeg.py
若連線品質(Poor Signal=0)沒問題的話,5秒後開始輸出Meditation與Attention的資料。
這樣就完成我們的第一個腦波程序了,是不是很簡單呢?趕快一起來動手做吧!
(責任編輯:林佳盈)
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2017/10/16
您好
2017/10/16
您好,有個問題想跟您做詢問。
我在測試您的程式時有結果呈現出來,但是是否有方法讓
Poor Signal Level:0
Meditation Level: 0
Attention Level: 0
EEG Powers:
delta:5
…………….
全部一次印出來呢?(我有嘗試在while(true)中加入counter測試)
我發現Poor Signal Level,Meditation Level很常出現(大約4.5次),後才出現EEG Powers
想詢問是否有方法一次print出來全部呢?
2017/09/11
請問有辦法拿到原始腦波數據的檔案嗎(. txt之類的檔案)
謝謝
2017/09/21
這只是單電極的腦波數據喔~~ 要自己寫代碼保存~
2017/05/16
退休後開始玩Arduino,估計也有半年之多,無意間看到一篇用該mindwave控制機器人小車行進,深感好奇,而之前也做了一部機器人小車,試著在這方面去研習.非常高興也謝謝你發表的文章.至少有個請教的先進,不知你是否介意.
2017/06/12
您好,我們是MakerPRO編輯部,謝謝您對這篇文章的支持噢:D 後續若有想向作者請教的地方,也可加他的FB:https://www.facebook.com/wuming.huang?ref=ts&fref=ts (可先私訊自介一下~)與他交流討論噢~謝謝您~
2017/09/21
能看到同好,是令人非常高興的事情. 歡迎一同學習與成長~
2017/09/21
看到同好是令人高興之事, 歡迎一同學習與成長