[*]Después de consultar con expertos en el tema, programadores de diversas ramas y maestros dimos con la respuesta al problema y la plasmamos en este post.
Solución:
[*]Si está utilizando IMU MPU6050, hay un truco fácil: póngalos todos en el bus I2C y conecte cada IMU AD0
pin a un pin digital separado en el Arduino[*]. Cuando desee leer desde una IMU específica, configure todos AD0
s a HIGH
excepto el que desea leer LOW
. Todas las IMU con AD0
ajustado a HIGH
con una dirección I2C de 0x69, mientras que el único en LOW
tendrá una dirección de 0x68.
[*]Si desea leerlos todos, simplemente realice un bucle y configure el que desea LOW
los demás a HIGH
y listo.
[*][*] Si quieres 20 IMU, será mejor que te hagas con una Mega o, mejor aún, una Maple. Factor de forma pequeño, bastante empuje, muchos pines y flash, y algunos clones cuestan casi nada; por ejemplo, Itead vende clones de Maple por 6 dólares. ElecFreaks los vende por 9 dólares. Puede usar los 16 pines en la parte inferior para el AD0
s.
[*]Este truco funciona con cualquier tipo de dispositivo I2C que tenga un esquema de direcciones personalizable a través de uno o más pines. Lo hago con EEPROM AT24Cxx, que tienen un rango de direcciones de 0x50-57. Cuando desee tener más de ocho chips, establecer todos menos uno en 0x50 y uno en 0x51 resuelve el problema rápidamente.
[*]Referencia: https://github.com/PaulStoffregen/FreeIMU_original/blob/master/documents/PS-MPU-6000A-00v3.4.pdf
[*]También puede obtener multiplexores I2C como el TCA9545A que puede dividir una línea I2C en 4 buses. He conectado hasta 9 MPU9150 en una línea con eso.
Reseñas y puntuaciones
[*]Acuérdate de que tienes autorización de parafrasear si te ayudó.