Robô Wi-Fi controlado via Internet com Arduino e Shield Ethernet

 

Robô Wi-Fi controlado via Internet com Arduino e Shield Ethernet


 

Esse é um robô com 3 rodas feito com motores DC e controlado pelo Arduino com Shield Ethernet. As duas rodas da frente possuem tração, cada uma está ligada a um motor DC, a de trás gira e vira livremente.



Se os dois motores girarem para frente, o robô anda para frente, se o motor da direita gira para frente e o motor da esquerda gira para trás, o robô vira para a esquerda, e vice-versa para virar para a direita.


 

 

 

 

 

 

 

O robô é comandado por uma página HTML que ele mesmo gera trabalhando como webserver. Ou seja, você acessa o endereço IP configurado no programa feito para o Arduino e abre a página HTML que ele gera. Ela contém 3 botões: “esquerda”, “frente” e “direita”. Quando se aperta um botão, o formulário da página HTML envia os dados via ethernet para o arduino+shield que interpreta e manda sinais para uma placa controladora. Essa placa foi feita com transistores operando como chave e relês de dois pólos e dois terminais, que invertem a polaridade dos motores conforme a direção que se pretende que eles girem.


O arduino é programado para emitir 4 sinais digitais de saída, 2 para cada motor, sendo 1 para acionar o motor (liga/desliga através dos transistores) e outro para dizer a direção (“0” para a frente, e “1” para trás), esse último sinal aciona o relê que inverte a polaridade do motor.


Cada vez que o usuário aperta o botão, o programa aciona os motores de acordo com a direção a ser seguida por 1 segundo para virar e 2 segundos para andar para frente. Isso evita que o robô ande indefinidamente caso haja perda de conexão. Já que foi desenvolvido para operar remotamente em rede wi-fi (ele possui um access point acoplado) com câmera IP e via internet (basta configurar o roteador onde ele será instalado para fazer encaminhamento de porta). Além disso existe o atraso da câmera e da internet. Para que seja viável sua operação, o usuário terá que dar o comando e aguardar a resposta do sistema. Acompanhando via câmera IP. Dessa maneira pode-se controlar o robô de qualquer lugar no planeta.


Em caso de dúvida, é só escrever.


Veja abaixo o diagrama de blocos, as imagens e o programa para o Arduino:

 

 

 

 

 

 

 

 

 

Diagrama de blocos

 

 

 

Robô (caixa plástica, câmera IP, rodízios de carrinho de mão, switch e access point)

 

 

 

Robô aberto mostrando a montagem (tosca eu sei! Hehehe... mas foi só para brincar)

 

 

 

Placa controladora dos motores. Transistores operando como chave e relês 2 terminais e 2 posições para inversão da polaridade do motor (andar para trás)

 

 

 

Placa reguladora de tensão, alimenta o Switch e a Câmera. O resto trabalha em 12V, que é a tensão da bateria.

 

 

 

Arduino com Ethernet Shield




Programa para o arduino. Usa biblioteca para o Ethernet Shield:


 

#include <Ethernet.h>

#include <WString.h>


// network configuration. gateway and subnet are
optional.


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

byte ip[] = { 192, 168, 0, 177 };

byte gateway[] = { 192, 168, 0, 1 };

byte subnet[] = { 255, 255, 255, 0 };


boolean esquerda = false;

boolean direita = false;

boolean frente = false;

boolean primeiralinha = true;


Server server = Server(80);


void setup()


{

// initialize the ethernet device

Ethernet.begin(mac, ip, gateway, subnet);


// start listening for clients

server.begin();


pinMode(2, OUTPUT);

pinMode(3, OUTPUT);

pinMode(4, OUTPUT);

pinMode(5, OUTPUT);

}


 

void loop()

{


Client client = server.available();


esquerda = false;

direita = false;

frente = false;


// Aguarda o fim da HTML request do cliente

if (client) {

boolean NEW_LINE = false;

boolean primeiralinha = true;

String linha = "";


// Aguarda a chamada HTML e extrai dela a resposta do formulario


while (client.connected()) {

char c = client.read(); // Le os caracteres da chamada HTML um a um

linha.append(c); // Monta a string 'linha' com os caracteres lidos

if (c == '\n') { // Se for fim da linha


if (linha.contains("esquerda=esquerda") && primeiralinha) esquerda = true; // Se a string (linha) tiver o termo e for a 1a linha da chamada HTML

if (linha.contains("direita=direita") && primeiralinha) direita= true; // idem

if (linha.contains("frente=frente") && primeiralinha) frente =true; // idem


linha = ""; // apaga linha para receber a proxima linha

NEW_LINE = true; // comecou nova linha

primeiralinha = false; // a proxima nao sera a primeira linha


} else if (c != '\r') {NEW_LINE = false;} //ainda nao acabou o texto


if (c == '\r' && NEW_LINE) { // acabou a chamada porque a ultima linha eh vazia 'carriage return'


break; // Interrompe o loop do while


}

}

}


 


client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println();


client.write("<html><head></head><body>Controle de Robo atraves de Rede Ethernet<br><br>");


if (direita) { client.write("Direita...");

digitalWrite(2, HIGH); digitalWrite(3, LOW);

digitalWrite(4, HIGH); digitalWrite(5, HIGH); delay(1000);

} else {digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW);}


if (esquerda) { client.write("Esquerda...");

digitalWrite(2, HIGH); digitalWrite(3, HIGH);

digitalWrite(4, HIGH); digitalWrite(5, LOW); delay(1000);

} else {digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW);}


if (frente) { client.write("Frente...");

digitalWrite(2, HIGH); digitalWrite(3, LOW);

digitalWrite(4, HIGH); digitalWrite(5, LOW); delay(2000);

} else {digitalWrite(2, LOW); digitalWrite(3, LOW); digitalWrite(4, LOW); digitalWrite(5, LOW);}


client.println(


"<table><tr>"

"<td><form method=get name=esquerda><input type=hidden name=esquerda
value=esquerda><input style=width:60pt type=submit
value=esquerda></form></td>"

"<td><form method=get name=frente> <input type=hidden
name=frente value=frente> <input style=width:60pt type=submit
value=frente></form></td>"

"<td><form method=get name=direita> <input type=hidden name=direita value=direita> <input style=width:60pt
type=submit value=direita></form></td>"

"</tr></table></body></html>");


client.stop();


}

 

Atenção! De tempos em tempos a Arduino altera algumas bibliotecas. Não copie e cole o programa acima apenas, analise-o e entenda-o. Assim, você será capaz de fazer qualquer atualização necessária. Ah! E claro. Caso faça alguma atualização, compartilhe-a conosco aqui.

 


Muita gente tem me perguntado diversas coisas sobre esse projeto, demosntrando dificuldades variadas. Para que seu projeto evolua de maneira a manter a sua motivação do começo ao fim, sugiro que comecem do mais básico e vão expandindo conforme a grana e as dificuldades técnicas. Assim, não importa até onde cheguem, sempre terão algo interessante (e funcionando) alcançado.

Sugiro as seguintes etapas:

 

Etapa 1 - Parte mecânica

- Com peças usadas de bicicleta, vocês podem construir as esteiras, que seriam movimentadas por motores DC com caixa de redução. Acessa esse endereço: http://labdegaragem.com/profiles/blogs/esteira-para-robo-com-corrente

Se essa parte estiver muito difícil ou faltar ferramentas, coloque rodas simples mesmo.

Faça um controle remoto simples para controlar o robô.

 

Etapa 2 - Parte eletrônica

- Faça uma plaquinha simples com transistores de potência para controlar o acionamento dos motores a partir de baixa corrente em 5V. Com isso, qualquer sinal digital TTL poderá controlar o seu robô, sem risco de queimar o equipamento que emite o sinal. Use transistores de portência, MOSFETs, ou mesmo relês. Atenção a corrente que esses componentes irão drenar, mesmo na base.

Alimente esse circuito com uma fonte de tensão adequada para os motores, ou mesmo uma bateria. Evite baterias muito pesadas.

 

Etapa 3 - Integração com o Arduino

- Faça a integração do que foi feito acima com um Arduino. Escreva um programa que controle o seu robô a partir de portas de entrada do Arduino, ou o que é mais interessante, a partir de comandos de texto que você envia via porta serial (USB) do Serial Monitor da IDE do Arduino para o seu robô.

 

Etapa 4 - Conexão Ethernet

- Adicione um Shield Ethernet ao Arduino, conecte o seu robô ao seu Roteador (via cabo de rede). O seu robô ainda não é wi-fi, mas já estará em rede. Programe um webserver como descrito no Projeto Robô Wi-Fi para que os controles sejam feitos através de form HTML. Existem outras formas de fazer esse controle, se descobrir alguma bacana, posta pra gente aí.

 

