ESP8266-Arduino编程实例-HMC5883L磁场传感器
HMC5883L磁场传感器
1、HMC5883L介绍
霍尼韦尔 HMC5883L 是一款表面贴装、多芯片模块,专为低场磁场传感而设计,具有数字接口,适用于低成本罗盘和磁力计等应用。 HMC5883L 包括我们先进的高分辨率 HMC118X 系列磁阻传感器和一个 ASIC,该 ASIC 包含放大、自动消磁带驱动器、偏移消除和一个 12 位 ADC,可实现 1° 至 2° 的罗盘航向精度。
I2C 串行总线允许简单的接口。 HMC5883L 是一款 3.0×3.0x0.9mm 表面贴装 16 引脚无引线芯片载体 (LCC)。 HMC5883L 的应用包括移动电话、上网本、消费电子产品、自动导航系统和个人导航设备。
HMC5883L 采用霍尼韦尔的各向异性磁阻 (AMR) 技术,与其他磁传感器技术相比具有优势。这些各向异性方向传感器具有精确的轴内灵敏度和线性度。
这些传感器的固态结构具有极低的交叉轴灵敏度,旨在测量从毫高斯到 8 高斯的地球磁场的方向和大小。霍尼韦尔的磁传感器是业内最灵敏、最可靠的低场传感器之一。

2、硬件准备
- ESP8266 NodeMCU开发板一块
- HMC5883L传感器模块一个
- 面板板一个
- 杜邦线若干
- 数据线一条
硬件接线如下:

3、软件准备
- Arduino IDE或VSCode + PlatformIO
在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:
ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:
4、代码实现
本次实例使用HMLC5883L驱动库如下:
1)导入依赖库头文件
1 2 3 4 5 6 7
| #include <Wire.h> #include <Adafruit\_Sensor.h> #include <Adafruit\_HMC5883\_U.h> // 创建HMC5883L设备并分配设备ID Adafruit_HMC5883_Unified mag = Adafruit\_HMC5883\_Unified(12345);
|
2)设备初始化
1 2 3 4 5 6 7 8 9 10 11 12
| void setup(void) { Serial.begin(9600); /\* HMC5883L初始化 \*/ if(!mag.begin()) { Serial.println("Ooops, no HMC5883 detected ... Check your wiring!"); while(1); } }
|
3)数据采集
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| void loop(void) { // 查询设备最新事件 sensors\_event\_t event; mag.getEvent(&event); // 显示读取结果 (磁矢量值以微特斯拉 (uT) 为单位) Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print(" "); Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print(" "); Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print(" "); Serial.println("uT"); // 握住模块,使 Z 指向“向上”,您可以使用 x&y 测量航向 //当磁力计水平时计算航向,然后校正轴的符号。 float heading = atan2(event.magnetic.y, event.magnetic.x); // 确定航向后,必须添加“偏角”,即您所在位置的磁场“误差”。 // 在这里找到你的:http://www.magnetic-declination.com/ // 这里的值:-3\* 14' W,大约 3.2333333 度,或者(我们需要的)0.0564323 弧度 // 如果找不到你的偏角,注释掉这两行,指南针会稍微偏离。 float declinationAngle = 0.0564323; heading += declinationAngle; // 当符号反转时更正 if(heading < 0) heading += 2\*PI; // 检查是否由于增加了偏角而产生了缠绕 if(heading > 2\*PI) heading -= 2\*PI; // 将弧度转换为度数以提高可读性 float headingDegrees = heading \* 180/M_PI; Serial.print("Heading (degrees): "); Serial.println(headingDegrees); delay(500); }
|
如果需要查找你所在位置的磁偏角,请在http://www.magnetic-declination.com/上查询,例如广州的磁偏角信息如下:

查找结果后,转换为弧度即可。
文章来源: https://iotsmart.blog.csdn.net/article/details/126328233
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!