Tabla de contenido:
2025 Autor: John Day | [email protected]. Última modificación: 2025-01-23 14:40
¡Hola! En este instructivo, verá cómo puede hacer una brújula digital usando un Arduino y el IDE de procesamiento. Este es un proyecto Arduino bastante simple pero interesante y atractivo.
Puede ver el ejemplo de demostración de este tutorial en el video de arriba. Siempre puedes encontrar videos más interesantes como este en mi canal de YouTube, así como también encontrar muchos proyectos de electrónica y tutoriales en mi sitio web, HowToMechatronics.com.
Paso 1: Piezas necesarias
Para este proyecto, solo necesitará una placa Arduino y un magnetómetro MEMS, para medir el campo magnético terrestre. Usaré la placa de conexión GY-80 que contiene el magnetómetro MC5883L de 3 ejes.
Antes de continuar con el código fuente del proyecto. Si necesita más detalles sobre cómo funciona el magnetómetro MEMS y cómo conectar y utilizar la placa de conexión GY - 80 a través de la comunicación I2C, puede consultar mis tutoriales particulares para ello.
Paso 2: Código fuente de Arduino
Lo que debemos hacer primero es cargar un boceto en la placa Arduino que leerá los datos del magnetómetro y lo enviará al IDE de procesamiento. Aquí está el código fuente de Arduino:
/ * Arduino Compass * * de Dejan Nedelkovski, * www. HowToMechatronics.com * * /
#include // Biblioteca Arduino I2C
#define Magnetometer_mX0 0x03
#define Magnetometer_mX1 0x04 #define Magnetometer_mZ0 0x05 #define Magnetometer_mZ1 0x06 #define Magnetometer_mY0 0x07 #define Magnetometer_mY1 0x08
int mX0, mX1, mX_out;
int mY0, mY1, mY_out; int mZ0, mZ1, mZ_out;
título flotante, títuloGrados, encabezadoFiltrado, declinación;
flotar Xm, Ym, Zm;
#definir Magnetómetro 0x1E // I2C Dirección de 7 bits de HMC5883
configuración vacía () {
// Inicializar las comunicaciones Serial e I2C Serial.begin (115200); Wire.begin (); retraso (100); Wire.beginTransmission (magnetómetro); Wire.write (0x02); // Seleccionar modo de registro Wire.write (0x00); // Modo de medición continua Wire.endTransmission (); }
bucle vacío () {
// ---- X-Axis Wire.beginTransmission (Magnetómetro); // transmitir al dispositivo Wire.write (Magnetometer_mX1); Wire.endTransmission (); Wire.requestFrom (magnetómetro, 1); if (Wire.available () <= 1) {mX0 = Wire.read (); } Wire.beginTransmission (magnetómetro); // transmitir al dispositivo Wire.write (Magnetometer_mX0); Wire.endTransmission (); Wire.requestFrom (magnetómetro, 1); if (Wire.available () <= 1) {mX1 = Wire.read (); }
// ---- Eje Y
Wire.beginTransmission (magnetómetro); // transmitir al dispositivo Wire.write (Magnetometer_mY1); Wire.endTransmission (); Wire.requestFrom (magnetómetro, 1); if (Wire.available () <= 1) {mY0 = Wire.read (); } Wire.beginTransmission (magnetómetro); // transmitir al dispositivo Wire.write (Magnetometer_mY0); Wire.endTransmission (); Wire.requestFrom (magnetómetro, 1); if (Wire.available () <= 1) {mY1 = Wire.read (); } // ---- Cable del eje Z.beginTransmission (magnetómetro); // transmitir al dispositivo Wire.write (Magnetometer_mZ1); Wire.endTransmission (); Wire.requestFrom (magnetómetro, 1); if (Wire.available () <= 1) {mZ0 = Wire.read (); } Wire.beginTransmission (magnetómetro); // transmitir al dispositivo Wire.write (Magnetometer_mZ0); Wire.endTransmission (); Wire.requestFrom (magnetómetro, 1); if (Wire.available () <= 1) {mZ1 = Wire.read (); } // ---- Eje X mX1 = mX1 << 8; mX_out = mX0 + mX1; // Datos brutos // De la hoja de datos: 0.92 mG / dígito Xm = mX_out * 0.00092; // Unidad de Gauss // * El campo magnético de la Tierra varía de 0,25 a 0,65 Gauss, por lo que estos son los valores que necesitamos obtener aproximadamente.
// ---- Eje Y
mY1 = mY1 << 8; mY_out = mY0 + mY1; Ym = mY_out * 0,00092;
//---- Eje Z
mZ1 = mZ1 <0.073 rad declinación = 0.073; rumbo + = declinación; // Corregir cuando los signos son reverenciados if (rumbo <0) rumbo + = 2 * PI;
// Corrección por adición del ángulo de declinación
si (rumbo> 2 * PI) rumbo - = 2 * PI;
headerDegrees = rumbo * 180 / PI; // El encabezado en la unidad de grados
// Suavizar el ángulo de salida / filtro de paso bajo
encabezadoFiltrado = encabezadoFiltrado * 0.85 + encabezadoDegrados * 0.15;
// Envío del valor del encabezado a través del puerto serie al IDE de procesamiento
Serial.println (headerFiltered);
retraso (50); }
Paso 3: procesamiento del código fuente IDE
Después de haber cargado el boceto de Arduino anterior, necesitamos recibir los datos en el IDE de procesamiento y dibujar la brújula digital. La brújula se compone de una imagen de fondo, una imagen fija de la flecha y una imagen giratoria del cuerpo de la brújula. Entonces, los valores para el campo magnético de la tierra calculados con el Arduino se utilizan para rotar la brújula.
Aquí está el código fuente del IDE de procesamiento:
/ * Arduino Compass * * de Dejan Nedelkovski, * www. HowToMechatronics.com * * / import processing.serial. *; import java.awt.event. KeyEvent; import java.io. IOException;
Serial myPort;
PImage imgCompass; PImage imgCompassArrow; Fondo de PImage;
String data = "";
rumbo flotante;
configuración vacía () {
tamaño (1920, 1080, P3D); liso(); imgCompass = loadImage ("Compass.png"); imgCompassArrow = loadImage ("CompassArrow.png"); background = loadImage ("Fondo.png"); myPort = new Serial (este, "COM4", 115200); // inicia la comunicación serial myPort.bufferUntil ('\ n'); }
vacío dibujar () {
imagen (fondo, 0, 0); // Carga la imagen de fondo pushMatrix (); traducir (ancho / 2, alto / 2, 0); // Traduce el sistema de coordenadas al centro de la pantalla, de modo que la rotación ocurra justo en el centro rotateZ (radianes (-heading)); // Gira la brújula alrededor de la imagen del eje Z (imgCompass, -960, -540); // Carga la imagen de Compass y, a medida que se reubica el sistema de coordenadas, necesitamos establecer la imagen en -960x, -540y (la mitad del tamaño de la pantalla) popMatrix (); // Hace que el sistema de coordenadas vuelva a la posición original 0, 0, 0 image (imgCompassArrow, 0, 0); // Carga la imagen CompassArrow que no se ve afectada por la función rotateZ () debido a la función popMatrix () textSize (30); texto ("Encabezado:" + encabezado, 40, 40); // Imprime el valor del encabezado en la pantalla
retraso (40);
}
// comienza a leer datos del puerto serie
void serialEvent (Serial myPort) {data = myPort.readStringUntil ('\ n'); // lee los datos del puerto serie y los coloca en la variable String "datos". rumbo = flotante (datos); // Conversión del valor de cadena en valor flotante}
Espero que les guste este proyecto. Si es así, también puedes visitar mi sitio web para ver más proyectos interesantes.
Recomendado:
Brújula digital y buscador de rumbo: 6 pasos
Brújula digital y buscador de rumbo: Autores: Cullan Whelan Andrew Luft Blake Johnson Agradecimientos: Academia Marítima de California Evan Chang-Siu Introducción: La base de este proyecto es una brújula digital con seguimiento de rumbo. Esto permite al usuario seguir un rumbo a gran distancia
Tutorial para conectar el sensor de brújula HMC5883L con Arduino: 10 pasos (con imágenes)
Tutorial para conectar el sensor de brújula HMC5883L con Arduino: Descripción HMC5883L es una brújula digital de 3 ejes que se utiliza para dos propósitos generales: medir la magnetización de un material magnético como un ferromaimán, o medir la fuerza y, en algunos casos, la dirección del campo magnético en un punto en s
Brújula digital con Arduino y magnetómetro HMC5883L: 6 pasos
Brújula digital usando Arduino y magnetómetro HMC5883L: Hola chicos, este sensor podría indicar el norte, sur, este y oeste geográficos, los humanos también podríamos usarlo en ocasiones cuando sea necesario. Entonces. En este artículo, intentemos comprender cómo funciona el sensor de magnetómetro y cómo conectarlo con un microcontro
Cómo usar el módulo GY511 con Arduino [Hacer una brújula digital]: 11 pasos
Cómo usar el módulo GY511 con Arduino [Hacer una brújula digital]: Descripción general En algunos proyectos de electrónica, necesitamos conocer la ubicación geográfica en cualquier momento y realizar una operación específica en consecuencia. En este tutorial, aprenderá a usar el módulo de brújula LSM303DLHC GY-511 con Arduino para hacer una brújula digital
Brújula Arduino DIY: 6 pasos
Brújula Arduino DIY: todos sabemos qué es una brújula y para qué se utiliza. La brújula nos dice las direcciones, es decir, E-W-N-S. Brújula tradicional trabajada con una aguja magnética en el medio. El polo norte de la aguja siempre apunta hacia el polo norte geográfico de la tierra con