El estándar de comunicación RS-485 es uno de los más utilizados en el sector industrial. Imagina que tienes un PLC o cualquier máquina que se comunica a través de un bus RS-485. Un bus o canal de transmisión es el medio por el cual se transfieren datos entre dos componentes electrónicos. Si la carretera tiene un único carril para cada sentido, los coches viajan uno tras de otro. Cuando es de varios carriles se dice que es un bus paralelo y cuando solo tiene un carril decimos que es serie. Ojo, que un bus serie usualmente cuenta con varios cables. No confundas los términos carril y cables. Uno de los inconvenientes que tienen los buses de información es la poca inmunidad al ruido. Para solventar esos problemas se utilizan los buses diferenciales. Estos emplean dos conductores de forma tal que las corrientes y tensiones en ambos sean simétricas. El uso de este tipo de bus no solo reduce las interferencias, sino que además causan una menor radiación.

Fundamentos de RS-485
El RS-485 es un estándar de comunicaciones ampliamente empleado en industria que podemos emplear en procesadores como Arduino para leer o escribir en otros dispositivos. El RS-485 es sencillo, robusto y, a diferencia de otras tecnologías propietarias, su uso es es gratuito. Por estos motivos, muchos dispositivos sensores y actuadores lo han adoptado como forma de comunicación, siendo frecuente en el ámbito industrial. Una de las grandes ventajas del RS-485 es que podemos transmitir los datos que queramos y como queramos. Por lo tanto, no es necesario un código complejo para implementar la comunicación.
Una de las ventajas del RS485 es la larga distancia de transmisión. El alcance depende de la velocidad, siendo posible conseguir 35 Mbps en distancias inferiores a 10 metros, y hasta 100 Kbps en distancias hasta 1200 metros. El RS485 es un protocolo de capa física según el modelo OSI. Es decir, no pone normas ni restricciones sobre el contenido, forma, o codificación de los mensajes enviados. Por tanto, podemos emplearlo para enviar cualquier tipo de señal, como por ejemplo una sea digital, PWM, puerto serie o bus I2C.
Un bus RS485 dispone de dos conductores denominados A y B (inversora). Para ellos se suele emplear un cable de par trenzado para aumentar la inmunidad al ruido. Es posible acceder hasta 32, 128 o 254 estaciones empleando un único par trenzado. El protocolo funciona, simplemente, invirtiendo la tensión entre A (no inversora) y B (inversora):
- Cuando A+ y B- se considera estado LOW.
- Cuando A- y B+ se considera estado HIGH.
Los problemas de ruido son una preocupación importante en los entornos industriales. Los campos magnéticos pueden pasar, pero no hacen daño. Las señales diferenciales y el trenzado permiten que las comunicaciones con RS485 alcancen distancias de comunicación mucho más largas que las que se pueden lograr con RS232. Las líneas de señal diferencial también permiten velocidades de bits más altas que las posibles con conexiones no diferenciales. El RS-232 es el mejor para los requisitos de baja velocidad a corta distancia. RS-232 solo permite un transmisor y un receptor en cada línea. El RS-485 es para velocidades más altas en rangos más largos o si se requiere capacidad de red dúplex.
Modos de Comunicación en RS-485
El bus permite implementar varios modos de comunicación: simplex, half-duplex y full-duplex. Estos modos se diferencian en cómo se comunican el maestro y los esclavos.
Modo Simplex
En el modo simplex RS-485 hay un solo transmisor y pueden haber varios receptores. Este tipo de comunicación es común cuando se controlan motores, relés, luces y cosas por el estilo. En este modo es necesario que uno de los dispositivos coordine la comunicación. El resto de los dispositivos son llamados slave o esclavos y estarán a la espera de instrucciones provenientes del maestro para iniciar su comunicación. La comunicación simplex es la que cada dispositivo tiene una configuración fija; un Arduino emisor envía un único byte a un Arduino receptor. En un proyecto real el emisor o el receptor podría ser cualquier otro dispositivo como un sensor, un actuador, o incluso otro procesador o un ordenador como Raspberry Pi.
Cómo usar RS485
Modo Half-Duplex
El modo half-duplex permite enviar y recibir información pero no al mismo tiempo. Para ello, se utiliza un solo par de cables para la transmisión y recepción de datos, pero alternando los roles de emisor y receptor. En el modo half-duplex, cada Arduino puede actuar como emisor o receptor, pero no simultáneamente. Para ello disponemos de un pin digital para cambiar el modo de cada Arduino. También se indica el modo en el que está operando cada Arduino con el pin integrado en la placa. El ejemplo simula la solicitud de un dato desde un Arduino maestro a un Arduino follower. Para ello, el maestro envía una trama simple, en el caso una simple ‘H’. El follower responde enviando una variable integer, que es recogida por el maestro.
Modo Full-Duplex
El modo full-duplex del protocolo RS-485, al igual que el half-duplex, puede presentar una arquitectura maestro-esclavo. Sin embargo, en este modo se utilizan dos pares trenzados, es decir, uno para transmisión y otro para recepción. Es importante aclarar que todo esclavo debe esperar la indicación proveniente del maestro para comenzar a transmitir. Un caso particular de esta arquitectura es cuando solo existen dos dispositivos. En ese caso ambos pueden transmitir sin riesgo alguno. Esta configuración en particular es precisamente la que nos permite utilizar el RS-485 como una extensión del puerto serie de Arduino.
Para la comunicación full-duplex se necesita mayor cantidad de hardware. Para ello, se usarán dos puertos seriales en cada placa Arduino. Dado que estos ejemplos se harán en placas Arduino UNO, se usará la librería SoftwareSerial para crear un puerto serie por software en los pines 3 y 4 (RX y TX respectivamente) que se comunicará con el transceiver RS485. Este es el caso más complejo a nivel de hardware, ya que requiere 4 transceivers, dos dedicados al modo TX-RX y el otro par para el modo RX-TX.
El Protocolo Modbus
En otros casos, cómo los SCADAS que hay en las fábricas o parques fotovoltaicos, se suele utilizar el protocolo Modbus. El protocolo Modbus es un tema mucho más amplio y escapa del alcance de este artículo. Usando las comunicaciones con RS-485, es posible construir una red de comunicaciones de datos multipunto. Esto significa que puede haber 32 nodos capaces de transmitir y recibir. De esta manera, es posible tener cientos de nodos en una red. A medida que las redes RS485 se hacen más grandes, el problema de las colisiones de datos se hace mayor. Otro enfoque es diseñar un sistema de maestro único. Aquí el maestro inicia una solicitud de comunicaciones a un nodo esclavo dirigiéndose a esa unidad. El hardware detecta el bit de inicio de la transmisión y, por lo tanto, habilita el transmisor.
Modbus es un protocolo que (tradicionalmente) utiliza líneas de comunicación en serie. Modbus se soporta sobre RS-485 y RS-232 para recopilar datos de los dispositivos esclavos. El protocolo Modbus fue desarrollado y publicado por Modicon® en 1979 para su uso con sus controladores lógicos programables. Está construido utilizando una arquitectura maestra / esclava y es compatible con dispositivos serial que utilizan los protocolos Arduino RS232/ RS485/ RS422. Modbus se utiliza a menudo en escenarios donde los dispositivos de control e instrumentación transmiten señales a un controlador o sistema central para recopilar y analizar datos.
Modbus RTU
Modbus RTU (Remote Terminal Unit) es uno de los dos modos de transmisión definidos en la especificación Modbus original. Los dos modos son Modbus RTU y ASCII y están diseñados para ser utilizados con dispositivos serie que admiten los protocolos de Modbus Arduino RS232, RS485 y RS422. El módulo es un esclavo Modbus RTU Arduino y se puede acoplar con cualquier dispositivo Modbus Master. Un aislamiento galvánico de 3 vías entre los circuitos de alimentación // entrada // RS485 asegura la integridad de sus datos.
El protocolo Modbus RTU es un medio de comunicación que permite el intercambio de datos entre controladores lógicos programables (PLC) y ordenadores. Los dispositivos electrónicos pueden intercambiar información a través de líneas serial utilizando el protocolo Modbus. Ha sido ampliamente aceptado y ampliamente utilizado en la construcción de Sistemas de Gestión de Edificios (BMS) y Sistemas de Automatización Industrial (IAS). Su adopción ha sido impulsada por su facilidad de uso, fiabilidad, y el hecho de que es de código abierto y se puede utilizar sin regalías en cualquier dispositivo o aplicación.
Estructura de Mensajes Modbus
El protocolo de Modbus es en realidad un formato de datos. Define básicamente el contenido de comunicación de la arquitectura maestro-esclavo. Ya que hay varios documentos explicativos en el internet, Modbus no se describirá aquí en detalle. Modbus considera la transmisión de datos como acceso de "Registro". Cada dispositivo debe definir su propio tipo de registro y dirección para referencias externas. La llamada transmisión de datos al dispositivo es escribir al registro específico, y leer los datos es leer el registro específico, que es simple y claro. Los últimos 2 bytes parecen la parte más misteriosa, pero no es difícil. Es solamente una CRC (Comprobación de Redundancia Cíclica) para asegurar los datos de comunicación.
Usos comunes del protocolo Modbus incluyen:
- 04: Leer registros de entrada para leer.
- 03: Leer registros de retención.
- /16: Escribir múltiples registros para leer y escribir.
Estos datos afectan a la apariencia de los objetos y normalmente no cambian el estado de diseño externo. Éste es el principal tipo de cambio en la operación. La primera pantalla inteligente admite solamente 10 objetos, por lo que el rango de ID de la miniaplicación es de 0 ~ 9 (inclusivo). Con estos datos (aunque no completos, pero suficientes por ahora), podemos empaquetar las instrucciones de control y enviarlas a la pantalla inteligente para el control.
Implementación con Arduino y el Módulo MAX485
El circuito integrado MAX485 es quizás el más conocido de los controladores RS-485. Por supuesto, también realiza la acción inversa. El circuito integrado o chip, se puede adquirir dentro de un módulo para poder conectarlo a un Arduino de una forma muy sencilla. Si quieres algo rápido, fiable y cómodo Amazon es una buena opción. Si entras en Amazon y buscas MAX485 encontrarás multitud de tiendas que tienen módulos MAX485. El bus CAN, al igual que el RS-485, es un protocolo muy extendido en el sector industrial. También hay un módulo MAX485 muy interesante que incluye un conector RJ-45. Podrás notar que su voltaje de alimentación máximo es de 12V. Si analizas los valores de temperatura de operación notarás que está pensado para todo tipo de ambientes. En la siguiente figura puedes ver que su consumo en reposo es de tan solo 300 uA.

