Entrega rápida
Condiciones de descuento para empresas
Hasta un 10% de descuento para alumnos, estudiantes y centros de enseñanza
Envío a toda Europa por €4.90
Cerrar filtro
Filtrar por:

El módulo MPU-6050: Giroscopio y acelerómetro

Hay pocos módulos en el mercado que hayan provocado tanto revuelo en los últimos meses como el módulo MPU-6050. Esta placa "dos en uno" combina dos funciones de sensor muy populares: El módulo puede utilizarse como giroscopio y como sensor de aceleración al mismo tiempo.

¿Cómo? El sensor incluye un giroscopio de 3 ejes y un acelerómetro de 3 ejes en un mismo chip. Esto significa que puede consultar todos (!) los valores del sensor al mismo tiempo. Esto significa que los aficionados siempre están bien informados sobre la posición actual del sensor. Esta función es especialmente interesante para la construcción de maquetas, sobre todo para equilibrar chasis o drones.
Además, se puede acceder a magnetómetros externos u otros sensores a través de un bus I2C maestro adicional, de modo que estos datos de los sensores también se pueden registrar completamente. 

Los datos de los sensores del MPU-6050 (GY-521) de un vistazo:

  • Chipset: MPU-6050 (también conocido como GY-521)
  • Fuente de alimentación: 3,3 - 5 V CC
  • Línea de libertad: 6
  • Interfaz: I2C
  • Distancia entre pines: 2,54 mm

Ahora llegamos a la parte emocionante: la práctica. Para que tengas una buena visión general de las útiles funciones del módulo MPU-6050, hemos desarrollado para ti un esquema de circuito de ejemplo. Un Funduino UNO R3 lee el módulo MPU-6050 y evalúa los datos registrados.

Nos interesan sobre todo los datos del sensor del giroscopio. Queremos leer los valores de los ejes X, Y y Z y determinar si se ha producido un cambio en la posición del sensor. El cambio de posición se nos mostrará mediante LEDs de colores.

Esquema del circuito MPU-6050 GY-521

Hasta aquí todo bien, pero ¿cómo lo hacemos?

El código del programa del módulo MPU-6050

Ha llegado la hora de la verdad: bueno, la mitad. Primero tenemos que descargar la biblioteca adecuada para el módulo MPU6050 e integrarla en nuestro IDE Arduino. La biblioteca se llama "<MPU6050_tockn.h>" y se puede encontrar e instalar directamente a través de la gestión de bibliotecas del IDE de Arduino.

Tras este primer paso, empezamos con el código propiamente dicho. En primer lugar, definimos las conexiones para nuestros LEDs, que nos servirán como indicadores de la posición del eje. Después definimos dos variables para la posición de cada uno de los tres ejes. 

Probablemente te preguntes por qué necesitamos dos variables por eje. Como queremos determinar si la posición del eje respectivo ha cambiado, primero debemos determinar qué valor ha registrado el sensor para la posición actual. Guardamos este valor del sensor del MPU-6050 durante un breve periodo de tiempo en la primera variable.
El valor de la posición del eje se guarda de nuevo en la segunda variable un poco más tarde. Ahora podemos comparar entre sí los dos valores medidos registrados. En la medida en que se haya registrado una desviación de la posición por un mínimo previamente definido (+-3 en nuestro código de ejemplo), podemos suponer que el sensor ha modificado la posición. En este caso, encendemos el LED asignado. 

Especialmente agradable: los datos de medición capturados se pueden visualizar bien en el trazador en serie del IDE de Arduino.

