<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>使用ECG的心跳指示器

使用ECG的心跳指示器

2023-02-08 | zip | 0.56 MB | 次下載 | 免費

資料介紹

描述

多年來,我只是想用 LED 做一些能隨著我的心跳而閃爍的東西(不僅是當我完全靜止不動,但有時會時不時地跳一下)。事實證明這出奇地困難,我嘗試了很多年但都失敗了。但現在不是了!

實際上,所有繁重的工作都是由uECG完成的——一種小型可穿戴 ECG 設備,它是開源的,并且有一個 Arduino 友好的輸出引腳(該引腳隨著每次心跳而變高/變低)。處理這些引腳狀態比處理 ECG 信號要容易得多,而且我已經盡力從中獲得最大收益。
UPD:你可能想檢查這個項目的第二次迭代,它通過無線電鏈路接收數據。

1. 原理圖
由于我們這里只使用數字信號,所以非常簡單。但作為可穿戴設備,如果大多數連接都是焊接的,它會更可靠(也更?。獙τ诳焖贉y試來說,沒有必要這樣做,但如果你打算在一些繁重的活動中佩戴它,我強烈建議這樣做。
示意圖如下所示:

?
pYYBAGPi-FWAdnl0AAFSlvJRmHM499.png
?
  • LED 環的 DI 引腳連接到引腳 D11(可在代碼中配置)
  • uECG 設備的 DRV 引腳連接到引腳 D3(也可配置)
  • 電池的 + 連接到 Arduino 5V 和 LED 環形 5V 輸入
  • 電池 - 連接到 Arduino GND、環形 GND 和 uECG 的 GND

我直接使用 LiPo 電池作為 5V 輸入 - 沒有錯誤,如果你將它連接到 Vin - 它不會可靠地工作(Vin 上的穩壓器會引入電壓降,我們在這里絕對買不起)。問題是,只要輸入電壓不低于 3.4 伏,Arduino 就是穩定的。LiPo 電池在充滿電時的起始電壓為 4.2 伏,僅當剩余電量少于 15% 時才達到 3.4 伏。因此,對于任何大于 ~200 mAh 的電池,您可以獲得不錯的運行時間。除此之外,請記住電池應該通過一些連接器連接 :) 因為你想將它從原理圖上斷開并偶爾充電一次。

2. 代碼
該程序以一種簡單的方式工作:它不斷讀取 D3 引腳,并在檢測到變化時 - 將該變化的時間推入 20 元素數組。第一個和最后一個元素之間的差值除以 20,即為每次節拍的平均時間(以毫秒為單位)。因此,將 1 分鐘(60000 毫秒)除以該數字即可得出 BPM 值。您可以調整數組中的元素數量。較少數量的元素會導致更快的響應,但結果不太穩定(節拍檢測中的任何問題都會導致計算出的 BPM 大幅跳躍)。更多的元素會提供更穩定的數據,但當 BPM 快速變化時響應更慢。

