![IMG_20161114_154051682](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/IMG_20161114_154051682-1024x576.jpg)
![openwrt](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/openwrt-1024x328.png)
![redeslivres](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/redeslivres-1024x452.png)
Premissas
As premissas desta implementação são:- Poder ser implementado em qualquer roteador caseiro, ou um roteador sucateado (quando possível) e que permita a instalação do OPEN-WRT. Para saber se teu rotador ou tua sucata roda OPEN-WRT, consulte a lista neste link;
- O roteador deve ser uma "sandbox", ou seja, conter tudo aquilo necessário para seu funcionamento e operação. Isto inclui o aplicativo de controle, multi-telas, que deve ser entregue ao usuário sem necessidade de efetuar downloads, ou instalar nada no dispositivo de controle;
- Utilizar a menor quantidade de componentes eletrônicos possíveis;
- Não eliminar qualquer função original do equipamento ou do OPEN-WRT, ou seja, o roteador depois de transformado continuará funcionando normalmente para o roteamento de rede;
- Usar apenas tecnologias livres.
Desafios
Para cumprir a lista de premissas acima, temos que resolver alguns desafios. São eles:
1 - Desafios de Hardware
Para transformar o roteador em um robô, é necessário que dois motores possam ser controlados pelo hardware e software do roteador. Podemos fazer isso de diversas formas, mas a mais simples e com maior compatibilidade entre os diversos tipos e modelos de roteadores suportados é utilizar os leds de indicação do roteador como portas de saída de dados de controle (sim, podemos controlá-los).
Devemos utilizar uma fonte de alimentação embarcada, e para isso usaremos uma bateria 18650, ALTAMENTE disponível em sucatas de notebook. Toda bateria de notebook contém ao menos 3 dessas, e geralmente uma só falha enquanto ao menos duas outras estão boas para uso.
Usei a 18650 porque tenho quilos delas aqui no lab, mas minha recomendação é que você utilize uma bateria de celular, que é essencialmente a mesma célula, mas pode ser carregada diretamente por uma porta USB ou uma fonte de 5V, diferente da 18650 que necessita um carregador especial. A bateria de celular já possui um controlador de carga embutido. Se você tentar carregar a 18650 com 5V ou de forma inadequada, ela VAI EXPLODIR CATASTROFICAMENTE, portanto cuidado.
![bateria](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/bateria.jpg)
Que saudades dos meus Nokias...
Faltam só os motores para resolver o hardware. Utilizei dois servo motores pequenos (9g) transformados em motores contínuos. Esses servomotores são relativamente baratos, cerca de R$20,00 cada (preço de 12/2016). Ao comprar os servos, é necessário um "hacking", que consiste em remover toda eletrônica de controle, quebrar a trava e puxar dois fios direto do motor. Fazendo isso, removemos a ponte-H interna dos motores e passamos o controle para nossa ponte-H dupla que vamos aprender construir também.
O servo motor possui todo um sistema de engrenagens e um eixo que pode ser facilmente acoplado à rodas impressas em 3D, como ilustrado acima, mas também permite a utilização de qualquer roda disponível, até CDs velhos. Veja aqui no blog do Paulo Trentim.
Para adaptar teu servo motor, você pode remover TODA a eletrônica do servo e realizar as modificações mecânicas deste lindo tutorial.
Temos agora o seguinte diagrama que ilustra como o hardware foi concebido e implementado.
Então, com os desafios de hardware resolvidos, vamos aos desafios de software.
2 - Desafios de Software
Para cumprir as premissas de software, precisamos instalar o OPEN-WRT. A instalação do OPEN-WRT não é foco deste artigo, então separei um tutorial bacana para vocês lerem.
O grande truque de usar os leds para o controle dos motores é uma característica de todo sistema GNU/LINUX: todo hardware no GNU/LINUX é abstraído em um "arquivo". Os leds do roteador pode ser controlado escrevendo o valor "1" ou "0" no arquivo que representa esse led. No exemplo abaixo, ligamos o led indicativo da porta LAN1 do roteador.
# echo "1" > /sys/devices/platform/leds-gpio/leds/tp-link:green:lan1/brightness
Para desligar o led, usamos o comando abaixo: echo "0" > /sys/devices/platform/leds-gpio/leds/tp-link:green:lan1/brightness Simples, né? Agora vamos resolver outra premissa do projeto: O APLICATIVO. Como o roboteador precisa entregar um aplicativo para QUALQUER device, usaremos o tão famoso padrão HTML5. Para tal, adicionaremos uma página HTML com a interface de controle, dentro da ferramenta de administração do OPEN-WRT, e achar uma forma de chamar o comando acima através de uma chamada assíncrona (AJAX). Depois de muita pesquisa, descobri que um comando do shell é exposto para acesso externo ao colocar esse comando na forma de um script (sh) na pasta /cgi-bin da interface de administração HTML, e pode ser chamado através de uma URL. Podemos fazer assim então: Criar o arquivo acende-led.do dentro do roteador na pasta /www/cgi-bin #!/bin/sh echo "Content-type: text/html" cd /sys/devices/platform/leds-gpio/leds/tp-link:green:wlan echo "1" > brightness echo "LED aceso" e ao conectar no roboteador e acessar a URL abaixo, o LED será aceso: http://192.168.1.1/cgi-bin/acende-led.do Agora conseguimos controlar o led através de uma chamada usando QUALQUER NAVEGADOR... Premissa cumprida... o aplicativo que o roboteador entrega é um arquivo html que realiza chamadas assíncronas nas URL correspondentes à cada comando do robô. Mais adiante você pode baixar o código fonte completo desta solução e ver como fiz. Desafios vencidos, vamos á montagem!Montagem
A montagem do robô é relativamente simples. A sequencia de todos abaixo demonstra passo á passo as partes mais importantes da montagem. Usaremos um roteador TP-Link 740ND.![1-roteador cobaia](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/1-roteador-cobaia-1024x768.jpg)
![2-portas-queimadas](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/2-portas-queimadas-1024x768.jpg)
![3-expondo parafusos b](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/3-expondo-parafusos-b-1024x768.jpg)
![4-desencaixando a tampa](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/4-desencaixando-a-tampa-1024x768.jpg)
![5-roteador aberto](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/5-roteador-aberto-1024x768.jpg)
![6-18650-e-suporte](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/6-18650-e-suporte-1024x768.jpg)
![7-bateria-posicionada](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/7-bateria-posicionada-1024x768.jpg)
![8-solda-alimentacao](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/8-solda-alimentacao-1024x768.jpg)
![9-interruptor](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/9-interruptor-1024x768.jpg)
![10-fixando-interruptor](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/10-fixando-interruptor-1024x768.jpg)
![11-interruptor-fixado](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/11-interruptor-fixado-1024x768.jpg)
![13-negativo](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/13-negativo-1024x768.jpg)
![ponte-h](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/ponte-h.png)
![14-Ponte-h](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/14-Ponte-h-1024x768.jpg)
![18-circuito ponte-h](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/18-circuito-ponte-h-1024x768.jpg)
![15-ponte-h-montada](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/15-ponte-h-montada-1024x768.jpg)
![17-ligação ponteh](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/17-ligação-ponteh-1024x768.jpg)
![16-ponte-h-instalada](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/16-ponte-h-instalada-1024x768.jpg)
![19-conexão-placa](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/19-conexão-placa-1024x768.jpg)
![20-montagem-servo](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/20-montagem-servo-1024x768.jpg)
![IMG_20161114_154051682](https://robotizando.com.br/pt-br/wp-content/uploads/2016/12/IMG_20161114_154051682-1024x576.jpg)