En la tabla SWITCHING CHARACTERISTICS de la hoja de características técnicas se muestra un grupo de parámetros relacionados con los tiempos de transmisión y recepción. Por otra parte, presenta un encapsulado simple y compacto de tan solo 8 pines.
Pines del Módulo MAX485
- VCC: es el pin de alimentación y su voltaje debe estar entre los 4.75 y 5.25 voltios.
- GND: es el pin de tierra.
- A y B: son los pines del bus diferencial. Mediante estos pines se transmite la información a otro dispositivo RS-485.
- RE (Receiver Output Enable): permite habilitar o deshabilitar el modo de recepción. En pocas palabras si queremos recibir datos desde otro dispositivo es necesario poner este pin en estado bajo.
- RO (Receiver Output): es el pin por el cual se recibe la información enviada por otro módulo, usualmente es conectado al pin RX del Arduino. Para que la información sea recibida el pin RE debe estar en estado bajo.
- DE (Driver Output Enable): permite configurar el MAX485 en modo de transmisión. Para eso debe ser puesto en estado alto, en caso de querer desactivarlo debe ser puesto en estado bajo.
- DI (Driver Input): este pin es utilizado para transmitir información a otro dispositivo y por tanto usualmente es conectado al pin TX del Arduino.
El triángulo denotado con la letra D es el conversor serie a RS-485. Como puedes ver en el diagrama, su entrada está conectada al pin DI y su salida a los pines A y B. El otro triángulo, denotado con la letra R, es el conversor RS-485 a serie. Los pines A y B están conectados a su entrada y su salida con el pin RO. Como la salida de R y la entrada de D coinciden, sólo es posible utilizar uno a la vez, o salida o entrada.
Esquema de Montaje
La conexión de los módulos con MAX485 es sencilla. En primer lugar, alimentamos el módulo conectando Vcc y Gnd, respectivamente, a 5V y Gnd de Arduino. Por otro lado, tendremos que conectar los conductores A y B del par trenzado que constituyen el propio bus RS485, y al que estarán conectados todos los dispositivos que pertenezcan al mismo bus.
Ahora, deberemos configurar el módulo como emisor o receptor, para lo cual empleamos los pines RE (receiver enable) y DE (driver enable). Si conectamos estos pines a Vcc el módulo actuará como emisor, y si los conectamos a Gnd como receptor. Finalmente, tendremos que conectar, respectivamente la entrada de datos al DI (drive input) en el caso de que actúe como emisor, o la salida de datos del RO (receiver output) en el caso que actúe receptor.
Si queremos que durante la conexión el conversor RS485 pueda cambiar su papel de emisor a receptor (conexión half duplex) simplemente tenemos que conectar los pines RE y DE a una salida digital para poder cambiar su tensión de Gnd a Vcc.

