Cómo agregar un módulo de sensor I2C adicional en Arduino

4

He probado el sensor GY-521 en Arduino usando la guía de ( enlace ). Funciono bien ¿Alguien me puede guiar sobre cómo puedo agregar otro módulo GY-521 por favor? Estoy planeando usar un total de cuatro de ellos conectados a mi Arduino Uno. ¿Cómo defino los módulos de sensor adicionales en el programa?

    
pregunta Robert

3 respuestas

5

La ruptura del sensor GY-521 es un dispositivo esclavo I2C. Siempre que pueda obtener (o configurar) los sensores adicionales como esclavos I2C con diferentes direcciones de esclavos, se controlarán de la misma forma que el primero, aparte de tener un inicio de comunicación separado para cada uno de los sensores y luego leer los datos. Regreso de cada sensor por su dirección I2C.

Desafortunadamente, el MPU-6050 , la Moción La Unidad de Procesamiento IC en el GY-521, admite solo dos direcciones I2C de esclavos, por lo que en el mejor de los casos podrá encontrar (o modificar) tablas de ruptura para admitir estas dos direcciones (según el nivel lógico aplicado al pin AD0 / pin 9 del IC). Si en realidad necesita más de 2 dispositivos al mismo tiempo, observe otros dispositivos similares y sus correspondientes tableros en movimiento.

El cableado físico implica que todos los módulos se conecten en paralelo en los mismos pines que ya ha utilizado para controlar el primer módulo, también conocido como un bus I2C. Esto solo funcionaría si solo uno de los módulos tiene sus resistencias de pull-up habilitadas. En el esquema para el módulo, estas resistencias de pull-up están marcadas como R4 y R5, 4.7 kiloOhms cada uno.

En la placa GY-521 que se muestra en el enlace proporcionado en la pregunta, las resistencias de pull-up parecen ser de 2,2 k cada una, como se ve a continuación:

La placa real que usted tiene que examinar, para verificar qué pequeñas partes SMD específicas son las resistencias de pull-up en ella: No es demasiado difícil de hacer, ya que están unidas a las almohadillas de patillas del encabezado SDA y SCL.

En todas menos una de las placas de sensores, deberá desoldar esas dos resistencias con cuidado, sin alterar ninguna otra parte ni otras uniones de soldadura en la placa. Si no está acostumbrado a trabajar con componentes SMD, es mejor comenzar por practicar primero en algunos tableros de chatarra recuperados de impresoras condenadas u otro hardware.

Es mucho pedirle a alguien que escriba el código por ti, pero hay varios tutoriales de Arduino sobre la comunicación con varios dispositivos I2C que comparten un bus. Busque en el mismo sitio donde encontró la guía para este módulo.

    
respondido por el Anindo Ghosh
2

Como necesita cuatro de estos módulos i2c, que solo admiten dos direcciones (según el pin AD0), tiene cuatro opciones.

El primero es usar varios buses i2c en su Arduino. Hay varias implementaciones de software i2c para Arduinos. Estos son software (o bitbanged) código i2c. Añaden gastos generales, pero para la mayoría de los proyectos, debería estar bien. Estos toman otros dos pines.

El segundo está usando un chip i2c switch / multiplexer / bus / buffer. Estos chips cambian físicamente entre dos (o más) buses, o usan buffers u otros métodos para permitir que múltiples buses en un lado se comuniquen en un solo bus en el otro lado. Algunos usan una entrada adicional para cambiar, otros son dispositivos i2c (envías un mensaje i2c para hacer el cambio).

El tercero y el cuarto son un poco diferentes, requieren un par de pines libres y dependen del chip i2c que esté utilizando. No todos los chips i2c actuarán de la misma manera. El tercero depende de la velocidad que se necesita para reiniciarse a partir de una pérdida de energía, o si la calibración demora un poco. Esto sería desconectar la alimentación de uno de los módulos. Cualquier pequeño transistor de señal o mosfet funcionaría para esto. Como el mpu-6050 tiene un procedimiento de encendido recomendado (VDD y luego VLogic), este podría no ser el mejor.

La opción final, los pines ad0 en los cuatro módulos se pueden vincular a cuatro gpio libres en el arduino, y luego puede cambiar el ad0 para que solo uno de los dispositivos i2c tenga la dirección única a la vez . Tres tendrían la misma dirección 0x68 (AD0 bajo), la cuarta tendría 0x69 (AD0 alto), leer el sensor, luego cambiarlo para que el tercero tenga la dirección 0x69, leerlo, repetir la espuma de enjuague. Esto agrega solo un pequeño código a su proyecto y no requiere partes adicionales. Esto podría no funcionar si lo haces demasiado rápido, o si al ic no le gusta que el pin AD0 se cambie después del encendido, pero es la forma más barata y sencilla.

    
respondido por el Passerby
-2

No creo que pueda agregar 4 dispositivos I2C idénticos ya que las ID de dispositivo de bus serán las mismas. ¿Por qué necesitarías 4 acelerómetros, uno te da todos los ejes de movimiento?

    
respondido por el Ron J.

Lea otras preguntas en las etiquetas