HMC5883 Modulo GY-271 Magnetómetro de Brújula con Sensor de 3 Ejes

[HMC5883] HMC5883 Modulo GY-271 Magnetómetro de Brújula con Sensor de 3 Ejes

https://electrofranko.com/web/image/product.template/54331/image_1920?unique=3a3d46d

S/ 19.00 19.0 PEN S/ 19.00

S/ 19.00

Not Available For Sale

Esta combinación no existe.

Términos y condiciones
Envío: 2-3 días laborales


Referencia Interna: HMC5883

Magnetómetro Digital de 3 Ejes (HMC5883L)

Sensor magnetorresistivo de alta resolución con interfaz de comunicación I2C para sistemas de navegación y brújulas electrónicas.

El HMC5883L es un circuito integrado de montaje superficial diseñado para la detección de campos magnéticos de baja intensidad con una interfaz digital de comunicación I2C. Basado en la tecnología de sensores magnetorresistivos anisotrópicos (AMR) de Honeywell, este dispositivo permite medir con alta precisión tanto la magnitud como la dirección del campo magnético terrestre en tres ejes ortogonales ($X, Y, Z$). Su estructura interna integra un ADC de 12 bits, amplificadores de señal y registros de calibración dedicados, facilitando el cálculo preciso del rumbo (heading) con una exactitud de hasta 1° a 2° en aplicaciones de robótica, vehículos autónomos y sistemas de posicionamiento global.

Especificaciones Técnicas del Módulo

Parámetro Detalle
Tensión de Alimentación (Chip)DC 2.16 V a 3.6 V
Tensión de Módulo (Breakout)DC 3.3 V a 5.0 V (Incluye regulador)
Protocolo de ComunicaciónI2C (Dirección fija de esclavo: 0x1E)
Resolución del ADC Interno12 bits por canal
Consumo de Corriente Activo100 µA típico (Modo continuo)
Parámetro Detalle
Rangos de Escala Seleccionables±0.88, ±1.3, ±1.9, ±2.5, ±4.0, ±4.7, ±5.6, ±8.1 Ga
Resolución de Campo5 milli-gauss nominal
Tasa de Muestreo Máxima75 Hz (Configurable por registro)
Mapeo de Pines EstándarVCC, GND, SCL, SDA, DRDY (Opcional)
Tecnología del SensorMagnetorresistiva Anisotrópica (AMR)

Diagrama de Conexiones y Mapeo de Pines

Diagrama de Conexión HMC5883L

Comportamiento Dinámico y Consideraciones de Diseño

Secuencia Inusual de Almacenamiento de Datos: Al realizar una lectura ráfaga por I2C, el orden secuencial de los registros internos de datos del HMC5883L no sigue el alfabeto físico estándar; el hardware entrega primero el eje X, seguido del eje Z, y finalmente el eje Y (Direcciones de memoria 0x03 a 0x08).

Ajuste Obligatorio de Declinación Magnética: La orientación calculada con la función trigonométrica base apunta hacia el norte magnético de la Tierra. Para transformarlo al norte geográfico real, se debe compensar por software el ángulo específico de declinación de la zona local.

Vulnerabilidad a Interferencias Locales (Hard/Soft Iron): Elementos ferromagnéticos, motores de corriente continua o líneas de alta corriente cercanos al módulo distorsionan el campo electromagnético circundante, requiriendo un aislamiento físico o una matriz de calibración de compensación estática.

Código Arduino Completo y Optimizado

// Código de Control Directo para Magnetómetro de 3 Ejes HMC5883L por I2C // Configuración explícita de registros internos sin librerías externas redundantes #include <Wire.h> const int direccionHMC = 0x1E; // Dirección esclava fija I2C para el HMC5883L // Factor de escala digital para ganancia por defecto de +/- 1.3 Ga (0.92 mG/LSB) const float factorEscala = 0.92; // Declinación Magnética Local (Ajustable según ubicación geográfica) // Ejemplo para coordenadas específicas: aprox -5.5 grados -> en radianes = -0.0959 const float anguloDeclinacion = -0.0959; void setup() { Serial.begin(9600); Wire.begin(); // Registro de Configuración A (0x00): 8 muestras promedio, tasa de 15Hz Wire.beginTransmission(direccionHMC); Wire.write(0x00); Wire.write(0x70); Wire.endTransmission(); // Registro de Configuración B (0x01): Configura rango de Ganancia a +/- 1.3 Ga Wire.beginTransmission(direccionHMC); Wire.write(0x01); Wire.write(0x20); Wire.endTransmission(); // Registro de Modo (0x02): Establece modo de medición continua Wire.beginTransmission(direccionHMC); Wire.write(0x02); Wire.write(0x00); Wire.endTransmission(); Serial.println("--- Magnetómetro HMC5883L Inicializado ---"); } void loop() { // Apuntar al primer registro de datos de salida (Eje X MSB: 0x03) Wire.beginTransmission(direccionHMC); Wire.write(0x03); Wire.endTransmission(); // Solicitar los 6 bytes consecutivos de datos (X_MSB, X_LSB, Z_MSB, Z_LSB, Y_MSB, Y_LSB) Wire.requestFrom(direccionHMC, 6); if (Wire.available() >= 6) { // Lectura síncrona respetando el orden físico del buffer interno: X, Z, Y int rawX = (Wire.read() << 8) | Wire.read(); int rawZ = (Wire.read() << 8) | Wire.read(); int rawY = (Wire.read() << 8) | Wire.read(); // Conversión matemática a unidades físicas reales de campo magnético (Milli-Gauss) float campoX = rawX * factorEscala; float campoY = rawY * factorEscala; float campoZ = rawZ * factorEscala; // Cálculo trigonométrico del rumbo en el plano bidimensional X-Y float rumboRad = atan2(campoY, campoX); // Incorporación síncrona de la compensación por declinación magnética rumboRad += anguloDeclinacion; // Normalización matemática del ángulo entre un rango continuo de 0 a 2*PI radianes if (rumboRad < 0) { rumboRad += 2 * PI; } if (rumboRad > 2 * PI) { rumboRad -= 2 * PI; } // Conversión final del vector a grados sexagesimales normales float rumboGrados = rumboRad * (180.0 / PI); // Envío secuencial de parámetros calculados a la terminal serie Serial.print("Campo(mG) -> X: "); Serial.print(campoX, 1); Serial.print(" | Y: "); Serial.print(campoY, 1); Serial.print(" | Z: "); Serial.print(campoZ, 1); Serial.print(" | Rumbo Angular: "); Serial.print(rumboGrados, 1); Serial.println("°"); } // Ventana estática de retraso para emparejar la tasa de actualización de hardware (15 Hz) delay(200); }