quarta-feira, 6 de março de 2013

Comunicação I²C entre Lego NXT e Arduino


Os kits de robótica Lego NXT são ferramentas de desenvolvimento fantásticas! São fáceis de se trabalhar e permitem a construção e programação de robôs de forma intuitiva e rápida (veja mais sobre esses kits aqui).

No entanto, o controlador do Lego NXT 2.0 (ilustrado na figura abaixo) possui limitação em termos do número de sensores e de motores que podem ser utilizados de maneira simultânea: usando o hardware original, apenas quatro sensores e três motores podem ser conectados simultaneamente ao controlador do robô! Para conexão de mais sensores é necessário comprar um hardware adicional que faz a expansão das entradas, permitindo que até quatro sensores sejam conectados a uma mesma entrada.


Controlador Lego NXT conectado a 4 sensores e 3 motores.

Embora tal limitação não seja um problema para muitas aplicações, em alguns casos o uso de apenas quatro sensores pode ser crítico. Uma solução de baixo custo que permite a utilização de mais sensores é conectar um microcontrolador a uma das portas de entrada do NXT e conectar os sensores ao microcontrolador. Dessa forma, o microcontrolador serve como uma "ponte", fazendo a multiplexação dos sinais dos diversos sensores ligados a ele e enviado ao NXT a leitura de um sensor de cada vez.

As portas do NXT podem utilizar dois padrões de comunicação: RS-485 ou I²C. O aluno Daniel Barcelos Mendes realizou e apresentou o trabalho “Desenvolvimento de Interface de Comunicação e Expansão para Kit de Robótica Educacional” na VII Jornada de Iniciação Científica do IFES, em outubro de 2012. Basicamente, ele implementou uma interface de comunicação entre o NXT e um Arduino. Como o Arduino possui bibliotecas para uma grande variedade de sensores, sua conexão dá ao NXT acesso a muitos sensores diferentes dos oferecidos pela Lego!

Em seu trabalho, Daniel realizou estudos de montagem e de programação do NXT (em linguagem NXC) e do Arduino, montou protótipos e testou a comunicação. Para prova de comunicação foram utilizados no Arduino um sensor de luz tipo LDR (resistor dependente de luz), um sensor de distância ultrassônico e um servomotor.

O texto completo contém códigos para Lego (NXC) e para Arduino e está disponível para download aqui.

Se você prefere realizar comunicação RS-485, veja este tutorial que já foi apresentado aqui no blog.

Divirta-se!
Até a próxima!