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.
Todos os materiais podem ser comprados em nossa loja.
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!");
}
}
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.

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!”

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!
Referências utilizadas no artigo:
|
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!