Etapa 5 - Wi-Fi

- Configure um Access Point (não use um de apenas 1 porta, você precisará de 2 se quiser colocar câmera) para acessar a sua rede wi-fi. Desative a conexão wi-fi do seu notebook, se usar Desktop, desconecte o cabo de rede e conecte ao Access Point. Se a configuração estiver correta, o seu computador deve ser capaz de acessar a rede via wireless. Configurado o AP, conecte o shield ethernet ao Access Point, e tente acessar o seu IP do seu computador (reconectado a rede, claro). Se tudo funcionar, o seu Robô já terá acesso a rede (e a internet) via wireless.

 

Etapa 6 - Câmera IP

- Prenda uma câmera IP no seu robô e conecte-a ao Access Point. Agora seu robô tem 2 IPs, um para acessar o Arduino (webserver) e outro para a câmera. Desse jeito, para controlar o robô, você precisa abrir 2 janelas de browser para ver e controlar o robô.

 

Etapa 7 - Parte elétrica

- Seu robô já está wi-fi, mas ainda está conectado a rede elétrica através das fontes de alimentação do Arduino, do AP e da placa que alimenta os motores. Agora é hora de adicionar a bateria e fazer um circuito regulador de tensão para alimentar esses dispositivos. Verifique qual é a tensão de alimentação de cada um, e a corrente que cada um puxa. Geralmente, cada dispositivo não deve puxar muita coisa, mas é preciso medir para ter certeza. CIs da linha 78XX devem resolver (até 1A cada).

 

Etapa 8 - Port Forwarding

- Agora seu robô está livre de fios e cabos e já pode ser acessado via rede local wi-fi. Para que ele possa ser controlado de qualquer lugar do planeta, é preciso que o roteador permita que acessos externos a sua rede sejam encaminhados para o seu robô, onde o webserver irá responder. Para isso, configure um "encaminhamento de portas" no seu roteador, por exemplo, quando alguém acessar o seu IP externo 201.xx.yy.z:porta, o seu robô será acessado pelo webserver que você programou no Arduino, onde "porta" é a porta configurada no roteador, que é encaminhada para o IP do webserver (ou o da câmera). Seu robô usará 2 portas (1 para a câmera e outra para o webserver no Arduino).

 

Pronto! Caso surjam dúvidas, pode mandar que vou ajudar no que estiver ao meu alcance. Caso faça melhorias nesse projeto, poste aqui para a gente aprender com você também.

 

Abraço!

Exibições: 54297

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 Schiller em 2 março 2011 às 11:46

Olá Marcelo Rodrigues,

 

Parabéns pelo seu projeto do robot móvel com webserver.

Gostaria de entender melhor como devo configurar a Ponto de Acesso para trabalhar na rede Wireless de casa, conforme descreveu na etapa 4:

1.

"Configure um Access Point (não use um de apenas 1 porta, você precisará de 2 se quiser colocar câmera) para acessar a sua rede wi-fi."

Tenho em casa, instalado e configurado por mim, o ponto de acesso fixo D-Link DIR-615. Gostaria de saber qual acess point que devo comprar, a ser ligado ao robot móvel e, se possível, detalhes de como configurá-lo com o meu note book. Eu já tenho prática em configurar o D-Link DIR-615 fixo. Uma das opções de configuração do ponto de acesso que acho apropriada para a função móvel é ADD WIRELESS DEVICE WITH WPS (WI-FI PROTECTED SETUP) WIZARD. Estou certo?

As duas outras opções são:

WIRELESS NETWORK SETUP WIZARD. (sei utilizar bem, tenho prática no Ponto de Acesso fixo, ligado ao

modem ethernet).

MANUAL WIRELESS NETWORK SETUP (nunca usei).

Independente do modelo do seu acess point, agradeceria muito se pudesse me enviar print screen de algumas

páginas de configuração dele.

 

2.

"Desative a conexão wi-fi do seu notebook, se usar Desktop, desconecte o cabo de rede e conecte ao Access Point. Se a configuração estiver correta, o seu computador deve ser capaz de acessar a rede via wireless."

 

Entendi perfeitamente. Aguardo sua resposta para comprar o ponto de acesso.

Comentário de Marcelo Rodrigues em 25 janeiro 2011 às 10:21

Galera,

 

O João Paulo me questionou sobre o projeto em PVT, mas como a resposta pode interessar para mais gente, segue abaixo (vou colocar na abertura do post também):

 


João,

 

Acho que sai por aí mesmo, até uns R$ 1.000.

Mas cara, porque vocês não começam do básico e vão expandindo conforme a grana e as dificuldades técnicas? Assim, não importa até onde vocês cheguem, sempre terão o que mostrar na exposição, e vocês não perdem a grana já investida.

Sugiro o seguinte:

 

Etapa 1 - Parte mecânica

- Com peças usadas de bicicleta, vocês podem construir as esteiras, que seriam movimentadas por motores DC com caixa de redução. Acessa esse endereço: http://labdegaragem.com/profiles/blogs/esteira-para-robo-com-corrente

Se essa parte estiver muito difícil ou faltar ferramentas, coloque rodas simples mesmo.

Faça um controle remoto simples para controlar o robô.

 

Etapa 2 - Parte eletrônica

- Faça uma plaquinha simples com transistores de potência para controlar o acionamento dos motores a partir de baixa corrente em 5V. Com isso, qualquer sinal digital TTL poderá controlar o seu robô, sem risco de queimar o equipamento que emite o sinal. Use transistores de portência, MOSFETs, ou mesmo relês. Atenção a corrente que esses componentes irão drenar, mesmo na base.

Alimente esse circuito com uma fonte de tensão adequada para os motores, ou mesmo uma bateria. Evite baterias muito pesadas.

 

Etapa 3 - Integração com o Arduino

- Faça a integração do que foi feito acima com um Arduino. Escreva um programa que controle o seu robô a partir de portas de entrada do Arduino, ou o que é mais interessante, a partir de comandos de texto que você envia via porta serial (USB) do Serial Monitor da IDE do Arduino para o seu robô.

 

Etapa 4 - Conexão Ethernet

- Adicione um Shield Ethernet ao Arduino, conecte o seu robô ao seu Roteador (via cabo de rede). O seu robô ainda não é wi-fi, mas já estará em rede. Programe um webserver como descrito no Projeto Robô Wi-Fi para que os controles sejam feitos através de form HTML. Existem outras formas de fazer esse controle, se descobrir alguma bacana, posta pra gente aí.

 

Etapa 5 - Wi-Fi

- Configure um Access Point (não use um de apenas 1 porta, você precisará de 2 se quiser colocar câmera) para acessar a sua rede wi-fi. Desative a conexão wi-fi do seu notebook, se usar Desktop, desconecte o cabo de rede e conecte ao Access Point. Se a configuração estiver correta, o seu computador deve ser capaz de acessar a rede via wireless. Configurado o AP, conecte o shield ethernet ao Access Point, e tente acessar o seu IP do seu computador (reconectado a rede, claro). Se tudo funcionar, o seu Robô já terá acesso a rede (e a internet) via wireless.

 

Etapa 6 - Câmera IP

- Prenda uma câmera IP no seu robô e conecte-a ao Access Point. Agora seu robô tem 2 IPs, um para acessar o Arduino (webserver) e outro para a câmera. Desse jeito, para controlar o robô, você precisa abrir 2 janelas de browser para ver e controlar o robô.

 

Etapa 7 - Parte elétrica

- Seu robô já está wi-fi, mas ainda está conectado a rede elétrica através das fontes de alimentação do Arduino, do AP e da placa que alimenta os motores. Agora é hora de adicionar a bateria e fazer um circuito regulador de tensão para alimentar esses dispositivos. Verifique qual é a tensão de alimentação de cada um, e a corrente que cada um puxa. Geralmente, cada dispositivo não deve puxar muita coisa, mas é preciso medir para ter certeza. CIs da linha 78XX devem resolver (até 1A cada).

 

Etapa 8 - Port Forwarding

- Agora seu robô está livre de fios e cabos e já pode ser acessado via rede local wi-fi. Para que ele possa ser controlado de qualquer lugar do planeta, é preciso que o roteador permita que acessos externos a sua rede sejam encaminhados para o seu robô, onde o webserver irá responder. Para isso, configure um "encaminhamento de portas" no seu roteador, por exemplo, quando alguém acessar o seu IP externo 201.xx.yy.z:porta, o seu robô será acessado pelo webserver que você programou no Arduino, onde "porta" é a porta configurada no roteador, que é encaminhada para o IP do webserver (ou o da câmera). Seu robô usará 2 portas (1 para a câmera e outra para o webserver no Arduino).

 

