Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Lab DSM Practica#3 1914362

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 10

UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN

FACULTAD DE INGENIERÍA MECÁNICA Y


ELÉCTRICA.

Laboratorio de diseño de sistemas mecatrónicos

Practica 3: Calibrando nuestro


MPU6050

NOMBRE DEL ESTUDIANTE: Jesús Antonio Zarate Rodríguez


MATRICULA: 1914362
CARRERA: IMTC
Grupo: 316
DOCENTE: Dante Ferreyra Méndez
SEMESTRE: Agosto – -Diciembre 2024
Introducción
La presente practica tiene como principal objetivo la calibración de un MPU6050 y
con ello la obtención de distintos resultados requeridos para la solución de esta
practica, como primer punto en esta practica se redactan las definiciones de
algunas palabras que debemos tener encuentra de que son y como estos pueden
ser utilizados. Posteriormente pasaremos al calibra miento del acelerómetro y
giroscopio donde diremos los pasos mas importantes.
EL MPU6050 es una unidad de medición inercial o IMU (Inertial Measurment
Units) de 6 grados de libertad (DoF) pues combina un acelerómetro de 3 ejes y un
giroscopio de 3 ejes. Este sensor es muy utilizado en navegación, goniometría,
estabilización, etc.
Sensor Giroscópico
Un giroscopio es un dispositivo que funciona para miden velocidades angulares
basándose en el mantenimiento del impulso de rotación. Si intentamos hacer girar
un objeto que está girando sobre un eje que no es el eje sobre el que está
rotando, el objeto ejercerá un momento contrario al movimiento con el fin de
preservar el impulso de rotación total.

Acelerómetro
Mide la aceleración, inclinación o vibración y transforma la magnitud física de
aceleración en otra magnitud eléctrica que será la que emplearemos en los
equipos de adquisición estándar. Los rangos de medida van desde las décimas de
g, hasta los miles de g.
El circuito integrado MPU-6050 contiene un acelerómetro y giroscopio MEMS en
un solo empaque. Cuenta con una resolución de 16-bits, lo cual significa que
divide el rango dinámico en 65536 fracciones, estos aplican para cada eje X, Y y Z
al igual que en la velocidad angular..
Objetivo
El objetivo de la presente practica es calibrar el MPU6050 para que su sensor se
encuentre en una posición 100% horizontal para que posteriormente este pueda
funcionar correctamente y con ello nos proporcione lo datos correctos mediante
una programación de arduinio.

MÉTODOS Y MATERIALES.
 Primero vamos a iniciar armando nuestro circuito en el protoboard, como se
indica a continuación.
 Colocar el ATMEGA328P en el centro del protoboard
 Colocar ambas resistencias en las siguientes coordenadas del protoboard.
 RES 10K: (+,2) (A,4) RES 47K: (H,18) (H,22)
 Insertar los capacitores en las siguientes coordenadas del protoboard.
 CAP1 22pf: (E,18) (E,20) CAP2 22pf: (E,26) (E,28) CAP3 .1mf: (E,1) (E,3)
CAP4 10uf: (+,19) (-19)
 Colocar el cristal 16Mhz en las coordenadas (E,22) (E,24).
 Insertar el diodo 1N4001 en las coordenadas (H,29) (H,33).
 Colocar el regulador de voltaje LM7805 colocando los 3 pines en sus
respectivas coordenadas.
 PIN1(input voltage): (J,29) PIN2(gnd): (J,30) PIN3(output voltaje): (J,31)
 Colocar el transistor 2N2222 colocando los 3 pines en sus respectivas
coordenadas.
 PIN1(colector): (J,21) PIN2(base): (J,22) PIN3(emisor): (J,23)
 Colocar el LED en las coordenadas (J,24) (J,25).