// Este sketch compara los ángulos de los ejes X/Y/Z con los valores anteriores.
// Si difieren en +/-3°, el sketch conmuta los LEDs. (cada.1 para POS o para NEG)
// Atención: No se trata de valores absolutos, sino de valores RELATIVOS comparados con la medición anterior
#include <MPU6050_tockn.h> // Incluir bibliotecas
#include <Wire.h > // <-
MPU6050 mpu6050(Alambre, 0,1, 0,1); //  Amortiguación de los valores. Cuanto más pequeños (dirección "0"), más nerviosos son los valores
// cuanto más grandes (dirección "1"), más nerviosos los valores
const int ledXpos =2; //***
const int ledXneg =3; //*
const int ledYpos =4; // *  Establecer las conexiones del LED
const int ledYneg =5; //*
const int ledZpos =6; //*
const int ledZneg =7; //***
int xPosAhora; //  variable POS X ACTUAL
int yNowPos; // Variable  Y-PosACTUAL
int zPosAhora; // Variable  POS-ZACTUAL
int xPrePos; // Variable POS X  ANTERIOR
int yPrePos; // Variable Y-Pos  ANTERIOR
int zPrePos; // Variable  ANTERIORZ-Pos
int diferencia = 3;
void setup() {                  // Beginn Setup-Funktion
Serial.begin(115200);         // Öffne serielle Übertragung (115200Baud) !!! Am Monitor ebenfalls einstellen !!!
pinMode(ledXpos, OUTPUT);     //***
pinMode(ledXneg, OUTPUT);     //  *
pinMode(ledYpos, OUTPUT);     //  * Festlegen dass LED-Anschlüsse Ausgänge sind
pinMode(ledYneg, OUTPUT);     //  *
pinMode(ledZpos, OUTPUT);     //  *
pinMode(ledZneg, OUTPUT);     //***
Wire.begin();                 // Beginn I2C Protokoll
mpu6050.begin();              // Start des Gyros
mpu6050.calcGyroOffsets();    // Gyro kalkuliert seine Offsets !!! Währenddessen ruhig liegen lassen !!!
// Benutze mpu6050.calcGyroOffsets(true), um es im seriellen Monitor zu verfolgen.
delay(1000);                    // Darauf warten wir...
}
void bucle() { // inicio del bucle bucle
mpu6050.update(); // Crea un nuevo conjunto de datos en el giroscopio
xNowPos=(mpu6050.getGyroAngleX()); // Solicita un nuevo conjunto de datos al giroscopio, escribe en la variable X
yNowPos=(mpu6050.getGyroAngleY()); // Solicitar un nuevo conjunto de datos al giroscopio, escribir en la variable  Y
zPosAhora=(mpu6050.getÁnguloGiroZ()); // Solicitar un nuevo conjunto de datos al  giroscopio, escribir en la variable Z
if (xNowPos < xPrePos-(diferencia)) // Compara el conjunto de datos antiguo con el nuevo. Diferencia < -3 ?
{digitalWrite(ledXpos, LOW); digitalWrite(ledXneg, HIGH);} // Entonces cambia los LEDs en consecuencia
else if (xNowPos > xVorPos+(diferencia)) // Compara el conjunto de  datosantiguo con el nuevo.  ¿Diferencia < +3 ?
{digitalWrite(ledXpos, HIGH); digitalWrite(ledXneg, LOW);} // Conecta los LEDs según corresponda
else // O apaga todos los LEDs X...
{digitalWrite(ledXpos, LOW); digitalWrite(ledXneg, LOW);} // Entonces enciende los LEDs según corresponda
if (yNowPos < yPrePos-(diferencia)) // Compara el conjunto de datos antiguo con el nuevo. Diferencia < -3 ?
{digitalWrite(ledYpos, LOW); digitalWrite(ledYneg, HIGH);} // Conecta los LEDs según corresponda
else if (yNowPos > yVorPos+(diferencia)) // Compara el conjunto de datos antiguo  conel nuevo.  ¿Diferencia < +3 ?
{digitalWrite(ledYpos, HIGH); digitalWrite(ledYneg, LOW);} // Conecta los LEDs según corresponda
else // O apaga todos los LEDs Y...
{digitalWrite(ledYpos, LOW); digitalWrite(ledYneg, LOW);} // Entonces enciende los LEDs según corresponda
if (zNowPos < zPrePos-(diferencia)) // Compara el conjunto de datos antiguo con el nuevo. Diferencia < -3 ?
{digitalWrite(ledZpos, LOW); digitalWrite(ledZneg, HIGH);} // Conecta los LEDs según corresponda
else if (zNowPos > zPrePos+(diferencia)) // Compara el conjunto de datos antiguo  conel nuevo.  ¿Diferencia < +3 ?
{digitalWrite(ledZpos, HIGH); digitalWrite(ledZneg, LOW);} // Conecta los LEDs según corresponda
else // O apaga todos los LEDs Z...
{digitalWrite(ledZpos, LOW); digitalWrite(ledZneg, LOW);} // Entonces enciende los LEDs según corresponda
xVorPos=xJetztPos; // Actualiza el  conjunto de datos antiguos (hasta ahora)
yVorPos=yJetztPos; // Actualiza el conjunto de datos antiguos (hasta ahora )
zVorPos=zJetztPos; // Actualiza el  registroantiguo (hasta ahora)
// Luego, en la siguiente ejecución, se puede volver a comparar con el "antes"
Serial.print(xAhoraPos); // >> trazador serie<< ortografía justa [salida X]
Serial.print("");Serial.print(yJetztPos); // (" ") = (\t) = Nuevo color [salida Y]
Serial.print("");Serial.println(zJetztPos); // (" ")= (\t) = Nuevo color [salida Z]
delay(15); // (un retardo mínimo calma la salida serie)
} // fin del bucle
// Siéntete libre de experimentar un poco con la amortiguación en la tercera línea del programa
//-> MPU6050 mpu6050(Alambre, 0,3, 0,3);
// o con el delay() del final. Luego observa los valores en el >>PLOTTER serial <<
Temas: #arduino, #wissen
Introduce la cadena en el campo de texto de abajo.

Los campos marcados con * son obligatorios.

Artículos coincidentes
Microcontrolador Funduino UNO R3 - Compatible con Arduino Microcontrolador Funduino UNO R3 - Compatible...
Contenido 1 Stück
13,90 € *
Nº de artículo F23107480
Añade
Módulo MPU-6050 - sensor de aceleración triaxial, giroscopio Módulo MPU-6050 - sensor de aceleración...
Contenido 1 Stück
3,62 € *
Nº de artículo F23107397
Añade
100 piezas - LEDs de 5 mm de diámetro (5 colores) 100 piezas - LEDs de 5 mm de diámetro (5 colores)
Contenido 1 Stück
1,97 € *
Nº de artículo F23107316
Añade
100 Widerstände - Je 20x 100 Ohm, 200 Ohm, 330 Ohm, 1K Ohm, 10K Ohm 100 Widerstände - Je 20x 100 Ohm, 200 Ohm, 330...
Contenido 1 Stück
1,72 € *
Nº de artículo F23107216
Añade