Comunicación de varios arduinos con un maestro

Muy buenos días:

Estoy pensando montar un sistema en el cual necesito conectar unos 15 Arduino pro mini a un arduino UNO.

Cada uno de éstos Arduinos pro mini está a su vez conectado a un mpu-6050, de manera que lee los datos de éste sensor y realiza los cálculos necesarios, y la idea es que el arduino uno reciba los datos procesados por cada Arduino pro mini y los envíe a un PC vía bluetooth.

¿Es posible realizar éste montaje? He leído sobre la comunicación Rx-Tx entre Arduinos, pero en éste caso necesito que 15 Arduinos se comuniquen con un Arduino central. ¿Es posible multiplexar de algún modo los 15 Arduino pro mini para que envíen de forma secuencial los datos al Arduino central?

Muchas gracias por anticipado. :slight_smile:

Yo eso lo haría por RS485 (que requiere algo de hardware extra MAX485), tmb puede ser por i2C o SPI.
En todas las configuraciones tienes una topología maestro esclavo.
Los mas rápidos son i2c y SPI. en todos los casos debes ir haciendo un polling o sea, consultas al nodo y este responde, pero debido a las velocidades en mucho menos de 1 segundo tienes los 15 datos nuevos.

¡Muchas gracias por responder!

La cosa es que los mpu6050 utilizan i2c, y no se si a los pro mini les quedan conexiones libres para comunicarse por ese protocolo con el maestro. ¿El SPI y el otro que comentas son muy complicados de utilizar? Es que soy un pelín novato en esto de comunicar arduinos y me pilla todo un poco de nuevas...

SantiCA:
¡Muchas gracias por responder!

La cosa es que los mpu6050 utilizan i2c, y no se si a los pro mini les quedan conexiones libres para comunicarse por ese protocolo con el maestro. ¿El SPI y el otro que comentas son muy complicados de utilizar? Es que soy un pelín novato en esto de comunicar arduinos y me pilla todo un poco de nuevas...

Antes de seguir, dime que distancias hay entre el maestro (UNO) y los esclavos (PRO MINI).
Considera en tu respuesta que si fuera por I2C o SPI estan todos unidos en paralelo, del UNO al 1er nodo, de éste al segundo, ... hasta el 15avo.

Luego veremos como resolver el tema que planteas.
Tal vez lo mas facil sería usar SPI para comunicar Arduinos y i2C para la comunicación de cada PRO MINI con el MPU6050, pero dependera de las distancias

Las distancias serían las existentes entre distintas partes del cuerpo.(mano, antebrazo, brazo, hombro, pierna...) y la idea sería poner el arduino central por ejemplo en un cinturón, y de ahí por Bluetooth todos los datos recogidos al pc.

Veamos hasta que puento no es posible usar un solo arduino que lea los 15 MPU6050

para ellos analicemos los pines de dirección del MPU6050. Tenemos AD0 y AD1 para usar dos no hay problema pero para usar 15 no sirve.
Entonces que tal si usas dos 74hc595 y seleccionas AD0 de cada MPU6050 cuando envias via SPI al 595 el bit correspondiente.
Eliminas peso, eliminas consumo, y tienes todo en uno.
Ademas si usas un MEGA o DUE que tienen multiples pines hasta no necesitas ningun integrado extra.
Si solo usarías el UNO, tienes del 2 al 13 que te dan 11 pines mas de A0 a A3 que son 4 mas totalizando 15.
Pero no sobra nada para el BLUETOOTH a menos que prescindas de disponer de TX RX para uso de monitoreo.
Si es asi cierra todo..

Veamos como quedaría.
Arduino UNO
A4 y A5 para I2C a todos los MPU6050
Usarás todos los pines desde A0.a A3 y desde 2 a 13 para seleccionar MPUs. en el pin AD0 con AD1 a VCC

Usarás Rx y Tx para el BT

NO necesitas ni un MINI PRO.

Le da la potencia de cálculo SI.
SI necesitas mas potencia de cálculo usa un MEGA/DUE

También necesito comunicación desde el arduino a los mpu para proporcionar interrupciones (utilizo el algoritmo de Jeff Rowberg). Yo estoy casi seguro de que se puede hacer todo con un arduino, pero encuentro dos problemas:

1- Sinceramente, no se si voy a ser capaz de hacer el código para manejar todos los mpu con un único Arduino. :confused:

2- Utilizando un único Arduino hay que leer secuencialmente con multiplexores todos los sensores. Ésto implica leer de un sensor, realizar todos los cálculos del algoritmo, pasar al siguiente sensor, realizar cálculos...así hasta el número 15. Necesito las medidas de una manera más o menos simultánea, y mi sensación es que de ésta manera desde que se lee el primer valor hasta que se procesan los datos del último, puede haber un retraso importante. De la otra manera se están calculando continuamente datos debido a los procesadores de todos los pro mini (que al fin y al cabo no ocupan casi y cuestan 4 euros) y el único retraso se produciría al tomar los datos de cada Arduino pro mini.

Éste viene siendo mi dilema los últimos días... :stuck_out_tongue:

Ahh ese es otro tema. Si quieres hacer como procesamiento paralelo con los 15 PRO MINI, nada que decirte.

Adelante. Entonces vuelve a considerar comunicarte via SPI. Ve investigando como hacerlo aunque es fácil.

Es posible que intente hacerlo todo con un sólo Arduino tal y como me sugieres, para ver el resultado y como ejercicio para aprender. S¡ fracaso siempre puedo intentar lo de los arduinos pro mini.

En cualquiera de los dos casos, hay suficientes puertos para poder hacerlo no?

Un millón de gracias por tu interés y consejos!

No hay suficientes puertos, I2C, hay solo uno pero debes ir seleccionado con AD0 en LOW el MPU que quieres leer.
Puedes usar la tecnica que te comenté pero con decodificadores y usar llaves 4051 para esperar la interrupción del MPU asi aceleras el proceso.
Antes de hacerlo mira cuales serían los tiempos de respuesta, toma un cálculo completo usando millis() o Micros() para saber cuanto demora y ver si es factible.
O bien conecta 2 y haces la proyección a 14/15.

He hecho una imagen que adjunto en éste post, a ver si he entendido bien lo de conectar varios IMU al mismo Arduino.

En dicha imagen (perdón por la ‘‘obra de arte’’ :stuck_out_tongue: ) he obviado el bluetooth y la alimentación, que asumo debería ser separada para el arduino y los sensores para no terminar friendo el arduino con los 15 sensores simultáneamente.

¿Estaría bien así? ¿Falta alguna resistencia o algo? ¿Es necesario poner level shifters para las señales de ADO?

Por otro lado, las señales de SDA y SCL aparecen conectadas entre sí y llevadas directamente a los pines A5 y A4. ¿Es ésto correcto o es necesario también multiplexarlas?

Los ADO deberían ir con una R de 4k7 o 10k a 5V que es lo que tienes disponible.
Aunque he leido que el MPU6050 es 5V tolerante también solo veo esquemas donde usan shift level ICs.

Te sugiero que uses un divisor resistivo con cada salida del 595 si mal recuerdo era el que usarias, ya que su salida es 5v luego ponlo de este modo Salida595--2k2--AD0--3k3--Gnd

La interrupción la dejas normal porque es entrada para el arduino.

Vale, estoy esperando que me llegue un segundo sensor para hacer pruebas con ésto, en cuanto me llegue comentaré el resultado. Gracias de nuevo! :slight_smile:

Con 2 es facil juegas con AD0 y AD1 pero intenta probarlos siguiendo este critero.
Algo mas, ve consiguiendo un regulador 3.3V no sometas la salida del arduino para esa tarea. No entrega tanta corriente.