Arduino紅外線脈搏感測器

九月 12, 2014
Facebook
Twitter
文/Sola Lu(Make國際中文版特約編輯)
量測脈搏很簡單,只要用手指按住胳膊或手腕,並配合手錶時間來測定脈搏跳動次數。但是要記錄脈搏數據或使用脈搏來觸發事件,需要將機械脈搏作動轉為電子訊號。這個感測器剛好適合放上指尖,藉由經過血液循環反射回來的紅外線量來進行量測。

參考網站:http://makezine.com/projects/ir-pulse-sensor/

注意事項:當我們認為這玩意不錯時,律師會拍拍我們肩膀強調這不是醫療用設備。假如應用在生活/健康醫療方面,請使用FDA合格認證的醫療級脈搏感測儀器。

此感測器本身包含並列排放的紅外線發射器與接收器,緊密地用手指皮膚按壓著。當心臟跳動時,血壓急速上升,已至於從發射器出來的紅外線反射回到接收器的紅外線光量有所改變。當接收器收到較多的光線時,會通過較多的電流,相反地吸收較少光線時,會造成下降電壓至進入放大器迴路。這個設計使用兩個連續的運算放大器(op-amps)去建立穩定的訊號基線、強化峰值、過濾雜訊。兩個運算放大器是包含在單一個積體電路裡頭(IC或晶片),實際上要連結這個IC只要連接至正確的腳位即可。

兩個運算放大器會輸出一個清晰但微弱的訊號,在輸出之前被電晶體所放大其訊號。


材料

  • 阻:470K*2)、68K*2)、39K8.2K1.8K1K220Ω
  • 電容:1.0 μF鉭質電容(*2)、0.1μF陶瓷碟形電容(*2
工具

  • 烙鐵 
  • 焊錫
  • 微型電鑽
  • 剝線鉗
  • 電腦(連接Arduino使用)

第一步:安裝紅外線LED發射器/接收器

  • 它們外觀看起來像LED,發射器為藍色,接收器為透明色。將發射器放置靠近洞洞板的邊緣,接收器靠近中央,將其4個接腳透過4個孔穿過洞洞板。將發射器與接收器的短接腳/陰極(ground leads)一起焊在附近的洞上。於洞洞板的焊接面上,分別於接收器與發射器的長接腳/陽極,焊上39KΩ以及220Ω的電阻。

第二步:安裝晶片IC

  • IC LM324實際上包含四個相同的op-amps(訊號放大器)。這個設計只使用到兩個,為了避免造成意外的連接可能會有奇怪的行為,剪掉IC上每邊最後三個接腳(針腳5-7  8-10)。
  • 插入IC LM324PCB洞洞板上,確定IC凹槽端(針腳114)是靠近紅外線接發器的方向。將IC的針腳焊接在板子後面,而針腳4與針腳11準備接電源(5V)與接地。

第三步:焊接IC線路

首先插入並焊接兩個0.1 μF的陶瓷碟型電容,一個橫跨腳位1與腳位2,另一個橫跨腳位13與腳位14。依照電路圖,接下來繼續把剩下六個電阻焊接上去(若照片不清楚,請參考電路圖或原始網站),並且在晶片兩側接腳橫向方向互相焊接通路。最後安裝兩個鉭質電容μF,它們是有極性的元件,短接腳陰極應該連接至IC,目前為止先焊接陰極即可。

第四步:連接訊號線以及排線

增加一些絕緣跳線,如圖所示(在此為磨練焊接技術,更換了新板重焊),主要連接紅外線感測器到主要的OP放大器上,連接的尾端都是接上鉭質電容的陽極接腳。焊上排線以利與電腦連接,陽極(+5V)紅色線、接地黑色線、訊號線白色。

第五步:連接Arduino並用電腦讀數據類比訊號

图片

  • 訊號線(白色線)連接A0、紅色線接電源(+5V)、黑色線接地(GND)。開啟Arduino IDE,執行下列程式碼,開啟序列監控視窗(Serial Monitor)讀取類比訊號,採用OZONE這塊控制相容板來讀取類比訊號(完全相容於Arduino Leonardo控制板)。
void setup() {

 Serial.begin(9600);

}

void loop() {

Serial.println(analogRead(A0));

delay(10);

}

第六步:利用Processing視覺化數據(示波器)

第七步:安裝手指固定架(建議)

  • 利用微型電鑽將電線固定架上鑽兩個適當大小的洞,可容許兩顆5mm的紅外線發射/接收器通過,再用泡棉雙面膠將其固定在洞洞板上即可。

實作心得

  • 焊接技術需要再磨練,焊錫常常弄太多導致線路短路,並且電路需先用麵包板測試過比較安心。
  • 判斷紅外線發射或接收器,發射器管芯中央凹陷,類似聚光罩形狀,而接收器則是類似一個平臺。
  • LED長腳為正極,短腳為負極;鉭質電容亦有分極性。
  • IC晶片的接腳數字,如14針的IC,從凹槽左側頂端為針腳1,逆時鐘排列到右側頂端為針腳14
  • Processing執行抓取連接埠時若有問題,可以註解掉 // myPort = new Serial(this, Serial.list()[1], 9600);  新增一行 myPort = new Serial(this,”COM7″, 9600); // 請將COM7改為您的連接埠數字。
  • 若雜訊跳動很大的話,可以改變delay(10)裡頭的延遲秒數,來調整讀取數據的狀況。
  • 安裝手指固定架是為了降低紅外線接收器因為外界環境光線干擾產生的雜訊。
  • 未來可將讀取的數據,利用軟體來分析轉換成脈搏數(bpm)。
  • 若手機有LED閃光燈的硬體,也可安裝相關Appeg. Instant Heart Rate)來量測脈搏。
图片

詳細電路圖(放大器為代表性電路圖、實體電路圖)

更進一步

有許多機會讓這個專題更進一步發展(軟體方面)。我們在此提供的簡單IRPulseSensor程式,只能掃描顯示感測器讀取的訊號。假如要記錄數據,你可以新增一段程式來周期性寫入一連串數值至檔案裡。下一步則可以計算出如何使軟體偵測到峰值(peaks)。只要你可以偵測到峰值,何不讓它發出嗶嗶聲或播放一段音效來響應每次心跳呢?假如可以偵測峰值,也可很簡單地計算平均脈搏跳動率(跳動次數/所需時間)。在軟體裡是容易去追蹤時間,同時也可以更新顯示在水平軸上的時間資訊。垂直軸上可以顯示真實的電壓單位(藉由ArduinoAnalogRead程式回傳,每一單位代表真實電壓0.049伏特),更進階的花樣,還可以增加自動調整範圍特性,在持續的基準值上,計算平均峰值高度並自動調整垂直軸的比例去填滿整個顯示高度。

在硬體端也有些有趣的可能性,這個電路是由Let’s Make Robot! Community member MarkusB設計的削減後版本(this ambient-light pulse sensor)。原始設計在電源供應端也包含一個大個雜訊過濾電容,在主要的訊號放大器上有一個適當反饋電阻器,並且10K的電阻來微調第二階段放大,假如你有興趣在找到好方法讓放大器的設計可以有更清晰的峰值或更好的靈敏度,這是一個好的開始。你也可以更換不同的紅外線發射器/與接收器看看是否有不同的變化?同樣地,你也可以更換不同粗細的單芯線來連接感測器與Arduino,看看是否會較有彈性、易於連接與插拔?不管在此專題你經歷任何問題,歡迎大家一起討論,筆者很樂意聽到任何使用、修改、改進或將該應用嵌入你的專題中的經驗。


Social media & sharing icons powered by UltimatelySocial