天天看點

HarmonyOS系統中核心實作三軸加速度檢測方法

     大家好,今天主要和大家聊一聊,如何使用鴻蒙系統讀取三軸加速度的方法。

HarmonyOS系統中核心實作三軸加速度檢測方法

目錄

​​第一:三軸加速速基本原理​​

​​第二:E53_SC2中API分析​​

​​第三:硬體設計​​

​​ 第四:軟體設計​​

​​第五:編譯調試​​

​​第六:運作結果​​

第一:三軸加速速基本原理

      在加速度傳感器中有一種是三軸加速度傳感器,同樣的它是基于加速度的基本原理去實作工作的,加速度是個空間矢量,一方面,要準确了解物體的運動狀态,必須測得其三個坐标軸上的分量;另一方面,在預先不知道物體運動方向的場合下,隻有應用三軸加速度傳感器來檢測加速度信号。由于三軸加速度傳感器也是基于重力原理的,是以用三軸加速度傳感器可以實作雙軸正負90度或雙軸0-360度的傾角,通過校正後期精度要高于雙軸加速度傳感器大于​​測量​​角度為60度的情況。

  目前的三軸加速度傳感器大多采用壓阻式、壓電式和​​電容​​​式工作原理,産生的加速度正比于​​電阻​​​、電壓和電容的變化,通過相應的放大和濾波​​電路​​​進行采集。這個和普通的加速度傳感器是基于同樣的原理,是以在一定的技術上三個單軸就可以變成一個三軸。對于多數的傳感器應用來看,兩軸的加速度傳感器已經能滿足多數應用。但是有些方面的應用還是集中在三軸加速度傳感器中例如在數采裝置,貴重資産監測,碰撞監測,測量建築物​​振動​​,風機,風力渦輪機和其他敏感的大型結構振動。

第二:E53_SC2中API分析

       使用以下API完成三軸加速度的讀取

       E53_SC2_Init()

void E53_SC2_Init(void)      

      功能描述:初始化E53_SC2_Init(void)

      E53_SC2_Read_Data()

float E53_SC2_Read_Data(void)      

      功能描述:讀取三軸加速度及溫度

第三:硬體設計

      本示例使用鴻蒙開發闆,其中原理圖如下,三軸加速度傳感器MPU6050是通過I2C來驅動的。

HarmonyOS系統中核心實作三軸加速度檢測方法
HarmonyOS系統中核心實作三軸加速度檢測方法

 第四:軟體設計

    首先調用 ​

​E53_SC2_Init()​

​ 函數初始化E53_SC2所接的引腳的功能,然後循環調用E53_SC2_Read_Data()函數讀取三軸加速度并通過序列槽列印出來,設定第一次讀出的三軸加速度為水準狀态,當傾斜開發闆後會點亮擴充闆上傾斜狀态的燈。

static void Example_Task(void)
{
    E53_SC2_Init();
    
    while(1)
    {
        printf("=======================================\r\n");
        printf("*************E53_SC2_example***********\r\n");
        printf("=======================================\r\n");
        E53_SC2_Read_Data();
        printf("\r\n******************************Temperature      is  %d\r\n", (int)E53_SC2_Data.Temperature);
        printf("\r\n******************************Accel[0]         is  %d\r\n", (int)E53_SC2_Data.Accel[0]);
        printf("\r\n******************************Accel[1]         is  %d\r\n", (int)E53_SC2_Data.Accel[1]);
        printf("\r\n******************************Accel[2]         is  %d\r\n", (int)E53_SC2_Data.Accel[2]);
        if( X == 0 && Y == 0 && Z == 0)
        {
            X = (int)E53_SC2_Data.Accel[0];
            Y = (int)E53_SC2_Data.Accel[1];
            Z = (int)E53_SC2_Data.Accel[2];
        }
        else
        {
            if(X+100<E53_SC2_Data.Accel[0]||X-100>E53_SC2_Data.Accel[0]||Y+100<E53_SC2_Data.Accel[1]||Y-100>E53_SC2_Data.Accel[1]||Z+100<E53_SC2_Data.Accel[2]||Z-100>E53_SC2_Data.Accel[2])
            {
                LED_D1_StatusSet(OFF);
                LED_D2_StatusSet(ON);
            }
            else
            {
                LED_D1_StatusSet(ON);
                LED_D2_StatusSet(OFF);
            }
        }
        usleep(1000000);
    }
}      

第五:編譯調試

#"C1_e53_sf1_mq2:e53_sf1_example",
#"C2_e53_ia1_temp_humi_pls:e53_ia1_example",
#"C3_e53_sc1_pls:e53_sc1_example",
"C4_e53_sc2_axis:e53_sc2_example",
#"C5_e53_is1_infrared:e53_is1_example",      

第六:運作結果

=======================================
*************E53_SC2_example***********
=======================================

******************************Temperature      is  25

******************************Accel[0]         is  45

******************************Accel[1]         is  3

******************************Accel[2]         is  2089
=======================================
*************E53_SC2_example***********
=======================================

******************************Temperature      is  25

******************************Accel[0]         is  49

******************************Accel[1]         is  5

******************************Accel[2]         is  2087      

繼續閱讀