2019年2月14日 星期四

模組介紹 : faya 加速度計模組


學習目標 : 認識faya 3軸加速度計模組的功能及使用方式
學習時間 : 60 mins
示範模組 : (1) faya brickNano
                   (2) faya 3軸加速度計
工具 : (1) 樂高積木 (相容)

====================功能介紹====================
faya 3軸加速度計模組透過I2C的接線,從Arduino的函式庫下指令,很簡單的就能讀到X軸、Y軸、Z軸共3組數值資料,並透過這3組數值了解模組移動的方向,本段僅解釋範例中用到的指令,更多的函示庫指令用法可參考官方說明



介紹指令前,先看一下faya 3軸加速計計模組的外觀,它的左邊有六個埠,分別是SCLSDASDOCSINT1INT2,與Arduion的通訊方式和電子羅盤模組一樣,使用I2C通訊協定模組的右下角有一個用來指示移動方向的圖案,分別標示XYZ 3個方向軸,其中Z軸需要發揮一點想像力,因為Z軸的方向是與模組平面向上垂直的方向。


把左邊圖片中的模組想像成一個方塊如右邊圖片,紅色箭頭標示的方向就為Z,藍色箭頭為X,綠色則為Y



上面圖片為Arduino UNO中的I2C的腳位。左、右兩邊的SDASCL各別互相導通,因此從右邊接線或者左邊接線都可以使用。


接下來介紹所使用的指令

  • #include  <Adafruit_ADXL345_U.h>
引入3軸加速度計的函示庫
  • #include <Wire.h>
引入I2C介面,讓Arduino打開I2C的通訊界面。 
  • #include <Adafruit_Sensor.h>
這是Adafruit官方將多種體感型感測器的單位換算整合成這個函示庫,我們可以引入這個函示庫,用來換算3軸加速度計的單位。 
  • Adafruit_ADXL345_Unified物件名稱= Adafruit_ADXL345_Unified();
此指令將3軸加速度計的函示庫名稱,宣告成自己的物件名稱。 
  • 物件名稱.begin()
初始化3軸加速度模組。
  • 物件名稱.setRange(ADXL345_RANGE_16_G);

    設定模組重力加速度的顯示範圍為16G,總共有4個範圍:2G、4G、8G、16G可供選擇。
  • 類別名稱.getEvent(&event);
更新模組中的重力加速度數值。 
  • event.acceleration.方向軸
    取得模組中對應方向的加速度數值,方向軸的意思是3個不同方向的代號,即為x、y、z。

====================原理知識====================
以下解釋提供給有需要知道背後原理的人:

重力加速度是根據地球引力所牽引的物理現象,其表示符號為:g  (這裡的g並不是重力單位的公克)1g等於每平方秒9.8公尺,也就是說當沒有空氣阻力時,物體在地球表面上自由落下的加速度為9.8 m/s²

3軸加速度計是使用電容偵測的方式來感測加速度,如下圖由兩片電極片之間裝入一片可移動的物體。當模組沿著動作方向移動時,中間可移動的物體會改變兩片電極片之間的電容值,計算出電容的差值後,就可得到移動物體的重心位移和移動的方向。


模組的電路圖如下所示,模組使用了一顆降壓IC,將5V的電源降到3.3V,以符合此IC的供電需求,其他部分僅根據datasheet連接周邊被動元件,有興趣的人可以參考datasheet!


====================範例實作(一)====================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:

目標:
(1)使用Serial Monitor,查看3軸加速度計模組位移的資料變化
(2)請分別測試前到後、左到右、上到下...等3個動作,查看X、Y、Z軸的數值變化

接線:
(1) 電源線連接如下圖所示,連接的說明請看這篇文章簡易版


(2) 訊號線連接
                   Arduino_A4 ===> 電子羅盤模組_SDA 
                   Arduino_A5 ===> 電子羅盤模組_SCL


範例程式:
(上傳程式前請記得下載[ADXL345]函示庫,解壓縮並複製整個資料夾到Arduino的Libraries資料夾)

備註:
- L19 / L42 /  L61 : 一點程式小技巧,讓每次讀取資料的時間點固定,L19設定了每10ms讀取一次感測值,但是由於Arduino讀取和秀出感測值時 (L45 ~ L58) 會花一些時間,因此我們L42先記錄起始時間,然後在L61中的 (millis() - timer) 算出總共花了多少時間,假設花了2ms,最後只要delay (10ms-2ms) = 8ms 就會得到我們希望的每10ms讀取一次感測值。

範例結果:



討論:


程式下載到Arduino後,打開Serial Monitor,先將模組平放在你的桌子上,這時候會看到X軸跟Y軸的數值都趨近為0,只有Z軸的數值為8 m/s²,換算成g (除以9.8):大約等於1g


這裡解釋一下為什麼模組還沒有任何動作而且平放在桌面上時,Z軸的數值卻不是為0。根據前面介紹的3軸加速度計模組偵測的原理與上面資料手冊的使用圖片,模組在平放的時候,Z軸與桌面呈現垂直,因此Z軸的偵測結構正處於穩定向下的狀態,所以現在看到Z軸的數值約為8 m/s² (快到1g)

接著我們試著將模組朝不同方向的擺放,查看X軸、Y軸、Z軸的數值變化,如下圖將模組站立起來使模組上的圖案Y軸箭頭朝向上方,查看Serial Monitor的數值就會發現,Z軸趨近為0,而Y軸約為9.8 m/s² (約為1g)



模組圖案上的Y軸箭頭朝向下方的話,在Serial MonitorY軸的數值則會變成 -10.1 m/s²(約為-1g)以此類推,剩下的X軸跟Y軸可以透過這個動作,查看實驗變化。


也歡迎大家在底下留言或到我們的粉絲團留言喔!
====================================

沒有留言:

張貼留言