Agregar un módulo de brújula a su microcontrolador Arduino abre una gran cantidad de posibilidades para proyectos. Aquí se explica cómo conectar uno y usarlo.

En los proyectos modernos de bricolaje, es bastante común encontrar sensores avanzados como acelerómetros y magnetómetros conectados a microcontroladores. Si bien es posible que haya utilizado estos sensores en su teléfono, es difícil imaginar cómo funcionan estos módulos, pero es sorprendentemente simple.

El sensor de magnetómetro de brújula GY-271 permite la detección de orientación para diversas aplicaciones. Aquí exploraremos el proceso de interconexión del sensor GY-271 con un microcontrolador Arduino, cómo calibrarlo y veremos los problemas que puede enfrentar al hacerlo.

¿Qué es el módulo de brújula GY-271?

El módulo de brújula GY-271 es un magnetómetro de alta sensibilidad que puede medir campos magnéticos en tres dimensiones. Se utiliza para detectar el campo magnético terrestre y determinar la dirección u orientación de los dispositivos en aplicaciones como sistemas de navegación, robótica y drones. Piense en ello como una brújula digital muy precisa. Este sensor está equipado con un diseño compacto y resistente que facilita su instalación y uso en una amplia gama de proyectos.

instagram viewer

¿Cómo funciona el módulo de brújula GY-271?

El módulo de brújula GY-271 HCM5883L contiene un sensor de magnetómetro de 3 ejes, que se basa en tecnología anisotrópica magnetorresistiva (AMR). El sensor mide la fuerza y ​​la dirección del campo magnético de la Tierra al detectar los cambios en la resistencia de sus elementos AMR internos.

Cuando el sensor se expone a un campo magnético, la resistencia de los elementos AMR cambia, generando un voltaje que es proporcional a la fuerza y ​​dirección del campo magnético. El procesador de señal digital del sensor luego convierte este voltaje en una señal digital, que puede ser leída por un microcontrolador. Al medir el voltaje en los tres ejes, el sensor puede proporcionar lecturas muy precisas de la fuerza y ​​dirección del campo magnético en tres dimensiones.

Conexión del GY-271 a un Arduino Uno

Conectar este módulo al Arduino es bastante sencillo. También hemos cubierto otros Módulos Arduino fáciles de usar que pueden ayudar a escalar su proyecto en el futuro. El módulo GY-271 tiene un total de cinco pines, incluidos CCV, TIERRA, y tres pines de señal (ASD, SCL, y DRDY).

Necesitarás los siguientes componentes:

  • Módulo de brújula GY-271 HMC5883L
  • Arduino Uno (u otro modelo)
  • Cables puente (macho a macho y macho a hembra)
  • Protoboard (opcional)

Primero, conecte el CCV y TIERRA pines del módulo GY-271 al 5V y TIERRA pines del Arduino Uno, respectivamente.

A continuación, conecte el ASD y SCL pines del módulo al A4 y A5 pines analógicos del Arduino Uno, respectivamente.

Instalación de las bibliotecas necesarias

Antes de que pueda comenzar a trabajar con el módulo de brújula GY-271 y Arduino, debe instalar las bibliotecas necesarias para comunicarse con el sensor.

La primera biblioteca que debe incluir en su boceto es la biblioteca Wire, que se utiliza para la comunicación I2C entre Arduino y el sensor. La biblioteca Wire viene preinstalada con el IDE de Arduino, por lo que no necesita descargarla por separado. Para instalar el segundo, el HMC5883L biblioteca, deberá seguir estos pasos:

Abra el IDE de Arduino y vaya a Bosquejo > Incluir biblioteca > Administrar bibliotecas.

En el Administrador de bibliotecas, busque HMC5883L en la barra de búsqueda.

Selecciona el HMC5883L biblioteca específicamente de Adafruit. Una vez que la biblioteca está instalada, puede incluirla en su boceto de Arduino yendo a Bosquejo > Incluir biblioteca > HMC5883L.

Comprender el código

Debe escribir un programa que inicialice el sensor, lea sus datos y calcule la fuerza y ​​​​la dirección del campo magnético de la Tierra. El código completo se puede descargar de nuestro sitio web oficial. repositorio GitHub.

Al comienzo del código, debe incluir las bibliotecas necesarias que acaba de descargar.

#incluir
#incluir
#incluir

No olvide asignar una identificación única al sensor. Use esta línea para hacer eso:

Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

En el código de configuración, inicie el monitor en serie y verifique si el sensor está respondiendo. Puede imprimir mensajes en el monitor para actualizar el estado del sensor:

vacíoconfiguración(vacío)
{
De serie.comenzar(9600);
De serie.imprimir("Prueba de magnetómetro HMC5883"); De serie.imprimir("");

/* Inicializar el sensor */
si(!revista.comenzar())
{
De serie.imprimir("Vaya, no se detectó ningún HMC5883... ¡Revise su cableado!");
mientras(1);
}
}

En el bucle, primero, obtenga un nuevo evento de sensor:

sensores_event_t evento;
mag.getEvent(&evento);

Luego muestre las lecturas del sensor al monitor serial. No olvide establecer la tasa de baudios en 9600​​​​.

