Está en la página 1de 7

Comunicación RS485 con Arduino

Publicado por Enrique Gómez el 25 junio, 2016 1 comentario

Dificultad baja

Las comunicaciones son clave en la sociedad actual y han tomado tanta importancia que casi todos
llevamos en el bolsillo un Smartphone que nos permite hacer mil virguerías transmitiendo y
recibiendo datos. En los últimos años se viene viendo como se incrementa el I+D en IoT. Hemos
visto la integración de grandes redes de sensores y actuadores interconectados en su mayoría de
manera inalámbrica creando las ya denominadas como Smartcities. RS485 es un estándar que
todavía tiene mucho que decir, por eso tratamos el RS485 con Arduino.

Cuando nos enfrentamos a deber desarrollar un sistema que integra varios dispositivos que se
tienen que intercomunicar entre sí, surgen infinidad de posibilidades desde el punto de vista del
electrónico y de todas esas posibilidades normalmente tocará elegir solo una y digo normalmente
porque en contadas ocasiones podrás montar sistemas de comunicación redundantes o bien por
el exceso de precio o bien por el exceso de espacio o en ocasiones simplemente no nos importa
que un sistema cuente con la seguridad de ser redundante.

En electrónica industrial rara es la ocasión en la que no nos encontramos con el enemigo número
uno del electrónico el campo electromagnético y es que este nos proporcionará más de un
quebradero de cabeza si no sabemos como tratarle y en ocasiones aunque sepamos como tratarle
y es que si no lo tenemos en cuenta, afectará a nuestras comunicaciones.
MAX485 en protoboard

Uno de los estándares de comunicaciones altamente conocido en el mundo industrial es el RS485


que lo hace ideal para las comunicaciones en áreas industriales donde tengamos ruido generado
por campos electromagnéticos o donde tengamos que levantar redes multipunto de hasta 1200
metros. Si has leído bien, más de 1 Km de distancia

La característica que convierte al RS485 en el estándar de capa física ideal para la comunicación en
entornos industriales y de hasta 1200 metros es que se trata de un estándar diferencial en el cual
no tenemos en cuenta la tensión en uno de los cables, si no que lo que mediremos será la
diferencia de potencial entre los dos cables que integran el BUS.

Se pueden montar dos tipos de BUS el half-duplex, es decir o mandamos datos o recibimos datos
(está formado por 2 cables) y el duplex donde podremos enviar y recibir datos al mismo tiempo
puesto que disponemos de 4 cables, dos para recibir y dos para transmitir. Es una practica común
y recomendada que cada par de cables, sea trenzado, es decir, que el half-duplex tendremos un
par de cables trenzados y en el duplex tendremos dos pares de cables trenzados.

Sobre RS485 podemos enviar datos en bruto usando por ejemplo un puerto serie o podemos
montar protocolos como MODBUS o algún similar.

Aprende a usar el módulo RS485


Para usar RS485 con un microcontrolador o con lo que quieras que disponga de puerto serie
puedes usar un módulo basado en el circuito integrado MAX485 que te permitirá crear una red
RS485 pero que para ti será muy similar a trabajar con el puerto serie de por ejemplo Arduino. Por
tanto montar una comunicación RS485 con Arduino es coser y cantar.

RS485 en Fritzing

Conectar el módulo a Arduino es bastante sencillo, tenemos 6 pines, los cuales dos corresponden
al puerto serie y se conectan así:

MAX485 Arduino Descripción

DI TX Entrada de datos desde el mirco hacia MAX485

DO RX Salida de datos provenientes del BUS hacia el micro

RE Pin 2 Habilita la recepción de datos si está en estado bajo

DE Pin 2 Habilita la transmisión de datos hacia el BUS

Vcc Vcc Alimentación del MAX485

GND GND Conexión de masa

Por último quedarán dos pines A y B que son los dos que componen el BUS del RS485, es decir,
tendremos que conectar entre sí los las A de todos los MAX485 con un cable y todos las B con otro
cable.
En el ejemplo que te presento en el vídeo tenemos un pulsador conectado en el pin digital 7 del
Arduino UNO y un LED conectado en el pin 13 del Arduino MEGA, nuestro objetivo es que al
presionar el pulsador del primer Arduino, este envíe una orden al otro Arduino para que encienda
el LED y esto lo tenemos que hacer por medio de RS485. Te animo a que veas el vídeo y más abajo
te dejo los códigos para ambos Arduinos.

Usando RS485 con Arduino UNO – Ejemplo emisor

El procedimiento consiste en crear un puerto serie por software, inicializarlo a 9600 baudios y
transmitir por ese puerto serie. Como se trata de un sistema semiduplex, antes de transmitir
debemos activar la señal de transmisión con un digitalWrite. Enviar un dato, por ejemplo el
caracter “A” es tan sencillo como usar el método write del puerto serie por software.

1 /*

2 RS485 sender

3 By: Enrique

4 Rincón Ingenieril

5 Date: June 16th, 2016

6 License: This code is public domain.

7 */

9 #include<SoftwareSerial.h>

10

11//SoftwareSerial pins

12#define pinTX 4

13#define pinRX 3

14//MAX485 control pin

15#define transmitir 2

16//Button pin

17#define pulsador 7

18
19SoftwareSerial RS485(pinRX, pinTX);

20

21void setup(){

22 //Initialize SoftwareSerial

23 RS485.begin(9600);

24 //Digital pins PinMode

25 pinMode(13,OUTPUT);

26 pinMode(transmitir, OUTPUT);

27 pinMode(pulsador, INPUT);

28}

29

30void loop(){

31 //If button is pressed

32 if(digitalRead(pulsador) == HIGH){

33 digitalWrite(13,HIGH);

34 digitalWrite(transmitir, HIGH); //Enable max485 transmission

35 RS485.write('A'); //Write A cacharacter on Serial

36 digitalWrite(transmitir,LOW); //Disable max485 transmission mode

37 delay(200);

38 digitalWrite(13,LOW);

39 }

40}

Arduino MEGA – Ejemplo para receptor

Este código está diseñada para ser implementado en un Arduino Mega, sin embargo, se podría
hacer en otro Arduino usando software serial igual que en transmisor.

En el loop esperamos a tener disponible un dato con available y una vez lo tenemos disponible, lo
leemos y almacenamos en la variable recibido. En la siguiente línea usamos if para comprobar si el
caracter que hemos recibido es el correcto, es decir, si es una “A”. En caso afirmativo encendemos
y apagamos el LED.
1 /*

2 RS485 receiver

3 By: Enrique

4 Rincón Ingenieril

5 Date: June 16th, 2016

6 License: This code is public domain.

7 */

9 //Max485 transmission control

10#define transmitir 2

11

12#define led 13

13

14void setup(){

15 Serial3.begin(9600); //Initialize serial communication

16 pinMode(led, OUTPUT); //Set LED and transmitir as output pins

17 pinMode(transmitir,OUTPUT);

18 digitalWrite(transmitir,LOW);

19}

20

21void loop(){

22 //If we receive something

23 if(Serial3.available() > 0){

24 char recibido = Serial3.read();

25 //If we receive an A

26 if(recibido == 'A'){

27 digitalWrite(led, HIGH); //Turn on the LED

28 delay(1000);
29 digitalWrite(led, LOW);

30 }

31 }

32}

Seguro que aparte de aprender a usar RS485 con Arduino quieres aprender algo más, puedes
echar un vistazo a todos los tutoriales de Arduino

También podría gustarte