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

P7 DSM 1827471

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

Universidad Autónoma de

Nuevo León
Facultad de Ingeniería
Mecánica Eléctrica
DSM LABORATORIO
ACTIVIDAD 7
Alumno: Elan Gabriel Moreno Sánchez
M.C. DANTE FERREYRA
Dia: Miercoles Hora: N6
Carrera: IMTC
Matricula: 1827471
Semestre: Ene-Jun 2022
Práctica #7

Filtro de complementos.
Introducción
Microcontrolador

Un microcontrolador es un circuito integrado programable, capaz de ejecutar las órdenes grabadas en su memoria.
Está compuesto de varios bloques funcionales que cumplen una tarea específica. Un microcontrolador incluye en su
interior las tres principales unidades funcionales de una computadora: unidad central de
procesamiento, memoria y periféricos de entrada/salida.

Algunos microcontroladores pueden utilizar palabras de cuatro bits y funcionan a velocidad de reloj con frecuencias
tan bajas como 4 kHz, con un consumo de baja potencia (mW o microwatts). Por lo general, tendrá la capacidad de
mantenerse a la espera de un evento como pulsar un botón o de otra interrupción; así, el consumo de energía
durante el estado de reposo (reloj de la CPU y los periféricos de la mayoría) puede ser solo de nanowatts, lo que
hace que muchos de ellos sean muy adecuados para aplicaciones con batería de larga duración. Otros
microcontroladores pueden servir para roles de rendimiento crítico, donde sea necesario actuar más como
un procesador digital de señal (DSP), con velocidades de reloj y consumo de energía más altos.

Cuando es fabricado el microcontrolador, no contiene datos en la memoria ROM. Para que pueda controlar algún
proceso es necesario generar o crear y luego grabar en la EEPROM o equivalente del microcontrolador algún
programa, el cual puede ser escrito en lenguaje ensamblador u otro lenguaje para microcontroladores; sin embargo,
para que el programa pueda ser grabado en la memoria del microcontrolador, debe ser codificado en sistema
numérico hexadecimal que es finalmente el sistema que hace trabajar al microcontrolador cuando este es
alimentado con el voltaje adecuado y asociado a dispositivos analógicos y discretos para su funcionamiento.

MPU6050

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.

En este tutorial revisaremos los principios generales de acelerómetros y giroscopios, luego estudiaremos el sensor
MPU6050 con mayor detalle y finalmente implementaremos ejemplos del MPU6050 con Arduino.

Aceleración y acelerómetros

La aceleración es la variación de la velocidad por unidad de tiempo es decir razón de cambio en la velocidad respecto
al tiempo:

a=dV/dt

Así mismo la segunda ley de Newton indica que en un cuerpo con masa constante, la aceleración del cuerpo es
proporcional a la fuerza que actúa sobre él mismo:

a=F/m

Este segundo concepto es utilizado por los acelerómetros para medir la aceleración. Los acelerómetros
internamente tienen un MEMS(MicroElectroMechanical Systems) que de forma similar a un sistema masa resorte
permite medir la aceleración.
Con un acelerómetro podemos medir esta aceleración, teniendo en cuenta que a pesar que no exista movimiento,
siempre el acelerómetro estará sensando la aceleración de la gravedad.

Con el acelerómetro podemos hacer mediciones indirectas como por ejemplo si integramos la aceleración en el
tiempo tenemos la velocidad y si la integramos nuevamente tenemos el desplazamiento, necesitando en ambos
casos la velocidad y la posición inicial respectivamente.

Velocidad Angular y giroscopio

La velocidad angular es la tasa de cambio del desplazamiento angular por unidad de tiempo, es decir que tan rápido
gira un cuerpo alrededor de su eje:

Los giroscopios utilizan un MEMS (MicroElectroMechanical Systems) para medir la velocidad angular usando el
efecto Coriolis

Con un giroscopio podemos medir la velocidad angular, y si se integra la velocidad angular con respecto al tiempo
se obtiene el desplazamiento angular (posición angular si se sabe dónde se inició el giro)
Módulo Acelerómetro y giroscopio MPU6050

EL módulo Acelerómetro MPU tiene un giroscopio de tres ejes con el que podemos medir velocidad angular y un
acelerómetro también de 3 ejes con el que medimos los componentes X, Y y Z de la aceleración.

La dirección de los ejes está indicado en el módulo el cual hay que tener en cuenta para no equivocarnos en el signo
de las aceleraciones.

La comunicación del módulo es por I2C, esto le permite trabajar con la mayoría de microcontroladores. Los pines
SCL y SDA tienen una resistencia pull-up en placa para una conexión directa al microcontrolador o Arduino.

Tenemos dos direcciones I2C para poder trabajar:

Pin AD0 Dirección I2C


AD0=HIGH (5V) 0x69
AD0=LOW (GND o NC) 0x68

El pin ADDR internamente en el módulo tiene una resistencia a GND, por lo que si no se conecta, la dirección por
defecto será 0x68.

El módulo tiene un regulador de voltaje en placa de 3.3V, el cual se puede alimentar con los 5V del Arduino.
Implementando un filtro de Complemento: acelerómetro + giroscopio

El filtro de complemento o en inglés "Complementary Filter" es uno de los más usados por su fácil
implementación, combina el ángulo calculado por el giroscopio y el ángulo calculado por el acelerómetro.
La necesidad de combinar ambas lecturas es que si solo trabajámos con el acelerómetro, este es
susceptible a las aceleraciones producto del movimiento del MPU o a fuerzas externas, pero en tiempos
largos el ángulo no acumula errores. A diferencia que si trabajamos solo con el giroscopio si bien este no
es susceptible a fuerzas externas, con el tiempo el drift es muy grande y nos sirve solo para mediciones
de tiempos cortos.

La ecuación para calcular el ángulo usando el filtro de complemento es:

De esta forma el ángulo del acelerómetro está pasando por un filtro pasa bajos, amortiguando las
variaciones bruscas de aceleración; y el ángulo calculado por el giroscopio tiene un filtro pasa altos
teniendo gran influencia cuando hay rotaciones rápidas. Podemos probar también con otros valores
diferentes a 0.98 y 0.02 pero siempre deben de sumar 1.

A continuación, mostramos el sketch para realizar esta tarea:


// 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;
long tiempo_prev;
float dt;
float ang_x, ang_y;
float ang_x_prev, ang_y_prev;

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");
else Serial.println("Error al iniciar el sensor");
}
void loop() {
// Leer las aceleraciones y velocidades angulares
sensor.getAcceleration(&ax, &ay, &az);
sensor.getRotation(&gx, &gy, &gz);
dt = (millis()-tiempo_prev)/1000.0;
tiempo_prev=millis();
//Calcular los ángulos con acelerometro
float accel_ang_x=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14);
float accel_ang_y=atan(-ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14);
//Calcular angulo de rotación con giroscopio y filtro complemento
ang_x = 0.98*(ang_x_prev+(gx/131)*dt) + 0.02*accel_ang_x;
ang_y = 0.98*(ang_y_prev+(gy/131)*dt) + 0.02*accel_ang_y;

ang_x_prev=ang_x;
ang_y_prev=ang_y;
//Mostrar los angulos separadas por un [tab]
Serial.print("Rotacion en X: ");
Serial.print(ang_x);
Serial.print("tRotacion en Y: ");
Serial.println(ang_y);
delay(10);
}

Ahora si movemos el MPU6050 rápidamente sin rotar, la variación del ángulo será mínima, además el drift se
elimina y solo se nota en tiempos cortos.
Objetivos

• Implementando filtro de complemento en acelerómetro y giroscopio.

Métodos y Materiales

(microcontrolador)

• 1Atmega328p
• 1 Cp 2102
• 1LM7805
• 1 2n222
• 1 Led 5mm
• 1 1n4001
• 2 Capacitores 22 uf
• 1Capacitor.1uf
• 1 Capacitor10uf
• 1 c/UResistencia de 10k y 47k ohms
• Eliminador de 12 v
• 1 Adaptador jack
• 1 Cables dupont
• 1 protoboard

(Pieza fundamental)

• MPU6050
Resultados

Figura 1. Modelo de la practica 7

En esta práctica tenemos un modelo, se nos pide usar el software de Fritzing para diseñar el prototipo, circuito y
PCB, de la práctica y el resultado del diseño que elabore resulto ser así:

Figura 2. Diseño de protoboard

Se diseñó el circuito mediante un diagrama para su implementación virtual en un protoboard diseñado en el


programa fritzing que es un programa especial para este tipo de diseño, no se dificulto ya que contábamos con
una imagen súper parecida y entonces nomas se fue conectando tal cual como la imagen que se mostraba, es así
como se ha diseñado este tipo de circuito con el que se va trabajar.

Figura 3. Diseño esquemático

En esta parte se presenta el diagrama esquemático donde se diseña el circuito con sus componentes, y
conectados de forma correcta. Como en las imágenes anteriores se entiende bien su conexión ya que pues nos
basamos de diagramas lógicas así también como material de apoyo que fue proporciónalo por el ingeniero de la
materia.

Figura 4. Diseño de PCB


Se muestra nuestra placa PCB diseñado para realizar la práctica, en este caso nuestra practica lo
realizaremos de forma física con un protoboard, ya que los pasos anteriores son un diseño para
aprender elaborar circuitos e imprimir PCB.

Figura 5. Conexiones en protoboard

Se inicio haciendo las conexiones de los componentes requeridos de la práctica basando el diagrama que se nos
dio para iniciar la práctica.

Figura 6. Atmega para saber las conexiones pines

En la imagen anterior nos facilita saber las conexiones de pines que están codificados ya que eso no usamos
Arduino armado, si no que solo simulamos con el componente y gracias a eso se nos facilito conectar los pines
que debe estar conectado cada uno de ellos.
Fig.7 Armado de circuito practica 7
Conectado y listo para cargar el programa la cual se hará en varias posiciones para observar de una manera más
optima su funcionamiento.

Codificación.
// 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;

long tiempo_prev;
float dt;
float ang_x, ang_y;
float ang_x_prev, ang_y_prev;

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");


else Serial.println("Error al iniciar el sensor");
}

void loop() {
// Leer las aceleraciones y velocidades angulares
sensor.getAcceleration(&ax, &ay, &az);
sensor.getRotation(&gx, &gy, &gz);

dt = (millis()-tiempo_prev)/1000.0;
tiempo_prev=millis();

//Calcular los ángulos con acelerometro


float accel_ang_x=atan(ay/sqrt(pow(ax,2) + pow(az,2)))*(180.0/3.14);
float accel_ang_y=atan(-ax/sqrt(pow(ay,2) + pow(az,2)))*(180.0/3.14);

//Calcular angulo de rotación con giroscopio y filtro complemento


ang_x = 0.98*(ang_x_prev+(gx/131)*dt) + 0.02*accel_ang_x;
ang_y = 0.98*(ang_y_prev+(gy/131)*dt) + 0.02*accel_ang_y;

ang_x_prev=ang_x;
ang_y_prev=ang_y;

//Mostrar los angulos separadas por un [tab]

Serial.print("Rotacion en X: ");
Serial.print(ang_x);
Serial.print("tRotacion en Y: ");
Serial.println(ang_y);

delay(10);
}

Se nos dio una codificación para programar en nuestro Atmega y comprobar el funcionamiento de nuestro
microcontrolador y el mpu6050 abrimos con Arduino para compilar programa.
Figura 8. Software Arduino

Una vez compilado correctamente hacemos conexión de nuestro pc y microcontrolador para programarlo.

Figura 9. Posiciones de MPU.

Este circuito se implementará un programa donde corregirá resultados pasando filtros.


Discusión de resultados

Fig.10 Muestra de
resultados.

Este circuito pasara por un filtro para evitar variaciones movemos el MPU6050 rápidamente sin rotar, la
variación del ángulo será mínima, además el drift se elimina y solo se nota en tiempos cortos movemos el
MPU6050 rápidamente sin rotar, la variación del ángulo será mínima, además el drift se elimina y solo se
nota en tiempos cortos.

Fig.11 Muestra de resultados.

Al moverlo rápido se pudo observar que no hubo variación dando entender que el filtro funciona
correctamente.
Conclusiones
En esta practica se implemento un filtro, para que, para evitar generar errores con movimientos bruscos o
simplemente algún movimiento indeseado, y para que hacemos esto, en la vida cotidiana hay mucha variación de
inclinación en cualquier terreno, gracias al filtro digamos que se genera una mayor estabilidad al movimiento
repentino o brusco.

Referencias bibliográficas

• TUTORIAL MPU6050, ACELERÓMETRO Y GIROSCOPIO. naylampmechatronics. Disponible en Internet en:


https://naylampmechatronics.com/blog/45_tutorial-mpu6050-acelerometro-y-giroscopio.html
• Modulos de la practica. Disponible en Internet en: https://proyectosconarduino.com/modulos/
• Vienna University of Technology, Introduction To Microcontrollers (Gunther Gridling, Bettina Weiss), 26
de febrero de 2007.
• Datasheet MPU6050. Alldatasheet. Disponible en Internet en:
https://www.alldatasheet.com/view.jsp?Searchword=Mpu-
6050%20datasheet&gclid=CjwKCAjwtfqKBhBoEiwAZuesiDdoeNNhGp-
VJGExy1ZfoaJX8N2o3RSYeHQhE5gyshSdD94CDKw_ZRoCEIMQAvD_BwE
• J. C. Hung, J. R. Thacher & H.V. White. «Calibration of accelerometer triad of an IMU with drifting Z-
accelerometer bias», IEEE Aerospace and Electronics Conference, 1989, vol. 1, pp. 153-158.
Cuestionario
1. ¿QUE SON LOS MODULOS DE CONTROL?

Es el módulo de control electrónico o, lo que lo mismo, el sistema integrado que se utiliza para
controlar las distintas funciones de los sistemas eléctricos que incorpora un vehículo.

2. ¿QUE ES UN MICROCONTROLADOR?

es un circuito integrado que es el componente principal de una aplicación embebida. Es como una
pequeña computadora que incluye sistemas para controlar elementos de entrada/salida. También
incluye a un procesador y por supuesto memoria que puede guardar el programa y sus variables
(flash y RAM).

3. ¿ ES UNO DE LOS MÁS USADOS POR SU FÁCIL IMPLEMENTACIÓN, COMBINA EL ÁNGULO


CALCULADO POR EL GIROSCOPIO Y EL ÁNGULO CALCULADO POR EL ACELERÓMETRO.?

Filtro de complemento

4. ¿EN QUÉ SE UTILIZA EL MPU6050?

Este sensor es muy utilizado en navegación, goniometría, estabilización, etc.

5. ¿QUÉ ES UN MPU6050?

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.

6. ¿ECUACIÓN FILTRO DE COMPLEMENTO?

7. ¿CÓMO SE LE LLAMA AL UN ERROR PRODUCTO DE LA MALA MEDICIÓN DEL TIEMPO O DEL


RUIDO EN LA LECTURA DEL MPU?

DRIFT

8. ¿Qué METODOS HAY PARA DISMUNUIR EL DRIFT?


Para disminuir el drift existen varios métodos, la mayoria aplica filtros para eliminar
el ruido de las lecturas del sensor. También se pueden usar otros sensores como
magnetómetros o acelerómetros y con los ángulos calculados con estos mejorar el
cálculo del giroscopio.

También podría gustarte