基于Arduino的HMC5883L电子罗盘设计与实现
2016-08-04李佳骏王洪源
李佳骏 王洪源
(沈阳理工大学信息科学与工程学院 辽宁沈阳 110159)
基于Arduino的HMC5883L电子罗盘设计与实现
李佳骏 王洪源
(沈阳理工大学信息科学与工程学院 辽宁沈阳 110159)
电子罗盘是利用地磁场的方向来测量航向的一种导航工具,它能够提供载体实时的航向和姿态,被广泛地应用于航空、航海、车辆导航以及手机定位系统等领域。该设计以AVR单片机Arduino为控制核心,以HMC5883L为磁场测量元件。实现对载体的实时导航和方向控制。采用C语言编程控制HMC5883L的正常数据采集,Arduino实现对数据的处理。
Arduino;HMC5883L;电子罗盘
Arduino是一个基于AVR单片机的开放原始码的软硬件平台,软件开放源代码、硬件电路公开、程序开发接口免费下载,是在国际上流行的快速电子设计制作的方案。由于Arduino的易用性与扩展性强,它的出现使得制作原型变得更快、更好、更简单。磁阻传感器HMC5883L通过I2C总线采集水平方向的磁场强度,并将输出的数据通过Arduino传到上位机上。
1 HMC5883L模块简介
HMC5883L是一种采用表面贴装技术的高集成模块。内部包括非常先进的高分辨率传感器[1]。可以使其控制在1~2°的误差范围内。采用的IIC系列总线接口。HMC5883L的引脚示意图如图1所示。
图1 HMC5883L引脚示意图
HMC5883L有多种操作模式,主要分为连续、单次测量模式和闲置模式。
(1)连续测量模式
顾名思义,在此模式下,模块会在指定的速率下连续的采集实时的数据并把它输出并存储到寄存器中。在连续测量模式下IIC总线可以被电路中的其他装置启用。
(2)单次测量模式
不同于连续测量模式,该模式下模块测量一次数据并将其保存。它是一种供电模式,可以通过电源管理来控制。在该模式下寄存器可以保存数据并且I2C总线可被其他装置启用。
(3)闲置模式
在此模式下,装置主要是通过总线接口访问但是主要功能是不可以用的。和其他模式一样,在空闲模式下I2C总线可被其他装置启用。
2 磁场测量原理
磁北方问就是地磁场在水平面上分量的方向。假设电子罗盘处于水平面上,要确定其相对于磁北的航向角口。由磁阻传感器可以直接得出地磁场的水平分量HX、HY。
由于地磁南北极与地理南北极存在磁偏角,要得到准确的南北极方向,必须用计算结果加上或减去所在地区磁偏角,得出前进方向与地理北极的夹角,即真北方位角。
磁罗盘通过测量地磁场水平方向分量确定磁北极方向并推算出其他方向。当罗盘水平放置时,传感器坐标系的X、Y轴在水平面内,X轴为前进方向,Y轴垂直于X轴向右,Z轴沿重力方向向下,从磁北方向顺时针到X轴的夹角即为方位角α。
实际应用中,电子罗盘并不是始终水平,需要根据加速度传感器测得的俯仰角和滚转角,通过坐标变换,将磁传感器测得的磁场强度分量折算到水平方向,再计算方位角。俯仰角φ为罗盘纵轴与水平面之间的夹角,滚转角θ为罗盘Z轴与过X轴的铅垂面之间的夹角。当罗盘处于非水平状态时,测得重力加速度g在罗盘三轴方向的分量分别为Ax,Ay,Az,则根据坐标关系可求得俯仰角和滚转角为:
此时,磁传感器测出的地磁场在罗盘三轴方向的分量为Hx,Hy,Hz,由坐标关系得水平方向磁分量:
利用三角函数关系可求得方位角为:
3 软件设计
本设计是以Arduino为平台开发的,使用的是类C的Arduino语言,Arduino语言是以Setup()开头,Loop()作为主体的一个程序架构。本设计在Setup()函数中完成端口的初始化,即通过调用“I2Cdev.h”库函数和“HMC5883L.h”库函数来定义HMC5883L和Arduino的数据通信以及HMC5883L的数据采集。在应用程序中对定义的端口进行操作来控制显示。
Loop函数是Arduino软件项目的主体函数,当Setup函数执行完成以后就进入Loop函数,该函数无限循环,调用的应用程序就放在该函数中运行。
应用程序主要实现了驱动HMC5883L的数据采集与处理。
程序中所用到的主要基本显示函数有:
4 结语
本设计使用Arduino单片机作为控制核心,用数据采集程序控制数据采集,用HMC5883L来测量数据并输出到上位机。由于电子罗盘广泛应用于各类导航场所,所以本设计的现实应用性很强。此外,Arduino单片机简单易学的这一特点会使得越来越多的人对Arduino单片机产生兴趣,同时推动世界智能化的发展。
[1]宋丽君.基于MEMS器件的航向姿态测量系统的研究[D].西北工业大学,2007.
TN966
A
1004-7344(2016)20-0270-01
2016-7-1