一、设备简介
HMC5883L是电子指南针罗盘模块的三轴磁场传感器。IIC通讯协议。
二、工作原理
传统罗盘用一根被磁化的磁针来感应地球磁场,地球磁场与磁针之间的磁力时磁针转动,直至磁针的两端分别指向地球的磁南极与磁北极。电子罗盘也是如此,只是用磁阻传感器代替磁针,然后将感觉到的地磁信息转换为数字信号输出给用户。
用于测量磁感应强度的单位是Tesla
或者Gauss
(1Tesla=10000Gauss
)。
地磁场是一个矢量,对于一个固定的个与当地水平面平行的固定位置XY重量和垂直于当地水平面的Z重量。如果电子罗盘与当地水平面平行,则罗盘中的磁力计对应于这三个重量。。罗盘中的航向角是方向和磁北的夹角。
磁场校准
由于磁场干扰,我们实际测量的磁力计数据不准确,需要校准才能使用。
理想的效果是图1,实际的效果很可能是图2,变成椭球,所以我们需要使用拟合来纠正校准。
1)数据收集设备在磁场干扰下旋转360°。
2)分析数据以产生偏差偏移和灵敏度的比例因子来补偿干扰。
- X和从数据中发现Y以上图为例,磁强计的最大输出可得出结论:X反应更大。我们将其比例系数设置为1。也就是说Xs=1
- Y轴比系数为 Ys =( Xmax - Xmin)/( Ymax - Ymin)
- 有偏置补偿
- Xb = Xs * [1/2(Xmax - Xmin) - Xmax ]
Yb= Ys * [1/2(Ymax -Ymin) -Ymax] 正确的输出是
Xout = Xin*Xs Xb Yout = Yin*Ys Yb
四、在ArduinoUNO基本使用
在ArduinoIDE菜单栏 → 项目→ 加载库→ 管理库
搜索 HMC5883
这是我安装的第一个。
然后在ArduinoIDE菜单栏 → 文件→ 示例,找到 Adafruit HMC5883 Unified打开唯一的示例文件。
咱们将HMC5883L模块连接到Arduino UNO板子上,跑跑这个程序吧。结果如下:
与手机相比,相差四度,可能是因为手机的磁场干扰了模块。