Beruflich Dokumente
Kultur Dokumente
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
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.
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í:
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.
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
7 */
9 #include<SoftwareSerial.h>
10
11//SoftwareSerial pins
12#define pinTX 4
13#define pinRX 3
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);
25 pinMode(13,OUTPUT);
26 pinMode(transmitir, OUTPUT);
27 pinMode(pulsador, INPUT);
28}
29
30void loop(){
32 if(digitalRead(pulsador) == HIGH){
33 digitalWrite(13,HIGH);
37 delay(200);
38 digitalWrite(13,LOW);
39 }
40}
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
7 */
10#define transmitir 2
11
12#define led 13
13
14void setup(){
17 pinMode(transmitir,OUTPUT);
18 digitalWrite(transmitir,LOW);
19}
20
21void loop(){
25 //If we receive an A
26 if(recibido == 'A'){
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