Arduino之个人健康助理——简易智能药盒系列2
生活随笔
收集整理的這篇文章主要介紹了
Arduino之个人健康助理——简易智能药盒系列2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OLED顯示
1.所需硬件
脈搏傳感器
OLED模塊
Arduino主板
2.連接方式
脈搏傳感器與主板連接
s — A0
+— 5V
-— GND
OLED模塊與主板連接
GND—GND
VCC—3.3V或5V
SCL—A5
SDA—A4
3.基本思路
脈搏傳感器原理
首先,需要簡要了解一下脈搏傳感器大致原理。
脈搏傳感器能把脈搏跳動壓力轉化為電信號輸出(以電壓形式)。基于這種原理,就可以利用電壓值的變化計算脈搏跳動數。
計算脈搏數的思路
如圖,跳離直線y=v0的點A1,A2,A3可表示為脈搏跳動的點(脈搏跳動,輸出電壓增大),而直線y=v0上的其余點則為脈搏平靜時的點。如果可以獲得每次跳動時的時刻點t1,t2,t3,從而求得Δt,就可利用 跳動次數=總時間/時間間隔 的公式求得每段Δt上的平均脈搏數。
繪制心率圖的思路
因為脈搏的跳動導致電壓的變化,于是就可以利用電壓的變化來繪制折線圖(先繪點,再連線)。將某一點的電壓值以一定比例縮放為合適的值,作為該點的縱坐標,對應該點的橫坐標(橫坐標對應時刻點)。隨著時間變化,點的橫坐標向前推移,縱坐標隨之變化。此時再將點與點之間連上直線,即可繪制出心率折線圖。
4.代碼
聲明
#include <Adafruit_SSD1306.h> //調用一個庫文件#define OLED_Address 0x3C //用OLED_Address取代0x3C//0x3C——16進制數(通訊地址) #define UpperThreshold 550 //用UpperThreshold取代550 #define LowerThreshold 500 //用LowerThreshold取代500 //UpperThreshold,LowerThreshold為引腳輸出模擬電壓值的閾值 Adafruit_SSD1306 oled; //定義變量名為oled定義變量
//定義變量 int x=0; //當前點的橫坐標 int lastx=0; //上一個點的橫坐標 int lasty=0; //上一個點的縱坐標 int LastTime=0; //上一次測量的毫秒數 bool BPMTiming=false; //LastTime是否為正確的脈搏起始計時點 bool BeatComplete=false; //一次跳動是否完成=是否可以開始計算下一次跳動(取決于起始計時點是否正確和是否為跳動間隔期) int BPM=0; //脈搏跳動數setup函數
void setup() {oled.begin(SSD1306_SWITCHCAPVCC, OLED_Address); //初始化oled屏幕的通訊地址為OLED_Address(也就是0x3C)oled.clearDisplay(); //oled清空顯示oled.setTextSize(2); //設置oled顯示字體為2號字體 }loop函數
void loop() {if(x>127) //若屏幕顯示已滿,清空再來{oled.clearDisplay(); //oled清空顯示x=0; //當前點橫坐標賦值為0lastx=x; //上一個點橫坐標也為賦值為0}int value=analogRead(0); //analogRead函數用于讀取引腳的模擬電壓值,參數0表示所有獲取電壓值的引腳為A0,返回值為引腳的模擬量電壓值oled.setTextColor(WHITE); //oled顯示字體為白色int y=20-(value/45); //當前點的縱坐標(取決于引腳獲取的電壓值)oled.writeLine(lastx,lasty,x,y,WHITE); //從上一個點到當前點畫線lasty=y; //將當前點坐標賦給上一個點,當前點變成上一個點lastx=x;//計算BMP if(value>UpperThreshold) //如果跳動{if(BeatComplete) //如果上一次跳動完成,可以開始計算下一次跳動{ BPM=millis()-LastTime; //millis函數返回的Arduino板開始運行當前程序時的毫秒數,兩次測量中間間隔的毫秒數BPM=int(60/(float(BPM)/1000)); //計算BPM(跳動數=總時間/跳動時間間隔)BPMTiming=false; //該次跳動的BPM值已經計算,要進入下一次BPM計算,而起始計時點還為原來的起始計時點BeatComplete=false; //起始計時點錯誤,跳動未完成}if(BPMTiming==false) //將起始計時點變為正確起始計時點{LastTime=millis(); //將現在的毫秒數賦變為上一次的毫秒數 BPMTiming=true; }}if((value<LowerThreshold)&(BPMTiming)) //如果起始計時點正確且進入跳動間隔期BeatComplete=true; //一次跳動完成//顯示BMP值oled.writeFillRect(0,19,128,20,BLACK); //畫一個填充矩形 oled.setCursor(0,19); //設置oled內容顯示的位置oled.print(BPM); //設置oled顯示的內容oled.print(" BPM");oled.display(); //設置完成,更新顯示內容x++; //橫坐標+1,進入下一個循環 }5.最終效果
最終OLED模塊上顯示出心率折線圖和脈搏數(BPM)。
PS: 代碼小白初次嘗試,還請大佬們多多包涵,多多指點。
總結
以上是生活随笔為你收集整理的Arduino之个人健康助理——简易智能药盒系列2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我眼中的人工智能(2017年初)
- 下一篇: 人在死去的一瞬间是否会害怕,这些回答够真