INFORMACIÓN
El HMC5883L Módulo es un Magnetómetro de tres ejes (X, Y y Z) de cinco pines, que trabaja con protocolo de comunicación I2C y un rango de medición desde ± 1.3 hasta 8 gauss, cuenta con dos modos de medición (continua y única), se alimenta con voltaje de 3.3 o 5V.
El HMC5883L Módulo es útil en proyectos de robótica, drones, juegos, simuladores y en general para determinar la dirección en la que se está moviendo un dispositivo o vehículo. Para consultar otros modelos de sensores de movimiento puedes dar clic aquí.
Nota: Este sensor es compatible con las funciones del QMC5883L, solo es necesario cambiar la librería.
ESPECIFICACIONES Y CARACTERÍSTICAS
- Tipo: Sensor de Magnetómetro
- Matricula: HMC5883L
- Voltaje de alimentación: 3.3 o 5 VDC
- Corriente de operación: 100 µA
- Tasa de salida:
- Modo Continuo: 75 Hz
- Modo único: 160 Hz
- Rango de medición: ± 1.3 hasta 8 gauss
- Protocolo de comunicación: I2C
- Dimensiones: 18.3 x 13.7 x 1.4 mm
- Peso: 1.04g
DOCUMENTACIÓN Y RECURSOS
INFORMACIÓN ADICIONAL
Para comprobar el funcionamiento de tu módulo puedes utilizar el siguiente circuito:

Una vez que hayas realizado las conexiones, descarga e instala las librerías:
Carga el siguiente código para observar las lecturas del módulo en el monitor Serial del IDE de Arduino.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
//Asignación de un ID único al sensor
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
void displaySensorDetails(void)
{
//Datos de la Datasheet
sensor_t sensor;
mag.getSensor(&sensor);
Serial.println("------------------------------------");
Serial.print ("Sensor: "); Serial.println(sensor.name); //Nombre del sensor
Serial.print ("Driver Ver: "); Serial.println(sensor.version); //Version del Sensor
Serial.print ("Unique ID: "); Serial.println(sensor.sensor_id); //ID del sensor
Serial.print ("Max Value: "); Serial.print(sensor.max_value); Serial.println(" uT"); //Rango máximo del Sensor
Serial.print ("Min Value: "); Serial.print(sensor.min_value); Serial.println(" uT"); //Rango mínimo del Sensor
Serial.print ("Resolution: "); Serial.print(sensor.resolution); Serial.println(" uT"); //Resolución del Sensor
Serial.println("------------------------------------");
Serial.println("");
delay(500);
}
void setup(void)
{
//Inicio del monitor serial
Serial.begin(9600);
Serial.println("HMC5883 Magnetometer Test"); Serial.println("");
//inicialización del sensor
if(!mag.begin())
{
//Si no se detecta el sensor se obtiene el siguiente mensaje
Serial.println("Ooops, no se ha detectado un sensor HMC5883... Revisa tu conexión");
while(1);
}
//Se muestran los datos del Datasheet del Sensor
displaySensorDetails();
}
void loop(void)
{
//Se obtiene un nuevo Evento del sensor
sensors_event_t event;
mag.getEvent(&event);
// Se muetsran los resultados en Micro Tesla (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");
//Sostén el módulo con Z apuntando hacia arriba de manera que se pueda medir la trayectoria de X y Y
//Calcula la trayectoria cuando el sensor este nivelado y luego corrige los signos del eje.
float heading = atan2(event.magnetic.y, event.magnetic.x);
//Una vez que tengas la trayectoria agrega tu ángulo de declinación, que es el error del sensor en tu ubicación.
//Si no conoces tu ángulo de declinación puedes encontrarlo aquí: http://www.magnetic-declination.com/
//Debes convertir el ángulo en radianes para poder colocar el valor en las siguientes líneas.
//Si no logras encontrar tu ángulo de declinación, comenta las siguientes dos líneas, tu brújula estará ligeramente desviada.
float declinationAngle = 0.06;
heading += declinationAngle;
//Corrige si los signos están invertidos
if(heading < 0)
heading += 2*PI;
//Comprueba si hay wrap debido a la adición de declinación.
if(heading > 2*PI)
heading -= 2*PI;
//Convierta radianes a grados para facilitar la lectura
float headingDegrees = heading * 180/M_PI;
Serial.print("Heading (degrees): "); Serial.println(headingDegrees);
delay(500);
}






















Valoraciones
No hay valoraciones aún.