quinta-feira, 29 de março de 2012

Projetando com Arduino e Processing: Explorer 1.0 (PARTE I)



Pessoal, estou para escrever este artigo a bastante tempo, porém me faltou tempo e também como falei no artigo anterior, estava aguardando alguns componentes que comprei no Ebay chegarem.
 Bom, apresento a vocês o meu primeiro projeto utilizando o Arduino.
 O batizei com o nome de Explorer 1.0.
 A idéia do projeto é controlar um pequeno robô através do notebook.
 Sei que ele pode ficar melhor, por exemplo, com controle wireless, câmera wireless, e muitas outras coisas. Mas, o objetivo deste meu primeiro projeto foi adentrar no mundo da programação gráfica com o Processing, e uni-lo com o potêncial do Arduino. Por isso ele foi batizado como Explorer 1.0, quem sabe em próximos artigos eu não apresente a versão 1.1, 2.0 e outras para o projeto, ou mesmo novos projetos? Não prometo nada, isso vai depender como sempre do tempo que eu tiver disponível. heheh.
 Bom, vamos deixar de enrolação. A idéia aqui não foi apenas de mostrar a minha invenção, mas sim de compartilhar todo o projeto de desenvolvimento. Portanto, deixarei neste artigo todo o detalhe de hardware e programação do Explorer 1.0. Dúvidas, sugestões e críticas serão sempre bem vindas. Então vamos por a mão na obra.


  Nome do projeto: Explorer 1.0
  Plataforma de Hardware utilizada: Arduino Mega 1280
  Software para Interface Gráfica: Processing
  Periféricos adicionais: Notebook com Windows 7
                                           WebCam
                                           Servo Motores
                                           Motores DC ( com caixa de redução)
                                           Shield  Arduino para sensores
                                           Ponte H ( H-Bridge)
                                           Bateria de 9V
                                           Bateria de 12V
                                           Cabos e extensores USB
                                           Estrutura de apoio para o projeto (Chassi)





 Começando pelo Hardware...

 Quando tive a idéia de começar este projeto decidi utilizar motores DC para fazer o robô andar, porém o motor DC que eu comprei não tinha força de rotação suficiente para fazer o robô se deslocar. Percebi então que eu não sabia nada de mecânica, heheeheh. Então pesquisando na internet descobri que deveria construir uma caixa de redução, que são um jogo de engrenagens dispostas de uma maneira que dê mais tração ao eixo do motor. Bom, como falei, sou um zero em mecânica, então para não deixar a idéia naufragar resolvi comprar motores DC que já viriam com caixas de redução apropriadas, parecidos com estes de carrinhos de controle remoto. Foi então que na minha pesquisa pelo grande Ebay, encontrei um vendedor que além de vender estes motores que tanto desejava, também já os enviava junto com um Chassi próprio para projetos do tipo que estava proposto a fazer.  O chassi me ajudaria bastante pois eu ainda não havia decidido a estrutura em que apoiaria o projeto.

Vista Superior do Chassi
Vista inferior do Chassi
Motor DC com caixa de redução

 Poderia também ser utilizado um servo motor modificado para conseguir uma rotação completa, ou seja 360º. Neste link você pode encontrar informação sobre como modificar um servo motor.  Modificando servos
                                          
 Pronto, agora que já tinha a estrutura poderia por as mãos na obra.
 A base do Chassi escolhido possui vários furos, então não foi difícil encaixar o arduino por cima dela.
 




 Bom, meio caminho andado. Agora havia mais uma dificuldade. Um motor DC puxa uma corrente considerável e ligá-lo diretamente ao arduino poderia queimar as portas digitais, ou no mínimo ficar resetando o microcontrolador sempre que ele puxasse uma corrente maior que a suportada pelas portas digitais.
