- Protocolo de comunicación serial RS-485
- RS-485 en Arduino
- Componentes requeridos
- Diagrama de circuito
- Programación de Arduino UNO y Arduino Nano para comunicación serie RS485
- Control del brillo del LED con comunicación en serie RS485
La elección de un protocolo de comunicación para la comunicación entre microcontroladores y dispositivos periféricos es una parte importante del sistema integrado. Es importante porque el rendimiento general de cualquier aplicación integrada depende de los medios de comunicación, ya que está relacionado con la reducción de costos, la transferencia de datos más rápida, la cobertura de larga distancia, etc.
En los tutoriales anteriores hemos aprendido sobre el protocolo de comunicación I2C y los protocolos de comunicación SPI en Arduino. Ahora hay otro protocolo de comunicación en serie llamado RS-485. Este protocolo utiliza una comunicación en serie asíncrona. La principal ventaja de RS-485 es la transferencia de datos a larga distancia entre dos dispositivos. Y se utilizan con mayor frecuencia en entornos industriales eléctricamente ruidosos.
En este tutorial, aprenderemos sobre la comunicación serial RS-485 entre dos Arduinos y luego lo demostraremos controlando el brillo del LED conectado a un Arduino esclavo desde el Arduino maestro enviando valores ADC a través del Módulo RS-485. Se usa un potenciómetro de 10k para variar los valores de ADC en Master Arduino.
Comencemos por comprender el funcionamiento de la comunicación serie RS-485.
Protocolo de comunicación serial RS-485
RS-485 es un protocolo de comunicación serial asíncrono que no requiere pulso de reloj. Utiliza una técnica llamada señal diferencial para transferir datos binarios de un dispositivo a otro.
Entonces, ¿qué es este método de transferencia de señal diferencial?
El método de señal diferencial funciona creando un voltaje diferencial utilizando 5V positivo y negativo. Proporciona una comunicación Half-Duplex cuando se utilizan dos cables y Full-Duplex requiere 4 cables de cuatro.
Al usar este método
- RS-485 admite una mayor velocidad de transferencia de datos de 30 Mbps como máximo.
- También proporciona una distancia máxima de transferencia de datos en comparación con el protocolo RS-232. Transfiere datos hasta 1200 metros como máximo.
- La principal ventaja de RS-485 sobre RS-232 es el esclavo múltiple con un solo maestro, mientras que RS-232 admite solo un esclavo.
- Puede tener un máximo de 32 dispositivos conectados al protocolo RS-485.
- Otra ventaja del RS-485 es que es inmune al ruido ya que utilizan el método de señal diferencial para transferir.
- RS-485 es más rápido en comparación con el protocolo I2C.
RS-485 en Arduino
Para usar RS-485 en Arduino, se necesita un módulo llamado 5V MAX485 TTL a RS485 que se basa en Maxim MAX485 IC ya que permite la comunicación en serie a una larga distancia de 1200 metros y es bidireccional. En modo semidúplex tiene una velocidad de transferencia de datos de 2,5 Mbps.
El módulo 5V MAX485 TTL a RS485 requiere un voltaje de 5V y utiliza niveles lógicos de 5V para que pueda conectarse con puertos seriales de hardware de microcontroladores como Arduino.
Tiene las siguientes características:
- Voltaje de funcionamiento: 5 V
- Chip MAX485 integrado
- Un bajo consumo de energía para la comunicación RS485
- Transceptor limitado de velocidad de respuesta
- Terminal 2P de paso de 5,08 mm
- Cómodo cableado de comunicación RS-485
- Todos los pines del chip se pueden controlar a través del microcontrolador.
- Tamaño de la placa: 44 x 14 mm
Pin-Out de RS-485:
Nombre de PIN |
Utilizar |
VCC |
5V |
UN |
Entrada de receptor no inversora Salida de controlador no inversora |
segundo |
Inversión de la entrada del receptor Inversión de la salida del controlador |
GND |
TIERRA (0 V) |
R0 |
Salida del receptor (pin RX) |
RE |
Salida del receptor (LOW-Enable) |
Delaware |
Salida del controlador (HIGH-Enable) |
DI |
Entrada del controlador (pin TX) |
Este módulo RS-485 se puede conectar fácilmente con Arduino. Usemos los puertos serie de hardware de Arduino 0 (RX) y 1 (TX) (En UNO, NANO). La programación también es simple, solo use Serial.print () para escribir en RS-485 y Serial.Read () para leer desde RS-485.
La parte de programación se explica más adelante en detalle, pero primero verifiquemos los componentes requeridos y el diagrama de circuito.
Componentes requeridos
- Arduino UNO o Arduino NANO (2)
- Módulo convertidor MAX485 TTL a RS485 - (2)
- Potenciómetro 10K
- Pantalla LCD 16x2
- LED
- Tablero de circuitos
- Conexión de cables
En este tutorial, Arduino Uno se utiliza como maestro y Arduino Nano como esclavo. Aquí se utilizan dos placas Arduino, por lo que se requieren dos módulos RS-485.
Diagrama de circuito
Conexión de circuito entre el primer RS-485 y Arduino UNO (maestro):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
Delaware RE |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
UN |
A A del esclavo RS-485 |
segundo |
Hacia B del esclavo RS-485 |
Conexión entre el segundo RS-485 y Arduino Nano (esclavo):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
Delaware RE |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
UN |
Hacia A del maestro RS-485 |
segundo |
Hacia B del RS-485 maestro |
Conexión de circuito entre una pantalla LCD de 16x2 y Arduino Nano:
LCD de 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Al pin central del potenciómetro para controlar el contraste de la pantalla LCD |
RS |
D2 |
RW |
GND |
mi |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UN |
+ 5V |
K |
GND |
Un potenciómetro de 10K está conectado al pin analógico A0 del Arduino UNO para proporcionar una entrada analógica y un LED está conectado al pin D10 del Arduino Nano.
Programación de Arduino UNO y Arduino Nano para comunicación serie RS485
Para programar ambas placas se utiliza Arduino IDE. Pero asegúrese de haber seleccionado el PUERTO correspondiente desde Herramientas-> Puerto y placa desde Herramientas-> Placa.
El código completo con un video de demostración se proporciona al final de este tutorial. Aquí estamos explicando parte importante del código. Hay dos programas en este tutorial, uno para Arduino UNO (Master) y otro para Arduino Nano (Slave).
Explicación del código para Master: Arduino UNO
En el lado maestro, simplemente tome la entrada analógica en el pin A0 variando el potenciómetro y luego escriba en serie esos valores en el bus RS-485 a través de los puertos serie de hardware (0,1) de Arduino UNO.
Para comenzar la comunicación serie en los pines serie de hardware (0,1), utilice:
Serial.begin (9600);
Para leer el valor analógico en el pin A0 de Arduino UNO y almacenarlos en un uso de potval variable:
int potval = analogRead (pushval);
Antes de escribir el valor de potval en el puerto serie, los pines DE y RE de RS-485 deben estar ALTOS que están conectados al pin 8 de Arduino UNO para que el pin 8 sea ALTO:
digitalWrite (enablePin, HIGH);
A continuación, para poner esos valores en el puerto serie conectado con el módulo RS-485, utilice la siguiente declaración
Serial.println (potval);
Explicación del código para esclavo: Arduino NANO
En el lado esclavo se recibe un valor entero del Master RS-485 que está disponible en el puerto serie de hardware del Arduino Nano (Pines -0,1). Simplemente lea esos valores y guárdelos en una variable. Los valores están en forma de (0-1023). Entonces se convierte en (0-255) ya que la técnica PWM se usa para controlar el brillo del LED.
Luego, AnalogWrite esos valores convertidos en el pin LED D10 (es un pin PWM). Entonces, dependiendo del valor de PWM, el brillo del LED cambia y también muestra esos valores en la pantalla LCD de 16x2.
Para que el RS-485 del Arduino esclavo reciba los valores del Maestro, simplemente haga que los pines DE y RE del RS-485 sean BAJOS. Entonces, el pin D8 (enablePin) de Arduino NANO se hace BAJO.
digitalWrite (enablePin, LOW);
Y para leer los datos enteros disponibles en el puerto serie y almacenarlos en un uso variable
int pwmval = Serial.parseInt ();
A continuación, convierta el valor de (0-1023 a 0-255) y guárdelos en una variable:
int convert = map (pwmval, 0,1023,0,255);
A continuación, escriba el valor analógico (PWM) en el pin D10 donde está conectado el ánodo LED:
analogWrite (ledpin, convertir);
Para imprimir esos valores PWM en una pantalla LCD de 16x2, utilice
lcd.setCursor (0,0); lcd.print ("PWM DESDE MASTER"); lcd.setCursor (0,1); lcd.print (convertir);
Control del brillo del LED con comunicación en serie RS485
Cuando el valor de PWM se establece en 0 usando el potenciómetro, el LED se apaga.
Y cuando el valor de PWM se establece en 251 usando el potenciómetro: El LED se enciende con brillo total como se muestra en la siguiente imagen:
Así es como se puede utilizar RS485 para la comunicación en serie en Arduino.