No Code AI(肉寇)AI自動化兩日精通|實體6小時+線上6小時
|

【腦機介面BCI】透過 Raspberry Pi 讀取腦波數據

   

作者:黃無名

開發板與腦波儀組裝完成示意圖(圖:黃無名)

相信不少的朋友對於腦波很有興趣,也想對此做一些有趣的應用,本次我將介紹如何在 Raspberry Pi上讀取神念科技 Mindwave Mobile 腦波儀上的腦波數據。

話不多說,我們準備開始吧!

1. 事前準備

  • Raspberry Pi的開發板:Raspberry Pi須具備藍牙連線功能,若是使用Pi 2或Pi zero,請自行準備藍牙的USB dongle。這次我用的是Raspberry Pi 3Raspberry Pi Zero W
  • 神念科技Mindwave Mobile頭戴式藍牙腦波儀。

神念科技Mindwave Mobile頭戴式藍牙腦波儀(圖:黃無名)

2. 新增腦波儀到Pi

首先我們在RaspBian的右上角按下藍牙的圖示,它會跳出一個菜單,接著我們點選Add Device,系統即進入搜尋藍牙裝置的畫面。

跳出菜單後,點選Add Device進入搜尋藍牙裝置的畫面。(圖:黃無名)

再來開啟神念科技的腦波儀,撥動開關到中央即為開機,此時會看到腦波儀的藍燈閃爍(每秒閃一次),這是一般狀態,而非藍牙配對模式喔!我們再把開關往上(前)推,持續約3~5秒,腦波儀的藍燈變成快閃(每秒閃二次),這才是藍牙配對模式,Raspbian也才能偵測到腦波儀。

藍牙配對模式中,Raspbian偵測到腦波儀的顯示畫面。(圖:黃無名)

若有偵測到設備,就會如上圖所示,接著點選MindWave Mobile後,按Pair進行配對。配對完成後,系統會跳出一個對話框,告知你配對已完成,但設備並沒有任何服務可供Pi使用。

這時可直接按「OK」關閉視窗,因為設備目前當然沒有提供任何服務,要「提供什麼服務」,不就是我們要做的嗎?

接下來,我們就做點服務給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。

創建Python檔。(圖:黃無名)

>>>>>>

開始Coding啦!請參照下文說明輸入程式碼。(圖:黃無名)

<<<<<<

程式說明:

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即可。

將鼠標移至 MindWave Mobile 選項上,所顯示的字串為腦波儀的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

上傳Python檔至 Pi 中,並執行Python檔。(圖:黃無名)

 

輸出資料後,就完成第一個腦波程序了!(圖:黃無名)

若連線品質(Poor Signal=0)沒問題的話,5秒後開始輸出Meditation與Attention的資料。

這樣就完成我們的第一個腦波程序了,是不是很簡單呢?趕快一起來動手做吧!

(責任編輯:林佳盈)

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author:

Share This Post On
468 ad

8 Comments

  1. 您好,有個問題想跟您做詢問。

    我在測試您的程式時有結果呈現出來,但是是否有方法讓
    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出來全部呢?

    Post a Reply
  2. 請問有辦法拿到原始腦波數據的檔案嗎(. txt之類的檔案)
    謝謝

    Post a Reply
    • 這只是單電極的腦波數據喔~~ 要自己寫代碼保存~

      Post a Reply
  3. 退休後開始玩Arduino,估計也有半年之多,無意間看到一篇用該mindwave控制機器人小車行進,深感好奇,而之前也做了一部機器人小車,試著在這方面去研習.非常高興也謝謝你發表的文章.至少有個請教的先進,不知你是否介意.

    Post a Reply
    • 您好,我們是MakerPRO編輯部,謝謝您對這篇文章的支持噢:D 後續若有想向作者請教的地方,也可加他的FB:https://www.facebook.com/wuming.huang?ref=ts&fref=ts (可先私訊自介一下~)與他交流討論噢~謝謝您~

      Post a Reply
    • 能看到同好,是令人非常高興的事情. 歡迎一同學習與成長~

      Post a Reply
    • 看到同好是令人高興之事, 歡迎一同學習與成長

      Post a Reply

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *