- Protocolo de comunicação serial RS-485
- RS-485 em Arduino
- Componentes necessários
- Diagrama de circuito
- Programando Arduino UNO e Arduino Nano para comunicação serial RS485
- Controlando o brilho do LED com comunicação serial RS485
A escolha de um protocolo de comunicação para a comunicação entre microcontroladores e dispositivos periféricos é uma parte importante do sistema embarcado. É importante porque o desempenho geral de qualquer aplicativo incorporado depende dos meios de comunicação, pois está relacionado à redução de custos, transferência de dados mais rápida, cobertura de longa distância, etc.
Nos tutoriais anteriores, aprendemos sobre o protocolo de comunicação I2C e os protocolos de comunicação SPI no Arduino. Agora existe outro protocolo de comunicação serial chamado RS-485. Este protocolo usa uma comunicação serial assíncrona. A principal vantagem do RS-485 é a transferência de dados de longa distância entre dois dispositivos. E eles são mais comumente usados em ambientes industriais com ruído elétrico.
Neste tutorial, aprenderemos sobre a comunicação serial RS-485 entre dois Arduinos e a demonstraremos controlando o brilho do LED conectado a um Arduino Slave do Arduino Mestre enviando valores ADC por meio do módulo RS-485. Um potenciômetro de 10k é usado para variar os valores de ADC no Master Arduino.
Vamos começar entendendo o funcionamento da comunicação serial RS-485.
Protocolo de comunicação serial RS-485
RS-485 é um protocolo de comunicação serial assíncrono que não requer pulso de clock. Ele usa uma técnica chamada de sinal diferencial para transferir dados binários de um dispositivo para outro.
Então, qual é esse método de transferência de sinal diferencial ??
O método de sinal diferencial funciona criando uma tensão diferencial usando 5 V positivo e negativo. Ele fornece uma comunicação Half-Duplex ao usar dois fios e Full-Duplex requer 4 quatro fios.
Usando este método
- RS-485 suporta maior taxa de transferência de dados de 30 Mbps no máximo.
- Ele também fornece distância máxima de transferência de dados em comparação com o protocolo RS-232. Ele transfere dados de até 1200 metros no máximo.
- A principal vantagem do RS-485 sobre o RS-232 é o escravo múltiplo com mestre único, enquanto o RS-232 suporta apenas escravo único.
- Pode ter no máximo 32 dispositivos conectados ao protocolo RS-485.
- Outra vantagem do RS-485 é que ele é imune ao ruído, pois eles usam o método de sinal diferencial para transferência.
- RS-485 é mais rápido em comparação com o protocolo I2C.
RS-485 em Arduino
Para usar RS-485 no Arduino, um módulo chamado 5V MAX485 TTL para RS485 que é baseado no Maxim MAX485 IC é necessário, pois permite a comunicação serial em longa distância de 1200 metros e é bidirecional. No modo half duplex, tem uma taxa de transferência de dados de 2,5 Mbps.
5V MAX485 TTL para o módulo RS485 requer uma tensão de 5V e usa níveis lógicos de 5V para que possa fazer interface com portas seriais de hardware de microcontroladores como o Arduino.
Possui os seguintes recursos:
- Tensão de operação: 5V
- Chip MAX485 integrado
- Um baixo consumo de energia para a comunicação RS485
- Transceptor com taxa de variação limitada
- Terminal 2P de passo de 5,08 mm
- Fiação de comunicação RS-485 conveniente
- Todos os pinos do chip podem ser controlados através do microcontrolador
- Tamanho da placa: 44 x 14 mm
Pin-Out de RS-485:
Nome do Pin |
Usar |
VCC |
5V |
UMA |
Entrada do receptor não inversora Saída de driver não inversora |
B |
Invertendo a entrada do receptor Invertendo a saída do driver |
GND |
GND (0V) |
R0 |
Receptor de saída (pino RX) |
RÉ |
Saída do receptor (LOW-Enable) |
DE |
Saída do driver (HIGH-Enable) |
DI |
Entrada do driver (pino TX) |
Este módulo RS-485 pode ser facilmente conectado ao Arduino. Vamos usar as portas seriais de hardware do Arduino 0 (RX) e 1 (TX) (In UNO, NANO). A programação também é simples, basta usar o Serial.print () para escrever no RS-485 e Serial.Read () para ler no RS-485.
A parte da programação é explicada em detalhes posteriormente, mas primeiro vamos verificar os componentes necessários e o diagrama de circuito.
Componentes necessários
- Arduino UNO ou Arduino NANO (2)
- Módulo conversor MAX485 TTL para RS485 - (2)
- Potenciômetro 10K
- Display LCD 16x2
- CONDUZIU
- Tábua de pão
- Fios de conexão
Neste tutorial, o Arduino Uno é usado como mestre e o Arduino Nano é usado como escravo. Duas placas Arduino são usadas aqui, portanto, dois módulos RS-485 são necessários.
Diagrama de circuito
Conexão de circuito entre o primeiro RS-485 e o Arduino UNO (mestre):
RS-485 |
Arduino UNO |
DI |
1 (TX) |
DE RÉ |
8 |
R0 |
0 (RX) |
VCC |
5V |
GND |
GND |
UMA |
Para A do Slave RS-485 |
B |
Para B do Slave RS-485 |
Conexão entre segundo RS-485 e Arduino Nano (Slave):
RS-485 |
Arduino UNO |
DI |
D1 (TX) |
DE RÉ |
D8 |
R0 |
D0 (RX) |
VCC |
5V |
GND |
GND |
UMA |
Para A do Mestre RS-485 |
B |
Para B do Mestre RS-485 |
Conexão de circuito entre um LCD 16x2 e Arduino Nano:
LCD 16x2 |
Arduino Nano |
VSS |
GND |
VDD |
+ 5V |
V0 |
Para o pino central do potenciômetro para controle de contraste do LCD |
RS |
D2 |
RW |
GND |
E |
D3 |
D4 |
D4 |
D5 |
D5 |
D6 |
D6 |
D7 |
D7 |
UMA |
+ 5V |
K |
GND |
Um potenciômetro de 10K é conectado ao pino analógico A0 do Arduino UNO para fornecer entrada analógica e um LED é conectado ao pino D10 do Arduino Nano.
Programando Arduino UNO e Arduino Nano para comunicação serial RS485
Para programar ambas as placas, é usado o IDE Arduino. Mas certifique-se de ter selecionado a PORTA correspondente em Ferramentas-> Porta e Placa em Ferramentas-> Placa.
O código completo com um vídeo de demonstração é fornecido no final deste tutorial. Aqui estamos explicando parte importante do código. Existem dois programas neste tutorial, um para Arduino UNO (Master) e outro para Arduino Nano (Slave).
Explicação do código para mestre: Arduino UNO
No lado Master, basta pegar a entrada analógica no pino A0 variando o potenciômetro e então SerialWrite esses valores para o barramento RS-485 através das portas seriais de hardware (0,1) do Arduino UNO.
Para iniciar a comunicação serial nos pinos seriais de hardware (0,1), use:
Serial.begin (9600);
Para ler o valor analógico no pino A0 do Arduino UNO e armazená-lo em um potval variável, use:
int potval = analogRead (pushval);
Antes de escrever o valor potval na porta serial, os pinos DE e RE do RS-485 devem ser ALTOS que estão conectados ao pino 8 do Arduino UNO para tornar o pino 8 ALTO:
digitalWrite (enablePin, HIGH);
Em seguida, para colocar esses valores na porta serial conectada com o módulo RS-485, use a seguinte instrução
Serial.println (potval);
Explicação do código para Slave: Arduino NANO
No lado Slave, um valor inteiro é recebido do Master RS-485 que está disponível na porta serial do hardware do Arduino Nano (Pins -0,1). Basta ler esses valores e armazenar em uma variável. Os valores estão na forma de (0 -1023). Portanto, é convertido em (0-255) conforme a técnica PWM é usada para controlar o brilho do LED.
Então AnalogWrite aqueles valores convertidos para o pino LED D10 (é um pino PWM). Portanto, dependendo do valor do PWM, o brilho do LED muda e também exibe esses valores no display LCD 16x2.
Para que o RS-485 do Slave Arduino receba os valores do Mestre, basta deixar os pinos DE e RE do RS-485 BAIXOS. Portanto, o pino D8 (enablePin) do Arduino NANO é BAIXO.
digitalWrite (enablePin, LOW);
E para ler os dados inteiros disponíveis na porta serial e armazená-los em um uso variável
int pwmval = Serial.parseInt ();
Em seguida, converta o valor de (0-1023 para 0-255) e armazene-os em uma variável:
int convert = map (pwmval, 0,1023,0,255);
Em seguida, escreva o valor analógico (PWM) no pino D10 onde o ânodo LED está conectado:
analogWrite (ledpin, converter);
Para imprimir os valores PWM em display LCD 16x2, use
lcd.setCursor (0,0); lcd.print ("PWM DO MASTER"); lcd.setCursor (0,1); lcd.print (converter);
Controlando o brilho do LED com comunicação serial RS485
Quando o valor PWM é definido como 0 usando o potenciômetro, o LED é desligado.
E quando o valor PWM é definido em 251 usando o potenciômetro: O LED é LIGADO com brilho total, conforme mostrado na imagem abaixo:
Portanto, é assim que o RS485 pode ser usado para comunicação serial no Arduino.