- Protocol de comunicació en sèrie RS-485
- RS-485 a Arduino
- Components necessaris
- Esquema de connexions
- Programació Arduino UNO i Arduino Nano per a la comunicació en sèrie RS485
- Control de la brillantor del LED amb comunicació serial RS485
L’elecció d’un protocol de comunicació per a la comunicació entre microcontroladors i dispositius perifèrics és una part important del sistema incrustat. És important perquè el rendiment general de qualsevol aplicació incrustada depèn dels mitjans de comunicació, ja que està relacionat amb la reducció de costos, la transferència de dades més ràpida, la cobertura a llarga distància, etc.
En els tutorials anteriors hem conegut el protocol de comunicació I2C i els protocols de comunicació SPI a Arduino. Ara hi ha un altre protocol de comunicació en sèrie anomenat RS-485, que utilitza una comunicació en sèrie asíncrona. El principal avantatge del RS-485 és la transferència de dades de llarga distància entre dos dispositius. I s’utilitzen amb més freqüència en entorns industrials sorollosos.
En aquest tutorial, coneixerem la comunicació sèrie RS-485 entre dos Arduinos i, a continuació, ho demostrarem controlant la brillantor del LED connectat a un Arduino esclau des del mestre Arduino enviant valors ADC mitjançant el mòdul RS-485. S’utilitza un potenciòmetre de 10 k per variar els valors ADC a Master Arduino.
Comencem per entendre el funcionament de la comunicació sèrie RS-485.
Protocol de comunicació en sèrie RS-485
RS-485 és un protocol de comunicació en sèrie asíncrona que no requereix impuls de rellotge. Utilitza una tècnica anomenada senyal diferencial per transferir dades binàries d’un dispositiu a un altre.
Llavors, què és aquest mètode de transferència de senyal diferencial ??
El mètode de senyal diferencial funciona creant una tensió diferencial mitjançant un 5V positiu i negatiu. Proporciona una comunicació Half-Duplex quan s’utilitzen dos cables i Full-Duplex requereix 4 cables.
Mitjançant l’ús d’aquest mètode
- El RS-485 admet una velocitat de transferència de dades superior a 30 Mbps com a màxim.
- També proporciona una distància màxima de transferència de dades en comparació amb el protocol RS-232. Transfereix dades de fins a 1200 metres com a màxim.
- El principal avantatge de l'RS-485 respecte a l'RS-232 és l'esclau múltiple amb mestre únic, mentre que l'RS-232 només admet un esclau únic.
- Pot tenir un màxim de 32 dispositius connectats al protocol RS-485.
- Un altre avantatge del RS-485 és que és immune al soroll ja que utilitzen el mètode de senyal diferencial per transferir.
- El RS-485 és més ràpid en comparació amb el protocol I2C.
RS-485 a Arduino
Per utilitzar RS-485 a Arduino, es necessita un mòdul anomenat 5V MAX485 TTL a RS485 basat en IC Maxim MAX485 ja que permet la comunicació en sèrie a una llarga distància de 1200 metres i és bidireccional. En mode mig dúplex, té una velocitat de transferència de dades de 2. 5 Mbps.
El mòdul 5V MAX485 TTL a RS485 requereix una tensió de 5V i utilitza nivells lògics de 5V perquè es pugui connectar amb ports serials de maquinari de microcontroladors com Arduino.
Té les funcions següents:
- Tensió de funcionament: 5V
- Xip MAX485 a bord
- Un baix consum d’energia per a la comunicació RS485
- Transceptor limitat de velocitat de gir
- Terminal 2P de pas de 5,08 mm
- Cablatge de comunicació RS-485 còmode
- Tots els pins del xip han estat controlats a través del microcontrolador
- Mida del tauler: 44 x 14 mm
Pin-Out de RS-485:

|
Nom del pin |
Ús |
|
VCC |
5V |
|
A |
Entrada del receptor que no inverteix Sortida de controlador que no inverteix |
|
B |
Invertir l'entrada del receptor Invertint la sortida del controlador |
|
GND |
GND (0V) |
|
R0 |
Sortida del receptor (pin RX) |
|
RE |
Sortida del receptor (habilitació BAIXA) |
|
DE |
Sortida del controlador (activat per ALTA) |
|
DI |
Entrada del controlador (pin TX) |
Aquest mòdul RS-485 es pot connectar fàcilment amb Arduino. Utilitzem els ports sèrie de maquinari d’Arduino 0 (RX) i 1 (TX) (A UNO, NANO). La programació també és senzilla: utilitzeu Serial.print () per escriure a RS-485 i Serial.Read () per llegir-lo des de RS-485.
La part de programació s’explica més endavant amb detall però primer permet comprovar els components i el diagrama de circuits necessaris.
Components necessaris
- Arduino UNO o Arduino NANO (2)
- Mòdul convertidor MAX485 TTL a RS485 - (2)
- Potenciòmetre de 10K
- Pantalla LCD de 16x2
- LED
- Taula de pa
- Connexió de cables
En aquest tutorial, Arduino Uno s'utilitza com a mestre i Arduino Nano s'utilitza com a esclau. Aquí s’utilitzen dues plaques Arduino, de manera que es necessiten dos mòduls RS-485.
Esquema de connexions

