學習目標 : 認識faya電子羅盤模組的功能及使用方式
學習時間 : 40 mins
示範模組 : (1) faya brickNano
(2) faya電子羅盤模組
工具 : (1) 樂高積木 (相容)
(2) 指北針羅盤 (指針式)
====================功能介紹====================
faya電子羅盤模組使用了內部構造複雜的MEMS(Micro-ElectroMechanical)微機電晶片,代號LSM303DLHC,取代了傳統的指北針,利用電子機械的方式量測方位。雖然晶片的內部構造複雜,但是經過包裝後,透過簡單的接線,只要從Arduino的函式下指令,就能讀取北方與模組之間的角度差距(0° ~ 360°),本段僅解釋範例中用到的指令,更多的函示庫指令用法可參考第三方說明。
接下來介紹所使用的指令
- #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的供電需求!
以下解釋提供給有需要知道背後原理的人:
磁鐵是一種可以吸引鐵,並產生磁力的物體,磁鐵一端稱為S極或稱為指南極 ,另一端為N極或稱為指北極。
我們所在的地球本身就像一個超大型的磁鐵,會產生磁力線 (或稱磁場),因此藉由這個原理早在古時候就有人製作"指南針"這類型的工具,可藉由地球產生的磁力線方向指出南北邊的方向。(注意:市面上販售的通常稱為指北針)
近代科學家根據磁力(磁場)原理,製作了可以感測磁力的電子IC晶片,我們稱為電子羅盤。電子羅盤所使用的電子材料會隨著外加磁場的變化,改變材料中的電阻值差距,可用來感測磁場的變化,這種現象又稱為磁阻效應。
傳統的指北針和電子羅盤的定位方式是一樣的,都必須旋轉羅盤,讓指針對準北(N)的文字面,完成後,就可以從文字上判斷方位了。
模組的電路圖如下所示,模組使用了一顆降壓IC,將5V的電源降到3.3V,以符合此IC的供電需求!
====================範例實作(一)====================
了解模組功能(原理)後,我們用以下範例來展示模組的功能:
目標:
目標:
(1)使用Serial Monitor,查看電子羅盤回傳的角度資料
(2)水平旋轉電子羅盤模組,查看角度的變化量
接線:
Arduino_A5 ===> 電子羅盤模組_SCL
範例程式:
也歡迎大家在底下留言或到我們的粉絲團留言喔!
本程式需要使用LSM303函式庫,請點此下載,解壓縮後置於Arduino下的Library資料夾
備註 :
- Loop裡的程式很容易懂,即讀取和磁北方的夾角,接著列印在終端機上。要注意的是,由於模組上Y的指向是晶片方位的南方,因此晶片方位的北方的指向是-Y。
範例結果:
討論:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 2018/03/14 | |
// Faya-Nugget 範例程式 (eCompass_1.ino) | |
// 單元: 模組介紹-faya電子羅盤模組 | |
// 網址:https://fayalab.blogspot.com/2018/01/eCompass.html | |
// 目標: (1)使用Serial Monitor,查看電子羅盤回傳的角度資料 | |
// (2)水平旋轉電子羅盤模組,查看角度的變化量 | |
// 備註: | |
// | |
// 接線: Arduino ==> faya模組 | |
// A4 ==> SDA (電子羅盤模組) | |
// A5 ==> SCL (電子羅盤模組) | |
// | |
#include <Wire.h> | |
#include <LSM303.h> | |
LSM303 compass; // 匯入LSM303 Library | |
void setup() { | |
Serial.begin(9600); //宣告UART的Board rate為9600 | |
Wire.begin(); //I2C的初始設定 | |
compass.init(); //電子羅盤模組的初始設定 | |
compass.enableDefault(); | |
compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767}; //偏差值校正 | |
compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767}; | |
} | |
void loop() | |
{ | |
compass.read(); //讀取模組中的資料 (與北方的夾角) | |
float heading = compass.heading(); | |
Serial.println(heading); //將資料回傳到Serial Monitor 顯示 | |
delay(100); //延遲0.1秒 | |
} |
備註 :
- Loop裡的程式很容易懂,即讀取和磁北方的夾角,接著列印在終端機上。要注意的是,由於模組上Y的指向是晶片方位的南方,因此晶片方位的北方的指向是-Y。
當模組對準北方後,如果順時針旋轉,數值會從0開始加大,轉一圈後最大值360度,然後歸0。如果逆時針轉,數值會從360往下降,達到原點後為最小值0度。
因此從串列埠監控視窗中,我們看到的數字是介於0~360,當我們旋轉到接近0或360時,代表著模組上的晶片方位-Y方向已經指向磁北了。
- 影片中可以發現,當我們順時針旋轉時,數字漸漸增加,超過360時,又從0開始; ,逆時針旋轉時,數字漸漸減少。當我們讓數字靠近 0 或 360時,對照旁邊的指北針,我們可以發現 -Y的方向會和指北針的方向一致。
也歡迎大家在底下留言或到我們的粉絲團留言喔!
沒有留言:
張貼留言