Tutorial: Shield RS485 e Conversor USB/RS485 com Arduino e SCADABR

Adquira estes componentes na Loja do Lab de Garagem

O shield contém um chip transceiver RS485 que faz o trabalho de conversão dos dados de TTL para RS485 e vice versa, LEDs para indicar o fluxo do tráfego na rede, bornes para ligar os cabos do barramento da rede, jumpers para selecionar uso de resistores de terminação e bias da rede e jumpers para escolher entre usar uma porta de comunicação serial física do ATmega do Arduino ou usar uma porta soft serial. Para a comunicação pela hard serial (HS) são utilizados os pinos digitais 0 e 1 do Arduino. Para a comunicação usando soft serial (SS) são usados os pinos digitais 2 e 3 do Arduino. O pino digital 6 é usado para comutação entre os modos de transmissão e recepção do transceiver do shield.

O conversor USB/RS485 usa o chip FT232RL para criar um dispositivo serial em qualquer microcomputador (porta COM) que pode ser acessada pelo usuário ou programas. O conversor também possui o mesmo circuito do transceiver RS485 com os jumpers, resistores, LEDs e bornes presente no shield.

Função dos Jumpers do Shield e do conversor:

  • JP1 - Liga ou desliga o resistor de pull up do barramento;

  • JP2 - Liga ou desliga o resistor de terminação do barramento;

  • JP3 - Liga ou desliga o resistor de pull down do barramento;

  • JP4 - Seleciona o RX da HS ou da SS;

  • JP5 - Seleciona o TX da HS ou da SS.

Observações:

  • JP1 e JP3 só podem ser ligados em um único dispositivo da rede e devem ser selecionados igualmente, os dois abertos ou os dois fechados.

  • JP2 só pode estar ligado se o dispositivo estiver em uma das duas extremidades do barramento, devendo obrigatoriamente ficar desligado quando estiver no meio da rede.

  • JP4 e JP5 devem ser selecionados igualmente, ou para HS ou para SS.

  • JP4 e JP5 não podem estar ligados em HS durante o upload de um sketch para o Arduino.

  • Os Pinos Digitais 0 e 1, ou 2 e 3 e o pino 6 não poderão ser utilizados por outro periférico.

  • O upload de um sketch sempre deve ser feito pelo canal USB nativo do Arduino, não sendo possível fazer-lo pela rede RS485.

Características técnicas

  • O Kit atende a norma Standard EIA RS-485 Physical media.

  • Opera com qualquer protocolo de comunicação serial com suporte a RS485 como o protocolo MODBUS RTU entre outros.

  • Taxa de transmissão suportada de 4800bps a 115200bps.

  • Topologia de rede ponto a ponto, ou multi-ponto com cabo de par trançado.

  • Modo de operação balanceado diferencial half duplex.

  • Até 32 dispositivos são suportados na mesma rede.

  • Comprimento máximo do cabo da rede de 1200m (4000 pés).

  • Níveis de tensão no barramento RS485 de -7 V a +12 V. Mark (1) tensões positivas (B-A > +200 mV) Space (0) tensões negativas (B-A < -200 mV).

  • O chip SN75176 é usado para a conversão TTL/RS485.

  • Utiliza os pinos digitais 0 e 1, ou 2 e 3 do Arduino para comunicação serial com o shield e o pino digital 6 para comutação entre os modos de transmissão e recepção. Obs. Os Pinos Digitais 0 e 1, ou 2 e 3 e o pino 6 não poderão ser utilizados por outro periférico.

  • A alimentação do shield é feita através dos pinos 5 V e GND da placa do Arduino.

  • Disponibiliza os pinos do Arduino em dois barramentos laterais, facilitando aplicações que possam utilizar os pinos de I/O do módulo.

  • O conversor USB/RS485 utiliza o chip FTD232RL para a conversão de USB para TTL e é alimentado pela porta USB do computador.

 

Instalação do Shield no Arduino

  1. Encaixar o shield conversor RS485/TTL ao Arduino como na figura 2;

  2. Ligar o cabo positivo ou A do barramento da rede RS485 ao borne A do conversor RS485/TTL usando uma chave de fenda;

  3. Ligar o cabo negativo ou B do barramento da rede RS485 ao borne B do conversor RS485/TTL usando uma chave de fenda;

  4. Ligar o borne GND à malha do cabo do barramento;

  5. Abra os jumpers JP4 e JP5;

  6. Selecione o sketch desejado na IDE do Arduino e faça o upload para o Arduino usando o cabo USB do Arduino, sempre verifique que JP4 e JP5 estão abertos antes de fazer o upload;

  7. Religue os jumpers JP4 e JP5 selecionando para HS ou SS, conforme esteja no sketch usado no Arduino;

  8. Ligar os jumpers JP1, JP2 e JP3 conforme a necessidade, ver as observações na seção Descrição do KIT para mais detalhes.

Instalação do conversor USB/RS485 no PC

  1. Ligar o cabo positivo ou A do barramento da rede RS485 ao borne A do conversor USB/ RS485 usando uma chave de fenda;

  2. Ligar o cabo negativo ou B do barramento da rede RS485 ao borne B do conversor USB/ RS485;

  3. Ligar o borne GND à malha do cabo do barramento;

  4. Ligar o cabo USB ao conector USB do conversor e a uma porta USB livre do PC;

  5. Aguarde o PC reconhecer o novo dispositivo e quando abrir a tela pedindo a indicação do caminho para o drive de instalação, aponte para a pasta do PC onde está instalado a IDE do Arduino e procure pela pasta FTDI USB Drivers dentro da pasta DRIVERS, normalmente será algo parecido com: X:\arduinoYYY\drivers;
  6. Após a instalação ser concluída, verifique qual porta foi criada usando o gerenciador de dispositivos do Windows.

 

Configuração

  • O usuário deve configurar igualmente todos os parâmetros das portas de comunicação de todos os dispositivos ligados a rede RS485, observando os valores de bits por segundo (baud rate), número de bits dos dados transmitidos, paridade e stop bits.

  • Todos os dispositivos devem estar usando o mesmo protocolo de comunicação.

  • O pino digital (6) do Arduino terá função de enable (EN) que habilita o conversor RS485/TTL para o modo de transmissão quando estiver em nível lógico 1 (5V) ou para modo de recepção quando o pino de enable estiver em nível lógico 0 (0V).

  • Os LEDs TX e RX do shield e do conversor indicam o tráfego da rede.

Teste Inicial

Para testar o funcionamento correto dos módulos e a comunicação entre o PC e o Arduino a forma mais simples é usando o SERIAL MONITOR que está disponível na IDE do Arduino e montando a aplicação a seguir.

 

De posse das ferramentas e dos componentes, siga os passos abaixo:

  1. Instalar o shield ao Arduino e o conversor ao PC conforme mostrado nos itens instalação e configuração;

  2. Montar o circuito nos conectores do shield usando os componentes conforme mostrado na figura 4.

  3. Ligar o potenciômetro de 10k com o cursor ligado a entrada analógica 0 e os pinos externos ligados ao GND e 5V;

  4. Ligar a chave táctil entre o 5V e a entrada digital 4 com resistor de pull down de 10k;

