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. |
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!
--- 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
Muito bom felipe! Gostei de mais!
ResponderExcluirValeu, Ivan!
ResponderExcluirMuito bacana, Felipe!
ResponderExcluirSeria legal se tivessem mais ferramentas abertas para o NXT...
Abraços.
Seria legal mesmo, Álvaro. Na verdade, a Lego abriu todo o sistema (hardware e software), então acho que teremos mais ferramentas abertas em breve!
ResponderExcluirVeja:
http://mindstorms.lego.com/en-us/support/files/default.aspx
Abraços!
Parabéns, com o Lego da instituição pretendo fazer o mesmo :)
ResponderExcluir