Connexió de circuits entre el primer RS-485 i Arduino UNO (mestre):
|
EL-485 |
Arduino UNO |
|
DI |
1 (TX) |
|
DE RE |
8 |
|
R0 |
0 (RX) |
|
VCC |
5V |
|
GND |
GND |
|
A |
A A de l'esclau RS-485 |
|
B |
A B de l’esclau RS-485 |
Connexió entre el segon RS-485 i Arduino Nano (esclau):
|
EL-485 |
Arduino UNO |
|
DI |
D1 (TX) |
|
DE RE |
D8 |
|
R0 |
D0 (RX) |
|
VCC |
5V |
|
GND |
GND |
|
A |
A A del mestre RS-485 |
|
B |
A B del mestre RS-485 |
Connexió del circuit entre un LCD 16x2 i Arduino Nano:
|
LCD de 16x2 |
Arduino Nano |
|
VSS |
GND |
|
VDD |
+ 5V |
|
V0 |
Al pin central del potenciòmetre per al control de contrast de LCD |
|
RS |
D2 |
|
RW |
GND |
|
E |
D3 |
|
D4 |
D4 |
|
D5 |
D5 |
|
D6 |
D6 |
|
D7 |
D7 |
|
A |
+ 5V |
|
K |
GND |
Es connecta un potenciòmetre de 10K al pin analògic A0 de l’Arduino UNO per proporcionar entrada analògica i es connecta un LED al pin D10 d’Arduino Nano.
Programació Arduino UNO i Arduino Nano per a la comunicació en sèrie RS485
Per a la programació de les dues plaques s’utilitza Arduino IDE. Però assegureu-vos que heu seleccionat el PORT corresponent a Eines-> Port i tauler a Eines-> Tauler.
Al final d’aquest tutorial es dóna un codi complet amb un vídeo de demostració. Aquí expliquem una part important del codi. Hi ha dos programes en aquest tutorial, un per a Arduino UNO (Master) i un altre per a Arduino Nano (Slave).
Explicació del codi per al mestre: Arduino UNO
Al costat mestre, simplement preneu l'entrada analògica al pin A0 variant el potenciòmetre i, a continuació, escriviu aquests valors al bus RS-485 a través dels ports serials de maquinari (0,1) d'Arduino UNO.
Per iniciar la comunicació en sèrie mitjançant pins de sèrie de maquinari (0,1), feu el següent:
Serial.begin (9600);
Per llegir el valor analògic al pin A0 d'Arduino UNO i emmagatzemar-los en un ús variable potval :
int potval = analogRead (pushval);
Abans d’escriure el valor potval al port sèrie, els pins DE & RE de RS-485 haurien de ser ALTA que estigui connectada al pin 8 d’Arduino UNO per tal de fer el pin 8 HIGH:
digitalWrite (enablePin, HIGH);
A continuació, poseu aquests valors al port sèrie connectat amb el mòdul RS-485, utilitzeu la sentència següent
Serial.println (potval);
Explicació del codi per a esclau: Arduino NANO
Al costat esclau es rep un valor enter del Master RS-485 que està disponible al port sèrie de maquinari de l'Arduino Nano (pins -0,1). Simplement heu de llegir aquests valors i emmagatzemar-los en una variable. Els valors tenen la forma (0 -1023). Per tant, es converteix en (0-255) ja que s’utilitza la tècnica PWM per controlar la brillantor del LED.
A continuació, AnalogWrite converteix el valor al pin LED D10 (és un pin PWM). Per tant, en funció del valor PWM, la brillantor del LED canvia i també mostra aquests valors a la pantalla LCD de 16x2.
Per tal que el RS-485 de Slave Arduino rebi els valors del mestre, només cal que els pins DE & RE del RS-485 BAIXIN. Per tant, el pin D8 (enablePin) d’Arduino NANO es fa BAIX.
digitalWrite (enablePin, LOW);
I per llegir les dades enteres disponibles al port sèrie i emmagatzemar-les en un ús variable
int pwmval = Serial.parseInt ();
A continuació, convertiu el valor de (0-1023 a 0-255) i deseu-los en una variable:
int convertir = mapa (pwmval, 0,1023,0,255);
A continuació, escriviu el valor analògic (PWM) al pin D10 on està connectat l’ànode LED:
analogWrite (ledpin, convertir);
Per imprimir aquests valors PWM en una pantalla LCD de 16x2, utilitzeu-los
lcd.setCursor (0,0); lcd.print ("PWM FROM MASTER"); lcd.setCursor (0,1); lcd.print (convertir);
Control de la brillantor del LED amb comunicació serial RS485
Quan el valor PWM s'estableix a 0 mitjançant un potenciòmetre, el LED s'apaga.

I quan el valor PWM s’estableix en 251 mitjançant un potenciòmetre: el LED s’encén amb una brillantor total com es mostra a la imatge següent:

Així doncs, així es pot utilitzar RS485 per a la comunicació en sèrie a Arduino.
