2018年3月30日 星期五

模組介紹 : faya 電子羅盤模組


學習目標 : 認識faya電子羅盤模組的功能及使用方式
學習時間 : 40 mins
示範模組 : (1) faya brickNano
                   (2) faya電子羅盤模組
工具 : (1) 樂高積木 (相容)
           (2) 指北針羅盤 (指針式)


====================功能介紹====================
faya電子羅盤模組使用了內部構造複雜的MEMS(Micro-ElectroMechanical)微機電晶片,代號LSM303DLHC,取代了傳統的指北針,利用電子機械的方式量測方位。雖然晶片的內部構造複雜,但是經過包裝後,透過簡單的接線,只要從Arduino的函式下指令,就能讀取北方與模組之間的角度差距(0° ~ 360°),本段僅解釋範例中用到的指令,更多的函示庫指令用法可參考第三方說明


介紹指令前,先看一下faya電子羅盤模組的外觀,它的左邊有五個埠,分別是SCL、SDA、DRDY、INT1、INT2,其中SCL與SDA是I2C通訊協定,用來和Arduion互相溝通。模組上面的羅盤圖示分別標了X與Y的字樣,用來定義晶片的方位,標示Y字樣的方向為南方(S),X標示為西方(W),因此-X的方向為東方(E),-Y的方向為北方(N),這裡的方位不是真正的地理方位,我們姑且稱他們為晶片方位。


接下來介紹所使用的指令

  • #include <LSM303.h>
使用電子羅盤函示庫,還需要引入I2C 的函示庫。
  • #include <Wire.h>
使用I2C介面,需要引入Arduino用的I2C函示庫。 
  • Wire.begin();
初始化I2C設定,並開啟I2C的通訊。 
  • LSM303 物件名稱;
此指令建構了電子羅盤的物件,物件名稱 : 可自行命名。 
  • 物件名稱.init();
初始化電子羅盤的連結與定義。
  • 物件名稱.enableDefault();
開啟與電子羅盤之間的通訊連結。 
  • 物件名稱.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
  • 物件名稱.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
這兩行指令是用來校正電子羅盤中的偏差值。 
  • 物件名稱.read();
讀取電子羅盤中所有的資料。 
  • 物件名稱.heading();
讀取電子羅盤在水平面上時,電子羅盤晶片方位(北方)與磁北方之間的角度差, 單位為: 度。
====================原理知識====================
以下解釋提供給有需要知道背後原理的人:

磁鐵是一種可以吸引鐵,並產生磁力的物體,磁鐵一端稱為S極或稱為指南極 ,另一端為N極或稱為指北極。


我們所在的地球本身就像一個超大型的磁鐵,會產生磁力線 (或稱磁場),因此藉由這個原理早在古時候就有人製作"指南針"這類型的工具,可藉由地球產生的磁力線方向指出南北邊的方向。(注意:市面上販售的通常稱為指北針)


近代科學家根據磁力(磁場)原理,製作了可以感測磁力的電子IC晶片,我們稱為電子羅盤。電子羅盤所使用的電子材料會隨著外加磁場的變化,改變材料中的電阻值差距,可用來感測磁場的變化,這種現象又稱為磁阻效應。

傳統的指北針和電子羅盤的定位方式是一樣的,都必須旋轉羅盤,讓指針對準北(N)的文字面,完成後,就可以從文字上判斷方位了。

模組的電路圖如下所示,模組使用了一顆降壓IC,將5V的電源降到3.3V,以符合此IC的供電需求!


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

目標:
(1)使用Serial Monitor,查看電子羅盤回傳的角度資料
(2)水平旋轉電子羅盤模組,查看角度的變化量

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



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



範例程式:
本程式需要使用LSM303函式庫,請點此下載,解壓縮後置於Arduino下的Library資料夾


備註 :
- Loop裡的程式很容易懂,即讀取和磁北方的夾角,接著列印在終端機上。要注意的是,由於模組上Y的指向是晶片方位的南方,因此晶片方位的北方的指向是-Y。


當模組對準北方後,如果順時針旋轉,數值會從0開始加大,轉一圈後最大值360度,然後歸0。如果逆時針轉,數值會從360往下降,達到原點後為最小值0度。

因此從串列埠監控視窗中,我們看到的數字是介於0~360,當我們旋轉到接近0或360時,代表著模組上的晶片方位-Y方向已經指向磁北了。

範例結果:


討論:
  • 影片中可以發現,當我們順時針旋轉時,數字漸漸增加,超過360時,又從0開始; ,逆時針旋轉時,數字漸漸減少。當我們讓數字靠近 0 或 360時,對照旁邊的指北針,我們可以發現 -Y的方向會和指北針的方向一致。

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

沒有留言:

張貼留言