Documente Academic
Documente Profesional
Documente Cultură
AUTOR:
LATACUNGA
2. Objetivos
• Realizar una red entre dos tarjetas Arduino empleando el protocolo de red RS-
485.
3. Marco teórico
3.1. Comunicación RS-485
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
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.).
2
La distribución de pines compone los siguientes:
4. Materiales
Tabla 1. Lista de componentes utilizados para la comunicación Simplex
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).
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).
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.
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.
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).
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.
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.
7
7. Conclusiones
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
8
9. Anexos
Código del Transmisor (Arduino Mega)
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);
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