李佳駿 王洪源
(沈陽理工大學信息科學與工程學院 遼寧沈陽 110159)
基于Arduino的HMC5883L電子羅盤設計與實現
李佳駿 王洪源
(沈陽理工大學信息科學與工程學院 遼寧沈陽 110159)
電子羅盤是利用地磁場的方向來測量航向的一種導航工具,它能夠提供載體實時的航向和姿態,被廣泛地應用于航空、航海、車輛導航以及手機定位系統等領域。該設計以AVR單片機Arduino為控制核心,以HMC5883L為磁場測量元件。實現對載體的實時導航和方向控制。采用C語言編程控制HMC5883L的正常數據采集,Arduino實現對數據的處理。
Arduino;HMC5883L;電子羅盤
Arduino是一個基于AVR單片機的開放原始碼的軟硬件平臺,軟件開放源代碼、硬件電路公開、程序開發接口免費下載,是在國際上流行的快速電子設計制作的方案。由于Arduino的易用性與擴展性強,它的出現使得制作原型變得更快、更好、更簡單。磁阻傳感器HMC5883L通過I2C總線采集水平方向的磁場強度,并將輸出的數據通過Arduino傳到上位機上。
HMC5883L是一種采用表面貼裝技術的高集成模塊。內部包括非常先進的高分辨率傳感器[1]。可以使其控制在1~2°的誤差范圍內。采用的IIC系列總線接口。HMC5883L的引腳示意圖如圖1所示。

圖1 HMC5883L引腳示意圖
HMC5883L有多種操作模式,主要分為連續、單次測量模式和閑置模式。
(1)連續測量模式
顧名思義,在此模式下,模塊會在指定的速率下連續的采集實時的數據并把它輸出并存儲到寄存器中。在連續測量模式下IIC總線可以被電路中的其他裝置啟用。
(2)單次測量模式
不同于連續測量模式,該模式下模塊測量一次數據并將其保存。它是一種供電模式,可以通過電源管理來控制。在該模式下寄存器可以保存數據并且I2C總線可被其他裝置啟用。
(3)閑置模式
在此模式下,裝置主要是通過總線接口訪問但是主要功能是不可以用的。和其他模式一樣,在空閑模式下I2C總線可被其他裝置啟用。
磁北方問就是地磁場在水平面上分量的方向。假設電子羅盤處于水平面上,要確定其相對于磁北的航向角口。由磁阻傳感器可以直接得出地磁場的水平分量HX、HY。
由于地磁南北極與地理南北極存在磁偏角,要得到準確的南北極方向,必須用計算結果加上或減去所在地區磁偏角,得出前進方向與地理北極的夾角,即真北方位角。
磁羅盤通過測量地磁場水平方向分量確定磁北極方向并推算出其他方向。當羅盤水平放置時,傳感器坐標系的X、Y軸在水平面內,X軸為前進方向,Y軸垂直于X軸向右,Z軸沿重力方向向下,從磁北方向順時針到X軸的夾角即為方位角α。
實際應用中,電子羅盤并不是始終水平,需要根據加速度傳感器測得的俯仰角和滾轉角,通過坐標變換,將磁傳感器測得的磁場強度分量折算到水平方向,再計算方位角。俯仰角φ為羅盤縱軸與水平面之間的夾角,滾轉角θ為羅盤Z軸與過X軸的鉛垂面之間的夾角。當羅盤處于非水平狀態時,測得重力加速度g在羅盤三軸方向的分量分別為Ax,Ay,Az,則根據坐標關系可求得俯仰角和滾轉角為:

此時,磁傳感器測出的地磁場在羅盤三軸方向的分量為Hx,Hy,Hz,由坐標關系得水平方向磁分量:

利用三角函數關系可求得方位角為:

本設計是以Arduino為平臺開發的,使用的是類C的Arduino語言,Arduino語言是以Setup()開頭,Loop()作為主體的一個程序架構。本設計在Setup()函數中完成端口的初始化,即通過調用“I2Cdev.h”庫函數和“HMC5883L.h”庫函數來定義HMC5883L和Arduino的數據通信以及HMC5883L的數據采集。在應用程序中對定義的端口進行操作來控制顯示。
Loop函數是Arduino軟件項目的主體函數,當Setup函數執行完成以后就進入Loop函數,該函數無限循環,調用的應用程序就放在該函數中運行。
應用程序主要實現了驅動HMC5883L的數據采集與處理。
程序中所用到的主要基本顯示函數有:

本設計使用Arduino單片機作為控制核心,用數據采集程序控制數據采集,用HMC5883L來測量數據并輸出到上位機。由于電子羅盤廣泛應用于各類導航場所,所以本設計的現實應用性很強。此外,Arduino單片機簡單易學的這一特點會使得越來越多的人對Arduino單片機產生興趣,同時推動世界智能化的發展。
[1]宋麗君.基于MEMS器件的航向姿態測量系統的研究[D].西北工業大學,2007.
TN966
A
1004-7344(2016)20-0270-01
2016-7-1