Sunteți pe pagina 1din 11

CARRERA DE INGENIERÍA MECATRÓNICA

REDES INDUSTRIALES - 5673

INFORME DE LABORATORIO No. 03

TEMA: COMUNICACIÓN ENTRE ARDUINOS MEDIANTE EL USO


DEL PROTOCOLO RS-485

AUTOR:

RENDÓN CHICAIZA, DIEGO ARMANDO

MARTINEZ VERDESOTO, RUSBEL ALEXANDER

DOCENTE: ING. DAVID RIVAS

LATACUNGA

ABRIL – JULIO 2019


1. Tema
COMUNICACIÓN ENTRE ARDUINOS MEDIANTE EL USO DEL PROTOCOLO
RS485

2. Objetivos

2.1. Objetivo general:

• Realizar una red entre dos tarjetas Arduino empleando el protocolo de red RS-
485.

2.2. Objetivos específicos:

• Investigar sobre el funcionamiento de estas tecnologías de interconexión en


serie entre dispositivos.
• Implementar el circuito de la red mediante RS-485.
• Obtener las señales provenientes del emisor y las del receptor usando un
osciloscopio.

3. Marco teórico
3.1. Comunicación RS-485

Propiamente llamado TIA/EIA-485-A, el RS-485 o EIA-485 es un estándar de


comunicaciones en bus, además es una de las tecnologías más populares a la hora de conectar
dispositivos dentro de una red. Este especifica características entre transmisor y receptor dentro
de un sistema digital multipunto, pero no incluye aspectos como la calidad de la señal, tiempos,
asignación de pines ni consumo, sino, hace referencia a las conexiones multipunto que pueden
incluir dos o más transmisores y dos o más receptores, eso lo hace adecuado para sistemas
multimaestro (Contemporary Controls, 1999).

El protocolo RS-485, está definido como un sistema de bus diferencial multipunto, es ideal
para transmitir información a altas velocidades sobre largas distancias (35 Mbit/s hasta 10
metros y 100 kbit/s en 1200 metros) y a través de canales ruidosos, ya que el par trenzado
reduce los ruidos que se inducen en la línea de transmisión (Innova Domotics, 2017), entre sus
especificaciones se encuentran:

• Interfaz diferencial
• Conexión multipunto
• Alimentación única de +5V

1
• Velocidad máxima de 10 Mbit/s (a 12 metros)
• Longitud máxima de alcance de 1200 metros (a 100 kbit/s)
• Rango de bus de -7V a +12V

Figura 1. Configuración Master - Slave RS485.


Fuente: (Innova Domotics, 2017)

3.2. Cableado del bus RS-485


En el estándar se aclara que la transmisión serie multipunto se logra al hacer que un equipo
transmita y otro que reciba (simplex). Existen variaciones como el semidúplex donde un equipo
puede transmitir o recibir, pero no a la vez. El cableado básico consiste en un par de hilos de
cobre trenzados sobre el que se transmite una señal diferencial para enviar los bits de datos,
que es bastante inmune a las interferencias y admite largas distancias. Además del par trenzado
para datos, pueden usarse líneas de 0V y 5V para alimentar dispositivos del bus (Universidad
de Alicante, 2011).

3.3. Módulo RS-485

Es el módulo usado para conectar varias tarjetas controladoras, para ello se vale del
integrado MAX485 el cual es un transceptor de bajo consumo para comunicaciones half-dúplex
o los MAX488-MAX491 para aplicaciones full-dúplex (Maxim Integrated Products, s.f.).

Figura 2. Configuraciones de pines y típico circuito operativo MAX485.


Fuente: (Maxim Integrated Products, s.f.)

2
La distribución de pines compone los siguientes:

• DI (Data In): Usado en modo de transmisión y conectado al pin Tx del


microcontrolador.
• RE (Receive Enable): Pin para configurar al módulo como receptor.
• DE (Data Enable): Pin para configurar al módulo como transmisor.
• RO (Receive Out): Información recibida en los pines A y B es pasada al pin RO y
este se conecta al Rx del microcontrolador.
• A y B (Differential Input): Líneas de transmisión y recepción de datos.

4. Materiales
Tabla 1. Lista de componentes utilizados para la comunicación Simplex

Elemento Descripción Cant. Gráfico

Placa electrónica basada en el Atmega2560. Cuenta con