Pronto! Caso surjam dúvidas, pode mandar que vou ajudar no que estiver ao meu alcance. Caso faça melhorias nesse projeto, poste aqui para a galera aprender. Ok?

 

Abraço!

 

Comentário de Marcelo Rodrigues em 17 janeiro 2011 às 20:32

Wagner,

 

Teve um cara (acho que foi o Jefferson) que fez um servidor para arduino. Ou seja, o cara twitta via arduino, procura na seção de projetos aqui no lab, tá tudo bem documentado. Acho que você vai se interessar.

Cara, não entendo muito, mas acho que dá sim para trabalhar com outros protocolos, ele é um shield ethernet, então batendo um pouco de cabeça, você deve conseguir muita coisa. Talvez a galera que entende mais de redes possa te ajudar.

Vai perguntando, o que eu souber te respondo.

 

Abraço!

 

Comentário de Wagner Felix Pereira de Souza em 17 janeiro 2011 às 16:56

marcelo, meu material (Arduino, ethernet shield) ainda nao chegou, mas sera que vc pode me tirar umas duvidas?

Eu tenho lido bastante sobre o ethernet shield (Saiu versao com slot microsd, mas eu comprei do velho), eu queria saber uma coisa:

tem como "acessar" uma pagina pelo arduino? nao seria "acessar" propriamente dito, mas enviar um get pra disparar uma acai num servidor, algo como

http://www.meudominio.com.br/recebearduino.php?cod=123

ele disparando essa requisiçao http, eu, no meu server, trataria essa informaçao de algum jeito...

e outra coisa... no seu projeto, vc recebe GET http(nao envia), ainda nao baixei a biblioteca do ethernet shield, porque ia parecer masturmaçao ficar com a biblioteca sem o equipamento ainda, ehehhe, mas vc faz ideia se da pra trabalhar com outros protocolos, que nao http?

Comentário de João Paulo de Vasconcelos Resend em 14 janeiro 2011 às 19:19

Muito bacana essa esteira wagner :D

 

Comentário de Wagner Felix Pereira de Souza em 13 janeiro 2011 às 12:47

Desculpem o flood, mas pra quem interessar, achei um kit de esteira com chassi que pode aidantar bem o projeto de quem quer fazer um robo de esteira:
http://www.robotshop.com/world/tracked-vehicle-chassis-kit-1.html

19 dolares, o mais caro acaba sendo o frete, se vc pedir 2, sai 65 dolares com frete mais barato incluso.

Pelo que entendi, o kit ja vem com motor. O trabalho do entusiasta fica em fazer os controladores e o programa pro arduino :D... tem muita coisa bacana nesse site, e muita coisa "pronta"... O bacana é fazer, mas eu realmente achei esse "chassi com esteira" muito legal e economiza um bom tempo de projeto do veiculo, sem tirar o merito de "fazer" todo o resto.

Comentário de Wagner Felix Pereira de Souza em 13 janeiro 2011 às 12:34
Vi que tem gente preocupada com uma pequena diferença de potencia entre os motores... Com pequenas melhorias mo programa, e utilizando motores de passo, que sao mais precisos, o problema "some" :D... Motores de passo são um pouco mais caros, mas se a precisão de movimento é imprescindivel, vale a pena.
Comentário de Oswaldo Francisco da Silva Junio em 22 dezembro 2010 às 19:01

Na minha opnião, é simplesmente fantástico!!!!!

Quem me dera ao menos uma vez ^^

Parabens pelo projeto e continue aprimorando.

Abraço.

 

Comentário de Marcelo Rodrigues em 7 dezembro 2010 às 7:56
Alvaro,

Pode contar conosco! Vai postando suas dúvidas e dificuldade, que iremos ajudar em tudo o que for possível.

Abraço!
Comentário de Alvaro Gomes em 5 dezembro 2010 às 21:35
Olá a todos adorei ter vos conhecido e como tenho algum tempo disponível vou tentar com a vossa ajuda fazer um prototipo deste projecto e gostaria de contar com a vossa ajuda.
Vou ler com atenção este tutorial e para já recolher todo o material que vou precisar para o projecto.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço