Hoje finalmente consegui testar algo que já tinha vontade há algum tempo: comunicação entre Arduino e o NXT via RS-485. [Obrigado ao Ivan Seidel, que me emprestou um conector super bacana para ligar o cabo do NXT direto no
pront-o-board! :-) ]
Para quem não conhece, o NXT é um bloco programável da Lego, ideal para quem quer trabalhar com robótica sem se preocupar com eletrônica. Ele é muito versátil!
Você pode conhecer o NXT lendo este post.
O sistema que montei é o que está descrito no
Rostrich's Blog, onde você vai encontrar o esquema para conexão entre o Arduino e o NXT, além dos programas para ambos:
http://rostrich.wordpress.com/2010/05/16/nxt-and-arduino-talking-rs-485/
Ele sugeriu o uso do chip MAX485, que é um circuito integrado de baixo consumo da Maxim dedicado a implementação de comunicação nos padrões RS-485 e RS-422.
Se você planeja usar outro Arduino que não o Uno ou o Nano, veja observação no final do post.
O sistema que montei tem poucas diferenças em relação ao descrito pelo Rostrich. Fisicamente, a diferença se resume ao CI que utilizei: como eu não tinha o MAX485, usei o MAX483, que é um CI equivalente mas com menor velocidade de comunicação. Talvez por isso eu não tenha conseguido alcançar a velocidade de 57600bps (bits por segundo) que o Rostrich diz ter conseguido. Ou seja, precisei fazer uma pequena alteração no código do arquivo
baudrate.h, que ficou assim:
#define RS485_BAUD 28800
Também cheguei a testar com 38400bps, mas a comunicação falha de vez em quando. Essa falha pode ser por causa do meu circuito, feito em
pront-o-board e com fios que mais parecem antenas... Mesmo assim, funcionou!
 |
| Arduino e NXT conversando via RS-485. Teste feito a 38.400 bps. |
Cuidado, pois as velocidades de comunicação permitidas têm valores definidos. Usei 28800 bps, mas você pode usar menores. Veja
todas aqui.
As outras diferenças do sistema que montei em relação ao do Rostrich são de
software:
- usei a versão 0022 para compilar o programa do Arduino;
- meu compilador para o NXT é o NXC NBC-1.2.1-r3;
- usei o Windows Vista.
A linguagem NXC (Not eXactly C), usada para programar o NXT, tem a mesma estrutura do C comum. A IDE que usei para compilar o programa em NXC e gravar o NXT é o Bricxcc. Ele é gratuito e pode ser
baixado aqui. Informações sobre a linguagem
NXC estão aqui.
Veja o resultado do sistema funcionando!
Ah! Se você ainda não fez isso, vai precisar atualizar o
firmware do seu NXT para que o programa funcione: é necessário ter a versão 1.28 enhanced. Atualizei o meu com o que baixei
neste link. O próprio Bricxcc tem um comando para atualização do
firmware.
--- acrescentado em 05/01/2014 ---
O programa que está n no
Rostrich's Blog foi desenvolvido para o Arduino Nano. Para usar com outros modelos de Arduino pode ser necessário fazer pequenos ajustes, pois o programa faz uso direto dos registradores do microconrtolador. No Arduino Uno (e Nano), com ATmega328, os pinos 10, 11 e 12 são mapeados nos bits PB2, PB3 e PB4 do registrador PORTB, respectivamente. Por exemplo, no Arduino Mega os pinos 10, 11 e 12 são mapeados nos bits PB4, PB5 e PB6 do PORTB.
Como o programa que está n no
Rostrich's Blog faz uso direto do registrador PORTB, para usá-lo no Arduino Mega é necessário alterar as linhas de definição dos bits de recepção e transmissão para os seguintes valores:
const byte RECV_RS485_BIT = B00100000;
const byte SEND_RS485_BIT = B00010000;
Outros modelos de Arduino podem exigir alterações semelhantes.
Agradeço ao leitor José Pedro Ribeiro Belo por ter feito a pergunta e por ter insistido em fazer o sistema funcionar com o Arduino Mega (veja comentários abaixo). :-)
---
Divirta-se! E até a próxima!
Referências:
http://rostrich.wordpress.com/2010/05/16/nxt-and-arduino-talking-rs-485/
http://forum.arduino.cc/index.php/topic,146511.0.html