想给遥控车、无人机或者巡检小车装个"认方向"的模块,最简单的就是一块三轴磁力计。HMC5883L是我试下来最容易上手的一块,四根线接上,串口就能吐出来你面朝的角度。这篇把我从买板到算出航向角的过程理顺,照着接就能跑通。

它到底测什么
HMC5883L是一个三轴磁力计,能测出x、y、z三个方向上的地磁场分量。地球磁场在水平面上总是指向磁北极,所以拿到水平方向的x和y两个分量,用反三角函数就能算出你朝哪个方向。
我手上这块常做成GY-273模块,板子上带了3.3V稳压和电平转换,所以既能接3.3V也能接5V的单片机,对Arduino特别友好。芯片本身最高能测到±8高斯,分辨率能到大概5毫高斯,做电子罗盘精度在±1到2度,够用。
接线就四根
它是I2C通信,所以只需要接电源和两根数据线。红色VCC接5V,黑色GND接地,黄色SDA接A4,绿色SCL接A5。GY-273模块上已经自带I2C上拉电阻,不用你外接。

有一点要注意:I2C地址是固定的0x1E,同一根总线上只能挂一块。很多新手卡在这一步,扫描半天扫不到地址,多半是SDA和SCL两根线接反了,或者VCC没接对。
库和示例代码
Arduino库里搜"Adafruit HMC5883 Unified"装好,它会自动带上依赖的Unified Sensor库。示例里有个magsensor的demo,上传打开串口监视器,就能看到x、y、z的磁场数据和算出来的heading角度。
罗盘要用atan2(y, x)来算航向角,公式是 heading = atan2(y, x),转成度再修正本地磁偏角。北半球不同城市磁偏角不一样,把所在地的偏角值写进去,指北才准。
三个容易踩的坑
第一,罗盘一定要远离电机、音箱、电池和螺丝刀这类带磁性或铁的东西,不然读数一直漂。第二,模块要放平,倾斜会导致水平分量失真。第三,做轮式小车时尽量用中断或者高频采样,读取落后容易漏脉冲。
还老有人说"放桌子上不动读数还在动",多半是附近有电源纹波或者金属桌面干扰,把模块垫高一点、远离USB线,问题就好很多。
能做什么
接上之后你能做个电子指北针,也可以给循迹小车或者腿足机器人当航向参照,配合GPS还能做简单导航。想更抗干扰,可以再叠一块MPU6050做倾斜补偿,但那是进阶玩法了。
这块板几十块钱就拿下,算是吃透I2C和地磁传感器的最短路径。照着接线、跑通示例、再调好磁偏角,你的小车就不再是"蒙着头跑"了。






