Tutorial de Arduino y MPU-6050 – Robologs

26
7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 1/26 robologs Tutoriales, drones y humor cibernético Tutorial de Arduino y MPU-6050 15 octubre, 20147 junio, 2015 Tr4nsduc7or (https://reader009.{domain}/reader009/html5/0317/5aac79929bcc4/5aac7993be107.png) [Iniciando módulos de interacción social] Saludos, humano. Al habla Transductor. ¿Alguna vez has intentado configurar una IMU con Arduino y obtener lecturas? Si tu respuesta es afirmativa, habrás notado que no es nada fácil. Muchas IMUs utilizan protocolos como I2C o SPI, dan valores extraños, requieren trigonometría… oh, ¿he mencionado ya que las IMUs dan siempre lecturas erróneas?  

Transcript of Tutorial de Arduino y MPU-6050 – Robologs

Page 1: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 1/26

robologs

Tutoriales, drones y humor cibernético

Tutorial de Arduino y MPU-6050

15 octubre, 20147 junio, 2015 Tr4nsduc7or

(https://reader009.{domain}/reader009/html5/0317/5aac79929bcc4/5aac7993be107.png)

[Iniciando módulos de interacción social]

Saludos, humano. Al habla Transductor. ¿Alguna vez has intentado configurar una IMU conArduino y obtener lecturas? Si tu respuesta es afirmativa, habrás notado que no es nada fácil.Muchas IMUs utilizan protocolos como I2C o SPI, dan valores extraños, requierentrigonometría… oh, ¿he mencionado ya que las IMUs dan siempre lecturas erróneas?

 

Page 2: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 2/26

Si has acabado en esta página es que necesitas un empujón. Sabes que una IMU es undispositivo electrónico. Y que no se come. Pero ahí se acabó. Probablemente no tienes ni ideade cómo conectarla a Arduino y ya no digamos obtener una lectura decente.

Así pues, has venido al lugar indicado. Transductor va a explicarte cómo conseguir unaslecturas precisas con una IMU MPU‑6050 y Arduino. Depuraremos los valores, calcularemos elángulo de inclinación y filtraremos el ruido con un Filtro Complementario (Complementary

Filter).Pero hay que empezar por el principio. Y el principio es…

 

Da Theory

Antes de empezar, ¿qué es una IMU? Se trata de un dispositivo capaz de mesurar la fuerza(acceleración) y la velocidad. Genéricamente consta de un Acelerómetro y un Giroscopio. Porlo tanto: una IMU no mesura ángulos. Por lo menos no directamente, requiere algunos cálculos.

El MPU‑6050 es una IMU de 6DOF (se lee “6 Degrees Of Freedom“). Esto significa que llevaun acelerómetro y un giroscopio , ambos de 3 ejes (3+3 = 6DOF). Hay IMUs de 9DOF, en estecaso también llevan un magnetómetro. Otras pueden tener 5DOF, en cuyo caso el giroscopio

sólo mide dos ejes, etc.

(https://robologs.files.wordpress.com/2014/10/mpu‑6050.jpg)

 MPU‑6050

El MPU‑6050 opera con 3.3 voltios, aunque algunas versiones (como la mía) llevan unregulador que permite conectarla a 5V.

El MPU‑6050 utiliza el protocolo de comunicación I2C. En este tutorial no voy a entrar endetalles de cómo funciona este protocolo, pero puedes encontrar más información aquí

(http://playground.arduino.cc/Learning/I2C).Ya tienes claro lo que es una IMU. Veamos cada una de sus partes.

Page 3: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 3/26

El acelerómetro

El acelerómetro mide la aceleración. Quién iba a decirlo. La aceleración puede expresarse en 3ejes: X, Y y Z, las tres dimensiones del espacio. Por ejemplo, si mueves la IMU hacia arriba, eleje Z marcará un cierto valor. Si es hacia delante, marcará el eje X, etc.

Si haces memoria de tus clases de la ESO (o equivalentes), recordarás que la gravedad de laTierra tiene una aceleración de aprox. 9.8 m/s² , perpendicular al suelo como es lógico. Asípues, la IMU también detecta la aceleración de la gravedad terrestre.

¿Esto es un problema? ¡Al contrario, lector! Gracias a la gravedad terrestre puedes usar laslecturas del acelerómetro para saber cuál es el ángulo de inclinación respecto al eje X o eje Y.

Supongamos que la IMU esté perfectamente alineada con el suelo. Entonces, como puedes veren la imagen, el eje Z marcará 9.8 , y los otros dos ejes marcarán 0. Ahora supongamos que

giramos la IMU 90 grados. Ahora es el eje X el que está perpendicular al suelo, por lo tantomarcará la aceleración de la gravedad.

(https://robologs.files.wordpress.com/2014/10/imu_ac_ejemplos.png)

Si sabemos que la gravedad es 9.8 m/s², y sabemos que mesura dan los tres ejes delacelerometro, por trigonometría es posible calcular el ángulo de inclinación de la IMU. Una

 buena fórmula para calcular el ángulo es:

(https://robologs.files.wordpress.com/2014/10/codecogseqn3.gif)

(https://robologs.files.wordpress.com/2014/10/codecogseqn2.gif)

El eje Z se suele ignorar.

Hay otras fórmulas equivalentes, pero yo prefiero la tangente.

El Giroscopio

Page 4: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 4/26

En un principio, los giroscopios eléctricos eran unos voluminosos artefactos que valían lamayor parte del presupuesto militar de un estado. Más tarde, durante la segunda guerramundial se emplearon para dirigir cohetes y torpedos. Por suerte, gracias la revolución digitaly la miniaturización de circuitos, hoy en día cualquier aficionado a la electrónica puedepermitirse uno. Aunque no para construir misiles.

(https://reader009.{domain}/reader009/html5/0317/5aac79929bcc4/5aac79

Los giroscopios eléctricos se utilizaron enlos cohetes V‑2

El giroscopio mide la velocidad angular. Si no tienes muy frescas tus lecciones de física delinstituto voy a recordarte que la velocidad angular es el número de grados que se gira en unsegundo.

Sólo que en vez de mesurarse en grados por segundo, suele mesurarse en otra unidad que sonradianes por segundo (1rad/s = 180/PI grados/s)

Si sabemos el ángulo inicial de la IMU, podemos sumarle el valor que marca el giroscopio parasaber el nuevo ángulo a cada momento. Supongamos que iniciamos la IMU a 0º. Si elgiroscopio realiza una medida cada segundo, y marca 3 en el eje X, tendremos el ángulo conesta sencilla fórmula:

(https://robologs.files.wordpress.com/2014/10/codecogseqn11.gif)Dónde Δt es el tiempo que transcurre cada vez que se calcula esta fórmula.

Y lo mismo pasa con los ejes X, Z. Sólo que al igual que con el acelerómetro se suele ignorar eleje Z.

Ya tenemos las lecturas. ¿Simple, verdad? Pues en realidad no tanto.

Error en las medidas

 

Page 5: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 5/26

En un mundo ideal donde hadas y elfos cantan alegres y dulces canciones alrededor dehogueras, donde los dragones surcan los cielos, los árboles hablan con las setas y C++ noprovoca errores en tiempo de ejecución, las IMUs son unos artefactos mágicos que con un pocode trigonometría puden dar un ángulo con total exactitud.

Pero estás en el mundo real, hijo. Y hay dos problemas muy importantes: el ruido y los errores.

El ruido son todas aquellas interferencias que afectan a los dispositivos electrónicos. Elacelerómetro es capaz de medir cualquier ángulo, sin embargo sus lecturas son ruidosas ytienen un cierto margen de error.

Si alguna vez quieres dibujar un gráfico de las medidas de un acelerómetro en función deltiempo, verás algo de este estilo:

(https://robologs.files.wordpress.com/2014/10/ruido_imu.png)Elángulo real (ideal) estámarcado en azul , y las medidas reales están en rojo. Puedo afirmar que no cumple a rajatabla

la definición de “preciso”.

Por si esto fuera poco, el acelerómetro también detecta cualquier aceleración que no sea la dela gravedad. Por tanto, si mueves la IMU sin girarla, al aplicar una aceleración en otro eje, laIMU lo detectará como un cambio de rotación.

Por otra parte tenemos el giroscopio. A diferencia del acelerómetro, da las medidas con muchaprecisión. Pero al realizar los cálculos del ángulo es inevitable que se produzca un pequeñoerror , que con el tiempo va acomulándose hasta que cualquier similitud con la realidad es puracoincidencia. Esto en inglés se llama drift.

¿Significa esto que debes darte por vencido? Para nada. Hay una (varias) forma(s) de combinarlos datos del acelerómetro y el giroscopio para así obtener medidas acuradas. Y aquí es dóndeentra en juego:

Page 6: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 6/26

Tu amigo el filtro

La idea es muy simple: hay que conseguir eliminar el ruido , el drift y conseguir que elacelerómetro no cambie de ángulo al detectar otra fuerza que no sea la gravedad.

Hay distintos algoritmos, llamados filtros , que hacen esta tarea. Uno de los mejores es elfamoso Filtro de Kálman , del que puede que hayas oído a hablar. Se utiliza en los aviones ,cohetes y satélites geoestacionarios.

El filtro de Kálman es sorprendente. Es considerado uno de los mayores hallazgos del siglopasado, y con razón. Capaz de calcular el error de cada medida a partir de las medidasanteriores, eliminarlo y dar el valor real del ángulo. En cierto modo es un algoritmo queaprende en cada iteración. No suena nada mal, ¿verdad?

Sin embargo tiene dos problemas:

1. Tiene un coste de procesamiento algo elevado2. Es muy complicado de entender. Y pongo énfasis en el “muy”. Échale un vistazo

(http://es.wikipedia.org/wiki/Filtro_de_Kalman).

Así pues, tenemos otros filtros a nuestra disposición. El que vamos a utilizar es conocido comoFiltro Complementario o Complementary Filter en inglés. Es ideal para implementar conArduino: fácil de utilizar, bajo coste de procesamiento y con una precisión muy buena.

¿En qué consiste exactamente? El Filtro Complementario es en realidad una unión de dos

filtros diferentes: un High‑pass Filter para el giroscopio y un Low‑pass Filter para alacelerómetro. El primero deja pasar únicamente los valores por encima de un cierto límite, alcontrario que el Low‑pass filter, que sólo permite a los que están por debajo.

La fórmula resultante de combinar (complementar , de aquí el nombre) los dos filtros es:

(https://robologs.files.wordpress.com/2014/10/codecogseqn5.gif)

Dónde AnguloGyro es el ángulo del Giroscopio que hemos calculado previamente, yAnguloAccel con el Acelerómetro. Esta fórmula es la misma para el eje X, Y.

NOTA: Si lo deseas, puedes probar de cambiar el valor de 0.98 y 0.02 por un valorpersonalizado. Eso sí, ambos tienen que sumar 1.

Y así se termina Da Theory. Ahora hay que utilizar las fórmulas en un código para Arduino.

 

In Praxis

Page 7: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 7/26

Las fórmulas y los números viven tranquilas en el abstracto mundo de las matemáticas. Apesar de que este lugar está custodiado por unos seres divinos llamados matemáticos , cuyafunción es asegurarse de que sólo los licenciados puedan utilizar las fórmulas en el mundoreal, vamos a implementar estos algoritmos en una placa Arduino.

Las conexiones son muy simples. Con los 5V del USB tendrás energía de sobra.

MPU Vcc ‑> Arduino 3.3v (o 3v3 en algunos modelos)MPU Gnd ‑> Arduino GndMPU SCL ‑> Arduino A5MPU SDA ‑> Arduino A4

 MPORTANTE! Estas conexiones están probadas en una Arduino UNO y Arduino Nano,cuyos pines SDA y SCL son A4 y A5 respectivamente. Si utilizas otra placa puede que los pinessean otros. En este enlace (http://arduino.cc/en/reference/wire) aparece una lista con los pinesSDA y SCL de otras versiones de Arduino (Due, Leonardo…)

Así pues, tienes las fórmulas. Tienes la IMU. Tienes una placa Arduino. Tienes el circuito. ¿Quéfalta? Saber cómo interaccionar con la IMU para obtener lecturas. El MPU‑6050 dará unos rawvalues (“valores en bruto”) que después habrá que refinar (dividir por una constante) a fin deconseguir valores utilizables.

La web oficial de Arduino dispone de un ejemplo para leer datos de la MPU‑6050. Partiré deella, aunque habrá que modificarla considerablemente ya que sólo da los valores sin refinar delGiroscopio y el Acelerómetro.

Empezamos por las declaraciones.

Voy a comentarlo. La primera línea incluye la librería Wire.h, necesaria para la interacción víaprotocolo I2C.

12345678

910111213141516171819

20

#include <Wire.h> //Direccion I2C de la IMU#define MPU 0x68 //Ratios de conversion#define A_R 16384.0#define G_R 131.0

 //Conversion de radianes a grados 180/PI#define RAD_A_DEG = 57.295779 //MPU‐6050 da los valores en enteros de 16 bits//Valores sin refinarint16_t AcX, AcY, AcZ, GyX, GyY, GyZ; //Angulosfloat  Acc[2];float  Gy[2];

float  Angle[2];

Page 8: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 8/26

#define MPU 0x68 es la dirección I2C de la IMU que se especifica en la documentación oficial.

Los ratios de conversión son los especificados en la documentación. Deberemos dividir losvalores que nos dé el Giroscopio y el Acelerómetro entre estas constantes para obtener un valorcoherente. RAD_A_DEG es la conversión de radianes a grados.

La IMU da los valores en enteros de 16 bits. Como Arduino los guarda en menos bits, hay que

declarar las variables que almacenarán los enteros provinientes de la IMU como un tipo deenteros especiales. int16_t AcX, AcY, AcZ, GyX, GyY son, pues, los raw_values de la IMU.

Finalmente tenemos tres arrays (Acc[], Gy[], Angle[]) que guardan el ángulo X, Y delAcelerómetro, el Giroscopio y el resultado del Filtro respectivamente. [0] se corresponde a X.[1] a Y.

La función setup es la siguiente:

Se inicia la comunicación por I2C con el dispositivo MPU, y se “activa” enviando el comando 0.También se inicia el puerto de série para ver los resultados.

El void loop es un poco más complejo. Se leen y guardan los datos de la IMU, se calcula elángulo y se aplica el filtro complementario.

123456789

void  setup(){Wire.begin();Wire.beginTransmission(MPU);Wire.write(0x6B);Wire.write(0);Wire.endTransmission(true);Serial.begin(9600);}

1234567

89

101112131415161718

1920212223

void  loop(){  //Leer los valores del Acelerometro de la IMU  Wire.beginTransmission(MPU);  Wire.write(0x3B); //Pedir el registro 0x3B ‐ corresponde al AcX  Wire.endTransmission(false);  Wire.requestFrom(MPU,6,true); //A partir del 0x3B, se piden 6 regis

  AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros  AcY=Wire.read()<<8|Wire.read();  AcZ=Wire.read()<<8|Wire.read(); 

//Se calculan los angulos Y, X respectivamente.  Acc[1] = atan(‐1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)  Acc[0] = atan((AcY/A_R)/sqrt(pow((AcX/A_R),2) + pow((AcZ/A_R),2)))* 

//Leer los valores del Giroscopio  Wire.beginTransmission(MPU);  Wire.write(0x43);

  Wire.endTransmission(false);  Wire.requestFrom(MPU,4,true); //A diferencia del Acelerometro, solo

GyX=Wire.read()<<8|Wire.read();  GyY=Wire.read()<<8|Wire.read(); 

Page 9: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 9/26

Escribe estas tres funciones en un sólo código, compila, carga. Si ahora abres el Monitor deSérie, deberías ver como van oscilando los números muy rápidamente. Puedes probar a girar laIMU y detener el Desplazamiento Automático para ver como cambian los ángulos.

El filtro tarda un tiempo a adaptarse a los cambios, lo cuál es normal al filtrar las frecuencias.

Y esto es todo. Espero que esta guía te sirva de referencia para futuros proyectos. Los filtros deeste tipo suelen utilizarse conjuntamente con un Controlador PID(http://en.wikipedia.org/wiki/PID_controller) (PID controller) para controlar y corregir elmovimiento de motores en función de las lecturas de la IMU. Si estás interesado en realizar unproyecto como un drone o un robot balanceador, puede ser de utilidad comprender cómofunciona.

Finalmente debo decir que existen librerías para Arduino que incluyen Filtros de Kálman yFiltros Complementarios. ¿Por qué no las he mencionado? Mi consejo cuándo construyas tuproyecto es que, si puedes, evites las librerías de terceros. Aprender a implementar este tipo dealgoritmos por tu cuenta mejorará tus conocimientos y posibilidades mucho más que si telimitas a las funciones prefabricadas.

Y al fin y al cabo, ¿qué es la robótica sin pelearse con las fórmulas, problemas y código?

Final de línea.

Arduino, Tutoriales acelerometro , angulo, arduino, filtro complementario , filtro dekalman, giroscopio, mpu‑6050 , transductor

206 thoughts on “Tutorial de Arduino y MPU-6050”

1. DAN GONZALEZ14 mayo, 2015 / 4:36 am

Angle X: nanAngle Y: nan————Angle X: nan

2425262728293031

323334353637

  //Calculo del angulo del Giroscopio  Gy[0] = GyX/G_R;  Gy[1] = GyY/G_R; 

//Aplicar el Filtro Complementario  Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];  Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1]; 

//Mostrar los valores por consola  Serial.print("Angle X: "); Serial.print(Angle[0]); Serial.print("\n  Serial.print("Angle Y: "); Serial.print(Angle[1]); Serial.print("\n 

delay(10); //Nuestra dt sera, pues, 0.010, que es el intervalo de t}

Page 10: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 10/26

Angle Y: nan————Angle X: nanAngle Y: nan————Angle X: nan ENTRE EN PÁNICO, QUE SIGNIFICA ESTO

ResponderTR4NSDUC7OR14 mayo, 2015 / 9:00 amEse error es que Arduino no recibe ningún valor de la IMU. Es un problema deconexiones, revísalas.

Final de línea.

ResponderDARIO

24 mayo, 2015 / 8:54 amme ocurrió lo mismo en un principio. Creo (CREO) que se debe a que el MPU6050 noestaba conectado, tengo la costumbre de desconectar los periféricos al cargar elprograma. Al dejar todo conectado y resetear el Arduino comenzó a recibir bien losdatos.La verdad no sé si se deberá a eso o no, pero no pierdo nada al comentar mi caso.Muy buen tutorial por cierto.

Responder

2. MARCONI66614 mayo, 2015 / 6:35 pmMuchas gracias, voy ha intentar lo que me dices. Te mantendré informado.

Responder3. DIEGO

15 mayo, 2015 / 3:13 amAngle X: Cada vez se hace más negativoAngle Y: Cada vez se hace más positivosólo sube, sube y sube el valor. hay algo mal?

ResponderDIEGO15 mayo, 2015 / 3:15 amAhora se ha detenido enAngle X: ‑35.95Angle Y: 37.94Está correcto?

ResponderTR4NSDUC7OR15 mayo, 2015 / 10:06 am¿Qué version de Arduino tienes?

Page 11: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 11/26

TR4NSDUC7OR16 mayo, 2015 / 2:21 pmDiego: necesito que me digas tu versión de Arduino si quieres que te ayude.

Final de línea

EDGAR

26 junio, 2015 / 11:58 pmYo tambien tengo ese problema, conecto el mpu al arduino como lo indica el tutorial!arduino 1.6.6

TR4NSDUC7OR27 junio, 2015 / 12:15 amMe refiero a la versión de la placa. ¿Arduino UNO, Nano, Micro, DUE…?

EDGAR27 junio, 2015 / 9:23 pm

arduino uno

4. MONSE18 mayo, 2015 / 3:49 amHola, me preguntaba si solo quiero filtrar los datos del giroscopio (ya que no requiero elacelerometro) en el filtro complementario que sucede con el .98 y .2?

ResponderTR4NSDUC7OR19 mayo, 2015 / 10:17 amHola, Monse. La idea del filtro complementario es combinar las lecturas delAcelerómetro y el Giroscopio. Si sólo quieres las lecturas del segundo, entonces no haynecesidad de aplicar ningún filtro. Es decir, tienes que coger los valores Gy[0] y Gy[1]del código del tutorial, el resto no te interesa.

Final de línea.

Responder5. CESAR

18 mayo, 2015 / 8:56 pm buen día me parece excelente tu tutorial, un pregunta puedo adaptar esto o puedo leer estoen matlab, necesito medir la inclinación de un péndulo supongo que puedo medirlo conesta estrategia verdad ? saludos y gracias

ResponderTR4NSDUC7OR19 mayo, 2015 / 10:19 amSí, precisamente escribí un tutorial sobre cómo leer esta IMU en Matlab.

http://robologs.net/2014/11/04/arduino‑y‑matlab‑v‑leer‑una‑imu‑por‑serial/

Final de línea.

Responder

Page 12: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 12/26

6. GUILLERMO FLORES22 mayo, 2015 / 1:19 amMe gusto mucho tu tutorial. Una duda, quiero utilizar el mismo IMU para controlar 4motores de un dron y estabilizarlo.

Ores que funcionaria utilizar las variaciones de los valores finales de los angulos x y y(confiltro) como condiciones para aumentar o disminuir las revoluciones de determinados

motores para lograr la estabilización ? No se si me di a entender. Saludos y gracias por eltutorial !

ResponderTR4NSDUC7OR22 mayo, 2015 / 1:31 pmSaludos, Guillermo. Sí, en principio funcionaria (siempre y cuando multiplicases lavariación por una constante apropiada), pero te recomiendo aplicar un controlador PIDpara tener una mejor estabilización:

http://en.wikipedia.org/wiki/PID_controller

Final de línea.

Responder7. DAN GONZALEZ

22 mayo, 2015 / 10:11 pmOtra duda, que valores deberían darme los ejes, pues para x[‑50,50] y[‑60,60]

ResponderTR4NSDUC7OR23 mayo, 2015 / 1:17 amNo acabo de entender tu pregunta. El valor de los ejes dependerá del ángulo con quetengas la IMU. ¿Qué quieres decir que <>? ¿Son los valores máximos para cada eje?Necesito que seas un poco más claro.

Final de línea.

Responder

DAN GONZALEZ23 mayo, 2015 / 8:12 amVeras encontré otro programa en internet que al probarlo si me mide de 0 a 180cuando giro la IMU, pero con el programa que usted ha escrito no se bien quevalores debería de dar pues me da esos valores raros cuando la giro de ‑50 a 50 paraun eje y de ‑60 a 60 para otro, http://lukagabric.com/arduino‑mpu6050/ ,este es el linkde donde saque el programa,pero me gustaría poder hacer funcionar su programamas o menos igual que me de de 0 a 180 para cada eje, si eso queda ahora solo mefalta la parte de intentar conectar dos MPU‑6050

TR4NSDUC7OR23 mayo, 2015 / 11:34 am

 

Page 13: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 13/26

Hola, Dan. El script que he hecho mide ángulos de ‑90 a 90 grados (teóricamente, a lapráctica nunca acaba de llegar a este valor). Si quieres adaptar este valor de 0 a 180,puedes usar la función map() de arduino. Por ejemplo, para el eje X:

Acc[0] = map(Acc[0], ‑90, 90, 0, 180);

En cuánto a conectar dos IMUs: el MPU tiene un pin llamado AD0. Si este pin está a

HIGH cambiará la dirección de la IMU de 0x68 a 0x69.Entonces, puedes conectar el pin AD0 de una de las dos IMUs a 3.3v, y en el códigoleer también la dirección 0x69.

Espero que te sirva.

Final de línea.

8. SERGIO BRYAN RENDON AGUILAR

22 mayo, 2015 / 10:49 pm buen día tengo una pregunta en cuanto a como se debe conectar la imu podrias pasar unesquema de favor para poder mirarlo con atención, quiero implementar esta imu en eldearrollo de un dron y el codigo que publicaste es de mucha ayuda me gustaria saber laconcecion de la imu de ante mano muchas gracias

ResponderTR4NSDUC7OR23 mayo, 2015 / 1:13 amHola, Sergio. La lista con las conexiones están en el apartado “In Praxis” de este tutorial:

MPU Vcc ‑> Arduino 3.3v (o 3v3 en algunos modelos)MPU Gnd ‑> Arduino GndMPU SCL ‑> Arduino A5MPU SDA ‑> Arduino A4

Final de línea.

Responder9. EDGAR RAMIREZ

23 mayo, 2015 / 6:58 pmQue tal amigo, antes que nada muy bien explicado y buen tutorial que has hecho, sinembargo tengo el mismo problema que el primero que te comentó tu post:

Angle X: nanAngle Y: nan————Angle X: nanAngle Y: nan

————Angle X: nanAngle Y: nan————

Page 14: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 14/26

Angle X: nanAngle Y: nan————

Estoy manejando un arduino due y ya verifique mis conexiones y no encuentro el error, loque tengo conectado es VCC, GND, SCL del IMU al SCL1 del arduino y lo mismo en el casode SDA lo tengo conectado al pin SDA1 del arduino ya que ahi no hay pull ups, sin

embargo hize la prueba en conectarlo a los puertos 20 y 21 y la lectura en el monitor serialse altera demasiado, por lo que creo que esta correcto que lo haya conectado ahi, en el casodel pin INT del IMU lo tengo desconectado y en el caso del ADO lei en otro tutorial quesegun la direccion 0x68 debe ir a tierra, dandome el mismo resultado en el monitor serial yya probé tambien desconectandolo y me sigue saliendo lo mismo “Angle X: nan”….

No se si tenga que ver con alguna libreria que no esté manejado el arduino due. Espero mepuedas ayudar.

ResponderTR4NSDUC7OR23 mayo, 2015 / 7:29 pmSaludos, Edgar. ¿Qué lecturas te da cuándo lo conectas la IMU a D20 y D21? ¿Siguedándote ‘nan’ o te sale algún valor extraño?

Final de línea.

Responder0. EDGAR RAMIREZ

23 mayo, 2015 / 7:41 pmasi es, me sigue dando las mismas lecturas pero en una velocidad mas rapida

ResponderTR4NSDUC7OR25 mayo, 2015 / 10:38 pmHola, Edgar. Perdona que no te contestase ayer.

Problema de código no puede ser: el que está en este tutorial lo he revisado muchasveces, y funciona con Arduino Nano, UNO, Duemilanove y Leonardo. Tampoco debería

ser problema de librerías: la única que se utiliza es Wire.h, que funciona para todas lasplacas.

Si no es problema de conexiones y me dices que está todo bien, no sé a qué puededeberse. Lo que sí sé es que arduino DUE funciona con 3.3v . El MPU‑6050 deberíafuncionar bien con 3.3v pero para descartar problemas intenta utilizar un LogicConverter para pasar de los 3.3v de Arduino a 5V para el MPU6050.

Final de línea.

Responder1. DARIO24 mayo, 2015 / 10:43 am

 

Page 15: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 15/26

consulta, si quiero también el angulo en z ¿cual es la formula en el acelerometro?la variable ya esta creada AcZ y GyZ, y en las lecturas del giroscopio supongo que debopedir también 6 registros…pero no logro dar con la formula para calcular el ángulo en la parte del acelerometro.otra cosa, sé que el mpu6050 te larga también la temperatura ¿cómo la pido y/o recibo paramostrarla?ya arriba dije que es muy buen tutorial,en otros lugares solo encontraba una guía para usar

las librerías.

ResponderTR4NSDUC7OR25 mayo, 2015 / 10:45 pmHola, Dario.

No es posible calcular la rotación en el eje Z con estas fórmulas, ni con una IMU de6DOF. Para ello necesitas un magnetómetro (brújula), o una IMU de 9DOF.

Para saber la temperatura, necesitas leer el registro 0x41:

Final de línea.

Responder2. ELIANA

24 mayo, 2015 / 7:38 pmExcelente tutorial mil gracias

ResponderTR4NSDUC7OR25 mayo, 2015 / 10:45 pmDe nada, humano.

Final de línea. Responder

3. KIRIE ELEISSON25 mayo, 2015 / 11:18 pmAl cargar el programa funciona perfectamente el dispositivo MPU pero al momento deapagarlo, esperar 3 segundos y encenderlo ya no opera adecuadamente.

ResponderTR4NSDUC7OR

25 mayo, 2015 / 11:20 pm¿No opera adecuadamente en qué sentido? Necesito saber qué lecturas aparecen enpantalla, si es que aparece alguna.

Final de línea.

12345

Wire.beginTransmission(MPU);  Wire.write(0x41);  Wire.endTransmission(false);  Wire.requestFrom(MPU,2,true);

Temperatura=Wire.read()<<8|Wire.read();

Page 16: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 16/26

Responder4. MARCONI666

26 mayo, 2015 / 12:31 amHolaEn relación con las preguntas que realicé, para el experimento sobre el sueño de losdelfines, os dejo una entrada del blog que explica con mayor detalle la necesidad delexperimento:

https://unpulpoenungaraje.wordpress.com/2015/05/25/el‑sueno‑perdido‑del‑delfin/

Responder5. LUIS YUSTE

26 mayo, 2015 / 9:42 pmalguien puede ayudarme por favor?? tengo un MPU 6050. E probado todas las libreriasexistentes y no consigo ninguna medida aparte de que muchos ejemplos no llega ni acompilarlos. Cualquier ayuda es buena muchas gracias

ResponderTR4NSDUC7OR26 mayo, 2015 / 10:48 pmLuís, ¿has probado el código de ejemplo de éste tutorial?

Final de línea.

Responder6. LUIS YUSTE

27 mayo, 2015 / 12:22 pm

Si transductor al final después de probar ese código unas 10 o 15 veces conseguí quemostrara bien (no entiendo por que no funcionaba al principio, por que no cambie nada).Pero tengo una pregunta es normal que al iniciar el programa tarde un poco en estabilizarsey mostrar los ángulos correctos? GRACIAS por la ayuda.

ResponderTR4NSDUC7OR29 mayo, 2015 / 9:56 amSí, es normal. El filtro complementario tarda un poco en adaptarse al ángulo.

Final de línea.

Responder7. GUILLERMO FLORES

28 mayo, 2015 / 12:06 amBuen dia , disculpa otra duda. Hay alguna forma de limitar la velocidad de muestreo ? . Porejemplo que me mande solo 3 muestras por segundo o algo asi ? . Saludos y gracias !

ResponderTR4NSDUC7OR

29 mayo, 2015 / 9:59 amHola, Guillermo. Puedes añadir un delay al final de 333ms, pero entonces tendrás quecambiar el parámetro dt del filtro complementario (que en este caso vale 0.01) a 0.333 .

Page 17: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 17/26

Final de línea.

ResponderGUILLERMO FLORES30 mayo, 2015 / 12:57 amOk gracias lo intentare.Disculpa, el parametro del filtro el “0.01” que representa?

Crei que solo era un valor constante que multiplicaba a los angulos del Gyroscopioen la formula del filtro , ya que a como veo, el Angle]0] y Angle[1] son valores que seactualizan usando el valor de los mismos de una iteracion anterior.Lo que no entiendo por que ese 0.01 va de la mano con el delay del final. Saludos ygracias !

PD: La información de tu tutorial me ha servido mucho para un proyecto de uncuadricoptero (Dron) que tengo. El único problema que tengo es que el IMU realizademasiadas muestras.

Pequeño Ejemplo :

If (Angle[0] >=5){x=x+1; // Aumenta la Resolucion del PWManalogWrite(6,x);}

Entonces en cuanto el IMU sobrepasa los 5 grados mi condición se cumpledemasiadas veces en muy poco tiempo, desestabilizando todo después deestabilizarlo.Bueno probare Gracias ! por todo, me ha servido mucho

TR4NSDUC7OR30 mayo, 2015 / 8:46 pmEl 0.01 es el tiempo de muestreo. Es decir, el tiempo que ha pasado desde la últimavez que el programa calculó el filtro complementario.

En este tutorial el valor 0.01 es a ojo, pero si quieres ser meticuloso puedes utilizar la

funcion millis() de Arduino:http://www.arduino.cc/en/Reference/Millis

Suerte con tu proyecto.

Final de línea.

8. ERICK HERNANDEZ28 mayo, 2015 / 8:46 pm

Hola me parcio genial la parte de los nomos y los arboles cuando le hablan a las zetas perofijate que el programa me compila y el serial monitor me aparece en blanco

ResponderTR4NSDUC7OR

Page 18: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 18/26

29 mayo, 2015 / 10:02 amEntonces revisa las conexiones. Si no utilizas Arduino UNO/Nano/Duemilanove osimilares puede que tus pines SDA/SCL no sean A4 y A5. Mira esta página para sabercuáles son las conexiones del SDA/SCL de tu placa:http://www.arduino.cc/en/reference/wire

Final de línea.

ResponderERICK HERNANDEZ29 mayo, 2015 / 10:47 pmMuchisimas Gracias por responder pues mas bien creo el MPU esta fallado o algo asipor que lo probe con otro arduino uno, con un arduino mega he igual no me dabanada quizas sea culpa de las estupidas HADAS saludos. Comprare otro MPU

9. JOSUE GARCIA AVILA29 mayo, 2015 / 2:33 am

Excelente artículo. Sólo tengo una duda. Cuando abro el Monitor Serie sólo me dá lasmediciones de unas 5 o 6 veces después deja de tomar datos y ya no imprime nada. Seráproblema del MPU?

ResponderTR4NSDUC7OR29 mayo, 2015 / 10:05 amNo tiene por qué. Mira que no tengas algún mal contacto entre dos cables y que tu USBfuncione bien (alguna vez me han surgido errores así por utilizar un cable USB roto).

Final de línea.

Responder0. RODRIGO VARONA

1 junio, 2015 / 8:28 amHola!!!!

Antes que nada permiteme felicitarte por tu gran trabajo con este tutorial, creo que amuchos nos ha sacado de lios.

Tengo una duda; a mi lo que me interesa de este sensor es solo la lectura del acelerometro,pero obtengo valores como este:

Acel X: 348Acel Y: ‑608Acel Z: 16188————Acel X: 168Acel Y: ‑536

Acel Z: 16180

¿Tu sabes como transformo esos valores a unidades de m/s o algo parecido?

 

Page 19: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 19/26

Espero me puedas ayudar y agradezco mucho tu atención.Saludos!!!!

ResponderTR4NSDUC7OR1 junio, 2015 / 10:53 pmSaludos, Rodrigo.

Los valores que proporciona el acelerómetro vienen “en bruto” y tienes que dividirlospor una constante. En este caso es 16384 (o 1638.4 si lo quieres en m/s²).

Fíjate que si divides el valor de AcelZ entre 16384 te da 0.98, que es un múltiplo de laaceleración de la gravedad. Recuerda que el acelerómetro mide la aceleración, no lavelocidad.

Suerte, humano.

Final de línea. Responder

RODRIGO VARONA2 junio, 2015 / 5:17 amMuchas gracias.

Te debo una.

Una ultima, ¿los datos del giróscopo los da directo en rad/s o hay aplicarle un factor

de conversion?

P.D. se me pasaron las unidades de aceleración

TR4NSDUC7OR4 junio, 2015 / 11:15 pmHola, Rodrigo. Se me había pasado tu comentario.

Los datos del giroscopio hay que dividirlos entre 131, y te dará el resultado en rad/s.

Final de línea.

1. TEPOX2 junio, 2015 / 7:50 pmmuchas gracias por tu tiempo

Responder2. WARKELS

3 junio, 2015 / 8:38 pmhola, tengo un problema, los valores de x y de y van aumentando progresivamente hastallegar a los valores de x = 28.73 y de y = ‑57.90cuan puede ser el error?los valores no reaccionan al movimiento de la imugracias.

Page 20: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 20/26

ResponderTR4NSDUC7OR4 junio, 2015 / 11:13 pmSaludos, Warkels. Es problema de conexiones.

Dime, ¿qué version de Arduino tienes? ¿Y dónde has conectado los pines SDA y SCL dela IMU? Si utilizas Arduino DUE o Leonardo es posible que tengas que cambiar los

pines (D2 y D3 para Leonardo y D21, D22 para DUE).Final de línea.

ResponderWARKELS5 junio, 2015 / 10:03 pmgracias por responderme,utilizo la versión nano de 328 y e conectado los pines SDA Y SCL a los pines A4 y A5

TR4NSDUC7OR7 junio, 2015 / 10:26 am

 Justamente el modelo que tengo yo. Entonces tienes alguna otra conexión mal.¿Tienes la IMU conectada a 3.3v?

Final de línea.

3. CARLOS7 junio, 2015 / 7:08 amhola que tal, tambien tengo el problema de DiegoAhora se ha detenido enAngle X: ‑35.95Angle Y: 37.94Está correcto?….Tengo el arduino mega2560

gracias!

Responder

TR4NSDUC7OR7 junio, 2015 / 10:29 amSaludos, Carlos. Eso es por qué no has conectado bien la IMU.

Las conexiones de los pines SDA y SCL para Arduino Mega son D20 y D21respectivamente. Eso está escrito en el tutorial.

Final de línea.

Responder

EDGAR27 junio, 2015 / 3:12 amTengo el mismo problema, aunque no tengo soldado los pines del mpu, sera por eso?ayuda!

Page 21: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 21/26

TR4NSDUC7OR27 junio, 2015 / 3:22 pmPara empezar: SIEMPRE tienes que soldar bien tus componentes y piezas. De locontrario no esperes que funcionen al 100%.

Pero creo que el problema es, como explica el tutorial, que algunas versiones deArduino tienen cambiados los pines SDA y SCL y no son A4 y A5. Por ejemplo, los

pines SDA/SCL en Arduino Leonardo son D2 y D3.Como no sé que modelo tienes, mira en este enlace cuáles son los pinescorrespondientes:

https://www.arduino.cc/en/reference/wire

Este error lo he visto varias veces, y siempre ha sido problema de conexiones.

Espero que esto te sirva.

Final de línea.

PS: por lo que tengo entendido, la placa Arduino DUE siempre da problemas con lospines SDA/SCL. No sé si es verdad o no (no lo he probado) pero si tienes esta versióndeberías intentarlo con otra.

4. MAXIM12 junio, 2015 / 12:40 amHola, gracias por la info. Quiero conectar tres MPU6050 a un Arduino y obtener datos utiles

de ellos. Sabes por donde debo empezar? Gracias! Responder

TR4NSDUC7OR14 junio, 2015 / 11:14 amSaludos.El MPU‑6050 tiene un pin llamado AD0. Si este pin está a LOW (o HIGH, ahora norecuerdo exactamente) cambia la dirección del MPU‑6050 de 0x68 a 0x69.

Entonces, ¿cómo puedes leer 3 IMUs? Vamos a llamar a las IMUs A,B,C:

‑Primero cambias la dirección de B y C a 0x69. A la dejas a 0x68.‑Lees la dirección 0x68, y guardas sus lecturas en una matriz.‑Cambias A y C a 0x69, y B a 0x68.‑Lees la dirección 0x68, y guardas sus lecturas en otra matriz.‑etc

Final de línea.

Responder

5.PIPE14 junio, 2015 / 12:42 amexelente tutorial.tengo una duda com puedo utilizar estos datos para controlar 2 motores??, lo que quiero eshacer un segway y que con el acelerometro estabilice y baya hacia atras o hacia adelante

Page 22: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 22/26

ResponderTR4NSDUC7OR15 junio, 2015 / 8:52 pmSaludos, pipe.

Para utilizar estos datos y estabilizar un robot lo que necesitas es implementar uncontrolador PID.

Se trata de un algoritmo que dada una posición ideal y la posición actual modifica lasalida en función del error (en este caso las posiciones son los ángulos y la salida lavelocidad del motor).

Puedes encontrar más información del controlador PID si buscas por internet. He aquíalgunos enlaces:

https://en.wikipedia.org/wiki/PID_controller

https://developer.mbed.org/cookbook/PIDEspero que te sirva.

Final de línea.

Responder6. BRYAN

17 junio, 2015 / 3:16 amNecesito sacar solo una medida de angulo que unifique las medidas de X y Y como podria

hacerlo (muy buen trabajo funciona perfectamente ) Responder

TR4NSDUC7OR17 junio, 2015 / 10:06 am¿Unificarlas para qué exactamente? No veo que sentido puede tener, ni tampoco se meocurre una fórmula matemática para hacerlo: los ángulos son independientes para cadaeje.

Final de línea.

Responder7. ROGELIO

20 junio, 2015 / 6:20 amHola, tengo una GY‑87, que trae esta IMU y además un magnetómetro, mi idea es fusionarcon Kalman los datos del acelerómetro y giróscopo para estimar el pitch y el roll y susderivadas. Y también mediante Kalman fusionar el giróscopo y magnetómetro para estimarel yaw y su derivada. Ya logré hacer la fusión del acelerómetro y giróscopo. Necesitohabilitar el bypass de la IMU6050 hacia el magnetómetro, he leído las hojas de datos, y por

lo que entendí, necesito configurar sólo 2 parámetro en la IMU, pero no puedo hacerlo. Mepodrías dar una mano para poder leer el magnetómetro?, abrazos!

ResponderTR4NSDUC7OR

Page 23: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 23/26

22 junio, 2015 / 12:58 pmSaludos, Rogelio. Me temo que no puedo ayudarte, todavía no he probado de conectarel MPU6050 a un sensor externo.

Final de línea.

Responder

ROGELIO22 junio, 2015 / 2:07 pmHola TR4NSDUCO7OR, te comento que ya pude hacerlo, yo estoy trabajando con unPIC18 por ahora. Ahora tengo que implementar lo mismo en dsPIC y en un CortexM4 de Texas Instrument. Estoy haciendo fusión sensorial con Kalman. Acá los datosdel magnetómetro, con un ajuste implícito no lineal a un elipsoide, para estimar eloffset de los ejes que sería el centro del elipsoide. Saludos!!!http://i.imgur.com/sjQlvsw.png?1

8. CAMILA

24 junio, 2015 / 5:59 pmHola!Estoy trabajando para un proyecto de universidad y necesito medir los ángulos deinclinación de una articulación definida.Estoy utilizando un arduino pro mini 328‑ 5V/16MHz y un MPU6050 sparkfun.Ahora, el programa compila, pero los datos que me da van aumentando progresivamente y,según creo, el giroscopio o acelerometro no toma bien.

Espero que me puedas ayudar lo antes posible, porque necesito terminarlo rápido.

Muchas gracias por el blog y la ayuda.

ResponderTR4NSDUC7OR24 junio, 2015 / 9:41 pmSaludos, humano.

He visto varias veces este error, y siempre ha sido problema de malas conexiones de lospines SDA y SCL. Si usas Arduino Pro Mini, es muy fácil haber confundido los pines A4

y A5.Asegúrate que el pin SDA de la IMU está conectado a A4, y el pin SCL está conectado aA5.

Por otra parte, si trabajas con el MPU6050 de Sparkfun, tu IMU es un poco diferente a lamía. Tienes dos pines llamados VDD y VIO. Si no me equivoco ambos deben serconectados a 3.3v, no sólo VDD.

Ya me dirás si te ha funcionado.

Final de línea.

Responder9. TURUNUT

Page 24: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 24/26

29 junio, 2015 / 12:45 amHola, buenas noches.

Muy bueno el post, es el que mas me ha ayudado con diferencia pero tengo una duda.El filtro es lento como ya has comentado en alguna respuesta, pero no hay forma de hacerlomas rápido? Es decir que detecte las variaciones del angulo mas rápidamente.

Comparado con algún vídeo que he visto en youtube este es lento. Es porque ellos usan elfiltro original y no el complementario?

Muchas gracias de antemano y muy buen trabajo

ResponderTR4NSDUC7OR29 junio, 2015 / 10:50 amHola, Turunut. Eso depende en parte de lo bien que ajustes el valor dt del filtro. En estetutorial puse 0.01 a ojo, pero si quisieras ser un poco más meticuloso tendrías que

calcular cuánto tiempo ha pasado desde que Arduino ha ejecutado la línea del filtrocomplementario por última vez (mirate la función de arduino milis() ). Eso tendría queeliminar parte del retardo.

Pero por otra parte, yo he probado de visualizar unos cubos en MATLAB y girarlos conla IMU con este mismo código (http://robologs.net/2014/11/04/arduino‑y‑matlab‑v‑leer‑una‑imu‑por‑serial/), y el retardo era casi inadvertible.

Final de línea.

ResponderTURUNUT29 junio, 2015 / 11:58 amHe descubierto que modificando los valores 0.98 y 0.02 por 0.9 y 0.1 se reducemuchísimo el tiempo de reacción pero tiene algún efecto negativo? en la precisión o enel drift?

Muchas gracias

ResponderTR4NSDUC7OR29 junio, 2015 / 5:29 pmCambiar estos valores puede afectar a la precisión a corto y/o largo plazo (para mejoro para peor). Si estos valores te funcionan y ves que la precisión es buena, mejorquédate con estos.

Final de línea.

TURUNUT

2 julio, 2015 / 12:58 amSolo decir que ya he encontrado la solución definitiva sin perder precisión. los valoresde 0,98 y 0,02 están bien. Lo que se tiene que modificar es la velocidad de transmisióndel Serial a 38400.

Page 25: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 25/26

Por supuesto se tiene que cambiar en el setup:

Serial.begin(38400);

Lo que no se es hasta que limite podemos ir subiendo sin que pase algo malo.Muchísimas gracias otra vez por el pedazo tutorial

(Yo uso un Arduino Mega 2560)

Responder0. OMAR

30 junio, 2015 / 7:32 pmhola muy buen tutorial, tienes alguno de PID, ando en el proyecto del balanceo de dosruedas. te agradezco tu ayuda

ResponderTURUNUT

2 julio, 2015 / 10:16 amMírate esta web http://www.x‑firm.com/?page_id=148

ResponderOMAR8 julio, 2015 / 9:54 pmmuchas gracias

1. KURAY7 julio, 2015 / 9:24 pm

Excelente pagina, me a sido de mucha utilidad.

una pregunta

¿por que se multiplica por ‑1? ‑1*(AcX/A_R)

//Se calculan los angulos Y, X respectivamente.Acc[1] = atan(‑1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;

Responder

TR4NSDUC7OR9 julio, 2015 / 11:25 pmPorque la fórmula da el resultado en números negativos, de ahí que sea necesariomultiplicarlo por ‑1.

Final de línea.

Responder2. JAVIER

11 julio, 2015 / 5:09 amSaludos. Tengo en mente realizar una cámara giroscópica utilizando este programa con unservomotor, pero me me ocurre que el ángulo varía cuando le afecta una aceleración lateralen dirección perpendicular al eje que quiero estabilizar.

Page 26: Tutorial de Arduino y MPU-6050 – Robologs

7/23/2019 Tutorial de Arduino y MPU-6050 – Robologs

http://slidepdf.com/reader/full/tutorial-de-arduino-y-mpu-6050-robologs 26/26

Por ejemplo, si quiero estabilizar el eje X, me sitúo en el ángulo 0 y sin girar el giróscopo loagito en dirección del eje Y este me varía de ‑30º a 30º.

Llevado a la práctica, si lo utilizo en una moto cuando esta se incline en una curva, laaceleración centrífuga que se genera falseará el valor del ángulo que tiene que contrarrestaral inclinar la moto, que es el que se quiere estabilizar.

He probado cambiando los porcentajes en el filtro complementario, pero no he conseguidoresultado. ¿Alguna idea sobre como conseguir que no le afecte estas aceleraciones?

Gracias de antemano y por este excelente tutorial.

ResponderTR4NSDUC7OR13 julio, 2015 / 5:10 pmHola Javier. He estado pensando mucho en tu problema y no veo por qué te cambia elángulo. Ahora mismo, por ejemplo, acabo de cargar el programa del tutorial y estoy

agitando la IMU con fuerza en ambos ejes: no obtengo ninguna variación significativaen el ángulo.

Me cuesta decir dónde puede estar el problema. ¿Has cambiado algún parámetro delFiltro Complementario? ¿Utilizas la misma IMU (MPU‑6050)? ¿No estarás mostrando enpantalla los valores sin filtrar?

Final de línea.

Responder

JAVIER13 julio, 2015 / 10:25 pmPues tienes razón, he revisado el código y ha sido fallo mío. La variable que le heasignado al servo es la del ángulo sin corregir y por eso me ocurría que me cambia elángulo. Ya lo he probado nuevamente cambiando este error y va perfecto. Milgracias.

TR4NSDUC7OR13 julio, 2015 / 11:32 pm

No hay de qué, humano. Suerte con tu proyecto.Final de línea.

Blog de WordPress.com. | El tema Plane. Seguir

Seguir “robologs”