目录
介绍
HMC5883L数字罗盘模块
- 数字罗盘HMC5883L也叫磁力计,用于测量地球磁场的方向和大小。它用于低成本的罗盘和磁力测量。
- 它测量沿X,Y和Z轴的地球磁场值,从milli-gauss到 8 gauss。
- 它可用于检测设备的前进方向。
- 它使用I2C协议与微控制器通信。
要将HMC5883L磁力计模块与Raspberry Pi连接,我们应确保启用Raspberry Pi上的I2C协议。因此,在将HMC5883L与raspberry Pi连接之前,我们需要在Raspberry Pi上进行一些I2C配置,您可以参考之前的教程 Raspberry Pi I2C。
电路连接图
磁力计与Raspberry Pi 3连接HMC5883L磁力计与Raspberry Pi 3连接
例
从HMC5883L磁力计模块沿x,y,z轴读取磁场强度,计算这三个轴的航向角并在串行监视器上显示航向角。
让我们用Raspberry Pi连接口磁力计HMC5883L并计算其航向角。HMC5883L使用I2C协议进行通信。我们可以使用Python将它与Raspberry连接起来。
要了解Raspberry Pi上使用的基于Python的I2C函数,您可以为Raspberry Pi引用 基于Python的I2C函数
编程步骤
- 首先,我们需要设置配置寄存器A,以获得具有15 Hz默认数据输出速率的8个样本测量的平均值
- 使用配置寄存器B设置增益,即此处为0xA0。(或者我们可以选择任何其他所需的增益)
- 在模式寄存器中选择连续测量操作模式。因此,模式寄存器值将变为0x00。
初始化后,读取X,Y和Z轴寄存器原始值。
使用以下公式计算标题值,
Python程序
'''
Find Heading by using HMC5883L interface with Raspberry Pi using Python
https://www.qutaojiao.com
'''
import smbus #import SMBus module of I2C
from time import sleep #import sleep
import math
#some MPU6050 Registers and their Address
Register_A = 0 #Address of Configuration register A
Register_B = 0x01 #Address of configuration register B
Register_mode = 0x02 #Address of mode register
X_axis_H = 0x03 #Address of X-axis MSB data register
Z_axis_H = 0x05 #Address of Z-axis MSB data register
Y_axis_H = 0x07 #Address of Y-axis MSB data register
declination = -0.00669 #define declination angle of location where measurement going to be done
pi = 3.14159265359 #define pi value
def Magnetometer_Init():#write to Configuration Register A
bus.write_byte_data(Device_Address, Register_A, 0x70)
#Write to Configuration Register B for gain
bus.write_byte_data(Device_Address, Register_B, 0xa0)
#Write to mode Register for selecting mode
bus.write_byte_data(Device_Address, Register_mode, 0)
def read_raw_data(addr):#Read raw 16-bit value
high = bus.read_byte_data(Device_Address, addr)
low = bus.read_byte_data(Device_Address, addr+1)
#concatenate higher and lower value
value = ((high << 8) | low)
#to get signed value from moduleif(value > 32768):
value = value - 65536return value
bus = smbus.SMBus(1) # or bus = smbus.SMBus(0) for older version boards
Device_Address = 0x1e # HMC5883L magnetometer device address
Magnetometer_Init() # initialize HMC5883L magnetometer
print (" Reading Heading Angle")
while True:
#Read Accelerometer raw value
x = read_raw_data(X_axis_H)
z = read_raw_data(Z_axis_H)
y = read_raw_data(Y_axis_H)
余下程序:
HMC5883L输出
本教程完整程序下载:
我想知道 必须成为终生会员才能看隐藏的程序吗,还是成为季度会员、年度会员、终生会员中的一个会员就可以?
其中一个就可以哦!