Necesito comunicar 2 arduinos separados una distancia de 10 metros.
He pensado en utilizar la comunicación i2c pero no he tenido éxito.
Describo lo que he probado:
Los dos Arduinos son del modelo Arduino UNO y estan alimentados por 2 fuentes de alimentación independiente que suministran 5V.
El cable multifilar de 10 metros que utilizo es un cable apantallado de 4x0.5mm^2 (CERVITRONIC LiYCY). Tiene un RT de 39 (Ohm/Km).
Los 4 hilos + malla del cable los utilizo de la siguiente forma:
Hilo 1: Conecta el pin A4 del Arduino Master con el pin A4 del Arduino Esclavo.
Hilo 2: Conecta el pin A5 del Arduino Master con el pin A5 del Arduino Esclavo.
Hilo 3: Alimentación 24V desde la fuente de alimentación hasta la entrada de potencia del Arduino Esclavo.
Hilo 4: Alimentación 0V desde la fuente de alimentación hasta la entrada de potencia del Arduino Esclavo.
Malla: Conecta el GND del Arduino Master con el GND del Arduino Esclavo.
El código que utilizo es el que viene en los ejemplos de Arduino:
Para el Master: Ejemplos --> Wire --> master_reader
Para el Esclavo: Ejemplos --> Wire --> slave_senser
Lógicamente he probado de colocar los 2 arduinos uno al lado del otro y con un cable corto la comunicación es perfecta. Lo único que hago luego es conectarlos con el cable de 10m y allí la comunicación deja de funcionar
Posibles soluciones que he leído
Bajar la velocidad de comunicación --> No he sido capaz de encontrar como hacerlo
Colocar resistencias entre la alimentación y los cables de comunicación --> No tengo claro como dimensionar la resistencia ni donde colocarlas (solo en el lado master, en los 2 lados, etc)
Utilizar un extensor de bus --> Este tema se me escapa
Utilizar otro protocolo --> RS485?
Cualquier aporte será bienvenido.
PD: Este tema ha sido tratado en otras entradas y otros foros pero no encuentro una solución concreta. Siento repetirlo.
SPI
Si bien el método de comunicación SPI generalmente es adecuado para distancias de hasta aproximadamente 10 m
RS232
La longitud del cable es uno de los elementos más discutidos en el mundo RS232. El estándar tiene una respuesta clara, la longitud máxima del cable es de 50 pies o la longitud del cable es igual a una capacitancia de 2500 pF. La última regla a menudo se olvida. Esto significa que el uso de un cable con baja capacitancia le permite abarcar distancias más largas sin ir más allá de las limitaciones del estándar. Si, por ejemplo, se utiliza un cable UTP CAT-5 con una capacitancia típica de 17 pF / pie, la longitud máxima permitida del cable es de 147 pies.
Ref: https://www.lammertbies.nl/comm/info/rs-232-specs
USB
Si no está utilizando un cable normal, la longitud máxima del cable activo para USB 2.0 es de 30 metros (98 pies y 5 pulgadas) y la longitud máxima recomendada para USB 3.0 / 3.1 es de 18 metros (aproximadamente 59 pies). Si está utilizando un cable normal (longitud máxima de 5 metros para 2.0 y longitud máxima de 3 metros para 3.0 / 3.1) con un cable activo, entonces la longitud máxima para USB 2.0 es de 25 metros (aproximadamente 82 pies) y la máxima recomendada La longitud para USB 3.0 / 3.1 es de 15 metros (aproximadamente 49 pies).
Ref: https://www.yourcablestore.com/USB-Cable-Length-Limitations-And-How-To-Break-Them_ep_42-1.html
RS485
La distancia máxima de RS-485 sin utilizar un repetidor es de 4000 pies (1220 metros) a velocidades en baudios de hasta 90 Kbps.
Amplíe esa distancia agregando un repetidor RS-485 o un repetidor aislado ópticamente cada 4000 pies.
Ref: http://www.bb-elec.com/Learning-Center/All-White-Papers/Serial/RS-485-Tips,-Tricks,-Questions-Answers/RS-485-Tips,-Tricks,-
UTP Cat5 / Cat6
La longitud máxima que puede ejecutar el cable Cat5, Cat5e, Cat6 y Cat6a es de 100 metros o 328 pies. Si necesita una ejecución más larga, deberá colocar un componente activo, como un enrutador, entre las señales.
Ref: https://www.showmecables.com/blog/post/discussing-cat5-length-limits
La malla la utilizo para igualar los tierra porque no tengo otro cable. Pero si eso es un problema podria pasar otro cable para igualar las tierras de ambos equipos...
No las tengo instaladas porque no se dimensionarlas. De donde se deduce el valor de 4k7? Y ya puestos a preguntar, supongo que debo colocarlas tanto del lado maestro como esclavo, verdad?
Pero esto disculpa te supera a ti y a todos.
Normalmente se usan 4k7 y listo. No falla salvo que tengamos muchos dispositivos I2C entonces en ese caso debemos garantizar que la resistencia final no baje de determinado valor. Pero dejemos ese caso extremo para otra oportunidad.
Siguiendo vuestras indicaciones he colocado una resistencia 4k7 entre Vcc y SDA y otra resistencia 4k7 entre Vcc y SLC. Esto lo he hecho tanto del lado Master como del lado esclavo y la comunicación YA FUNIONA.
Si solo lo hago del lado Master o Esclavo no hay comunicación pero si las coloco en ambos lados funciona bien. Y sin modificar la velocidad del bus ni nada.
Muchas gracias por la ayuda de todos los participantes.