De serie.imprimir("X: "); De serie.imprimir(evento.magnético.x); De serie.imprimir(" ");
De serie.imprimir("Y:"); De serie.imprimir(evento.magnético.y); De serie.imprimir(" ");
De serie.imprimir("Z:"); De serie.imprimir(evento.magnético.z); De serie.imprimir(" ");De serie.imprimir("Utah");

Sostenga el módulo de modo que Z apunta "hacia arriba" y mida el rumbo con X y Y. Al hacer esto, puede calcular el rumbo cuando el magnetómetro esté nivelado. Esta línea de código ayuda con eso:

flotar encabezado = atan2(evento.magnético.y, evento.magnético.x);

Una vez que tenga su título, luego debe agregar su ángulo de declinación, que es el error del campo magnético en tu ubicación.

flotar ángulo de declinación = 0.663;
 rumbo += ángulo de declinación;

Puede encontrar convenientemente el ángulo de declinación de su área local en el Sitio web de declinación magnética. Si por alguna razón no puede encontrar su ángulo de declinación, comente las dos líneas de su código.

Comentar las dos líneas de código puede resultar en lecturas defectuosas del sensor. Haga todo lo posible para calibrar el sensor antes de usarlo.

Finalmente, imprima el encabezado en el monitor serial y agregue un retraso para esperar medio segundo antes de volver a leer.

De serie.imprimir("Rúbrica (grados): ");
De serie.imprimir(títuloGrados);
demora(500);

Desde aquí, puede personalizar el código para adaptarlo a las necesidades de su proyecto y agregar funciones adicionales, como el registro de datos.

Si prefiere utilizar la biblioteca de Adafruit, le recomendamos obtenerla de Repositorio GitHub de Adafruit.

Lectura e interpretación de datos de la brújula

Los datos del sensor que se muestran en el monitor en serie muestran los valores del vector de campo magnético medidos por el magnetómetro en microteslas (μT) para los ejes X, Y y Z, respectivamente. Estos valores se pueden utilizar para determinar la orientación y la magnitud del campo magnético.

El valor de rumbo que se muestra en grados también es importante y representa la dirección del polo norte magnético en relación con la posición del sensor. Esta lectura se puede utilizar en proyectos en los que es necesario determinar la dirección de un objeto en movimiento, como en sistemas de robótica, navegación y geolocalización.

Calibración de sensores

Si ya instaló una biblioteca diferente para el módulo HMC5883L, deberá desinstalarla o eliminarla. De lo contrario, puede obtener errores de compilación o ver advertencias en su monitor serie durante la calibración. Recomendamos usar la biblioteca de jarzebski disponible en GitHub ya que tiene los recursos de calibración completos necesarios para esta sección.

Primero, descargue el archivo zip del repositorio haciendo clic en Código > Descargar ZIP.

A continuación, abra el IDE de Arduino y haga clic en Bosquejo > Incluir biblioteca > Añadir biblioteca.

Selecciona el Arduino-HMC5883 zip que acaba de descargar, y el IDE de Arduino instalará la biblioteca automáticamente por usted.

Ejecute el boceto de calibración disponible en el repositorio mientras mueve el sensor sobre una superficie plana al cargarlo. Los valores obtenidos del monitor en serie son los valores de compensación de su sensor, que puede usar para corregir sus lecturas mientras usa la brújula durante sus proyectos.

Problemas con los que te puedes encontrar

Hay varios errores con los que alguien puede encontrarse al conectar el módulo de brújula con Arduino. Aquí hay algunos ejemplos y sus soluciones:

Errores de compilación: Estos pueden ocurrir si no se incluyen las bibliotecas necesarias o si hay errores de sintaxis en el código. Para solucionar esto, asegúrese de haber instalado las bibliotecas correctas y verifique su código en busca de errores de sintaxis. Como hemos visto muchas veces, es posible que haya instalado accidentalmente varias bibliotecas HCM5883L.

Error de compilación: 'Adafruit_HMC5883_Unificado' hace no nombrar un tipo

Errores de comunicación: Si no puede comunicarse con el módulo de la brújula, asegúrese de haberlo conectado a los pines correctos en su Arduino y que su cableado sea correcto. También es posible que deba ajustar la dirección I2C del módulo en su código si es diferente de la predeterminada, que es 0x1E.

Error usando hmc5883l/dispositivo de prueba (línea246) Error de comunicación con el sensor HMC5883L. El valor leer de ID_A, ID_B y Registros ID_C hacerno coincidir con los valores esperados.

Interferencia magnética: Si las lecturas de la brújula son inestables o fluctúan, puede deberse a interferencias magnéticas de objetos cercanos. Aleje el módulo de cualquier imán u otra fuente de interferencia magnética para obtener lecturas más estables.

Mejora tus proyectos con el módulo de brújula GY-271

Ser capaz de usar el módulo de brújula GY-271 HCM5883L abre una puerta para construir proyectos de bricolaje más complejos usando Arduino, como rovers guiados por GPS y drones de bricolaje. Las posibilidades son infinitas, especialmente cuando agrega otros sensores.