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!