牟曉東
在開源硬件編程中有時會使用到一種叫作“心跳檢測”的模塊,它是一種通過手指來偵測心跳的傳感器,常見的型號為HW-487光遮斷傳感器,也就是“對射遮斷式光電開關傳感器”(如圖1)。

心跳檢測模塊是采用超亮紅外(IR)LED燈和光敏三極管來探測手指脈搏信號的(檢測時需要將手指放置于二者之間),一側的LED燈發光(不可見的紅外線)透過手指后被另一側的光敏三極管接收,由于心跳血壓脈動使得手指的血存量不斷發生變化,因此最終在光敏三極管處所接收到的光通量也會隨之變化,從而引起電阻產生微小變化,這樣就可以大體檢測到人體的心跳變化情況。值得一提的是,在使用心跳檢測模塊進行測試時最好是將它放置于一個較為封裝的黑暗空間內(比如用一個盒子扣住),因為要盡可能地屏蔽環境光對光敏三極管的影響。
Arduino簡易心跳波形儀實現的功能是在電腦屏幕上實時顯示出被測試者心跳的波形圖。
實驗器材包括ArduinoUNO主板一塊,HW-487光遮斷傳感器一個,紅色LED燈一支,杜邦線若干。首先,將LED燈的長腿直接插入Arduino的13號引腳,短腿則插入相鄰的GND接地引腳;接著,通過杜邦線將光遮斷傳感器的VCC正極、GND接地端和S信號端分別連接至Arduino的3.3V、GND引腳和A0模擬引腳;最后,給Arduino連接好數據線(如圖2)。

在Arduino的IDE代碼編程界面中,先定義好紅色LED燈連接的13號引腳:“int Red_LED_pin = 13;”;接著,在setup()函數中進行三處設置:一是將串口波特率設置為115200:“Serial.begin(115200);”,二是將LED燈設置為輸出工作模式:“pinMode(Red_LED_pin,OUTPUT);”,三是將光遮斷傳感器連接的A0模擬引腳設置為輸入工作模式:“pinMode(A0,INPUT);”。
在loop()函數中,先將光遮斷傳感器的模擬輸入信號在串口進行輸出:“Serial.println(analogRead(A0));”;然后建立一個選擇分支結構,其判斷條件是“if(analogRead(A0)>=510)”,注意此處的“510”可根據實驗測試時產生的數據來重新修改設置,條件成立的話則控制插接在13號引腳的紅色LED發光:“digitalWrite(Red_LED_pin,HIGH);”;接著,延時20毫秒:“delay(20);”,再關閉紅色LED燈:“digitalWrite(Red_LED_pin,LOW);”。
將程序保存為“Detect_Heart.ino”,點擊“上傳”按鈕進行測試,注意要點擊“工具”菜單打開“串口繪圖器”窗口,并且在左下角將波特率設置為115200。此時,在Arduino的串口繪圖器窗口就開始有數據產生,一小段時間后就會出現有規律的“心跳”波形(類似于醫院的心電圖),而且根據程序中所設定的閾值(510)不同會在波形的“波峰”出現時點亮紅色LED燈,一閃一閃的頻率與被測試者的心跳基本上是吻合的(如圖3)。

受光遮斷傳感器的數據精度所限,該簡易心跳波形儀并不能完全反映出被測試者真實心跳的醫學狀況,比如產生的波形“雜亂”部分并非說明被測試者有“心律不齊”等異常情況,有時手指按動的壓力不同或是環境光的快速變化等都會導致波形有較大的波動。
同樣是利用光遮斷傳感器的探測手指脈搏信號功能,在樹莓派中將其作為燈帶的驅動信號,就會很方便地設計制作出心跳律動燈帶,實現燈帶的燈珠隨被測試者的心跳進行實時動態點亮與熄滅的心跳律動酷炫效果。
實驗器材包括樹莓派3B+主板和古德微擴展板各一塊,模數轉換器一個,光遮斷傳感器一個,燈帶一條,杜邦線若干。首先,將古德微擴展板正確安裝于樹莓派上;接著,將燈帶的輸入端三根引線插入擴展板的18號引腳,注意燈帶的VCC、GND和信號端一定要與擴展板的引腳標注一一對應;然后,將模數轉換器插入擴展板的UP列,同樣要注意各個引腳的標注要與擴展板正確對應;光遮斷傳感器同樣也要使用杜邦線引出VCC正極、GND接地端和S信號端,插入擴展板的24號引腳,分別對應VCC、GND和A0端;最后,給樹莓派通電,啟動操作系統(如圖4)。

在瀏覽器中訪問古德微機器人網站,登錄賬號后進入“積木”圖形化編程界面。首先,通過“設置GPIO”模塊對燈帶進行初始化操作:“可控制燈帶60個燈并設置亮度為50”;接著,建立一個“重復當‘真’”的循環結構,新建變量“傳感器原始值”并為其賦值“從ADS‘0’獲取模擬信號”,注意它的數據區間與在Arduino的IDE中進行代碼編程不同,而是在0-32767之間;再新建變量“心跳值”,通過“取整”和“映射”兩個模塊對變量傳感器原始值進行處理和賦值,經測試后發現在某環境光條件下的傳感器原始值較為靈敏的數據區間是18000-24000,因此將它映射為燈帶的第0-59號燈珠;接下來,通過兩個“輸出調試信息”模塊將兩個變量的數據在LOG調試信息區輸出,并且通過兩個循環分別控制燈帶進行亮燈(紅色)和熄滅,實現將光遮斷傳感器的數據映射為對應某些數量的燈珠發光的效果;最后,添加延時等待0.02秒模塊。
將程序保存為“心跳律動燈帶”,連接設備后點擊“運行”按鈕進行測試。隨著被測試者有規律的心跳,燈帶會對應亮起不同數目的燈珠,非常有意思,類似于常見的跟隨音樂音量大小而不斷變化的串形指示燈律動效果(如圖5)。

大家不妨一試。