Ressucitando um router Lynksys WRT54G

Olá!

A bola da vez é um Router Lynksys WRT54G V2 que ganhei do meu amigo Marcelo Genaro. 

Ele estava fazendo um barulho estranho parecia um assovio baixinho, aquecendo demasiadamente e travando (provavelmente por super aquecimento). De cara ví que o conector do brick 12V estava maus então soldei um rabicho temporario e já incluí um novo conector na lista de peças à serem trocadas. Ao abrir o danado, observei dois capacitores que estavam meio estufados e com o router ligado, ví que o ruído vinha das bobinas de filtragem da linha de alimentação da placa.

Analisando um pouco o circuito da entrada de energia, encontrei o CI AC1501-3 que é uma fonte chaveada de 1A. Este danado estava esquentando muito então para poder fazer as medições, eu instalei um dissipador de calor com fita térmica dupla face.

Abaixo do dissipador está o chip da fonte chaveada. A foto nao ajuda, mas os capacitores estao meio estufados. O ruido vinha daquelas bobininhas proximo do conector da fonte.

Continuando com a inspeção visual, nao encontrei mais nada suspeito. Entao era hora da investigação das causas do aquecimento de do barulho. Em conversa com os amigos do Garoa Hacker Clube, descobrí um artigo interessante sobre capacitores eletroliticos, especialmente esta parte: “Capacitors can lose capacitance as they age and lose electrolyte, particularly at high temperatures. A common failure mode which causes difficult-to-find circuit malfunction is progressively increasing ESR without change of capacitance, again particularly at high temperature. Large ripple currents flowing through the ESR generate harmful heat.”

Em resumo, oque está escrito alí diz que na medida que os capacitores envelhecem eles tendem a perder eletrólito, especialmente sob altas temperaturas. E que uma falha comum e meio foda de detectar nestes capacitores é o aumento da ESR (resistencia equivalente em série) sem mudança (ou uma mudança muito pequena) na capacitância, também sob altas temperaturas. Grandes ripples de corrente (ainda mais se tratando de fonte chaveada) atravessando esta ESR alta geram calor indesejável.

Sendo assim, resolvi trocar os capacitores de 220uF 25V por uns mais novos. 

 Aqui os capacitores já trocados.

Após a troca dos capacitores, liguei tudo e observei uma redução drástica do aquecimento, porém o ruído do filtro ainda estava lá. Com o oscliloscópio ví que se tratava de um ruido com frequencia muito proxima de 60HZ sendo assim, algo estava errado com o brick e após conectar outra fonte, o barulho sumiu! Vitória!! 

Após isto coloquei um xbee na porta Serial 0 (esse modelo tem duas Seriais internas LVTTL) e instalei o firmware do OpenWRT 🙂 e ganhei mais um router Linux Enabled para brincar.

O danado funcionando. Basta esperar chegar o conector definitivo e vai estar zerado! O dissipador do processador eu retirei mas decidi deixar o da fonte para que ela nao se estrague caso o defeito volte a acontecer.

Nas minhas pesquisas, o problema do super aquecimento deste modelo é bem comum. Ten gente que acaba metendo um cooler no processador ou uma ventoinha adaptada no case do router. Talvez valha à pena ver se os capacitores estao legais 😉

até a próxima! 

OpenWRT como plataforma wireless para projetinhos

Olá!

Como estou de férias posso tirar o atraso nos projetinhos que tenho tocado, e um deles é uma demonstração de como um simples roteador WiFi pode se transformar numa excelente plataforma wireless para eletrônica!

A idéia:
   
    Outro dia, na hora do almoço, eu e meu amigo Guto, – que também gosta de eletrônica e já é formado em Eng. Elétrica – estávamos conversando sobre formas de se implementar um controle remoto de baixo custo, capaz de suprir as necessidades básicas de qualquer projetinho. Analizamos diversas opções, desde shields p/ arduino, chips ethernet embutidos em MCU’s Microchip, mini placas x86 (ALIX PcEngines), avr32 (NGW100), etc, etc… Em um dado momento conversamos sobre a possibilidade de se utilizar um modem ou roteador wireless qualquer que pudesse rodar linux, foi quando o Guto comentou que ele já havia feito alguns testes e que o resultado era satisfatório. Pronto! nao preciso falar mais nada! Comecei a caçar um modelo que pudesse rodar linux. Acabei comprando um modelo da TP-Link WR1043ND por indicação do próprio Guto (valeu cara!) e mergulhei de cabeça na ‘Fuçada’.

Especificações do router (tiradas do site do OpenWrt)

CPURamFlashNetworkGigabitUSBSerialJTag
Atheros AR9132@400MHz32MB8MB4×1SimSimSim (interna)SIM

    Confesso que não perdí muito tempo na firmware original que veio com ele, e acabei usando-a apenas para executar o procedimento de instalação (que pode ser acessado aqui). Gostei muito do OpenWRT, boota muito rápido, é extremamente customizável e possui um gerenciador de pacotes muito legal, o opkg. É com ele que iremos instalar os drivers da placa de rede sem fio do Router.

Instalando os drivers wlan no router:

    Faça o router acessar a internet via cabo. Para isto existem diversos métodos, o mais comum é colocar a interface wan dele para adquirir um IP automaticamente e pluga-lo em uma porta livre no seu switch, ou entao compartilhar a conexão do seu laptop roteando a placa Lan para a rede wireless. Nao vou entrar nos detalhes no momento mas nao se preocupe que isto é muito simples e se voce nunca fez, está cheio de exemplos na internet.

    Com o router acessando a internet, rode os comandos abaixo:

    Após isto, reinicie o router e voce terá a parte de wireless funcionando.

Preparando o ambiente:

    Uma das coisas mais legais que o OpenWRT tem é o gerenciador de pacotes opkg (já falei disso, né?), ele permite voce instalar diversos pacotes já compilados para a plataforma mips, poupando muito trabalho para por o seu projeto em andamento. Uma das primeiras coisas que instalei foi o Python, que será a base para a comunicação com meus projetos.

    Pra começar, é importante ficar claro que a memória interna de qualquer equipamento deste tipo é bem limitada, este foi um dos motivos que levei em conta ao escolher um modelo com porta USB, pois com ela e um pendrive, eu posso expandir o storage interno dele para colocar mais coisas legais 🙂 .
   
    EPA! como fazer isso ?

    Bem, para isso nao tinha muita receita de bolo pronta na net, entao, seguem os passos que eu executei:
   
    1 – Instalar suporte para Mass Storage USB
        Esta parte foi relativamente simples, com o router acessando a net, execute os comandos abaixo:

    2 – Instalar drivers USB 2.0
         Para isto, execute:

    3 – Instalar o suporte ao sistema de aqrquivos ext2

Com estes passos, espete um pendrive na porta USB e verifique as mensagens do kernel e procure por uma linha parecida com esta:


            scsi 0:0:0:0: Direct-Access     Kingston DT 101 II        PMAP PQ: 0 ANSI: 0 CCS
   

Isto significa que seu pendrive foi reconhecido com sucesso e está pronto para uso, bastando formatá-lo em padrao Linux EXT2 e montá-lo no caminho desejado.
   

OK, até o momento temos o router com um storage aumentado, agora vamos configurar o opkg para usar este espaço para instar os pacotes. Para isto, edite o arquivo localizado em /etc/opkg.conf, que deverá se parecer com isto:

  Adicione um novo destino, no meu caso, o pendrive está montado em /mnt e vou chamar o destino de usb:


    A primeira linha é a declaração do repositório de onde o opkg vai baixar os pacotes, note que o final da URL pode variar de acordo com o modelo/plataforma de seu device e a versão do seu OpenWRT.

    Prontinho, agora temos o opkg configurado para usar o espaço externo como path de instalação. Para usá-lo voce precisa especificar o destino, da seguinte forma:

    Agora que temos o opkg como destino dos pacotes, vamos para a próxima parte, que é a instalação do python.

Instalando o python no OpenWRT
   
    Aqui cabe uma observação, pelo que eu fucei, existem dois tipos de pacotes que instalam o python, um é o python-mini que é uma versão light do python, e até cabe na memoria interna do router, porém, faltam diversas libs, como por exemplo as libs de porta serial. Até daria para copiar as libs pra dentro do router conforme for sendo necessário, mas é um saco ficar fazendo isso, e como temos espaço de sobra agora, vamos logo colocar o python completo!

    Prontinho, python instalado!  Agora, para fazer o python se comunicar com o mundo exterior, vamos instalar os drivers do conversor USB/Serial.

Instalando os drivers do PL2303 no OpenWRT

    Este procedimento é super dificil de ser feito, coisa que voce ainda nunca viu antes 😛

    Agora espete um conversor USB/Serial com chip prolific pl2303 e verifique nas mensagens do kernel se aparece algo assim:

    Pronto, voce tem uma porta serial adicional ao seu router! para usá-la junto com o pendrive, basta plugar um HUB USB2.0 (uso um de 4 portas sem alimentação externa).

    Mas peraí! Na tabelinha logo acima já diz que existe uma porta serial nesse cara! como é isso ?

    Bem, existe sim, mas nao é muito bom usá-la para automação/comunicação, ela é uma porta de console, com ela voce pode acessar a shell do router, como num terminal serial de um servidor unix. O próximo passo mostra como usa-la.

Console serial para o WR1043ND
   
    Dentro do router existe uma porta serial com níves LVTTL (3.3v). Com ela é possível acessar a console serial do router, caindo diretamente na shell, porém como os níveis de tensão sao muito abaixo dos níveis das portas seriais comuns, nao é possível utiliza-la diretamente, sendo necessário fazer algum tipo de interfaceamento. No meu caso, como eu costumo utilizar muito a dita cuja, mas o mesmo router que eu fuço é o router que distribui a grande rede pro resto da casa, nao posso deixar ele aberto o tempo todo, entao eu coloquei um XBEE da Maxtream nele, e acabei com uma porta serial de console wireless, sem a necessidade de componentes adicionais.

Veja:

O conector precisou ser soldado, mas nao é tão complicado, precisa de um suga solda pra desentupir os furos antes.

Conector soldado, repare que abaixo existe um outro conector, JP1, que é o JTAG do Atheros

Aqui o serviço pronto, console serial wireless, o XBEE cabe dentro do modem com a antena whip a 45 graus. Isolei os pinos extras pra evitar curtos.