Lógicamente, si sólo vamos a actuar como emisor o receptor, podemos prescindir de uno de los pines de datos (RX o TX) y de la conexión al pin digital de RE/DE conectándolas permanentemente a Gnd o Vcc, respectivamente, según hemos visto en los esquemas anteriores para receptor y emisor.
Como ya habíamos dicho, si queremos comunicación full-duplex (emisor y receptor simultáneamente) tendremos que usar dos conversores RS485 en cada dispositivo y dos bus RS485 paralelos independientes, uno para TX y otro para RX.
Consideraciones Adicionales
- Compatibilidad de Voltaje: Un detalle importante es que no es posible utilizar un MAX485 con placas que funcionan a 3.3 voltios. Por lo tanto, no se pueden emplear directamente con un ESP8266.
- Topologías de Bus: Si bien estas topologías pueden ser utilizadas para redes RS-485 pequeñas es decir, con pocos dispositivos y distancias cortas, lo recomendable es evitarla. En esta topología los dispositivos están conectados directamente al bus principal y no existen ramales. Esta topología minimiza las reflexiones provocadas por los conductores en los procesos de transmisión. Si tu red RS485 excede los 100 metros y opera a una velocidad mayor de 19200 bps (bytes por segundo) es posible que la comunicación se vea afectada o totalmente imposibilitada. Para minimizar esos problemas se deben añadir resistencias de terminación. La regla es que su valor debe ser igual a la impedancia característica del conductor utilizado. Eso significa que su valor depende exclusivamente del tipo de cable.
- Resistencias de Terminación: Para minimizar problemas de señal en redes RS-485 extensas o de alta velocidad, se deben añadir resistencias de terminación. Estas resistencias se colocan en los extremos de la red y su valor debe ser igual a la impedancia característica del cable (normalmente 120Ω). Las resistencias de terminación también reducen la sensibilidad al ruido eléctrico.
- Cableado: En algunas instalaciones industriales junto a los cables del bus se suele incluir un tercer cable de tierra. La RS485 utiliza pares diferenciales para transmitir y recibir señales, y por lo tanto, siempre que estos dos cables se puedan conectar, ni siquiera un cable a tierra es necesario. La conexión en cadena recomendada es de nodos de punto-a-punto (multipunto) como un modo BUS (línea).
Ejemplos de Código con Arduino
El RS485 sólo es un protocolo de capa física, es decir, un “medio de transmisión” por el que podemos mandar cualquier señal digital, lo que incluye UART, Modbus, bus SPI, I2C. Para conectarnos con un dispositivo RS485, como por ejemplo un termostato, un sensor, o un actuador industrial, necesitaremos saber el protocolo que emplea y la trama (al igual que hacemos siempre que conectamos un dispositivo).
Comunicación Unidireccional (Maestro-Esclavo)
El Arduino MEGA actúa como maestro y por tanto su módulo RS-485 está configurado como transmisor. La placa envía datos al pin DI del MAX485 mediante el pin TX3. El Arduino UNO actúa como esclavo y su módulo RS-485 se ha configurado en modo recepción. El pin DI se ha conectado al pin TX para utilizar el módulo serie de Arduino. Esta configuración es útil a la hora de implementar un dispositivo esclavo en una red Simplex. El pin RO se ha conectado al pin RX para utilizar el módulo serie de Arduino.
Un problema con el bus RS-485 es que hay que indicar a qué esclavo va dirigido cada comando. Esto solo es necesario cuando se tienen varios esclavos conectados. Para evitar este posible desastre, en el código del esclavo se declaran las mismas constantes que tiene el código del maestro. La constante MY_SLAVE_ID es el identificador único del esclavo dentro del bus RS-485.
Comunicación Bidireccional con Sensores
Imagina una arquitectura similar a la anterior pero donde algunos esclavos se les ha conectado sensores, un DHT11 por ejemplo. En estos casos, los MAX485 se deben conectar de forma tal que el Arduino sea capaz de controlar su modo de operación. El Arduino UNO, que actúa como esclavo, se ha conectado a los pines DI y RO del módulo MAX485 mediante los pines digitales 8 y 10 respectivamente. Dichos pines son utilizados por un objeto SoftwareSerial y así implementar la comunicación con el bus. El DHT11 se ha conectado de tal forma que es necesario poner los pines digitales 4 y 2 en estado HIGH y LOW respectivamente para activarlo. El Arduino MEGA cumple el rol de maestro y utiliza el módulo Serial3 para comunicarse con el MAX485.
En la función loop() se supervisa el puerto Serial esperando la llegada de algún dato proveniente del monitor serie. En estos casos se ejecuta la rutina enviarComando y seguidamente se llama a la función recibirRespuesta. Esta función recibe como parámetro el esclavo del cual está esperando respuesta y devuelve el valor enviado por éste. La estructura de la trama de la respuesta del esclavo es similar a la que envía el maestro.
Conexión entre Dos Arduinos
Hay ocasiones donde se requiere que dos Arduinos se conecten entre ellos. Cuando es una aplicación simple donde solo intervienen dos Arduinos se puede hacer a través del puerto serie o incluso conectar dos Arduinos por I2C. Estas dos configuraciones son válidas si las placas están cerca una de otra. Para esta configuración se necesitan 4 módulos MAX485, dos para cada Arduino. Como puedes ver, cada Arduino cuenta con dos módulos MAX485: uno configurado como transmisor y otro como receptor. Como en esta configuración no existe maestro ni esclavo, no es necesario esperar ningún comando para comenzar a transmitir.
Comparativa RS-232, RS-422 y RS-485
Es interesante comparar RS-485 con otros estándares de comunicación serial comunes:
| Característica | RS-232 | RS-422 | RS-485 |
|---|---|---|---|
| Tipo de Señal | No diferencial | Diferencial | Diferencial |
| Nº Máx. Transmisores | 1 | 1 | 32 (o más con repetidores) |
| Nº Máx. Receptores | 1 | 10 | 32 (o más con repetidores) |
| Distancia Máx. | ~15 metros | ~1200 metros | ~1200 metros |
| Velocidad Máx. | ~115.2 Kbps | ~10 Mbps | ~10 Mbps |
| Modo Comunicación | Full-Duplex (requiere 2 cables) | Half-Duplex (requiere 2 cables) o Full-Duplex (requiere 4 cables) | Half-Duplex (1 par) o Full-Duplex (2 pares) |
| Inmunidad al Ruido | Baja | Alta | Alta |
La velocidad de las interfaces diferenciales RS422 y RS485 es muy superior a RS232. Esto se ha hecho para evitar reflejos de señales. Para las otras dos interfaces, RS422 y RS485, la velocidad de respuesta es indefinida. Interesante es que RS232 es la única interfaz capaz de comunicación full duplex. En RS422 cada bus solo ofrece comunicación unidireccional. La comunicación bidireccional requiere dos buses RS422 en paralelo. Uno para cada dirección. En RS485 cada bus ofrece comunicación bidireccional. Varios dispositivos pueden compartir un solo par de cables. Esto permite la comunicación bidireccional punto a punto entre cualquier dispositivo dado en cualquier lugar del bus a cualquier otro dispositivo en cualquier lugar del bus RS485.
Aplicaciones Industriales
El RS-485 se emplea frecuentemente en combinación con UARTs, para enviar las señales a largas distancias. También es habitual encontrarlo como capa física en una implantación de protocolo Modbus. Proyectos con RS485 incluyen automatización de plantas industriales. También se emplea en ámbitos de automoción e incluso en aviones para la conexión de dispositivos. Otros ejemplos de uso incluyen automatización de edificios, monitorización de sistemas fotovoltaicos, o control grandes sistemas de iluminación o sonido como en conciertos de música.
Las pantallas inteligentes se usan ampliamente en varios ámbitos, como el médico, de control industrial y el automotriz, para después del lanzamiento de productos. Sencillamente, es una pantalla combinada con un microprocesador, que puede permitir cargar complejos gráficos, ajustes, visualización e incluso entradas y salidas de dispositivos (por ejemplo un host) y puede realizar operaciones interactivas con comandos simples, lo que lo hace apto para varias necesidades. La pantalla inteligente admite una gran variedad de interfaces de comunicación. En la actualidad, las más comúnmente utilizadas son CAN/CANopen, RS485/Modbus, y se ofrecerán más opciones en el futuro. Entre ellos, RS485/Modbus es una famosa interfaz de comunicación en la industria, y distintos dispositivos RS485 están disponibles en el mercado a un precio razonable. La estructura de líneas es sencilla, siempre que dos cables (RS485A/RS485B) puedan comunicarse.
Para utilizar la pantalla inteligente para una aplicación práctica, una adecuada interfaz máquina-humano (en especial una interfaz gráfica de usuario, GUI) es necesaria para maximizar su eficacia. Mucha gente piensa que Qt es solamente una biblioteca de GUI, pero de hecho es un marco de desarrollo bastante completo. Si la aplicación se implementa por completo a través de su biblioteca de clases, el proyecto se puede portar fácilmente a otras plataformas (PC/Windows, Mac/MacOS, Raspberry Pi/Raspbian, Android, iOS, Embedded, etc.) con unas pequeñas modificaciones. En realidad la versión más reciente de Qt ya admite la biblioteca de clase de Modbus. Además para mejorar la función de seleccionar el puerto de serie y transmitir el código de control utilizado en el ejemplo anterior, este ejemplo además proporciona una palanca horizontal en la interfaz de los usuarios de la ventana de la aplicación, que puede establecer el valor del objeto especificado.
Los conversores de RS485 para Arduino, como el MAX485, son dispositivos muy baratos. Podemos encontrarlos por 0.35€, buscando en vendedores internacionales de eBay o AliExpress.
Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino. La Comunicación RS485 y Modbus: Guía técnica para ingenieros es esencial para cualquier profesional o aficionado que busque implementar redes de comunicación confiables en entornos industriales y de automatización.