0°

(三)树莓派进阶:三轴电子数字罗盘HMC5883L与Raspberry Pi连接

介绍

(三)树莓派进阶:三轴电子数字罗盘HMC5883L与Raspberry Pi连接

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

电路连接图

(三)树莓派进阶:三轴电子数字罗盘HMC5883L与Raspberry Pi连接

磁力计与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轴寄存器原始值。

使用以下公式计算标题值,

(三)树莓派进阶:三轴电子数字罗盘HMC5883L与Raspberry Pi连接

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输出

(三)树莓派进阶:三轴电子数字罗盘HMC5883L与Raspberry Pi连接

本教程完整程序下载:

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论