Go Down

Topic: MPU6050 No consigo hacerlo funcionar correctamente (Read 268 times) previous topic - next topic

nestor_projects

Nov 10, 2019, 10:53 pm Last Edit: Nov 11, 2019, 01:52 pm by surbyte Reason: Los enlaces tmb van con etiquetas.
¡Buenas!

Este es mi primer mensaje en el foro. Primero que nada muchas gracias si estás leyendo, porque necesito ayuda.

Llevo una semana intentando hacer funcionar el sensor MPU6050 en montaje GY-521 con Arduino Mega. Os detallo a continuación:



Prueba A. Primero lo intenté con un MPU6050 comprado en AliExpress y una placa Funduino Mega (clon del Arduino Mega)

No conseguí hacerlo funcionar de ninguna manera. He probado todas las librerías y sketches de ejemplo que he encontrado. Como por ejemplo:

https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
https://github.com/ElectronicCats/mpu6050
https://github.com/jarzebski/Arduino-MPU6050

También he seguido varios tutoriales:

https://www.luisllamas.es/arduino-orientacion-imu-mpu-6050/

https://naylampmechatronics.com/blog/45_Tutorial-MPU6050-Aceler%C3%B3metro-y-Giroscopio.html
https://www.prometec.net/usando-el-mpu6050/

Y lo único que obtuve como resultado es esto:

Code: [Select]
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0


Prueba B. Después de pelear mucho, decidí comprar otro MPU6050 para probar. Esta vez lo compré en una tienda de electrónica de mi ciudad, mucho más fiable (en teoría).

Y tampoco conseguí que me diera ninguna lectura diferente a los eternos "ceros"...

Prueba C. A continuación busqué y rebusqué por el almacén, porque sabía que tenía una placa Arduino Mega original. Finalmente la encontré y he probado el MPU6050 con el Arduino Mega original. Y obtengo los mismos resultados.




Para ser más específico, paso aquí todos los pasos de la última prueba que he hecho. (Aunque como os comentaba con otras librerías y sketches consigo los mismos resultados):

1. Paso el I2Cscanner, y sí que me encuentra el dispositivo:

Code: [Select]
I2CScanner ready!
starting scanning of I2C bus from 8 to 119...
addr: 8      
addr: 9       addr: 10       addr: 11       addr: 12      
addr: 13       addr: 14       addr: 15       addr: 16      
addr: 17       addr: 18       addr: 19       addr: 20      
addr: 21       addr: 22       addr: 23       addr: 24      
addr: 25       addr: 26       addr: 27       addr: 28      
addr: 29       addr: 30       addr: 31       addr: 32      
addr: 33       addr: 34       addr: 35       addr: 36      
addr: 37       addr: 38       addr: 39       addr: 40      
addr: 41       addr: 42       addr: 43       addr: 44      
addr: 45       addr: 46       addr: 47       addr: 48      
addr: 49       addr: 50       addr: 51       addr: 52      
addr: 53       addr: 54       addr: 55       addr: 56      
addr: 57       addr: 58       addr: 59       addr: 60      
addr: 61       addr: 62       addr: 63       addr: 64      
addr: 65       addr: 66       addr: 67       addr: 68      
addr: 69       addr: 70       addr: 71       addr: 72      
addr: 73       addr: 74       addr: 75       addr: 76      
addr: 77       addr: 78       addr: 79       addr: 80      
addr: 81       addr: 82       addr: 83       addr: 84      
addr: 85       addr: 86       addr: 87       addr: 88      
addr: 89       addr: 90       addr: 91       addr: 92      
addr: 93       addr: 94       addr: 95       addr: 96      
addr: 97       addr: 98       addr: 99       addr: 100      
addr: 101       addr: 102       addr: 103       addr: 104 found!
addr: 105       addr: 106       addr: 107       addr: 108      
addr: 109       addr: 110       addr: 111       addr: 112      
addr: 113       addr: 114       addr: 115       addr: 116      
addr: 117       addr: 118       addr: 119      
done


2. A continuación, instalo las librerías I2Cdev y MPU6050 de jrowberg https://github.com/jrowberg/i2cdevlib

3. Abro el sketch de ejemplo MPU6050raw.ino

Lo compilo y lo subo a la placa (sin ningún tipo de error) y leo el Serial Monitor. Aparece lo que os comentaba al principio del mensaje:

Code: [Select]
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0
a/g: 0 0 0 0 0 0


He estado mirando por Google, aquí en estos foros (tanto en inglés como en español). Y he probado todo lo que he visto, pero sin resultados positivos.



¿Alguien me podría arrojar algo de luz?
Ya no sé por dónde tirar.
Os lo agradezco de antemano.





tauro0221

Hi,
Adjunto un link usando un mega. Posiblemente haz tratado pero como usan un mega posiblemente te pueda ayudar ya que usas un mega. Con tratar no sacas nada.

http://dummyscodes.blogspot.com/2014/07/mpu6050-gy-521-breakout-arduino-mega.html

nestor_projects

#2
Nov 10, 2019, 11:56 pm Last Edit: Nov 11, 2019, 01:51 pm by surbyte Reason: No repitas lo que se lee arriba.
@tauro0221
Muchas gracias por tu aportación. He probado con el sketch de "Krodal" que cuentan ahí, y aparecen varios errores en la compilación:

Code: [Select]
/Users/Z/Documents/Arduino/I2CScanner_2/I2CScanner_2.ino:160:0: warning: "MPU6050_AUX_VDDIO" redefined
 #define MPU6050_AUX_VDDIO MPU6050_D7  // I2C high: 1=VDD, 0=VLOGIC
 
/Users/Z/Documents/Arduino/I2CScanner_2/I2CScanner_2.ino:55:0: note: this is the location of the previous definition
 #define MPU6050_AUX_VDDIO          0x01   // R/W
 
/Users/Z/Documents/Arduino/I2CScanner_2/I2CScanner_2.ino:564:0: warning: "MPU6050_FIFO_EN" redefined
 #define MPU6050_FIFO_EN        MPU6050_D6
 
/Users/Z/Documents/Arduino/I2CScanner_2/I2CScanner_2.ino:66:0: note: this is the location of the previous definition
 #define MPU6050_FIFO_EN            0x23   // R/W
 
/Users/Z/Documents/Arduino/I2CScanner_2/I2CScanner_2.ino:639:1: warning: 'typedef' was ignored in this declaration
 typedef union accel_t_gyro_union
 ^~~~~~~
El Sketch usa 6346 bytes (2%) del espacio de almacenamiento de programa. El máximo es 253952 bytes.
Las variables Globales usan 410 bytes (5%) de la memoria dinámica, dejando 7782 bytes para las variables locales. El máximo es 8192 bytes.



Y en el Serial Monitor me aparecen los ceros que comentaba en el post original:

Code: [Select]
InvenSense MPU-6050
June 2012
WHO_AM_I : 68, error = 0
PWR_MGMT_1 : 0, error = 0

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 0, 0, 0
temperature: 36.506 degrees Celsius
gyro x,y,z : 0, 0, 0,

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 0, 0, 0
temperature: 36.506 degrees Celsius
gyro x,y,z : 0, 0, 0,

MPU-6050
Read accel, temp and gyro, error = 0
accel x,y,z: 0, 0, 0
temperature: 36.506 degrees Celsius
gyro x,y,z : 0, 0, 0,




tauro0221

Hi,
El error se debe a que esa variable esta redefinada mas de una vez en el programa y te da un mensaje de alerta. Lo que puedes hacer es de hacer una busqueda y si la usan varias veces la variable entonces la defines al principio. Compila el sketch y cuando te de el error le quita la definicion de la variable ejemplo si es byte o int  remuevelo hasta que no te de errores.

nestor_projects

#4
Nov 11, 2019, 01:13 am Last Edit: Nov 11, 2019, 01:50 pm by surbyte Reason: No repitas lo que se lee arriba
@tauro0221
Sí, eso he intentado, pero mis conocimientos no llegan al nivel suficiente todavía para "arreglar" este sketch tal y como comentas.

A fin de cuentas lo que me comentas es para arreglar el sketch que me proponías antes, pero (corrígeme si me equivoco) no parece que eso vaya a solucionar el problema de base, que es la aparición de "ceros" como valor con el sensor MPU6050, independientemente de la librería y de los sketches* que use.


¡Gracias de nuevo por tu aportación!

*me refiero aquí a sketches que no den problemas de compilación