ATENÇÃO: Revisar todas as ligações com muito cuidado antes de energizar o circuito, para evitar possíveis danos aos aparelhos!!!

  1. Ligar uma fonte de alimentação de 7 a 12 VCC ao conector de alimentação externa do Arduino.

  2. Abrir um novo sketch na IDE do Arduino e copiar o texto do apêndice III

  3. Faça o upload para o Arduino conectando o cabo USB no conector do Arduino e a uma porta USB do PC. Não se esqueça de desligar os jumpers JP4 e JP5 durante o upload do sketch religando-os em seguida;

  4. Assim que a mensagem confirmando que o upload terminou corretamente, desligue o cabo USB do Arduino e feche a IDE do Arduino;

  5. Ligue o conversor USB/RS485 ao PC e reabra a IDE do Arduino, abra o sketch do teste e na aba Tools / Serial Port selecione a porta COM do conversor USB/RS485.
  6. Neste sketch o Arduino ficará aguardando o recebimento de um caractere digitado no teclado do PC pelo usuário que deve estar usando um programa de terminal como por exemplo o Serial Monitor da IDE do Arduino. Assim que for recebido um caractere, o Arduino irá enviar de volta ao PC o valor presente na entrada analógica A0 (variando de 0 a 255), o estado da entrada digital D4 (0 ou 1) e o caractere que foi digitado;
  7. Abra o SERIAL MONITOR na IDE do Arduino, e ajuste a velocidade para 9600 baud. Agora digite a tecla “a” e pressione a tecla Send ( ou tecle ENTER), se tudo estiver correto, você terá uma tela parecida com a da figura 5. Faça o teste com outras teclas, mas digite e envie apenas uma de cada vez e aguarde o retorno do Arduino, não se esqueça que o RS485 é half duplex, e o seu dedo é o protocolo de comunicação.
  8. Teste a comunicação com outras velocidades mudando o baud rate no sketch na linha Serial.begin(9600); faça o novo upload repetindo os passos de 7 a 11 e mudando também a velocidade no Serial Monitor.

 

Passe seguinte programação para o Arduino:

/*

Teste de Comunicação Serial com RS485

Este exemplo é de domínio público

Testado na IDE 1.0.1

*/

int POTENCIOMETRO = 0; // valor lido no potenciometro na entrada analogica A0

int CHAVE = 0; // Estado do push botton ligado na entrada D4

int RECEBIDO = 0; // Byte recebido pela serial

void setup()

{

// Iniciando a comunicação a 9600 bps:

Serial.begin(9600);

pinMode(4, INPUT); // Chave no pino digital 4

pinMode(6, OUTPUT); // TX ENABLE no pino digital 6 (está no SHIELD)

}

void loop()

{

// Verifica se recebeu algum caracter pela serial

if (Serial.available() > 0) {

// le o byte recebido:

RECEBIDO = Serial.read();

// le a entrada analógica e divide por 4 para caber em um byte (0-255):

POTENCIOMETRO = analogRead(A0)/4;

// le o estado do botão:

CHAVE = map(digitalRead(4), 0, 1, 0, 1);

// envia os valores dos sensores:

digitalWrite(6, HIGH); // coloca o Shield RS485 em modo de transmissão

delay(1); // aguarda 1 milisegundo

Serial.write("Pino A0 = ");

Serial.print(POTENCIOMETRO);//Serial.println(POTENCIOMETRO, DEC);

Serial.write('\n');

Serial.write("Pino D4 = ");

Serial.print(CHAVE);

Serial.write('\n');

Serial.write("Caracter recebido = ");

Serial.write((byte)RECEBIDO);//Serial.write(RECEBIDO);//Serial.println(RECEBIDO, BYTE);//Serial.write(byte(RECEBIDO));

Serial.write('\n');

delay(100);

digitalWrite(6, LOW); // coloca o Shield RS485 em modo de recepção

Serial.flush();

delay(300); // aguarda

}

}

Se não estiver funcionando como o esperado:

  • Revise todas as ligações do circuito;

  • A tensão da fonte de alimentação do Arduino;

  • A ligação dos cabos do barramento RS485;

  • Verifique se a porta COM do conversor USB é a que foi selecionada na IDE do Arduino;

  • Se o baud rate no serial monitor está em 9600;

  • Se o drive do FTD232RL foi corretamente instalado no gerenciador de dispositivos de hardware do PC.

Estes produtos podem ser utilizados com SCADABR para automação residencial, utilizando o Arduino como MODBUS e assim podendo acessar remotamente periféricos instalados a ele. Junto com o Arduino é possível fazer leituras de sensores, ativar ou desativar periféricos (lâmpada, portões eletrônicos, etc).

O SCADABR é um software de sistema supervisório Open Source e pode ser utilizado para automação em vários ambientes como indústrias, residências, sistemas de energia e etc.

Para utilizar o Shield RS485 e o Conversor USB/RS485 com ScadaBR, baixe o manual clicando aqui.