Ponte H para controle de motores DC
 Além disso, eu precisava fazer uma lógica de programação que me permitisse fazer o motor girar no sentido horário e no sentido anti-horário, para poder fazer o robô andar para frente, para trás, e fazer curvas em torno do próprio eixo. Descubri então o circuito conhecido como "Ponte H", que nada mais é que um jogo de transistores dispostos de uma maneira que possa fazer o motor girar hora em um sentido, hora noutro.
 Os circuitos integrados da Família L293 e L298 são desenvolvidos justamente para esta finalidade, porém ainda no ebay encontrei um ponte H já confeccionada para projetos deste tipo.


  A ponte H, além de resolver o problema de não sobrecarregar as portas digitais do Arduino, me permite disponibilizar uma fonte apenas para a alimentação dos motores, ou seja, caso a bateria que alimente os motores se esgote, as demais funcionalidades do meu projeto não vão parar pois possuem uma fonte de alimentação independente.
  Na parte central da placa da ponte H existem 4 pinos, denominados consecutivamente de IN1, IN2, IN3 e IN4. Esses são os pinos de entrada da ponte H, no projeto conectei cada pino desse a uma porta digital do arduino, conforme o diagrama abaixo.
 O esquema de ligação foi o seguinte:
IN1  -   Digital(PWM)5
IN2  -   Digital(PWM)4
IN3  -   Digital(PWM)3
IN4  -   Digital(PWM)2

 Os motores DC tiveram cada uma de suas terminações ligadas a uma das saidas da ponte H.
 Coloquei uma bateria exclusiva para alimentação dos motores ligada aos pinos VCC e GND da ponte H. E por fim liguei o pino +5 V da ponte H ao pino power 5V do arduino. Este pino de 5V serve para excitar os transistores internamente a ponte H, que irão trabalhar na área de "corte" ou "saturação" dependendo do sinal enviado pelas portas digitais do arduino.

 Agora é a vez dos servo motores. Os servos motores neste projeto possuem a finalidade de rotacionar a webcam. Utilizei dois servos, um para variar o eixo X, de 0º a 180º e o segundo servo para variar o eixo Y, também entre 0º e 180º.
 Para conseguir isto, precisei fixar a base de um dos servos ao eixo do segundo servo. Conforme a imagem abaixo.


Vista Frontal - Servo motor 1 com base fixada sobre eixo do servo motor 2.



 Pronto, depois foi só fixar a webcam no eixo do servo que sobrou e fixar tudo no chassi. Como o arduino não consegue processar imagem, utilizei um hub USB para jogar os dados da webcam, junto aos dados de controle do arduino direto por um único cabo USB para o notebook. Desta maneira minimizei a quantidade de cabos que chegariam ao notebook.
 Bom, com o Hardware já estabelecido vamos então ao que interessa, dar vida ao projeto.
  Vejam aqui o código utilizado no arduino e o código utilizado no processing para o funcionamento do projeto.
 Por favor, críticas, sugestões e dúvidas são bem vindas. Fiquem a vontade.

 Até mais.
 Vejam também:Projetando com Arduino e Processing: Explorer 1.0 (PARTE  II)

9 comentários:

  1. Ja fiz algo algo parecido mas usei Xbee e Uma camera wireless para ficar livre dos cabos, mas curti seu projeto, ficou muito bom.

    ResponderExcluir
    Respostas
    1. Utilizar o Xbee será uma próxima etapa do projeto

      Excluir
  2. Tem como disponibilizar o link do vendedor do eBay que vendeu o chassi e os motores com caixas de redução?

    ResponderExcluir
    Respostas
    1. Colega, segue o link do vendedor.
      http://www.ebay.com/itm/2-Wheel-Robot-Chassis-Spider-Strong-Fast-for-Arduino-Robot-Project-Platform-/230768901134?pt=LH_DefaultDomain_0&hash=item35bae5fc0e

      Excluir
  3. Parceiro, de uma olhada neste link, pode melhorar bastante seu projeto (problema com fios)....
    http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1226951266

    ResponderExcluir
    Respostas
    1. Valeu Fabricio, há pouco vi esse tópico no fórum, estou estudando a melhor maneira de me livrar dos fios. Mas valeu pela dica.

      Excluir
  4. Opa! Cara, não compreendi como seu robô é capaz de fazer curvar com apenas dois motores nas rodas traseiras. Não seria necessário movimentar essa roda dianteira que você tem no chassi?

    ResponderExcluir
    Respostas
    1. Felipe, a roda dianteira é apenas de apoio, parecida com essas rodas de móveis de sala. Se você fizer cada motor traseiro girar em um sentido diferente o robô gira em torno do próprio eixo.

      Excluir
  5. Nossa gosto muito do blog de vocês as informações postadas são muito boas já estou seguindo vocês.

    Peço que sigam meu blog também http://maisword.com

    Agradeço pela atençao.

    ResponderExcluir