Robo Controlado pela internet - Arduino... Codename: Rafinho

O Projeto em estado bem mais avançado... Para saber mais, acesse http://www.rafinho.com.br

Bom, galera, motivado pelo Marcelo nesse projeto aqui:

http://labdegaragem.com/profiles/blogs/robo-wifi-controlado-via

 

Resolvi fazer o meu também, melhorando uns pontos que eu achava que mereciam ser melhorados, no já excelente projeto do Marcelo.

 

Batizei o projeto de Rafinho, em homenagem a um amigo chamado Rafo, que muita gente achava que era um chatbot, pela forma de postar noticias num forum e conversar :D.

 

Das melhorias que fiz, é o comando por WASD. Por default com sustain de 1 segundo depois que o cara "solta" a tecla. Se o cara continua segurando a tecla, o comando continua infinitamente... quando o cara aperta outra tecla, cancela automaticamente o "sustain" e executa o novo comando...

 

Outra coisa, é que no projeto do marcelo, o proprio arduino "servia" toda pagina html, e eu percebi que isso deixava ele muito "ocupado" com uma coisa que podia ser "liberada" pra um servidor web de verdade, deixando o arduino livre só pra interpretar os comandos recebidos e converter em movimento...

 
pra entender mais ou menos o processo:
existe uma interface web num servidor web "de verdade"... essa interface web pode ser flash, html puro, html com javascript com http.request(que eu usei... alguns chamam isso de ajax), porque ela serve, somente pre enviar um comando pro rafinho, ex: http://endereço_dorafinho:porta/?comando=valor  e, eventualmente receber devolta a resposta ou alguns dados(como estado das luzes, estado dos sensores... nao implementei ainda... alias, no codigo tem implementado um comando pra "mostrar" alguns estados, no fim vou postar os codigos fonte, deem uma olhada no carregainicio, tem uma funçao pegaestado)

Entao, entendida essa parte "fora" do Rafinho, o rafinho tambem tem um "servidor web" dentro dele proprio
ele recebe requisiçoes via get(como no exemplo do comando que dei acima), entende o comando, direciona ele pra ação que o comando dispara. Eventualmente, devolve(como uma pagina web comum) alguns dados de estado das luzes, sensores, etc

Todo esse parangole todo acontece, se nao existir lag de conexao, instantaneamente...
o lag que existe nele é mais pela camera que pelo comando... as vezes o comando é executado em poucos milissegundos, mas o delay da camera é o que gera a sensaçao de "lag de 1 segundo"... vou ver opcçoes de camera com compactaçao de video melhores, que consigam diminuir esse lag



graficamente o lance é assim

interface web <----------------------->roteador wi-fi  "geral" da minha rede<--->roteador wi-fi "cliente"<->rafinho<->motores, luzes e sensores
interface web <----------------------->roteador wi-fi" geral" da minha rede <--->camera wi-fi (note que a camera é independente do rafinho)

Bom, sem mais delongas, melhor que explicar, é mostrar o código:

 

Antes de começar, informo que sao necessarias as seguintes libraries: Time, SPI e Ethernet
Das quais acho que a unica que nao vem por default no SDK é a time, que coloco aqui(mas pode ser achada por aí na internet tambem):
Time.zip
Os codigos estao escritos para SDK 1.0 do Arduino, e para Arduino Mega, mas é facilmente adaptavel pra funcionar no Uno, Duemilanove e outros...

 

Vamos ao que interessa... arquivo principaL, rafinho.ino:

rafinho.ino

 

abrindo ele, vc vai notar que tem varias variaveis de controle, dentre elas "sustain" e "potencia". O Sustain é o quanto o comando dura, se nao houver outro comando diferente na sequencia, ótimo pra manter o movimento "macio", por exemplo, segurando o w sem soltar, pra ele nao parar em tranquinhos... Potencia regula a potencia dos motores, de 0 a 255, sendo que pra motores de 6v, se a alimentaçao for 9, aconselho usar potencia maxima de 170.

O codigo ta bem comentado.

No inicio eu listo todos os comandos previstos, esta bem completinho, embora de pra fazer muito mais, colocando mais dispositivos, servos, etc...

 

A interface web, index.wag (renomear pra index.php, ou index.html):

index.wag

 

Apesar de incompleta(pus apenas alguns comandos basicos), da pra acrescentar todos os comandos possiveis ali no script inicial, sabendo o keycode da tecla...
note tambem que voce pode criar links clicaveis que geram comandos, dessa forma:

<a href="#" onclick="comanda('frente','1');"> Vai pra frente </a>


ou

<a href="javascript:comanda('frente','1');"> Vai pra frente </a>

bom, nao vou ensinar html, né?

 

Script "ajax" que envia/recebe os comandos para/do Rafinho, carregainicio_semretorno.wag(renomear pra carregainicio_semretorno.php ou html):

carregainicio_semretorno.wag

 

notar o "enderecoremotodorobo", aconselho usar um serviço tipo o no-ip pra gerar um nome de dominio bacana, como http://wfelix.sytes.net , ou, se preferir, usar com o IP externo(nao da rede interna) do robo, e os redirecionamentos dos roteadores da sua rede interna devidamente configurados pra entregar TUDO que for da porta 9100(no caso desse teste, vc pode trocar a porta) pro IP do robo dentro da rede.

 

Frame da camera, pode mudar dependendo o modelo da camera que vc usar, index2.wag (renomear pra index2.php):

index2.wag

NAo tem segredo, é so um frame que mostra a imagem da camera... a maioria das cameras ip wifi usam a mesma sintaxe pra mostrar o video no browser: http://192.168.2.117:9101/videostream.cgi

