Roboteador, um robô construído com sucata de roteadores. (parte 1/2)

Nada me deixa mais feliz do que conseguir fazer "mais" com menos ou quase nada. Toda economia em recursos tanto de hardware quanto software traz ganhos que valem a pena serem avaliados. Eu costumo fazer exercícios de otimização em tudo que projeto, porque no final você tem um hardware mais eficiente e robusto ou um software mais rápido e que consome menos recursos. Este artigo é sobre um dos exercícios de otimização que executei. Neste artigo vou ensiná-los a construir um robô completo, usando um roteador sucateado, e que pode ser operado pelo smartphone ou qualquer dispositivo sem precisar baixar nenhum aplicativo de loja online. IMG_20161114_154051682 Um dos princípios que sigo ao implementar uma ideia para algum artigo é fazê-lo da forma mais otimizada possível quanto à complexidade e também quanto ao seu custo total. Por esse motivo, utilizo ao máximo ferramentas comuns mesmo tendo acesso à uma miríade de ferramentas avançadas. Outro fator importante para o cumprimento desse princípio é a utilização de tecnologias livres, e hoje vamos falar sobre uma tecnologia livre chamada OPEN-WRT, um projeto aberto e livre que possibilita trocar o software que vem instalado de fábrica nos roteadores, chamado de firmware, por um software que pode ser utilizado e modificado pelas pessoas. openwrt O OPEN-WRT permite, por exemplo, a existência de grandes revoluções tecnológicas como as REDES LIVRES, onde pessoas instalam uma versão do OPEN-WRT especialmente preparada para libertar as pessoas da opressão das operadoras de telecomunicações. Vou dedicar um artigo sobre às redes livres futuramente, mas recomendo clicar no link acima e "entrar para a causa rebelde!!!". Eu mesmo estou montando uma rede mesh aberta e livre aqui no lab, e tenho planos de esticá-la pelo bairro todo, liberando uma parte da minha banda de internet para as pessoas que precisam.redeslivres

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).

19-conexão-placa

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.

18650

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

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.

IMG_20161114_154125489

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.

esquema-roboteador

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 Neste caso, usaremos um roteador sucateado, pois duas das suas portas LAN estão queimadas. 2-portas-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 3-expondo parafusos b Depois de tirar os parafusos, temos que usar uma chave de fenda e destravar a tampa, forçando pra cima a sua retirada 4-desencaixando a tampa Agora temos o roteador desmontado e pronto para as nossas implementações. 5-roteador aberto Primeiro vamos fixar o suporte de bateria e soldar os fios de alimentação na placa do roteador. 6-18650-e-suporte Nesta hora, a cola ou fita dupla-face é muito bem vinda. 7-bateria-posicionada 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. 8-solda-alimentacao A sequencia de fotos abaixo demonstra a instalação do interruptor e sua fixação na carcaça do roteador. 9-interruptor 10-fixando-interruptor 11-interruptor-fixado Suporte preso, fios de alimentação instalados 13-negativo 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: ponte-h Começamos com uma placa padrão. 14-Ponte-h 18-circuito ponte-h 15-ponte-h-montada Depois de montar a placa seguindo o diagrama esquemático, soldamos o fio de alimentação positivo no interruptor. 17-ligação ponteh 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. 16-ponte-h-instalada Então os 4 sinais de controle devem ser ligados aos leds, conforme mostramos abaixo. Eu escolhi as portas Wan, lan1, lan2, e lan3. 19-conexão-placa 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. 🙂 20-montagem-servo 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: IMG_20161114_154051682 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!