tauro0221

Hi,
Tu haz corrido el sketch  I2C scanner que te dice los address de los modulos que tienes instalados en el I2C. Segun el MPU6050 debe darte un address de 0x68 si el AD0 es zero y si el AD0 esta 5 voltios entonces el address debe de ser 0x69. Posiblemente no este leyendo el modulo. Si el scanner no te da el address entonces puede se que tengas algo mal alambrado.

nestor_projects

Gracias de nuevo tauro,

Como indicaba en el post original, al probar con el I2Cscanner me reconoce el MPU6050 en la dirección correcta

Code: [Select]
I2CScanner ready!
starting scanning of I2C bus from 8 to 119...
addr: 8     
addr: 9       addr: 10       addr: 11       addr: 12     
addr: 13       addr: 14       addr: 15       addr: 16     
addr: 17       addr: 18       addr: 19       addr: 20     
addr: 21       addr: 22       addr: 23       addr: 24     
addr: 25       addr: 26       addr: 27       addr: 28     
addr: 29       addr: 30       addr: 31       addr: 32     
addr: 33       addr: 34       addr: 35       addr: 36     
addr: 37       addr: 38       addr: 39       addr: 40     
addr: 41       addr: 42       addr: 43       addr: 44     
addr: 45       addr: 46       addr: 47       addr: 48     
addr: 49       addr: 50       addr: 51       addr: 52     
addr: 53       addr: 54       addr: 55       addr: 56     
addr: 57       addr: 58       addr: 59       addr: 60     
addr: 61       addr: 62       addr: 63       addr: 64     
addr: 65       addr: 66       addr: 67       addr: 68     
addr: 69       addr: 70       addr: 71       addr: 72     
addr: 73       addr: 74       addr: 75       addr: 76     
addr: 77       addr: 78       addr: 79       addr: 80     
addr: 81       addr: 82       addr: 83       addr: 84     
addr: 85       addr: 86       addr: 87       addr: 88     
addr: 89       addr: 90       addr: 91       addr: 92     
addr: 93       addr: 94       addr: 95       addr: 96     
addr: 97       addr: 98       addr: 99       addr: 100     
addr: 101       addr: 102       addr: 103       addr: 104 found!
addr: 105       addr: 106       addr: 107       addr: 108     
addr: 109       addr: 110       addr: 111       addr: 112     
addr: 113       addr: 114       addr: 115       addr: 116     
addr: 117       addr: 118       addr: 119     
done


Así que el MPU6050 es reconocido a través de I2C.

Luego he probado el sketch de MPU6050_raw.ino con la dirección correcta y sigo teniendo el problema de los "ceros".

tauro0221

Hi,
Ya me estaba preguntando de donde salen tantos modules de la lista que pusistes anteriormente. El problema es que el programa que yo uso solamente lista solamente los que encuentra. Si encontro el modulo quire decir que el sensor esta bien conectado. Como tienes instalado el sensor. Usas un proto board o lo tienes alambrado directamente al mega.

nestor_projects

Lo probé primero conectado directamente al Mega, pero ahora uso un Protoboard de marca Velleman para mayor comodidad (estoy probando otros sensores también).

surbyte

Pregunto, descargaste la librería presente en el Gestor de librerías?
Si corres el I2CScanner del IDE que te dice, porque además te aseguro que no hay que buscar nada. Todo MPU viene con una dirección por defecto, de modo que la dirección con la que viene debería funcionar.
Entiendo que no es tu caso por eso pregunto si usaste la librería del gestor? SI ya lo has dicho te pido disculpas.

nestor_projects

Hola @surbyte !!

Todas las librerías las descargo en la carpeta de librerías de Arduino y reinicio el programa para que se carguen correctamente.

Ahora mismo tengo las que pongo más abajo en la captura de pantalla.

Y por mucho que pruebe unas librerías u otras, unos sketches u otros... no consigo salir de los "ceros" como resultado del sensor.

No tengo ni la más mínima idea de lo que puede estar fallando. Anoche estuve probando un nuevo componente que me ha llegado, una pantalla OLED 128x36, que también se comunica por el bus I2C, y funcionó a la perfección (y a la primera). Así que por lo menos he descartado que sea cosa del Arduino.

¡Gracias por tu aporte!





Go Up