Tutoriais

Comunicação com Conversor USB – RS485

Eletrogate 1 de dezembro de 2022

Introdução

Nesse tutorial, vamos criar um sistema de comunicação entre um computador e uma Arduino, utilizando RS485. Vamos utilizar o conhecimento adquirido no post Comunicação Half-duplex com RS-485, onde é explicado o que é a comunicação RS485. Este projeto simula um cenário bastante comum em indústrias, onde a Arduino pode ser um CLP (Controlador lógico programável) que controla alguma máquina e/ou processo em diferentes aplicações e o computador é o sistemas de controle da indústria, por exemplo, um ERP (Sistema integrado de gestão empresarial), onde o responsável pode controlar e visualizar os dados do CLP.


Código

O firmware lê os dados recebidos via RS485, os mostra no display LCD e, se o dado recebido for a frase “LED ON” ou “LED OFF”, o Led irá acender ou apagar, respectivamente.

/**
 * @file PC_Arduino_RS485.ino
 * Criado por: Saulo Aislan
 * @brief Firmware para receber dados via RS485 enviados pelo 
 * computador, exibir no LCD e acender ou apagar um LED.
 * @version 1.0
 * 
 * @copyright Copyright (c) 2022
 * 
*/

#include <Wire.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>

#define ENB_PIN   4   // Pino do modo de operação do RS485
#define PinLED    13  // Pino do LED

LiquidCrystal_I2C lcd(0x3F,16,2); //Inicializa o display no endereco 0x3F
SoftwareSerial serialRS(2, 3);    // RO, DI

char ledStatus;                   // Status do LED
const int BUFFER_SIZE = 100;
char buf[BUFFER_SIZE];
String strTemp = "";

/**
 * @brief setup
 */
void setup() {
  Serial.begin(9600);
  serialRS.begin(9600);  
  lcd.init();                     // Inicializa o display LCD
  pinMode(PinLED, OUTPUT);        
  pinMode(ENB_PIN, OUTPUT);       
  digitalWrite(ENB_PIN, LOW);     // Habilitar o recebimento do RS485

  lcd.clear();
  lcd.setBacklight(HIGH);
  lcd.setCursor(0,0);
  lcd.print("  Comunicacao  ");
  lcd.setCursor(0,1);
  lcd.print("     RS485   ");
  delay(1500);
}

/**
 * @brief Loop
 */
void loop() {
  if (serialRS.available() > 0)
  {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Recebendo:");
    lcd.setCursor(0,1);
    
    // Ler os dados recebidos até encontrar o '\n', armazena no buf e em rlen o tamanho
    int rlen = serialRS.readBytesUntil('\n', buf, BUFFER_SIZE);

    for(int i = 0; i < rlen-1; i++)
    {
      strTemp += buf[i];  // Escreve os dados recebidos na String strTemp
    }
    
    lcd.print(strTemp);   // Imprime no LCD os dados
    ledFunc(strTemp);     // Chama a função ledFunc
  }
  
  strTemp = "";           // limpa a String strTemp
}

/**
 * @brief Função para acender ou apagar o LED e imprimir
 * no LCD o status atual do LED
 * @params char ledNewStatus Estado de LED recebido via RS485
 */
void ledFunc(String ledNewStatus)
{
  if (ledNewStatus == "LED ON" || ledNewStatus == "LED On")
  {
    digitalWrite(PinLED,HIGH);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("LED Aceso!");
  }
  else if (ledNewStatus == "LED OFF" || ledNewStatus == "LED Off")
  {
    digitalWrite(PinLED,LOW);
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("LED Apagado!");
  }
}

Circuito

Certifique que ao conectar o módulo RS485 ao conversor USB/RS485 a conexão está correta A com A e B com B. Para informações sobre utilização do display e endereçamento consulte o nosso artigo sobre LCD.


Como Funciona?

Para testar o projeto, vamos utilizar o Termite (https://www.compuphase.com/software_termite.htm) para enviar os dados via USB para RS485:

Ao enviar qualquer mensagem pelo Termite, a Arduino recebe e imprime no display LCD. Se a mensagem enviada for “LED ON” ou “LED On” o Led irá acender e irá aparecer, no display, a mensagem “LED Aceso!”. Ao enviar “LED OFF” ou “LED Off”, o Led irá apagar e irá aparecer, no display, a mensagem “LED Apagado!”


Conclusão

Nesse tutorial, aprendemos a montar um sistema de comunicação de dados via RS485 entre um computador e um Arduino. Esse projeto é só uma amostra do potencial e usabilidade desse tipo de comunicação. Para mais material como este, continue acompanhando as postagens semanais do blog e não deixe de visitar nossa loja. Lá, você encontra todos os componentes necessários para desenvolver esse e muitos outros projetos!

Que a força estejam com vocês e até mais!


Sobre o Autor


Saulo Aislan

Graduando em Tecnologia em Telemática pelo IFPB – Campus de Campina Grande – PB. Tenho experiência com os microcontroladores da família Arduino, ESP8266, ESP32, STM32 e microprocessador Raspberry Pi. Tenho projetos na áreas de IoTs voltada para a indústria 4.0, agroindústria e indústria aeroespacial civil utilizando LoRa, Bluetooth, ZigBee e Wi-Fi. Atualmente estudando e desenvolvendo em FreeRTOS para sistemas em tempo real com ESP32 e LoRaWan para Smart City e compartilhando alguns projetos no blog da Eletrogate.


Eletrogate

1 de dezembro de 2022

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!