Mostrando postagens com marcador Lego NXT. Mostrar todas as postagens
Mostrando postagens com marcador Lego NXT. Mostrar todas as postagens

sábado, 30 de novembro de 2013

Robótica Educacional para Absolutamente Principiantes

Já comentei sobre a importância de se difundir a Robótica Educacional, especialmente no Brasil. A Robótica Educacional usa a robótica como fator motivador na educação de crianças e jovens, podendo ser utilizada para aprendizado e fixação de conceitos de diversas disciplinas.

Muitos professores deixam de usar essa poderosa ferramenta por falta de oportunidade de estudá-la. Se esse é o seu caso, seus problemas acabaram! Bom, pelo menos esse é o caso se você entende inglês.

A professora  Jennifer S. Kay, do Rowan University Laboratory for Educational Robotics, está oferecendo um curso on-line, totalmente gratuito, destinado a professores que desejam utilizar a robótica educacional em suas aulas. Melhor! O curso é feito para aqueles que nunca viram, nunca montaram e nunca programaram um robô!

O curso é baseado no kit de robótica educacional Lego NXT. Esse kit é amplamente utilizado em vários países do mundo e eu mesmo já fiz vários comentários sobre ele aqui no blog. Com ele os alunos (e professores) podem montar um robô facilmente usando peças de Lego, sensores e motores, e programá-lo com uma linguagem de programação gráfica muito intuitiva.

O vídeo a seguir apresenta o curso, cuja página pode ser acessada aqui:



Espero que você possa aproveitar esse curso dedicado a quem é absolutamente principiante, e que tem vontade de aprender (e ensinar) robótica!

Aproveito para agradecer ao colega José Ignácio Serafini pela dica.

Até a próxima!

Referência:
https://cs4hsrobots.appspot.com/preview

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!

quarta-feira, 24 de agosto de 2011

Arduino conversando com Lego NXT via RS-485

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