【雕爺學程式設計】Arduino動手做(91)---XD-58C心率感測器
37款感測器與執行器的提法,在網路上廣泛流傳,其實Arduino能夠相容的感測器模組肯定是不止這37種的。鑑於本人手頭積累了一些感測器和執行器模組,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這裡準備逐一動手嘗試系列實驗,不管成功(程式走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種感測器模組系列實驗(資料程式碼+模擬程式設計+圖形程式設計)
實驗九十一:XD-58C pulsesensor光學心率脈搏生物模擬感測器
脈搏感測器是用來測試心跳速率的感測器,學生、藝術家、運動員、創造者、遊戲或者移動終端開發人員,可以開發出和心率有關的互動作品。感測器可以戴在手指或者耳垂上,通過互聯線可以與Arduino相連。它還有一個開源的app程式,可以實時的把您的心率用圖線顯示出來。實質是一款集成了放大電路和噪聲消除電路的光學心率感測器。
脈搏(英語:Pulse)
為人體表可觸控到的動脈搏動。人體迴圈系統由心臟、血管、血液所組成,負責人體氧氣、二氧化碳、養分及廢物的運送。血液經由心臟的左心室收縮而擠壓流入主動脈,隨即傳遞到全身動脈。動脈為富有彈性的結締組織與肌肉所形成管路。當大量血液進入動脈將使動脈壓力變大而使管徑擴張,在體表較淺處動脈即可感受到此擴張,即所謂的脈搏。正常人的脈搏和心跳是一致的。正常成人為60到100次/分,常為每分鐘70-80次,平均約72次/分。老年人較慢,為55到60次/分。脈搏的頻率受年齡和性別的影響,胎兒每分鐘110—160次,嬰兒每分鐘120-140次,幼兒每分鐘90-100次,學齡期兒童每分鐘80-90次。
脈搏即動脈搏動,脈搏頻率即脈率。正常人脈率規則,不會出現脈搏間隔時間長短不一的現象。正常人脈搏強弱均等,不會出現強弱交替的現象。另外,運動和情緒激動時可使脈搏增快,而休息,睡眠則使脈搏減慢。成人脈率每分鐘超過100次,稱為心動過速;每分鐘低於60次,稱為心動過緩。臨床上有許多疾病,特別是心臟病可使脈搏發生變化。因此,測量脈搏對病人來講是一個不可缺少的檢查專案。中醫更將切脈作為診治疾病的主要方法。心動週期中,由於心室收縮和舒張的交替進行脈管發生週期性擴張和回位的搏動。病情危重,特別是臨終前脈搏的次數和脈率都會發生明顯的變化。脈搏的變化也是醫生對病人診斷的其中一項依據。
光電式脈搏感測器的原理
光學脈搏波感測器的原理是通過檢測綠色LED發出的光隨血管容積的變化,光的吸收量也發生變化,從而得到了脈搏波。根據郎伯-比爾(lamber-beer)定律,物質在一定波長處的吸光度和他的濃度成正比,當恆定波長的光照射到人體組織上時,通過人體組織吸收、反射衰減後測量到的光強在一定程度上反映了被照射部位組織的結構特徵。脈搏主要由人體動脈舒張和收縮產生的,在人體指尖,組織中的動脈成分含量高,而且指尖厚度相對其他人體組織而言比較薄,透過手指後檢測到的光強相對較大,因此光電式脈搏感測器的測量部位通常在人體指尖。手指組織可以分成面板、肌肉、骨骼等非血液組織和血液組織,其中非血液組織的光吸收量是恆定的,而在血液中,靜脈血的搏動相對於動脈血是十分微弱的,可以忽略,因此可以認為光透過手指後的變化僅由動脈血的充盈而引起的,那麼在恆定波長的光源的照射下,通過檢測透過手指的光強可以間接測量到人體的脈搏訊號。
脈搏感測器
指的是用於檢測脈搏相關訊號的感測器。脈搏指的是動脈搏動,脈搏感測器即是用來檢測動脈搏動時產生的壓力變化,將之轉換成可以被更直觀觀察和檢測的電訊號。脈搏感測器按照輸出方式有模擬輸出、數字輸出兩種。按照採集訊號的方式主要可以分為壓電式、壓阻式、光電式等三種。其中壓電式和壓阻式通過微壓力型的材料(壓電片、電橋等)將脈搏跳動的壓力過程轉換為訊號輸出。光電式脈搏感測器則通過反射或對射式的方式,將血管在脈搏跳動過程中透光率的變化轉換為訊號輸出。脈搏感測器主要應用在醫療裝置、教學裝置,教學實訓等領域,如血氧測量、心率監測、中醫脈象診斷等等。脈搏感測器按照輸出方式有模擬輸出、數字輸出兩種。按照採集訊號的方式主要可以分為壓電式、壓阻式、光電式等三種,其中光電式多數為紅外光。紅外脈搏感測器,利用特定波長紅外線(典型的有570、870um)對血管末端血液微迴圈產生的血液容積的變化的敏感特性,檢測由於心臟的跳動,引起指尖的血液中血氧蛋白含量變化,經過訊號放大、調整等電路處理後,可以輸出同步於脈搏跳動的脈衝訊號,從而計算出脈率,也可以輸出反映指尖血容積變化的完整的脈搏波波形訊號。主要應用於臨床上脈率的測量、監測和脈搏波的病理分析。還可計算血氧飽和度。
一般用綠光-- 紅光作為測量光源
早起多數採用紅光為光源,隨著進一步的研究和對比,綠光作為光源得到的訊號更好,信噪比也比其他光源好些,所以現在大部分穿戴裝置採用綠光為光源。但是考慮到面板情況的不用(膚色、汗水),高階產品會根據情況自動使用換綠光、紅光和IR多種光源。綠光作為光源的幾個特點:
1. 面板的黑色素會吸收大量波長較短的波
2. 面板上的水份也會吸收大量的UV和IR部分的光
3. 進入面板組織的綠光(500nm)-- 黃光(600nm)大部分會被紅細胞吸收
4. 紅光和接近IR的光相比其他波長的光更容易穿過面板組織
5. 血液要比其他組織吸收更多的光
6. 相比紅光,綠(綠-黃)光能被氧合血紅蛋白和脫氧血紅蛋白吸收
PulseSensor 是一款用於脈搏心率測量的光電反射式模擬感測器。將其佩戴於 手指或耳垂等處,通過導線連線可將採集到的模擬訊號傳輸給 Arduino 等單片 機用來轉換為數字訊號,再通過 arduino 微控制器簡單計算後就可以得到心率數 值,此外還可將脈搏波形上傳到電腦上顯示波形。PulseSensor 是一款開源硬 件,目前國外官網上已有其對應的 arduino 程式和上位機 Processing 程式, 其適用於心率方面的科學研究和教學演示,也非常適合用於二次開發。
模組引數
電路板直徑:16mm
電路板厚度:1.6mm(普通 PCB 板厚度)
LED 峰值波長:515nm
供電電壓:3.3v 或 5v 均可
輸出訊號型別:模擬訊號
輸出訊號大小:0~3.3v(3.3v 電源)或 0~5v(5v 電源)
實驗接線示意圖
【Arduino】168種感測器模組系列實驗(資料程式碼+圖形程式設計+模擬程式設計)
實驗九十一:pulsesensor光學心率脈搏生物模擬感測器
實驗開原始碼
/* 【Arduino】168種感測器模組系列實驗(資料程式碼+圖形程式設計+模擬程式設計) 實驗九十一:pulsesensor光學心率脈搏生物模擬感測器 */ int ledPin = 13; int sensorPin = 0; double alpha = 0.75; int period = 20; double change = 0.0; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(115200); } void loop() { static double oldValue = 0; static double oldChange = 0; int rawValue = analogRead(sensorPin); double value = alpha * oldValue + (1 - alpha) * rawValue; Serial.println(value); oldValue = value; delay(period); delay(10); }
實驗串列埠返回情況
實驗注意事項
1、保持指尖與感測器接觸良好
2、不要太用力按, 否則血液迴圈不暢會影響測量結果
3、保持鎮靜, 測量時身體不要過多移動,這個會影響測量結果
4、不要用冰涼的手指進行測試,因為血液迴圈不好會讓測量結果不準確
5、本模組515nm 的波長適合採集面板表微動脈的搏動訊號(比如手指),而手腕處的動脈採集到的訊號很小,不是很理想,建議可以考慮更改放大倍數或者振動類的感測器。
實驗開源圖形程式設計(Mind+、Mixly、編玩邊學)
實驗串列埠返回情況
實驗開源模擬程式設計(Linkboy V4.62)