


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.

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.



