E é isso! Esperamos que tenha gostado! Caso tenha dúvidas, poste aqui neste blog! Se tiver sugestões para tutoriais, poste aqui. Para ver outros tutoriais e projetos desenvolvidos pela equipe LdG e por outros garagistas, clique aqui e aqui, respectivamente

Referências:

http://arduino.cc/en/

http://www.scadabr.com.br/

Exibições: 26924

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Patrick Campos em 16 novembro 2017 às 20:42

Boa noite pessoal, o esquemático desse circuito está disponível em algum lugar do site? Ou alguem sabe onde encontrá-lo?

Comentário de JGarcia em 14 dezembro 2015 às 11:13

È possivel utilizar apenas HS e liberar o pino 2 para executar interrupções ? to com o shield e o sensor de fluxo que utiliza interrupções no pino 2.

Comentário de Wiechert em 8 setembro 2014 às 22:38

Dá pra fazer uma comunicação full duplex do tipo RS422 montandp dois canais RS485 e dois pares de fios, o primeiro faz  a transmissão do dispositivo 1 para o dispositivo 2 e o segundo faz a transmissão do dispositivo 2 pro dispositivo 1.

Comentário de Wiechert em 8 setembro 2014 às 22:31

É verdade, mas dá pra usar as interrupções do atmega mesmo programando na ide do arduino, é só estudar um pouco o capítulo de interrupções do avr e acessar os registradores... mesmo da ide... ou então, parta pro avr studio...

Comentário de José Carlos Oliveira em 8 setembro 2014 às 22:26

Lembro que o RS485 é um padrão elétrico de comunicação e que muitos chips permitem que vc controle a transmissão e recepção no modo full-duplex também chamado de RS-422, ou seja, "você pode transmitir e receber dados ao mesmo tempo" usando 4 fios. O grande problema do Arduino é que você não tem controle de todas as interrupções do processador. 

Comentário de Wiechert em 8 setembro 2014 às 18:23

O RS485 é half-duplex, isto é, a comunicação ocorre ora em um sentido ora em outro, nunca nos dois sentidos simultaneamente. Um sistema que usa o Rs485 como  meio físico precisa de um protocolo para gerenciar a comunicação.

Geralmente é usado a configuração mestre-escravo, onde apenas o mestre pode iniciar a comunicação, fazendo as solicitações de estado e comandos para um determinado escravo que então responde ao mestre.

O protocolo MODBUS é um exemplo de protocolo muito usado com RS485, mas nada impede de que você mesmo desenvolva o seu próprio protocolo.

Comentário de Paulo Víctor Machado de meireles em 8 setembro 2014 às 18:05

Oi galera, estou tentando montar um ROV e estava pensando em usar RS485 para comunicar o notebook com um arduino que ficaria no ROV. A ideia é controla-lo pelo PC e receber dele video e sinais de sensores como pressão e temperatura. A minha dúvida é, eu consigo transmitir dados simultâneos de controle por parte do PC(sinais para as bombas) e de dados por parte do arduino(Sensores + video)? Obrigado pela atenção!

Comentário de Wiechert em 20 novembro 2013 às 22:20

No projeto do kit RS485 não usei nenhum transistor para controlar a linha de transmissão do driver.

No shield foi usado um pino do arduino que é setado no início da rotina de transmissão e resetado após o fim da transmissão, no conversor USB, foi usado um pino do FTDI próprio para o controle de transmissão.

Comentário de José Carlos Oliveira em 20 novembro 2013 às 22:05

Sim Marcos, como o arduino não tem interrupções de Timer, somos obrigados a utilizar a função millis.

O que eu gostaria é de eliminar o transistor que eu utilizo nos meus projetos conforme esquema elétrico abaixo.

Utilizo a biblioteca Serial padrão do arduino, neste caso "Serial2".  Pena que ela não disponibilize uma informação de fim de transmissão dos dados no buffer, ou buffer vazio.

Se alguém tiver alguma dica agradeço muito.

Comentário de Wiechert em 20 novembro 2013 às 12:06

Olá José, como você disse que não usa o delay pra nada, já deve saber que a saída é usar a função millis pra evitar que o processamento pare por causa do delay.

 

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço