P7 DSM 1827471
P7 DSM 1827471
P7 DSM 1827471
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.
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.
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.
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.
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
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
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í:
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.
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.
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"
// 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
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();
ang_x_prev=ang_x;
ang_y_prev=ang_y;
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.
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.
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
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).
Filtro de complemento
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.
DRIFT