54 pines digitales de entrada / salida (de los cuales 15 se
Arduino pueden utilizar como salidas PWM), 16 entradas
1
MEGA analógicas, 4 UARTs (puertos serie de hardware), un
oscilador de 16MHz, una conexión USB, un conector de
alimentación, un conector ICSP, y un botón de reset.

Placa de desarrollo de tamaño compacto, completa y


compatible con protoboards, basada en el
microcontrolador ATmega328P.
Arduino
Tiene 14 pines de entrada/salida digital (de los cuales 6 1
NANO
pueden ser usando con PWM), 6 entradas analógicas, un
cristal de 16Mhz, conexión Mini-USB, terminales para
conexión ICSP y un botón de reseteo
Usado para comunicación serial entre largas distancias
(mayores que las del RS-232 o TTL) y soporta múltiples
Módulo
equipos en el mismo bus de conexión. 2
RS485
• Voltaje de trabajo: 5V
• Tamaño: 44x14 (mm)
Varios Protoboard, Pulsador, Resistencias, Led y Cables -

3
5. Procedimiento
El circuito se implementa siguiendo la configuración Simplex, es decir, solo existirá un
transmisor y un receptor, además la comunicación solo permitirá enviar y recibir datos,
respectivamente.

Para que el módulo sepa que las salidas A y B se van a comportar como salida de datos, se
tiene que conectar a 5V los pines RE y DE. Desde el Arduino se envían los datos hacia el pin
DI (Data Input) del módulo y este transmitirá los datos por los pines A y B (Naylamp
Mechatronics SAC, 2016).

Figura 3. RS-485 como trasmisor.


Fuente: (Naylamp Mechatronics SAC, 2016)

Al conectar los pines RE y DE el módulo se comporta como Receptor, y los datos recibidos
por AB estarán presentes en el pin RO (Receiver Output), conectando el pin RO del módulo al
RX de nuestro Arduino podemos leer los datos recibidos (Naylamp Mechatronics SAC, 2016).

Figura 4. RS-485 como trasmisor.


Fuente: (Naylamp Mechatronics SAC, 2016)

La siguiente imagen muestra la conexión entre dos Arduinos mediante el bus RS-485. En
el mismo se cuenta con un pulsador enviando su estado digital a través del transmisor y

4
activando o desactivando un led conectado al receptor que lee el valor (1 o 0) enviado por la
comunicación serial realizada.

Figura 5. Implementación del circuito.

5.1. Obtención de señales

Antes de empezar con la obtención de gráficas se debe primero realizar una calibración de
puntas y sintonización de señales, para asegurar que el resultado visualizado sea el correcto.

Figura 6. Sintonización de señales

6. Análisis de resultados

5
Las puntas del osciloscopio se conectan al pin Tx del transmisor (Arduino Mega), al pin
B+ del módulo RS485 (transmisor) y al pin A- del módulo del receptor (Arduino Nano).

Figura 7. Señales de la comunicación RS-485.

Como se observa en la anterior figura se cuenta con la señal transmitida separada por un
retardo colocado en el código y de una frecuencia aproximada de 1.2kHz. Otro aspecto visible
es la inversión de la señal del pin A-, es decir, cuando B+ está en un nivel alto A- tiene un nivel
bajo y viceversa, representado por la siguiente figura.

Figura 8. Inversión de señales B+ (verde) y A- (azul).

6
Las formas de las señales muestran que, a más de estar inversas, las señales tienen voltajes
diferentes. Al comparar la forma de Tx con el diferencial de los pines de envío de información
se puede identificar su similitud en forma y dimensión.

Figura 9. Comparación del diferencial con Tx.

El cambio más importante se localizó cuando se presionaba el botón, enviaba información,


reduciendo el pequeño remanente de cuando se encontraba un estado bajo de parte del pulsador.

Figura 10. Envió de pulso (botón).

7
7. Conclusiones

• Al realizar la comunicación simplex entre los Arduinos, uno leyendo el estado


digital de un pulsador (Arduino transmisor) y enviando por medio serial hacia el
led (Arduino receptor) y dependiendo del valor lo encendía o apagaba, se notó la
transmisión por un solo canal, en esta configuración no se puede enviar y recibir al
mismo tiempo.
• El cambio de estado del pulsador no solo resulta en el cambio de magnitud o voltaje
de los pines, además altera la frecuencia inicial de 1.2kHz cuando de la misma
forma transmite, pero es un dato en estado bajo.
• Si se desea tener un envío de información bilateral entre uno o más transmisores
con uno o más receptores se debe implementar la configuración full-dúplex
mediante integrados MAX488-MAX491 o sino utilizando los MAX485 conectados
entre sí formando dos half-dúplex para cada lado, simulando las características del
integrado anterior.