然后將 BPM 映射到顏色(當 BPM 從低到高時,藍色->綠色->黃色->粉紅色->紅色),并映射到 LED 的數量:80 BPM 八段亮起,110 - 11 等等(比例也可在代碼中調整)。

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
// DI pin of LED ring
#define PIN            11
// number of pixels in the ring
#define NUMPIXELS      16
// input pin for connecting uECG
int in_pin = 3;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
pixels.begin(); // This initializes the NeoPixel library.
pinMode(in_pin, INPUT); //set pin to input mode
digitalWrite(in_pin, 1); //enable PULLUP: this is critical, uECG doesn't have internal pull-up
}
//we store last 20 heartbeats to averge BPM over them
//with higher value, it will become more reliable,
//but it will take more time to see output change when BPM changes
#define BEAT_HIST 20
long beats[BEAT_HIST];
void push_beat(long ms) //shift all beats in array and insert current one
{
for(int x = 0; x < BEAT_HIST-1; x++)
{
beats[x] = beats[x+1];
}
beats[BEAT_HIST-1] = ms;
}
int get_bpm() //using time difference between first and last beats
{
long dt = beats[BEAT_HIST-1] - beats[0];
long bpm = BEAT_HIST * 60000 / dt;
return bpm;
}
long last_pix_upd = 0; //to keep track of when we updated pixels previous time
int prev_in_state = 0; //previous state of input pin: we want to process only changes of state
void loop()
{
long ms = millis();
int in_state = digitalRead(in_pin); //1 when no beat detected, 0 in beat
if(in_state == 1 && prev_in_state == 0) //react only to change
{
push_beat(ms);
}
prev_in_state = in_state;
if(ms - last_pix_upd > 10) //don't update pixels too often
{
int r, g, b;
last_pix_upd = ms;
int bpm = get_bpm();
int max_bright = 120; //value of maximum brightness, max 255. But you don't always want it at max :)
float dd = 20; //change in BPM between color tones (blue->green->yellow->pink->red)
float t1 = 90, t2, t3, t4; //t1 - "base" BPM, lower than t1 would be blue
t2 = t1 + dd;
t3 = t2 + dd;
t4 = t3 + dd;
//code for changing color depending in which t1...t4 range we are now
if(bpm < t1){ r = 0; g = 0; b = max_bright; }
else if(bpm < t2) { r = 0; g = max_bright * (bpm-t1)/dd; b = max_bright - g; }
else if(bpm < t3) { r = max_bright * (bpm-t2)/dd; g = max_bright - r; b = r/4; }
else if(bpm < t4) { r = max_bright; g = 0; b = max_bright/2 - max_bright * (bpm-t3)/(2*dd); }
else {r = max_bright; g = 0; b = 0; }
if(in_state) //when not in beat, 1/4 intensity, so only beats are highlighted
{
r *= 0.25;
g *= 0.25;
b *= 0.25;
}
int on_pixels = (bpm+5)/10; //number of used LEDs: for 60 BPM, 6 LEDs will be on, for 120 - 12 etc
for(int i=0;i<NUMPIXELS;i++)
{
if(i < on_pixels) pixels.setPixelColor(i, pixels.Color(r,g,b));
else pixels.setPixelColor(i, pixels.Color(0,0,0)); //turn off all other LEDs
}
pixels.show();
}
}

3. 組裝成可穿戴設備
將 Arduino 放在環內很方便 - 它的尺寸幾乎完美匹配。電池也適合附近。不要忘記 uECG 是放在胸部上的——因此您需要一根帶連接器的電線,首先放置它,然后穿上帶有其他組件的襯衫,然后插入連接器。否則戴上它真的很不方便-相信我,我試過了))

?
pYYBAGPi-ImAJ5blAAlxQ5SW6zs489.jpg
所有組件到位
?
?
poYBAGPi-I2AIfaqAAF3Ff8hFR4918.jpg
我只是從里面把所有東西都粘在襯衫上
?

基本上就是這樣 - 如果一切都正確完成,在您插入所有連接器后的 30 秒內,它將開始閃爍并指示 BPM。

4. 現場測試
我在步行和跑步時對其進行了測試 - 發現在跑步過程中,電池會在 ECG 傳感器上方反彈,從而扭曲其讀數。當我稍微移動它時,結果發現連接 uECG 和 Arduino 的電線太短,每一步都會拉動 ECG 傳感器,再次扭曲讀數。總的來說,我只有在行走和站立時才能獲得可靠的節拍,但在跑步時卻不行——但我認為我會改進這一點。傳感器本身,當我將它與不同的襯衫一起使用時,在運行期間也能正確顯示 BPM(通過其應用程序檢查)。

此外,事實證明,胸部上的 LED 看起來很酷,但實際上毫無用處。低頭看脈真的很不方便。我想在下一次迭代中,我會制作某種可以指示節拍的腕帶。

PS 如果你對 uECG 項目感興趣——你可以查看它的hackaday 頁面,那里有很多技術細節、PCB 設計、討論和項目日志


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>