Projetando com Arduino e Processing: Explorer 1.0 (PARTE  I)
Autor: Doug | Publicado: 2012-03-29T00:28:00-03:00






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.
&nbsp;Bom, apresento a vocês o meu primeiro projeto utilizando o Arduino.
&nbsp;O batizei com o nome de Explorer 1.0.
&nbsp;A idéia do projeto é controlar um pequeno robô através do notebook.
&nbsp;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.
&nbsp;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.


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






&nbsp;Começando pelo Hardware...

&nbsp;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.&nbsp; 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



&nbsp;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.&nbsp; Modificando servos
&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;Pronto, agora que já tinha a estrutura poderia por as mãos na obra.
&nbsp;A base do Chassi escolhido possui vários furos, então não foi difícil encaixar o arduino por cima dela.

&nbsp;






&nbsp;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

&nbsp;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.
&nbsp;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.



&nbsp; 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.
&nbsp; 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.


&nbsp;O esquema de ligação foi o seguinte:
IN1&nbsp; -&nbsp;&nbsp; Digital(PWM)5
IN2&nbsp; -&nbsp;&nbsp; Digital(PWM)4
IN3&nbsp; -&nbsp;&nbsp; Digital(PWM)3
IN4&nbsp; -&nbsp;&nbsp; Digital(PWM)2

&nbsp;Os motores DC tiveram cada uma de suas terminações ligadas a uma das saidas da ponte H.
&nbsp;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.

&nbsp;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º.
&nbsp;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.



&nbsp;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.
&nbsp;Bom, com o Hardware já estabelecido vamos então ao que interessa, dar vida ao projeto.
&nbsp; Vejam aqui o código utilizado no arduino e o código utilizado no processing para o funcionamento do projeto.
&nbsp;Por favor, críticas, sugestões e dúvidas são bem vindas. Fiquem a vontade.

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