Lista de materiales
Codigo utlizado
// Librerias I2C para controlar el mpu6050
// la libreria MPU6050.h necesita I2Cdev.h, I2Cdev.h necesita Wire.h
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
// La dirección del MPU6050 puede ser 0x68 o 0x69, dependiendo
// del estado de AD0. Si no se especifica, 0x68 estará implicito
MPU6050 sensor;
// Valores RAW (sin procesar) del acelerometro y giroscopio en los ejes x
,y,z
int ax, ay, az;
int gx, gy, gz;
//Variables usadas por el filtro pasa bajos
long f_ax,f_ay, f_az;
int p_ax, p_ay, p_az;
long f_gx,f_gy, f_gz;
int p_gx, p_gy, p_gz;
int counter=0;
//Valor de los offsets
int ax_o,ay_o,az_o;
int gx_o,gy_o,gz_o;
void setup() {
Serial.begin(57600); //Iniciando puerto serial
Wire.begin(); //Iniciando I2C
sensor.initialize(); //Iniciando el sensor
if (sensor.testConnection()) Serial.println("Sensor iniciado
correctamente"););
// Leer los offset los offsets anteriores
ax_o=sensor.getXAccelOffset();
ay_o=sensor.getYAccelOffset();
az_o=sensor.getZAccelOffset();
gx_o=sensor.getXGyroOffset();
gy_o=sensor.getYGyroOffset();
gz_o=sensor.getZGyroOffset();
Serial.println("Offsets:");
Serial.print(ax_o); Serial.print("\t");
Serial.print(ay_o); Serial.print("\t");
Serial.print(az_o); Serial.print("\t");
Serial.print(gx_o); Serial.print("\t");
Serial.print(gy_o); Serial.print("\t");
Serial.print(gz_o); Serial.print("\t");
Serial.println("nnEnvie cualquier caracter para empezar la
calibracionnn");
// Espera un caracter para empezar a calibrar
while (true){if (Serial.available()) break;}
Serial.println("Calibrando, no mover IMU");
}
void loop() {
// Leer las aceleraciones y velocidades angulares
sensor.getAcceleration(&ax, &ay, &az);
sensor.getRotation(&gx, &gy, &gz);
// Filtrar las lecturas
f_ax = f_ax-(f_ax>>5)+ax;
p_ax = f_ax>>5;
f_ay = f_ay-(f_ay>>5)+ay;
p_ay = f_ay>>5;
f_az = f_az-(f_az>>5)+az;
p_az = f_az>>5;
f_gx = f_gx-(f_gx>>3)+gx;
p_gx = f_gx>>3;
f_gy = f_gy-(f_gy>>3)+gy;
p_gy = f_gy>>3;
f_gz = f_gz-(f_gz>>3)+gz;
p_gz = f_gz>>3;
//Cada 100 lecturas corregir el offset
if (counter==100){
//Mostrar las lecturas separadas por un [tab]
Serial.print("promedio:"); Serial.print("t");
Serial.print(p_ax); Serial.print("\t");
Serial.print(p_ay); Serial.print("\t");
Serial.print(p_az); Serial.print("\t");
Serial.print(p_gx); Serial.print("\t");
Serial.print(p_gy); Serial.print("\t");
Serial.println(p_gz);
//Calibrar el acelerometro a 1g en el eje z (ajustar el offset)
if (p_ax>0) ax_o--;
else {ax_o++;}
if (p_ay>0) ay_o--;
else {ay_o++;}
if (p_az-16384>0) az_o--;
else {az_o++;}
sensor.setXAccelOffset(ax_o);
sensor.setYAccelOffset(ay_o);
sensor.setZAccelOffset(az_o);
//Calibrar el giroscopio a 0º/s en todos los ejes (ajustar el offset)
if (p_gx>0) gx_o--;
else {gx_o++;}
if (p_gy>0) gy_o--;
else {gy_o++;}
if (p_gz>0) gz_o--;
else {gz_o++;}
sensor.setXGyroOffset(gx_o);
sensor.setYGyroOffset(gy_o);
sensor.setZGyroOffset(gz_o);
counter=0;
}
counter++;
}
Resultados
Monitor al conectar el MPU6050 antes de la calibración

Monitor al conectar el MPU6050 despues de la calibración


Fotografías
DISCUSIÓN DE RESULTADOS.
Al comparar los resultados de la primera imagen la cual es antes de la calibración
con los que deberíamos obtener estas lecturas eran muy diferentes pues era
notorio como este debía ser calibrado para obtener unos mejores resultados,
después de la calibración podemos observar como estos se asemejan o son
iguales a los que se requieren, estas lecturas se fueron acercando mas al 0 a
excepción del eje z del acelerómetro pues esto debería mantenerse fijo por la
gravedad.

Conclusión
Al concluir la practica el objetivo se cumplió pues se pudo observar con las
lecturas en la pantalla como estas fueron cambiando al utilizar el OFFSETS en la
programación del MPU6050, y se observo como este de 1300 llegó hasta 0 como
este se requeria para comprobar la calibración.

Referencias bibliográficas
(1) Valdés, F., & Areny, R. P. (2007). Microcontroladores fundamentos y
aplicaciones con
PIC (Vol. 1149). Marcombo.
(2) Naylamp mechatronics. 2021. MPU6050, ACELERÓMETRO Y GIROSCOPIO.
Disponible en Internet en: https://naylampmechatronics.com/blog/45_tutorial-
mpu6050-
acelerometro-y-giroscopio.html
(3) HetPro Store. 2021. MPU6050 Arduino, Acelerómetro y Giroscopio. Disponible
en
Internet en: https://hetpro-store.com/TUTORIALES/modulo-acelerometro-y-
giroscopiompu6050-
i2c-twi/
Descargado

También podría gustarte