segunda-feira, 22 de fevereiro de 2010


Mini Robô circular utilizando PROGRAM-ME 


Depois de ver alguns projetos de robôs do Vinicíus e de alguns colegas deste blog, resolvi montar um também para praticar os conceitos de robótica. Como não tenho um espaço ideal para produzir as partes mecânicas do robô, optei por utilizar um chassi já pronto.

Após algumas pesquisas pela internet, resolvi utilizar um chassi circular da Pololu (http://www.pololu.com/catalog/product/250), pois após imprimir o manual desse chassi, percebi que o Program-Me encaixaria perfeitamente nele, inclusive a furação parece até que foi feita para o Program-Me.
O diâmetro do chassi é aproximadamente o mesmo de um DVD deixando o robô bem compacto.

Nesse chassi montei também um kit de engrenagens e motores da TAMIYA (http://www.pololu.com/catalog/product/61) e como terceira roda utilizei um ball caster (http://www.pololu.com/catalog/product/66) também da TAMIYA.

Esse conjunto ficou muito bom e praticamente contempla toda a parte mecânica do robô.



Como os motores que vêm no kit TAMIYA funcionam com no máximo 6 volts e eu queria utilizar alimentação de 12 volts, substituí os dois motores por motores MABUCHI desses utilizados em carrinhos de autorama e o resultado foi muito bom.
Com apenas 30% de duty cycle no PWM já consigo uma velocidade muito boa no robô.

Para sensores de obstáculos utilizei dois sensores infravermelho da SHARP modelo GP2Y0A21YK (http://www.sparkfun.com/commerce/product_info.php?products_id=242) posicionados na parte frontal do robô e com inclinação de aproximadamente 30 graus para cada um dos lados. Dessa forma é possível detectar obstáculos, tanto na parte frontal como nas laterais da direção em que o robô se movimenta, não sendo necessário um servo para movimentar os sensores.
Esses sensores detectam obstáculos entre 10 e 80 cm sendo que conectei eles nos conectores JP6 e JP7 do PROGRAM-ME que estão associados às portas analógicas.



Após ver o post do Vinícius sobre a fita de leds RGB, tive a idéia de colocar uma ao redor do robô, como o chassi é circular imaginei que o acabamento ficaria muito bom e daria um visual interessante (vejam detalhe da fita na foto acima).

Para comandar a fita de leds permitindo várias combinações de cores, utilizei 3 dos 4 transistores existentes no PROGRAM-ME. Como apenas o transistor Q2 é normalmente associado à porta PWM, fiz um remapeamento dos jumpers do PROGRAM-ME de forma que mais 2 transistores ficassem associados às portas PWM (vejam detalhes na figura abaixo e na próxima foto).



Obs: os retângulos coloridos indicam os pontos que foram interconectados em JP8 e JP11.

Notem que além do remapeamento de TR1(transistor Q1) e TR3 (transistor Q3), foi também remapeado o primeiro led vermelho o qual utilizo para indicar um dos modos de operação do robô. Os leds AM3 e VD3 indicam os outros dois modos.

Abaixo temos uma foto que mostra como foi feito o remapeamento das portas utilizando os conjuntos de jumpers JP8 e JP11 do PROGRAM-ME.



A foto a seguir mostra o detalhe da conexão da fita RGB aos transistores do PROGRAM-ME.



Para interface entre o Program-Me e os motores , utilizei um Shield da SparkFun (http://www.sparkfun.com/commerce/product_info.php?products_id=9213) que contém duas pontes H que permitem um controle total de velocidade e direção, independente para cada um dos motores.
Esse shield utiliza as portas digitais 10 a 13 do Program-Me.



Como mencionei acima, o robô possui 3 modos de operação:

1- Autônomo : onde ele se desloca livremente detectando obstáculos e desviando automaticamente.
2- Joystick : onde controlamos seus movimentos através de um joystick .
3- Acelerômetro: os movimentos são controlados ao movimentar o controle remotos nos eixos X e Y.

Abaixo temos a foto do controle remoto que nada mais é que um arduino simples, equipado com um shield onde montei o rádio transmissor, um acelerômetro e um joystick.
Obs: O modo de operação é comutado ao pressionar a alavanca do Joystick



A interface entre o robô e o controle remoto é feita utilizando um rádio ASK de 433MHz que permite taxas de 2400bps a 19200bps (estou utilizando 9600bps).
Para enviar comandos entre o controle remoto acima e o robô, criei um protocolo simples onde cada comando é formado por 5 bytes ( um byte de flag de inicio, 3 bytes que formam o comando e um byte de finalização).

exemplo: {lfy}

onde “{“ é o flag de início, “l” indica que é um comando para o motor esquerdo, “f” indica que ele deverá gira para frente e “y” indica o dutycicle que deverá ser aplicado ao PWM associado a esse motor, sendo que varia de 0 a 100 (caracter ASCII correspondente).

Também implementei o comando para mudança do modo de operação e seu formato é :


{mdx}

onde “md” significa solicitação de mudança de modo de operação e “x” indica um dos 3 modos (autônomo [1], joystick [2] e acelerômetro [3] .

Bem, é isso pessoal, abaixo temos um vídeo do robô em ação (modo autônomo) e algumas fotos mostrando algumas cores obtidas com fita RGB.
Ela muda de cor conforme são detectados os obstáculos ou quando o robô modifica a sua trajetória.


Ache outros vídeos como este em Globalcode Program-ME








[]s

José Luiz Sanchez Lorenzo

16 comentários:

  1. Parabéns Sr. José, ficou ótimo este projeto, e com o conjunto de Leds coloridos, ficou um show aparte.

    ResponderExcluir
  2. Realmente ficou muito legal. Interessantissimo como o Robo segue o caminho.

    Parabéns não só pelo Robô, mas pelo detalhamento do post.

    []s
    Yara

    ResponderExcluir
  3. Muito bom, parabéns!

    Vendo este post dá até vontade de se aventurar com um kit desses! =)

    Abs

    Wagner

    ResponderExcluir
  4. @Wagner Santos, cuidado, isto vicia hein? risos

    Você vai poder brincar um pouco no Yahoo Open Hack Day!

    []s
    YAra

    ResponderExcluir
  5. Vicia mesmo, eu que o diga! Tanto que este robô já sofreu melhorias e tem outro diferente por vir, vamos ver se o José Luiz nos conta na semana que vem aqui no blog, né?

    []s

    Ana

    ResponderExcluir
  6. Com certeza, eu queria saber se ele vai levar o robô para passear no domingo, no curso de eletrônica. Tô curiosa para saber se ele vai levar a pista. Risos.

    ResponderExcluir
  7. Um detalhe... os sensores Sharp como o GP2Y0A21YK que você está usando não são lineares e quando abaixo do mínimo retornam uma leitura próxima ao máximo. O robô pode achar que está distante de um obstáculo quando na verdade está bem próximo.

    Eu costumo colocá-los mais atrás, de modo que a frente do robô encontra-se exatamente na distância mínima de leitura.

    ResponderExcluir
  8. É isso mesmo Pedro, esse sensor funciona na faixa entre 10 e 80 cms sendo que o ideal seria ele ficar a pelo menos 10 cms da parte frontal do robô. No caso do robô circular não tem como colocar mais para trás, pois ele é muito pequeno. Eu contorno esse problema fazendo com que ele nunca chegue abaixo de 10cm do obstáculo, sempre desviando antes disso. Quando os dois sensores ficam ao mesmo tempo próximos de obstáculos, ou seja o robô fica encurralado, fiz uma rotina que para o robô,anda um pouco para trás, gira no eixo uns 130 graus e retorna a andar para frente. Isso tem funcionado bem em quase 100% das situações.

    ResponderExcluir
  9. tem o custo total pra gente ter uma idéia?

    ResponderExcluir
  10. Certo. No meu projeto atual eu estou usando apenas um de 3-20cm conectado a um servo, mas ele é usado para mapear a frente do robô em busca de um objeto que ele pega com uma garra.

    Não tenho tanto tempo livre quanto gostaria para trabalhar com ele, mas já tem algo funcionando. Fiz um vídeo de quando estava testando o código de cinemática reversa da garra com o sensor sharp, ele usando a distância para pegar um bloco à frente.

    http://www.youtube.com/watch?v=Tc7sbIJqz-4

    Que rádio é esse que você está usando?

    ResponderExcluir
  11. Kayran,
    Seguem os valores dos ítens do robô:

    -Program-Me (Arduino da GLOBALCODE) R$ 148
    -chassi circular da Pololu US$ 5,95
    -caixa de engrenagens com motores US$ 8.95
    -Terceira roda (ball caster) US 3,00
    -Kit de 4 rodas com pneus U$ 4,14
    -shield Ponte-H US 24.95
    -sensores infra-vermelho sharp (2x U$9)
    -fita de leds RGB R$ 40


    Com os ítens acima você já tem o robô andando sozinho, se preferir com controle remoto, ai são necessários os ítens abaixo para o controle:

    - 1 arduino simples
    - rádio LINX (receptor+transmisor) RS 110
    - Thumb joystick de U$ 3,95.
    - 1 proto shield R$ 13,00
    opcionalmente você pode colocar o acelerômetro que custa U$ 29,95

    atenciosamente

    José Luiz Sanchez Lorenzo

    ResponderExcluir
  12. Pedro, ví o vídeo do seu robô e achei muito legal.
    O rádio que utilizei no robô é um da LINX que pode ser comprado aqui no Brasil por R$ 110 (receptor + transmissor). Porém já substituí esse rádio por módulos XBee pois a comunicação com o Xbee ficou bem melhor. O rádio LINX é legal, mas você tem que implementar em software um protocolo de validação dos dados, caso contrário quando o controle não estiver transmitindo o receptor no robô aumenta o ganho de recepção e começa a pegar muito ruído que acaba "entupindo" o buffer da serial do ATMEGA. Utilizando os módulos Xbee esse problema não acontece. Sai um pouquinho mais caro mais vale a pena pois libera o ATMEGA para funções mais importantes.

    atenciosamente

    José Luiz Sanchez Lorenzo

    ResponderExcluir
  13. Primeiramente gostaria de parabenizar o José Luiz pelo excelente trabalho bem detalhista, e gostaria também de agradecer por fazer o post com tantos detalhes, Parabéns!!!!
    Agora queria pedir um conselho do pessoal inclusive para "Yara Senger": quais os pré-requisitos pra se aventurar com um kit desses???
    sou desenvolvedor mais não entendo muito de eletrônica. seria loucura d+ se aventurar com um kit desses???

    ResponderExcluir
  14. Bom dia Fabiano,obrigado pelos comentários. Acredito que no seu caso o ideal seria inicialmente fazer o curso de Introdução a Eletrônica, pois ele le dará os conhecimentos básicos de eletrônica necessários para a montagem dos circuitos e entendimento dos componentes. Na Globalcode temos um curso bem legal de introdução à eletrônica. Outros cursos legais também são o de Computação Fisica com Arduino e Robótica.

    atenciosamente

    José Luiz Sanchez Lorenzo

    ResponderExcluir
  15. Uma idéia legal seria programá-lo de maneira que ele agisse como um agente inteligente aprendendo algumas coisas, e até agindo de maneira autônoma! Nas aulas que ministro de IA, vou tentar propor isso aos alunos.

    ResponderExcluir