8. Bibliografía
Contemporary Controls. (1999). The Extension, A Technical Supplement to Control Networks.
Obtenido de Undestanding EIA-485 Networks:
https://www.ccontrols.com/pdf/ExtV1N1.pdf

Innova Domotics. (2017). Innova Domotics. Obtenido de Protocolo RS-485:


https://www.innovadomotics.com/mn-tuto/mn-mcr/mn-ard/ard-pry/12-prt-485.html

Maxim Integrated Products. (s.f.). RS-485/RS-422 DATASHEET. Obtenido de


https://ecee.colorado.edu/~mcclurel/max485ds.pdf

Naylamp Mechatronics SAC. (2016). Comunicación RS485 con Arduino. Obtenido de


https://naylampmechatronics.com/blog/37_Comunicaci%C3%B3n-RS485-con-
Arduino.html

Universidad de Alicante. (2011). Automatización Avanzada. Obtenido de Práctica 3.


Comunicación con RS-485 y MODBUS :
https://rua.ua.es/dspace/bitstream/10045/18990/1/AA-p3.pdf

8
9. Anexos
Código del Transmisor (Arduino Mega)

//COMUNICACIÓN RS485 MASTER-SLAVE (ARDUINO MEGA A NANO)


const int EnTxPin = 2; // HIGH:TX y LOW:RX
int datoe;
void setup()
{
Serial.begin(9600);
Serial.setTimeout(100);
pinMode(EnTxPin, OUTPUT);
digitalWrite(EnTxPin, HIGH); //HIGH PARA TRANSMITIR
}

void loop()
{
//---enviamos el dato para prender led 1 y 2------
Serial.print("I"); //inicio de trama
Serial.print("101");//dirección del esclavo
Serial.print("S"); //función S para iniciar
Serial.print(datoe); //dato
Serial.print("F"); //fin de trama
//----------------------------
delay(50);

//---pedimos el Estado del pulsador 1 y 2------


Serial.print("I"); //inicio de trama
Serial.print("100");//dirección del esclavo
Serial.print("L"); //L para indicarle que vamos recibir un dato
Serial.print("F"); //fin de trama
Serial.flush();
//----Leemos la respuesta del Esclavo-----
digitalWrite(EnTxPin, LOW); //RS485 como receptor
if(Serial.find("i")) { //esperamos el inicio de trama
int esclavo=Serial.parseInt(); //recibimos la direccion del esclavo
int dato=Serial.parseInt(); //recibimos el dato
if(Serial.read()=='f' && esclavo==100) { //fin de trama y direccion
funcion(dato); //Acción
}
}
digitalWrite(EnTxPin, HIGH); //RS485 como Transmisor
}

void funcion(int dato) {


if (dato == 1)
datoe=1;
else if (dato==2)
datoe=2;
else
datoe=0;
}
Código del Receptor (Arduino Nano)

const int EnTxPin = 2; // HIGH:TX y LOW:RX


const int mydireccion = 100; //Direccion del esclavo

const int button1 = 5;


const int button2 = 6;

9
void setup() {
Serial.begin(9600);
Serial.setTimeout(100);
pinMode(EnTxPin, OUTPUT);
digitalWrite(EnTxPin, LOW); //RS485 como receptor
pinMode(button1, INPUT);
pinMode(button2, INPUT);
}

void loop()
{
if(Serial.available())
{
if(Serial.read()=='I') //Si recibimos el inicio de trama
{
int direccion=Serial.parseInt(); //recibimos la direccion
if(direccion==mydireccion) //Si direccion es la nuestra
{
char funcion=Serial.read(); //leemos el carácter de función
if(funcion=='L')
{
if(Serial.read()=='F') //Si el fin de trama es el correcto
{
int state1 = digitalRead(button1);
int state2 = digitalRead(button2);
//state2=state2*2;
int lectura = state1+state2;
digitalWrite(EnTxPin, HIGH);
Serial.print("i"); //inicio de trama
Serial.print(mydireccion); //direccion
Serial.print(",");
Serial.print(lectura); //valor del sensor
Serial.print("f"); //fin de trama
Serial.flush(); //Esperamos hasta que se envíen los datos
digitalWrite(EnTxPin, LOW); //RS485 como receptor
}
}
}
}
}
delay(10);
}

10

S-ar putea să vă placă și