大家好,今天主要和大家聊一聊,如何使用鴻蒙系統讀取三軸加速度的方法。
目錄
第一:三軸加速速基本原理
第二: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來驅動的。
第四:軟體設計
首先調用
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