ahhhh, note que se vc estiver controlando o robo pela sua rede interna, é importante usar o ip da rede interna nesse frame, e caso vc esteja de fora, usar o seu ip externo...

 

Aqui um script boboca pra vc descobrir os keycodes das teclas do teclado, pra incrementar na interface web, teclas.wag(renomear pra teclas.php ou html):

 teclas.wag

Obviamente voces devem rotear as portas que vc escolheu no(s) roteador(es) para os ips internos da camera e do robo... Sem fazer isso, voce nao conseguira controlar o seu robo por fora da sua rede... Isso tambem nao vou explicar, é meio elementar, só pesquisar pra conseguir... se vc tem um modem adsl, roteia todas as portas pro seu roteador wifi, e roteia as portas especificas no roteador wifi pro roteador "bridge" que vc liga no ehernet shield(ou direto pro arduino), e a porta da camera...

 

Bom, esse chassi é de teste, pretendo fazer um chassi definitivo do tipo "tanque" pra andar com ele no meu quintal gramado :D. Eventualmente vou por laminas pra ele cortar grama... colocar sensores "sonar" ou parecidos pra identificar obstaculos e incrementar o codigo pra fazer ele ficar semi-autonomo, voltar pra base de recarga sozinho e tal

 

algumas fotos:

 

Eu tirei as esteiras e deixei só em rodinhas plasticas, porque nos primeiros testes acabei forçando demais e arrebentando varios links delas...

 

na foto abaixo, o recarregador de bateria conectado:

é um recarregador padrao de bateria automotiva baratinho de carga "lenta", que vc liga na tomada... nao é daqueles toscos de lampada....

Exibições: 14659

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Marcelo Rodrigues em 29 fevereiro 2012 às 15:36

Wagner,

A bateria que usei é pequena, mas acho que o seu robô é ainda menor. O que é bem bacana ailás. :)

Veja as baterias de aeromodelismo, especialmente LiPoly, que são super leves.

Abraço!!

Comentário de Wagner Felix Pereira de Souza em 29 fevereiro 2012 às 13:42

Opa MArcelo,

Gostei muito do seu novo robo! Sempre achei que usar um PC como controlador fosse melhor. Só que aí o robo tem que ser grande tambem...

Gostei dessa plataforma, ótima pra robos domesticos e o preço esta bem bacana...

Bom, o meu problema atual é que to fazendo um robo muito menor, acho que tem 14x12 cm... as baterias de 12v de nobreak(ou de alarmes) sao pesadas e grandes... To pesquisando agora daquelas baterias de 11.1v de modelismo.

Tem uma lojinha não muito longe, vou la ver se me deixam testar uma bateria antes de comprar... Elas costumam alimentar motores "comedores" de corrente, deve servir.

Enfim, to fazendo variso testcases de robos controlados pela internet, esse pequeno o problema esta no peso... Agora, pros grandes, gostei da sua plataforma, talvez use uam dessas...

Comentário de Marcelo Rodrigues em 29 fevereiro 2012 às 12:44

Wagner,

Por que você não usa servos? Veja esse vídeo: http://youtu.be/l2WEI1qgs44

São 2 servos 360o. Na verdade é o kit: http://loja.labdegaragem.com.br/robotica/robokit-03.html

No meu robô, aquela primeira versão que já discutimos, usei bateria 12V de alarme. Talvez te ajude, porque tem umas pequenas e leves.

Abraço!

Comentário de Wagner Felix Pereira de Souza em 29 fevereiro 2012 às 10:07

To fazendo uma versao nova, menor... Estou tendo problemas em achar uma bateria com boa capacidade de carga e que tenha bom "discharge", porque invariavelmente, com 10 pilhas AA em serie (12v), sempre que aciono os motores, a camera desliga por falta de corrente, e olha que eu deixei um "canal" direto da bateria(passando por um controlador de tensao de 2A) exclusivo pra camera(que consome 2A)

Ou seja, to achando que a bateria que fiz com pilhas AA nao consegue fornecer a corrente total que o circuito consome em pico.

Alguem tem alguma sugestao pra bateria que eu possa usar?

em tempo, valores de pico:
-motores 2x2A
-roteador 1A
-controlador ~<1A
-Camera: 2A

Como a versao que estou fazendo é menor, inviabiliza o uso de bateria de nobreak, que é pesada pacas, gera atrito demais com o chão forçando demais a parte mecanica nas curvas... Preciso de uma bateria leve, mas que consiga fornecer essa corrente.

Comentário de Dandao em 26 janeiro 2012 às 9:21

isso sim é tecnologia.

Comentário de Wagner Felix Pereira de Souza em 26 dezembro 2011 às 13:50

Então Marcelo, agora que sei que fuinciona mesmo, vou fazer um chassi decente, incrementar mais ações que ele pode fazer e trabalhar na interface web.

Alem de trabalhar na interface Web, vou ver se penso num modo de deixar a configuração de roteadores mais fácil pra leigos, ou até montar um manual de configuração genérico. Só assim isso pode sair do campo de hobby pra entrar num campo mais comercial: se o usuário comum não consegue usar, é dificil comercializar, e se comercializar, se gasta muito tempo com suporte.

Comentário de Marcelo Rodrigues em 23 dezembro 2011 às 13:53

Ai sim!!!! Hehehe...

Muito bom Wagner, grandes melhorias mesmo. Parabéns!

Xiii... agora tenho que correr atrás para alcançar... Hahaha... Brincadeira!

Fico muito feliz que o meu projeto tenha influenciado outro projeto tão bacana como o seu.

E agora? O que virá pela frente?

Abraço!!

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço