資料介紹
描述
多年來,我只是想用 LED 做一些能隨著我的心跳而閃爍的東西(不僅是當我完全靜止不動,但有時會時不時地跳一下)。事實證明這出奇地困難,我嘗試了很多年但都失敗了。但現在不是了!
實際上,所有繁重的工作都是由uECG完成的——一種小型可穿戴 ECG 設備,它是開源的,并且有一個 Arduino 友好的輸出引腳(該引腳隨著每次心跳而變高/變低)。處理這些引腳狀態比處理 ECG 信號要容易得多,而且我已經盡力從中獲得最大收益。
UPD:你可能想檢查這個項目的第二次迭代,它通過無線電鏈路接收數據。
1. 原理圖
由于我們這里只使用數字信號,所以非常簡單。但作為可穿戴設備,如果大多數連接都是焊接的,它會更可靠(也更?。獙τ诳焖贉y試來說,沒有必要這樣做,但如果你打算在一些繁重的活動中佩戴它,我強烈建議這樣做。
示意圖如下所示:
- 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 是放在胸部上的——因此您需要一根帶連接器的電線,首先放置它,然后穿上帶有其他組件的襯衫,然后插入連接器。否則戴上它真的很不方便-相信我,我試過了))
基本上就是這樣 - 如果一切都正確完成,在您插入所有連接器后的 30 秒內,它將開始閃爍并指示 BPM。
4. 現場測試
我在步行和跑步時對其進行了測試 - 發現在跑步過程中,電池會在 ECG 傳感器上方反彈,從而扭曲其讀數。當我稍微移動它時,結果發現連接 uECG 和 Arduino 的電線太短,每一步都會拉動 ECG 傳感器,再次扭曲讀數。總的來說,我只有在行走和站立時才能獲得可靠的節拍,但在跑步時卻不行——但我認為我會改進這一點。傳感器本身,當我將它與不同的襯衫一起使用時,在運行期間也能正確顯示 BPM(通過其應用程序檢查)。
此外,事實證明,胸部上的 LED 看起來很酷,但實際上毫無用處。低頭看脈真的很不方便。我想在下一次迭代中,我會制作某種可以指示節拍的腕帶。
PS 如果你對 uECG 項目感興趣——你可以查看它的hackaday 頁面,那里有很多技術細節、PCB 設計、討論和項目日志
- 簡易物聯網漏水指示器 0次下載
- 使用HTML和JavaScript設計指示器按鈕 0次下載
- 水位指示器開源分享 0次下載
- EUFORIS的水位指示器 0次下載
- Learnelectronics低壓指示器開源 1次下載
- 暫態錄波型故障指示器技術規范 5次下載
- 電平指示器的應用實驗電路原理圖免費下載 20次下載
- 電池正?!穳?b class="flag-6" style="color: red">指示器電路原理圖免費下載 34次下載
- 電池欠壓指示器電路原理圖免費下載 13次下載
- 電控變速器和AT指示器的使用原理圖免費下載 2次下載
- PIC16系列器件的內部溫度指示器的簡介,使用和校準詳細資料概述 26次下載
- 內部溫度指示器的使用與校準 12次下載
- 故障指示器故障判定 9次下載
- LM324運放制作電平指示器 295次下載
- 裸纖適配器光纖推進量指示器的設計 14次下載
- 水位指示器電路圖分享 461次閱讀
- 典型指示器電路圖分享 327次閱讀
- 水位指示器電路圖分享 362次閱讀
- 電池電量指示器電路圖分享 882次閱讀
- 故障指示器的作用 369次閱讀
- 對稱電源平衡指示器電路原理圖 316次閱讀
- 分享一個水位指示器電路 501次閱讀
- 節拍頻率指示器電路分享 543次閱讀
- 如何構建一個信箱開路指示器電路 492次閱讀
- 簡單易用的電源就緒指示器可檢測欠壓和過壓 1239次閱讀
- 一個獨特的水位指示器電路 1750次閱讀
- LED溫度指示器電路圖分析 1758次閱讀
- 閃爍指示器電路圖 5491次閱讀
- 倒帶終止指示器電路圖講解 2486次閱讀
- 相序指示器原理_相序指示器的相序檢測工作原理_三相交流電相序檢測原理 3.4w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多