domingo, 9 de setembro de 2012

Monte seu robô com Arduino!

Mini-robô com Arduino.
Quer montar seu próprio robô? Você pode!! 

Neste post vou descrever como você pode montar o robô ao lado, mostrando onde comprar as peças e dando dicas para sua montagem. 

A montagem não é complicada! Você não precisa ser um expert em eletrônica para montar este robô, mas precisa ter noções básicas (para poder ligar os cabos corretamente), além de fazer soldagem de componentes e fios. 

Se você quer montar um robô sem precisar fazer soldas nem se preocupar com a eletrônica, experimente o Lego NXT (veja aqui).

O vídeo abaixo mostra um resumo da montagem e testes do mini-robô com Arduino:


Por onde começar?

Em primeiro lugar, você deve definir o que seu robô vai fazer e em que ambiente ele vai se deslocar. Isso é essencial para a escolha das peças e estrutura corretas. Por exemplo, a estrutura de um robô que irá se deslocar em piso liso e limpo será muito diferente daquela de um robô capaz de se locomover em ambientes externos com piso de areia. 

Uma opção bem econômica é aproveitar aquele velho carro de controle-remoto que você não usa mais (ou roubar o do seu irmão). Nesse caso, você pode aproveitar a estrutura mecânica e os motores. Retire toda a eletrônica original (com cuidado, para que você consiga montar novamente caso seu irmão descubra), e substitua pelas placas que vou descrever a seguir.

Eu montei o meu com as peças mostradas abaixo.

Peças usadas na montagem do robô. A lista completa e locais de compra encontra-se no final deste post.


No fim deste post há uma lista detalhada com a quantidade de peças necessárias e seus sites para compra. 



Se você quiser montar um robô diferente, pode usar qualquer um dos diversos kits disponíveis no mercado. Veja alguns exemplos em:


Robô com Esteiras

Um robô a esteiras é melhor do que um robô a rodas para se deslocar em ambientes acidentados. Ele pode passar por cima de obstáculos maiores que robôs com rodas, o que é interessante! No entanto, robôs com esteira exigem mais energia durante seu deslocamento, o que significa que eles gastam mais bateria que os robôs a rodas.

A estrutura mecânica deste robô torna desnecessário o uso de rodas direcionais. Para fazer curvas, basta que uma esteira se movimente mais rápido que a outra. Se uma se mover num sentido e a outra se mover no sentido contrário com a mesma velocidade, o robô fará um giro em torno de seu centro. Isso resulta em boa mobilidade e facilita o controle.

Dicas de Montagem - Vamos ao que interessa!

Base


A base tem dimensões de 98 x 86 x 39 mm. É feita de plástico, tem suporte para 4 pilhas AA, para os dois motores e para as rodas. As quatro rodas e as duas esteiras de borracha acompanham o conjunto.


A base vem quase pronta, mas alguma montagem é necessária. Você vai precisar encaixar os contatos metálicos para as pilhas. Os contatos das extremidades não têm local fixo de encaixe, então você pode colá-los com um pouco de Super Bonder ou prender com uma fita dupla-face. Eu usei fita isolante mesmo. É uma boa ideia soldar os fios aos contatos das pilhas antes de prendê-los à base! Lembre-se de usar fios de cores diferentes para os terminais positivo e negativo das pilhas, pois isso ajuda a evitar ligações incorretas que podem resultar em queima dos circuitos.


Motores 

Os motores que usei são micro-motores de 6V que já vêm com uma caixa de redução de 100:1. Ou seja, a cada 100 voltas no eixo do motor, a roda dará apenas uma volta. Isso significa que a roda gira numa velocidade muito menor que o eixo do motor. Porque queremos isso? Simples: com a caixa de redução, o torque disponível na roda aumenta na mesma proporção da redução da velocidade. Ou seja, o robô fica mais lento, mas muito mais forte!

No site da Pololu você encontra outros motores que se encaixam na base. Eles têm o mesmo tamanho e mesma tensão, mas relação de redução é diferente. Com isso, se você quiser um robô mais rápido (e menos forte), pode usar um motor com redução menor (50:1, por exemplo).


Atenção! As rodas dos motores são diferentes! Elas tê um pequeno rasgo na lateral e o encaixe do eixo não é perfeitamente redondo: possui um chanfro para encaixar o eixo do motor. Depois de encaixar os motores nas rodas, você pode usar a própria roda como base para soldar os fios nos terminais dos motores. De novo, lembre-se de usar cores diferentes para os terminais positivo e negativo.

      

Após encaixar os motores e soldar os terminais, encaixe os motores na base.

Sensores de giro (opcional)

Se você quiser, pode instalar codificadores ópticos (encoders) para medir o giro das rodas de seu robô. Essa característica é interessante se você pensa em aplicar controladores mais complexos em seu robô, pois os encoders permitem medir a velocidade das rodas e estimar a posição relativa do robô. Se não quiser usar encoders, seu robô também vai funcionar!


Os encoders que eu usei são próprios para as rodas que vêm com a base. Por isso, basta cortar um pouco o plástico superior da base e parafusar os encoders como mostrado na foto ao lado. Sim, o furo da placa se alinha perfeitamente ao furo da base!


O funcionamento do encoder (de forma resumida) é o seguinte: LEDs da placa emitem luz infravermelha que é refletida pelos dentes existentes na parte interna da roda. Com o giro da roda, os dentes se movem e a reflexão ocorre de maneira alternada. A partir da detecção ou não do reflexo de luz, um trem de pulsos elétricos é gerado. Contando o número de pulsos é possível saber quantos graus a roda girou. Conhecendo a geometria do robô, pode-se determinar sua velocidade e seu deslocamento. 

Detalhe: para saber se a roda está girando no sentido horário ou anti-horário, cada placa tem dois emissores e dois receptores. Eles são montados de forma que o giro da roda em dado sentido provoca reflexão em um dos sensores primeiro. 

Os sensores da Pololu são muito bons. Eles podem ser alimentados diretamente pelo Arduino e seus sinais de saída também são conectados diretamente aos pinos do Arduino. No entanto, verifiquei que os encoders sofrem muita interferência de iluminação externa, o que pode exigir algum ajuste ou colocação de algum tipo de cobertura. 

Motor Shield para Arduino

O uso do Arduino como placa controladora permite a utilização de um shield para controle dos motores. Eu usei o Arduino Uno, mas você também pode usar outras versões, como o Leonardo ou o Duemilanove. 

Motor Shield encaixado no Arduino.

O shield que utilizei está mostrado na figura ao lado, já encaixado no Arduino Uno. Ele tem um chip com duas pontes-H com capacidade para controlar dois motores de corrente contínua de maneira independente. Recebe alimentação entre 6 e 15V e inclui um regulador de 5V para alimentar o Arduino, o que é muito interessante já que as 4 pilhas (alcalinas) resultam numa fonte de 6V. 

A ligação dos motores ao motor shield é bem simples: basta parafusar seus fios ao conector verde com as indicações M1+, M1-  (motor 1) e M2+, M2- (motor 2).  Os terminais da bateria devem ser ligados ao conector com as indicações VS (positivo) e GND (negativo). O jumper J4 deve permanecer encaixado para que a alimentação do Arduino seja feita através do regulador do motor shield.  Encaixe o motor shield no Arduino de maneira que as bordas das placas fiquem alinhadas.

Um código para teste do shield e acionamento dos motores está disponível na página do fabricante (veja link no final do post). A velocidade dos motores é controlada pela variação da razão cíclica do sinal PWM gerado pelo Arduino. No exemplo do fabricante, ele usa a função analogWrite para gerar o PWM, o que resulta num sinal com frequência de ~490Hz. Nos testes que realizei, os motores funcionaram sem nenhum problema com esse PWM, mas emitiram ruído audível que pode incomodar um pouco.

Detalhe importante: para que o robô se desloque em linha reta é necessário que as duas esteiras girem na mesma velocidade. No seu programa, você pode usar o mesmo valor na função analogWrite de ambos os motores, mas isso não garante que as rodas irão girar na mesma velocidade! Apesar de serem do mesmo tipo, dois motores nunca são exatamente iguais. Além disso, características como atrito, deslizamento e até diâmetro das rodas irão afetar a velocidade final de deslocamento. Com o uso de encoders você pode fazer um programa que mede a velocidade das rodas e realiza a compensação necessária, caso queira que o robô se mova em linha reta.

Com a base montada, motores encaixados e eletrônica pronta, seu robô já está pronto para andar!


Sensor ultrassônico

Módulos ultrassônicos.
Um robô só é um robô de verdade quando ele pode perceber o meio. Um sensor muito popular que permite a medição de distância a obstáculos é o sensor ultrassônico. A figura ao lado apresenta dois módulos de sensores ultrassônicos (um é visto de frente e o outro é visto de costas). Segundo o fabricante, esse módulo é capaz de medir distância a obstáculos entre 3cm e 4 metros!

O módulo ultrassônico funciona como um Sonar. Para medir a distância ao objeto que está a sua frente, o módulo emite um pulso de ultrassom (som em frequência de 40kHz, nesse caso) e mede o tempo que o reflexo do som leva para retornar. Sabendo que a velocidade do som no ar (à temperatura ambiente) é de ~340m/s, conhecendo o tempo que o som levou para ir até o obstáculo e voltar você pode calcular a que distância ele está! 

O Arduino possui um exemplo de programa que funciona exatamente com esse modelo de sensor. Você pode encontrá-lo em Exemples -> 06. Sensors -> Ping. Usei este exemplo para testar o módulo ultrassônico como mostrado no vídeo. Pude observar que esse módulo tem precisão de +/-1cm para leituras entre 3 e 30cm. Também notei que o ângulo de abertura do sensor não é muito grande: para distâncias menores que 20cm, o obstáculo deve estar praticamente em frente ao sensor para que possa ser detectado. A 20cm do sensor, um afastamento de 5cm do centro de sua linha de ação já faz com que o obstáculo não seja percebido.

Robô montado

Provisoriamente, encaixei os sensores de ultrassom numa pequena matriz de contatos apoiada na parte superior do robô. Um sensor está voltado para para a frente e o outro para trás, já que esse robô pode se deslocar nos dois sentidos. 

Robô montado.

Espero que tenha gostado do post e que ele lhe ajude a montar o seu próprio robô! 
A seguir, veja a listagem de peças utilizadas, seu modelo, a quantidade necessária e sites para compra.

Até a próxima!





Quantidade de peças e locais de compra e preços:

1 - Arduino Uno
http://www.labdegaragem.org/loja/index.php/29-arduino/arduino-uno.html
http://www.robocore.net/modules.php?name=GR_LojaVirtual&prod=120

1 - Zumo Chassis Kit (contém uma base com local para pilhas, 4 rodas Pololu Wheel 42x19mm e 2 esteiras)
http://www.pololu.com/catalog/product/1418

2 - 100:1 Micro Metal Gearmotor HP with Extended Motor Shaft (este micromotor encaixa na base acima)
http://www.pololu.com/catalog/product/2214


1 - Motor Shield (serve para acionar os dois motores)
http://www.seeedstudio.com/depot/motor-shield-p-913.html?cPath=132_134
http://www.seeedstudio.com/wiki/Motor_Shield
Opção para acionar até 4 motores CC:
http://www.labdegaragem.org/loja/index.php/36-motores-afins/4-power.html

2 - QTR-1A Reflectance Sensor (opcionais para fazer seguimento de linha)
http://www.pololu.com/catalog/product/958 ou 
http://www.labdegaragem.org/loja/index.php/34-sensores/breakout-de-sensor-de-linha-qre1113-digital.html 

2 - Encoder for Pololu Wheel 42x19mm (opcionais para medir velocidade das rodas e calcular a posição do robô)
http://www.pololu.com/catalog/product/1217

2 - Ultra Sonic range measurement module (para medir distância a obstáculos)
http://www.seeedstudio.com/depot/ultra-sonic-range-measurement-module-p-626.html?cPath=144_149
http://www.seeedstudio.com/wiki/index.php?title=Ultra_Sonic_range_measurement_module
Outra opção:
http://www.labdegaragem.org/loja/index.php/34-sensores/sensor-de-distancia-por-ultrassom-maxbotix-lv-ez1.html

1 - Basic Sumo Blade for Zumo Chassis (opcional interessante para robôs feitos para luta de Sumô)
http://www.pololu.com/catalog/product/1410