自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS基于LYEVK-3861開發(fā)心率和血氧檢測(cè)

開發(fā) 前端 OpenHarmony
本次實(shí)驗(yàn)使用的是GPIO模擬I2C通信,I2C協(xié)議規(guī)定在總線上出現(xiàn)起始信號(hào)start后,若SCL在高電平期間SDA保持電平不變,則SDA的狀態(tài)表示有效數(shù)據(jù)(data valid)。

[[420002]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

由于本人愛好爬山,去過很多高海拔的地方,每次出行都會(huì)攜帶心率和血氧檢測(cè)儀。其實(shí)很多人對(duì)高反不是很了解。高反,是人體在缺氧情況下,對(duì)環(huán)境的不適應(yīng)。人體在一定氧氣的情況下可以很舒服的呼吸,但是高原因?yàn)楹0胃?,氣壓低,空氣干燥,供給的氧氣稀薄,使得人體的機(jī)能無法正常工作,就會(huì)出現(xiàn)嘔吐、頭暈頭疼、流鼻血、浮腫的各種情況。

海拔高度一般達(dá)到2700米,就會(huì)有高原反應(yīng)。

海拔高度(米) 為0海拔含氧量的% 

 

那我們?nèi)绾稳ヅ袛嘧约菏欠裼懈叻茨?

可以通過血氧飽和度來判定,當(dāng)我們血氧飽和度低于80%的時(shí)候就會(huì)有高原反應(yīng)了。

血氧:是指血液中的氧氣,人體正常血氧飽和度為95%以上。血液中含氧量越高,人的新陳代謝就越好。當(dāng)然血氧含量高并不是一個(gè)好的現(xiàn)象,人體內(nèi)的血氧都是有一定的飽和度,過低會(huì)造成機(jī)體供氧不足,過高會(huì)導(dǎo)致體內(nèi)細(xì)胞老化。

本次內(nèi)容講解基于LYEVK-3861開發(fā)板完成一個(gè)簡(jiǎn)單的心率和血氧檢測(cè),來檢查身體的狀態(tài)。主要測(cè)量HR-心率 、SaO2-血氧。

效果演示 

[[420003]]

環(huán)境準(zhǔn)備

1、開發(fā)環(huán)境、編譯環(huán)境搭建,參考官方文檔,此處不在贅述。參考鏈接如下:

Window開發(fā)環(huán)境

Ubuntu編譯環(huán)境

2、OpenHarmony 2.0 Canary源碼 源碼獲取,參考:

源碼獲取說明

鏡像全量下載

3、LYEVK-3861 IoT物聯(lián)網(wǎng)開發(fā)板套件:

LYEVK-3861開發(fā)板

開發(fā)調(diào)試

1、基礎(chǔ)介紹

血氧檢測(cè)傳感器選用的是MAX30102,其大致的工作原理將RED/IR 光射向皮膚,透過皮膚組織反射回的光被光敏傳感器接受并轉(zhuǎn)換成電信號(hào),再經(jīng)過AD轉(zhuǎn)換成數(shù)字信號(hào)。簡(jiǎn)化過程:光–> 電 --> 數(shù)字信號(hào),然后將數(shù)字信號(hào)通過I2C與主控交互。

本次實(shí)驗(yàn)使用的是GPIO模擬I2C通信,I2C協(xié)議規(guī)定在總線上出現(xiàn)起始信號(hào)start后,若SCL在高電平期間SDA保持電平不變,則SDA的狀態(tài)表示有效數(shù)據(jù)(data valid)。在傳輸數(shù)據(jù)時(shí)SDA的改變必須只能發(fā)生在SCL為低電平期間,每一bit數(shù)據(jù)有1個(gè)時(shí)鐘脈沖時(shí)長(zhǎng),I2C串行總線上的數(shù)據(jù)傳輸時(shí)序如下圖所示:

HarmonyOS 基于LYEVK-3861開發(fā)心率和血氧檢測(cè)-鴻蒙HarmonyOS技術(shù)社區(qū)

I2C協(xié)議規(guī)定每個(gè)被尋址設(shè)備在接收1字節(jié)數(shù)據(jù)后都必須向發(fā)送字節(jié)的設(shè)備發(fā)送應(yīng)答(ACK)信號(hào),確認(rèn)的器件必須在應(yīng)答時(shí)鐘脈沖期間下拉SDA線,使得SDA線在應(yīng)答相關(guān)時(shí)鐘脈沖SCL為高電平期間穩(wěn)定為低電平。

I2C協(xié)議規(guī)定與ACK信號(hào)相反的信號(hào)為非應(yīng)答(not ACK)信號(hào)。在主器件從從器件中讀取數(shù)據(jù)時(shí),主器件必須在讀取的最后1字節(jié)數(shù)據(jù)后在SDA總線上產(chǎn)生not ACK信號(hào)以示意從器件停止發(fā)送數(shù)據(jù)。not ACK信號(hào)是在SCL為高電平期間保持SDA也為高電平。

根據(jù)時(shí)序圖,用GPIO模擬IIC通信,

2、開始調(diào)試

先用GPIO模擬初始化IIC

  1. void IIC_Init(void){     
  2.     GpioInit();  
  3.     IoSetFunc(PIN_SCL, WIFI_IOT_IO_FUNC_GPIO_10_GPIO);// SCL 
  4.     GpioSetDir(PIN_SCL, WIFI_IOT_GPIO_DIR_OUT); 
  5.  
  6.     IoSetFunc(PIN_SDA, WIFI_IOT_IO_FUNC_GPIO_11_GPIO);// SDA 
  7.     GpioSetDir(PIN_SDA, WIFI_IOT_GPIO_DIR_OUT); 
  8.     IIC_SCL(1); 
  9.     IIC_SDA(1); 
  10.      
  11.     IoSetFunc(PIN_INT, WIFI_IOT_IO_FUNC_GPIO_8_GPIO);// INT 
  12.     GpioSetDir(PIN_INT, WIFI_IOT_GPIO_DIR_IN); 

用GPIO模擬IIC起始信號(hào)

  1. void IIC_Start(void){ 
  2.     SDA_OUT();     //sda線輸出 
  3.     IIC_SDA(1);        
  4.     IIC_SCL(1); 
  5.     delay_us(4); 
  6.     IIC_SDA(0);//START:when CLK is high,DATA change form high to low  
  7.     delay_us(4); 
  8.     IIC_SCL(0);//鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)  
  9. }    

 用GPIO模擬IIC停止信號(hào)

  1. void IIC_Stop(void){ 
  2.     SDA_OUT();//sda線輸出 
  3.     IIC_SCL(0); 
  4.     IIC_SDA(0);//STOP:when CLK is high DATA change form low to high 
  5.     delay_us(4); 
  6.     IIC_SCL(1);  
  7.     IIC_SDA(1);//發(fā)送I2C總線結(jié)束信號(hào) 
  8.     delay_us(4);                                 

 用GPIO模擬產(chǎn)生ACK應(yīng)答信號(hào)

  1. void IIC_Ack(void){ 
  2.     IIC_SCL(0); 
  3.     SDA_OUT(); 
  4.     IIC_SDA(0); 
  5.     delay_us(2); 
  6.     IIC_SCL(1); 
  7.     delay_us(2); 
  8.     IIC_SCL(0); 

 用GPIO模擬產(chǎn)生not ACK應(yīng)答

  1. void IIC_NAck(void){ 
  2.     IIC_SCL(0); 
  3.     SDA_OUT(); 
  4.     IIC_SDA(1); 
  5.     delay_us(2); 
  6.     IIC_SCL(1); 
  7.     delay_us(2); 
  8.     IIC_SCL(0); 
  9. }    

 用GPIO模擬等待應(yīng)答信號(hào),如果返回值是1,則接受應(yīng)答失敗,如果返回值是0,則接受應(yīng)答成功

  1. u8 IIC_Wait_Ack(void){ 
  2.     u8 ucErrTime=0; 
  3.     SDA_IN();      //SDA設(shè)置為輸入   
  4.     IIC_SDA(1);delay_us(1);     
  5.     IIC_SCL(1);delay_us(1);   
  6.      
  7.     #if 1 
  8.     while(READ_SDA){ 
  9.         ucErrTime++; 
  10.         if(ucErrTime>250) 
  11.         { 
  12.             IIC_Stop(); 
  13.             //printf("IIC_Wait_Ack erro\r\n"); 
  14.             return 1; 
  15.         } 
  16.     } 
  17.     #else 
  18.     ucErrTime++; 
  19.     delay_us(3); 
  20.      
  21.     #endif 
  22.     IIC_SCL(0);//時(shí)鐘輸出0      
  23.     return 0;   
  24. }  

發(fā)送數(shù)據(jù)的實(shí)現(xiàn)

  1. void IIC_Send_Byte(u8 txd){                         
  2.     u8 t;    
  3.     SDA_OUT();       
  4.     IIC_SCL(0);//拉低時(shí)鐘開始數(shù)據(jù)傳輸 
  5.      
  6.     for(t=0;t<8;t++){               
  7.         IIC_SDA((txd&0x80)>>7); 
  8.         txd<<=1;       
  9.         delay_us(2);   //對(duì)TEA5767這三個(gè)延時(shí)都是必須的 
  10.         IIC_SCL(1); 
  11.         delay_us(2);  
  12.         IIC_SCL(0);  
  13.         delay_us(2); 
  14.     }     
  15. }  

 IIC發(fā)送一個(gè)字節(jié),返回從機(jī)有無應(yīng)答,返回值是1時(shí)有應(yīng)答,返回值是0時(shí)無應(yīng)答

  1. u8 IIC_Read_Byte(unsigned char ack){ 
  2.     unsigned char i,receive=0; 
  3.     SDA_IN();//SDA設(shè)置為輸入 
  4.     for(i=0;i<8;i++ ){ 
  5.         IIC_SCL(0);  
  6.         delay_us(2); 
  7.         IIC_SCL(1); 
  8.         receive<<=1; 
  9.         if(READ_SDA)receive++;    
  10.         delay_us(1);  
  11.     }    
  12.      
  13.     if (!ack) 
  14.         IIC_NAck();//發(fā)送nACK 
  15.     else 
  16.         IIC_Ack(); //發(fā)送ACK    
  17.     return receive; 

讀1個(gè)字節(jié),ack=1時(shí),發(fā)送ACK,ack=0時(shí),發(fā)送nACK

在主函數(shù)里初始化IIC,再初始化芯片里的相關(guān)寄存器

HarmonyOS 基于LYEVK-3861開發(fā)心率和血氧檢測(cè)-鴻蒙HarmonyOS技術(shù)社區(qū)

在max30102.c里按照芯片規(guī)格書,通過模擬的IIC對(duì)寄存器進(jìn)行讀取,再調(diào)用下芯片原廠提供的算法,將采集到的值輸出在顯示屏上

HarmonyOS 基于LYEVK-3861開發(fā)心率和血氧檢測(cè)-鴻蒙HarmonyOS技術(shù)社區(qū)

3、結(jié)語

以上都完成之后,就可以編譯、燒錄,就可以測(cè)試最后的完成效果。

對(duì)于想去高海拔的小伙伴們,可以帶一個(gè)便攜式血氧檢測(cè)儀,隨時(shí)監(jiān)控自己的身體狀況哦~

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載

心率和血氧檢測(cè)demo.rar

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-11-05 09:58:58

鴻蒙HarmonyOS應(yīng)用

2021-10-11 10:07:09

鴻蒙HarmonyOS應(yīng)用

2021-09-02 15:25:53

鴻蒙HarmonyOS應(yīng)用

2021-08-17 14:40:43

鴻蒙HarmonyOS應(yīng)用

2021-04-08 21:10:24

辦公

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2022-12-30 12:15:16

芯片DIY

2021-12-06 15:05:41

鴻蒙HarmonyOS應(yīng)用

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2020-11-30 13:57:48

Hi3861

2021-12-20 21:01:52

鴻蒙HarmonyOS應(yīng)用

2017-03-21 08:41:51

iOS手機(jī)攝像頭檢測(cè)心率

2021-09-09 10:06:09

鴻蒙HarmonyOS應(yīng)用

2024-07-04 09:22:24

2021-12-31 15:07:00

鴻蒙HarmonyOS應(yīng)用

2020-11-02 12:07:11

鴻蒙 GPIO

2022-07-19 20:25:54

鴻蒙MaskRCNN算法

2022-11-09 11:02:00

2023-05-26 16:07:14

Hi3861Wifi模塊

2020-10-28 10:00:09

海思Hi3861CentOS鴻蒙LiteOS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)