106 學年度第二學期電工實驗生醫實驗...
Transcript of 106 學年度第二學期電工實驗生醫實驗...
106 學年度第二學期電工實驗生醫實驗
期末專題肌電控制車
指導教授:李百祺 教授指導助教:趙珮妤 助教組別:一學生:電機三 羅浩 B04901050電機三 蔡承佑 B04901059電機三 佘慶峰 B04209035
目次
一、 題目設計選擇概念與啟發二、 EMG 肌電電路設計與實作三、 肌電控制車相關設計與實作四、 訊號傳輸處理與開發版的使用五、 廢案-----手勢辨識控制六、 未來展望附錄、 參考資料DEMO 影片:https://drive.google.com/open?id=1RH68ZEpMrE55Jt-
6Mz8k4dWWA-G1FSF6
ㄧ、 題目設計選擇概念與啟發本學期實驗一為透過儀器來進行生理訊號量測,以了解不同生
理訊號之特徵及不同狀態下的變化等;實驗二則是透過自行設計的
電路來量測人體的生理訊號,其中包含低通濾波器、高通濾波器等
相關電路。期末專題我們題目選擇的是「肌電控制車」,透過實驗一
所學習到的知識,以及實驗二所設計的電路,使用生理訊號對其的
處理,輔以 Arduino 和 Raspberrypi 等開發版,以達到控制車子的前
進後退及方向轉變與其他功能性設計之目的(如掃地), 以下將對
其設計做詳細之介紹。二、 EMG 肌電電路設計與實作
為了達到多重指令的設計,我們同時量取左右兩手之肌電訊
號。(A.) 電路設計概念:
訊號先經由 Instrumental Amplifier 放大訊號,再經由 Notch
Filter 過濾市電所的 60 Hz 雜訊,並且使用 Low Pass Filter 以及
High Pass Filter 所構成之 Bandpass Filter(31.84 ~451Hz),濾出
所需要的頻率區間,為了放大訊號使之能再之後的訊號分析更
順利,因此最後再經過一個 notch filter 及經過一個 Instrumental
Amplifier。
(B.) 詳細電路設計1. InstrumentalAmplifier:
1.敘述
本實驗採用 INA128 作為
Instrumental Amplifier,
一個 INA128 等同使用三個
op,省下許多空間,且僅
需少數電阻即可。
#INA128
2.各參數設計
𝑅" = 2.7𝑘Ω𝐺 = 20𝑉/𝑉
2. NotchFilter
1. 敘述
本實驗採用 Wien Bridge Notch
Filter,為二階濾波器,目的為濾
掉市電所所造成的 60 Hz 雜訊。
2. 各參數設計
(1) 𝑅 = 2.7𝑘Ω
(2) 𝐶/ = 𝐶0 = 1𝜇𝐹
(3) 𝑓 = /0567
= 58.98𝐻𝑧
說明:本實驗共用此濾波器數量兩
個,總計四階。單一使用的濾波程
度不佳,使用三個則是與兩個的效
果相去不遠。
3. LowPassFilter
#5thorderlowpassfilter
1.說明
使用五階的低通濾波器
除去頻率高於肌電訊號
的雜訊。使用過六階的
低通濾波器,但效果不
顯著,考量到其他量測
的電路也需要空間及電
阻,僅使用五階的濾波
器。
2.各參數設計
(1) 𝑅 = 1𝑀Ω
(2) 𝐶 = 𝐶/> = 𝐶0> = 470𝑝𝐹
(3) 𝑓 = /0567
= 338.63𝐻𝑧
4.HighPassFilter
#1st High Pass Filter
1. 敘述
與 Low Pass Filter 形成 Bandpass
Filter,使用的是一階的 RC 高通
濾波器。
2. 各參數設計
(1) 𝑅/ = 5𝑀Ω
(2) 𝑅C = 𝑅D = 51𝑘Ω
(3) 𝐶/ = 1𝑛𝐹
(4) 𝑓 = /0567
= 31.84𝐻𝑧
(C.) 問題與討論
1. 問題:a. 雖然使用的是與實驗二量測生理訊號相同設計概念的電
路,但在後端處理時,我們需要去量取明確的
threshold,故在原電路後面,多新增 InstrumentalAmplifier 和 NotchFilter,以達到方便觀察訊號增幅以及
進一步有效濾除市電所 60Hz 訊號的目的。b. 由於 Arduino 是在 0~5V 之間將訊號分成 1024 等份,因
此即使我們量測到的訊號變化範圍可達(約為 700mV) ,
是原訊號三倍以上,但以 Arduino 觀測到的訊號變化並
不夠大。若透過放大器來進行放大訊號的動作,則會使
市電所的 60Hz 雜訊過大而造成干擾量測生理訊號的問
題產生。2. 討論以及改善方式:
a. 針對遇到的第一個問題,透過在 InstrumentalAmplifier的輸入端上可將訊號趨向 DC,以此來減少市電所 60Hz雜訊帶來的干擾。
b. 雖然我們的電路量測到的肌電生理訊號可以達到約
700mV 的變化範圍,但在 Arduino 上無法清楚地呈現這
麼大的變化,其一部份原因在於我們將訊號傳到板子上
時有進行過分壓的處理,因此電壓的變化我們難以觀察
到預期的變化範圍,改善訊號在板子上表現之後,或許
可使其變化能更為符合我們的預期,方便我們在後端的
訊號處理。
三、肌電控制車相關設計與實作(A.) 車體架構:
車輪及其控制馬達
垃圾收納盒 掃地風扇風扇之控制馬達
行動電源
風扇控制
晶片
及其電路
車輪控制晶片
及其電路
控制訊號處理用
開發版
開發版:Rpi3
(B.) 車體設計1. 控制電路:
a. 開發版:使用 Raspberrypi3,接受自 Arduino 透過藍芽模組
傳送的 EMG 肌電訊號,藉此控制車輪以及風扇。使用一般市售
行動電源最為電源,規格為 5.0V2.0A。b. 風扇控制晶片:使用 L293d 驅動馬達,下圖為其角位圖。
� L293d 角位圖c. 車輪控制晶片:使用 L293b 驅動馬達,下圖為其角位圖。
2.掃地設計:掃地之設計的構想來自於下圖:
(C.)問題與討論1. 問題:
a. 掃地裝置難以實現:由於車體前方空間的不足,使我們無法
製造出夠大的風扇,由圖片中可以發現,一般正常的掃地機器
人邊刷都很長,其觸及的範圍也很大。b. 掃地馬達馬力不足,在將刷毛黏上風扇之後,由於與地板的
摩擦力過大,導致風扇無法進行轉動的動作,這是我們沒有設
想到的,市面上的小型馬達馬力不足以驅動刷子進行刷動的動
作。透過剪短刷毛的方式,雖然可以使風扇進行轉動,但也造
成掃地的成效不彰。2.討論以及改善方式:
a. 使用轉速更快,馬力更強的馬達,如此一來不但能使風扇
更易驅動,也能在加大扇葉之後來驅動馬達,並提高轉速來提
升掃地裝置的效益。b. 或者使用其他種掃地方式,如:吸附式、沾黏式、捕撈式
等,也可以進行掃地的功能,但其效益需實際裝置且測試過後
才能確認。
四、 訊號傳輸處理(A.) 流程簡圖
(B.) 簡要流程說明
1. 透過 EMG 肌電電路,訊號由 Arduino 上的 Analogpin 分別
傳入左手與右手的肌電訊號。2. 透過 analogtodigitalconverter,轉換 0~5V 的類比訊號至 0
bit~1023bits 的數位訊號。3. 封包處理方式:
1byte=256bits,先宣告大小為 3bytes 的矩陣,右手的部
分先將字元 ’y’ 儲存至封包中的第一個 byte,左手的部分
則是儲存字元 ’z’ 至封包中的第一個 byte;將轉換完的數
位訊號除以 256,商數的部分儲存至封包中的第二個
byte,餘數則是儲存至第三個 byte。4. 傳輸封包的時候,透過判斷傳輸的第一個 byte 的字元來判
斷是右手或者是左手,要注意的地方在於 char 在傳遞之後
會轉變為 asciicode,必須確保這個 asciicode 的值不能與其
他要傳輸的值的數字相同,否則會造成判斷左右手的部分
難以執行。5. 傳輸數位訊號的方式:
由於 1byte<1024bits,因此由 Arduino 上的藍芽端傳輸需
要 2bytes 以上的封包來傳輸數位訊號。設計上,利用三個bytes 的封包傳輸數位訊號。Arduino 的 code 內,有一個
迴圈,迴圈內的程式碼會不斷地被執行,只要確保有預留好
迴圈的 timecomplexity,就可以使訊號在不流失的情況下
傳遞。
肌電訊號讀取
Arduino 讀取右⼿ analog A0 / 左⼿ Serial
經由 HC-05 藍牙模組傳輸到 Rpi 3
由程式判斷前進、後退、轉向等指令
ArduinoADC/digitalpin10,11
(C.) Arduinocode
圖為實作用的兩塊 ArduinoUno,分別讀取左右手 EMG 訊號。
(D.) Raspberrypi3 後端處理 Arduino 的封包資料1. 導入函式庫 Serial 讀取 Arduino 傳來的封包資料。每一個封
包資料有三個 bytes,第一個 byte 來判斷是左手或右手,透
過 256* 第二個 byte+ 第三個 byte 來讀取訊號的振幅大
小。下圖為程式。
2. 透過對訊號設計 threshold ,一般來說在越加用力的情況
下,訊號產生的 trigger 會越多,以此為概念,設計出不同
手的用力有無及大小,來讓車子進行前後左右以及掃地的
動作。下圖為相關實作程式。
3. 問題與討論a. 問題:
I. 當肌肉用力次數過多的時候,可能導致肌肉疲乏
或者是記憶效應,長時間的處在高度用力,而訊
號震幅降不下來的情形。由於 threshold 是預先設
定的定值,震幅降不下來導致許多指令沒有發
出,車子卻開始做動作的情形發生,threshold 得
常常進行修改。b. 討論及改善方式:
I. threshold 雖作為參考值,但因讀取訊號的不穩定
性高,導致 threshold 的重要性被稀釋甚至是車子
不依指令而行動。II. 可以多設計一個函式,讀取固定時間內的訊號震
幅,來新設計新的 threshold。透過動態讀取及設
定的部分,可以降低訊號的不穩定性所帶來的不
良影響,但實際方法還有待進一步思考。
(E.) RaspberryPi 和 RaspberryPI 的連結1. 藉由導入函式庫 Socket,透過 DCP 進行發送數據的動作。下圖為相關程式圖:
2. 透過無線傳輸的方式進行資料傳輸的效果不佳,目前原因
不明,需要再進一步的思考。
五、 廢案-----手勢辨識控制(A.) 前言:
一開始的構想在於透過不同之手的用力程度來控制車子的前進
與後退,再透過手勢辨識來達到左彎或右彎的目的。但基於以
上所言,勢必要用到第二台樹莓派,如同上一部份所說,在兩
台樹莓派之間的連結效果有所不彰,也因此最後調整為僅透過
肌電圖來達到所有的指令。不過,手勢辨識仍然有透過架設好
的 CNN 訓練好的模型。(B.) CNN:
CNN,全名是 ConvolutionalNeuralNetwork,透過 filter 來進行
圖像的邊界萃取,在使用 ReLu 之後對邊界萃取進一步優化,
在此概念下進行訓練。通常被使用在影像及圖像的辨識上。(C.) Data:
目標為四種手勢,分別為 RIGHT,LEFT,PUNCH,NOTHING,示意
圖在下方。
(D.) AccuracyandLoss:
(E.) 相關測試:
(F.) 由於 Rpi 與 Rpi 的連結成效不是很理想,導致手勢辨識並沒有
使用。另外,辨識是在連續性的時間,可能在手稍微抬高或者
角度改變的情況下,會被勿視為其他手勢,也是問題之一。所
謂的轉彎是輪子改變角度跟前進後退同時並行的,要達到一直
辨識在同個手勢有一定難度上的問題。
六、 未來展望1. 透過此次的期末專題,使用肌電訊號達到控制車是可行
的,但仍有許多地方需要改進,進行優化的部分。如
threshold 的設定,能否讓它具有動態性,達到隨時改變的
目的,藉此可以讓肌電控制車能夠達到個人化、量身定做
的可能性。2. 本次期末專題,材料的支出費用,成本最大的地方莫過於
開發版的使用,相比於一般市售的簡易掃地機器人來說,
成本高出了不少,這也是有待改進的地方。3. 相關應用的部分,除了本次推廣的掃地功用外,在醫學
上,對於於行走上有困難者、需要搭乘輪椅者,可以透過
肌電訊號來控制輪椅的移動,不需借助他人的外力。4. 其他的應用方面,除了肌電訊號外,也可以期待其他的生
理訊號,如腦電、心電、眼電等,對訊號的分析及處理,
可以得到更多的效用。
附錄、參考資料1. https://medium.com/@yehjames/資料分析-機器學習-第 5-1 講-卷
積神經網絡介紹-convolutional-neural-network-4f8249d65d4f2. https://github.com/asingh33/CNNGestureRecognizer3. https://www.linuxhub.org/?p=6294. https://gist.github.com/kevinkindom/108ffd675cb9253f8f715. https://swf.com.tw/?p=7506. https://swf.com.tw/?p=7297. https://sites.google.com/site/rasberrypintust/raspberry-pi-shu-mei-
pai-shi-qian-zhun-bei/python-gipo-an-zhuang8. https://www.asus.com/zentalk/tw/thread-139142-1-1.html9. http://cc.ee.ntu.edu.tw/~ultrasound/belab/course_files/02_bio_sign
al/ELVIS_II_Manual.pdf10. http://eshare.stust.edu.tw/EshareFile/2010_12/2010_12_280f0421.p
df11. https://projects.raspberrypi.org/en/projects/getting-started-with-
picamera12. https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-
install-opencv-3-python-on-your-raspberry-pi/13. https://maker.pro/raspberry-pi/tutorial/how-to-connect-and-
interface-raspberry-pi-with-arduino14. http://www.instructables.com/id/Connect-Your-Raspberry-Pi-and-
Arduino-Uno/