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.
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. Neste caso, usaremos um roteador sucateado, pois duas das suas portas LAN estão queimadas. Para desmontar o roteador, precisamos expor os parafusos de fechamento da tampa. Para tal, removemos os pezinhos de borracha e desaparafusamos os dois lados da tampa Depois de tirar os parafusos, temos que usar uma chave de fenda e destravar a tampa, forçando pra cima a sua retirada Agora temos o roteador desmontado e pronto para as nossas implementações. Primeiro vamos fixar o suporte de bateria e soldar os fios de alimentação na placa do roteador. Nesta hora, a cola ou fita dupla-face é muito bem vinda. A ligação de dois fios é feita diretamente na placa, mas se você não possuir habilidade para achar os pontos corretos no teu roteador, use um conector que encaixe no mesmo ponto da fonte original do roteador. Veja abaixo, as soldas são realizadas no "pé" do conector original. A sequencia de fotos abaixo demonstra a instalação do interruptor e sua fixação na carcaça do roteador. Suporte preso, fios de alimentação instalados Agora vamos construir a ponte-h. Se você quiser saber como funciona a ponte-h, visite depois esse nosso outro artigo Vamos fazer uma ponte-H com o integrado L293D, ele é barato e facilmente encontrado nas interwebs. O esquema elétrico desta ponte segue abaixo: Começamos com uma placa padrão. Depois de montar a placa seguindo o diagrama esquemático, soldamos o fio de alimentação positivo no interruptor. Então, posicionamos nossa ponte-h na lateral do roteador. Cuidado para não deixar a parte de baixo da placa encostar em algum parafuso de fixação. Então os 4 sinais de controle devem ser ligados aos leds, conforme mostramos abaixo. Eu escolhi as portas Wan, lan1, lan2, e lan3. Note na imagem acima que liguei o sinal de controle no catodo dos leds e cortei o terminal do ânodo. Se você não cortar esse terminal, a queda de tensão no led é incapaz de acionar o pino da ponte-H e o motor não vai girar. Então, falta só fazer a parte mecânica. Usei umas chapinhas de titânio para prender o servo na carcaça do roteador. Você não precisa usar titânio, pode ser lata, aluminio, acrilico, etc. Já fiz até com cartão de plástico, tipo os bancários. Eu ganhei uma chapa de titânio de um amigo que a retirou de alguma parte de um avião de caça sucateado e me deu. 🙂 Na parte de trás, podemos colocar uma roda boba, ou apenas um apoio... Eu usei um mecanismo que já tinha aqui no lab, refugo de um outro robô que fiz. O resultado final é esse aqui: A parte 2 deste artigo mostrará como configurar o software do roteador para cumprir os requisitos de fornecer uma interface HTML5+CCS3 para qualquer dispositivo conectado nele. Até breve!