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: 14652

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 em 4 julho 2015 às 0:24

Muito bom o seu projeto.Parabens!

Eu to com alguns detalhes a resolver talvez posa me ajudar:

-minha camera é uma apexis j11, tentei de todas as formar colocar o iframe, mas não funciona de forma alguma

 aparece a mensagem "Acesso Proibido!" tentei colocar o user e pwd, mas tb não vai, talves seja por causa de que quando entro em minha camera tenho que selecionar( alem do usuario e senha ) a linguagem, e o browser....

Bem, se nao tiver geito mesmo, posso ainda trabalhar com 2 brouser, 1 com a camera e outro com os controles.

-quanto ao codigo abaixo:

 int pin_velo_e=6;                                                                        //pino 6 controle PWM motor esquerdo
int pin_velo_d=7;                                                                        //pino 7 controle PWM motor direito

Devo colocar o positivo do motor no  pino 6 e o negativo no gnd ?

-quanto ao codigo abaixo:
int pin_dir_e1=31;                                                                      //pino dire�ao esquerda 1
int pin_dir_e2=33;                                                                      //pino dire�ao esquerda 2
int pin_dir_d1=35;                                                                      //pino dire�ao direita 1
int pin_dir_d2=37;                                                                      //pino dire�ao direita 2

Não entendi, pois pelo que entendi o carro não tem servos direcionais......

?( movimento de direção não é feito como num tanque ??? )

-Na linha 76 da pagina index o codigo  se refere a uma pagina "index3.php"  não achei esta pagina para baixar... o que seria esta INDEX3 ???

qualquer ajuda é bem vinda

Grato

Comentário de Thiago Magalhães em 21 setembro 2014 às 23:37

Cara estou com um problema e não sei como resolver ! 

fiz o codigo em HTML + CSS dai tenho 8 botoes se eu colocar 7 botoes a pagina aparece porem quando coloco o 8 botao a pagina não carrega.

Estou utilizando Arduino Uno R3 + Ethernet ! 

fiquei pensando se é problema com a memoria ! 

Comentário de Wagner Felix Pereira de Souza em 4 março 2013 às 14:29

Diogo, aceita minha solicitação de amigo, ai te mando uma mensagem com meu msn e email.
Essas perguntas sobre produtos e materias geralmente são respondidas com links pra outras lojas, e isso meio  que não é muito bem vistos(e consta nas regras da "comunidade" - acabei de levar OUTRO puxão de orelha, porque sou reincidente), mas facil fazer isso em off, como fariamos numa mesa de bar, eheheh.

Perguntas mais tecnicas, sobre "como fazer", "codigos", "principios", etc, a gente poe em aberto.

Comentário de Diogo Assiz Menon em 4 março 2013 às 14:17

Opa valew pelas informações Wagner, agora só mais uma duvida...hehe

Estou desenvolvendo um carrinho para ser controlado pela internet tambem, e estou na duvida de qual camera utilizar, procurei varios modelos de camera ip, mas muitas com qualidade muito ruim, qual você me indicaria?

Obrigado. 

Comentário de Wagner Felix Pereira de Souza em 4 março 2013 às 13:04

Ah, se vc for usar os motores de 12v, aconselho baterias de chumbo-acido ou lipo de 4 celulas(14.8v).
No caso de baterias de 14.8, vc tem que limitar a tensao pros motores em 12v via PWM ;)

Comentário de Wagner Felix Pereira de Souza em 4 março 2013 às 13:02

No meu eu estou usando os motores que vieram no Chassi, sao de 6v, mas resistem bem a 7.4 de uma bateria de li-po de 2 celulas ;)

Agora, o driver: ESQUECE esses baseados no l298n. Eles só aguentam 2A por canal, e esses motores consomem bem mais que isso perto do "stall". Os originais do chassi chegam perto dos 15A juntos antes do stall...
Um driver bacana é o Wild Thumper Controller (que foi desenvolvido especialmente pra ele), outro que voce pode usar é esse aqui, cujo preço esta excelente:

LINK REMOVIDO POR DESCUMPRIR TERMOS DE USO DO SITE.
Estou usando em outro projeto e é EXCELENTE.
14A por canal, e se vc adicionar dissipadores da pra poder aumentar essa corrente sem fritar o brinquedinho :D

Comentário de Diogo Assiz Menon em 4 março 2013 às 12:32

Agora sim da pra tentar aventurar em montar um chassi desse...hehe

Agora em relação a baterias, qual você utiliza no seu wild thumper para rodar esses 6 motores (no caso desses que você me passou de 12V)?

Para controle dos motores estou pensando nesse controlador (LINK REMOVIDO POR DESCUMPRIR TERMOS DE USO DO SITE). ele aguenta esses 6 motores ou me recomenda outro?

Obrigado.

Comentário de Wagner Felix Pereira de Souza em 4 março 2013 às 8:50

Opa Diogo.
As rodas eu aconselho comprar aqui na loja do Labdegaragem.
Ja os motores, na DX tem desse aqui:

LINK REMOVIDO POR DESCUMPRIR TERMOS DE USO DO SITE (12v, 80RPM, sao bons... tem versoes de 60 RPM e ainda mais lentos-e com mais torque- se vc preferir)

Tem os de 6v, tambem: LINK REMOVIDO POR DESCUMPRIR TERMOS DE USO DO SITE(esse ainda nao testei, mas pela descriçao parece bom tambem)

Sobre o chassi, po, ele é caro DEMAIS, E tudo que comprei na Pololu ou na Sparkfun recolhe imposto, logo, acaba ficando caro mesmo. Por isso eu indico comprar as rodas no Labdegaragem mesmo, porque sao grandes, o pacote é grande, e o que vc pagaria de imposto seria o equivalente a comprar aqui,

Agora, se você quiser construir o proprio chassi, não é dificil. Lembra o que eu falei no youtube sobre o suporte dos motores colocar em conexoes T de encanamento? olha só o que achei:
http://letsmakerobots.com/node/5155

Poisé, so as "molas" que eu falei pra vc fazer diferente (pra ficar mais parecido com a do Wild Thumper mesmo), em vez de só entortar, fazer uma voltinha. MEu, se voce tivesse perguntado antes, no sabado eu estava com meu Wild Thumper desmontado, eu tiraria fotos das molas...
Deixa eu ver se acho alguma foto delas na internet.
Achei:
O cabo de aço reto é só um constritor, nem precisa usar. Ele serve pra limitar a altura minima do chassi, mas se vc nao vai por muito peso em cima do bichinho, é opcional.

Isso ai, espero ter ajudado.
Ainda sobre o chassi, eu pretendo começar a fazer chassises em kits pra vender ainda nesse semestre, depois que eu tiver maquinario vou até falar com o Marcelo aqui pra ver se rola uma parceria.

Abraços

Comentário de Diogo Assiz Menon em 3 março 2013 às 19:21

Wagner,

Ficou muito show esse robo Wild Thumper, onde encontro esse chassi para comprar?, e um dos seus videos voce comentou em fazer o chassi e comprar apenas os motores e rodas, mas onde encontro o suporte do motor e as molas?

Abraço.

Comentário de Wagner Felix Pereira de Souza em 5 novembro 2012 às 17:48

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço