segunda-feira, 20 de dezembro de 2010

Principiantes na eletrônica

Um tempo atrás um colega contou que estava tentado a brincar com microcontroladores PIC, mas que nunca se aventurou muito por não conhecer grandes coisas sobre eletrônica. Uns dias atrás, eu estava expressando minhas opiniões sobre o Arduino (vide post anterior!), e esse mesmo colega me falou que estava tentado a testar um, pois seria uma forma de brincar com microcontroladores, sem ter que se "iniciar" na eletrônica.

De certa forma, acho que ele tem razão, pois o Arduino oferece tudo que um iniciante precisa para fazer algo mais interessante que medir a corrente em um resistor (acreditem, isso é chato pra caramba). Seguindo a conversa, falei para ele: "...o chato é que não dá para fazer muito mais que piscar um LED". A conversa então enveredou para as pequenas experiências que ele já havia feito, e eu perguntei: "você já acendeu um LED, mas já usou um transistor para isso?". A resposta foi negativa, e me senti compelido a ensiná-lo, como uma dívida para mim mesmo...

Eu e meu irmão  começamos cedo na eletrônica, quando compramos uma revista atrativamente chamada "Bê-a-bá da Eletrônica", aos 9 anos de idade! A revista não cumpria propriamente o que prometia no título, mas tinha circuitos relativamente simples, fáceis de executar, e que, até certo ponto, funcionavam! Todos os exemplares traziam uma parte teórica, mas essa teoria era simplificada demais para atingir pessoas absolutamente iniciantes.

Na verdade, mais tarde (há 22 anos!), na Escola Técnica Federal de Pernambuco, na primeira disciplina de Eletrônica,fomos apresentados a física dos semicondutores, o que deveria seria capaz de nos explicar o funcionamento mágico desses componentes. Infelizmente, ainda não foi dessa vez... A frustração foi até o quinto período da Escola de Engenharia (agora Escola Politécnica) da Universidade Federal do Rio de Janeiro, em 1992, onde finalmente o que faltava apareceu: a ligação da física dos semicondutores com a teoria eletrostática, acrescida à geometria destes componentes explica todos a mágica da eletrônica. O que é mais incrível (e chocante) veio logo em seguida: quase nunca precisamos nos preocupar com esses "detalhes". Os circuitos eletrônicos funcionam em pequenas faixas, conhecidas como ponto de operação, onde podemos considerar que todo o sistema opera segundo as regras da linearidade.

Muita gente não acredita, mas a eletrônica, na grande maioria das vezes, se resume nas quatro operações básicas, acrescida de um pouco de experiência, bom-senso, e simulação; e isso é o que não se aprende em escola nenhuma!

Para repassar um pouco desse conhecimento e um pouco da minha experiência, vou tentar postar alguns artigos sobre eletrônica e seus fundamentos. Vou fazer em double-post, aqui e em um wiki, para que possa servir como referência para outros colegas hobbyistas, como eu comecei, ainda sou e sempre serei!

quarta-feira, 15 de dezembro de 2010

Por que o Arduino não é essas coisas todas

Um conhecido de twitter, o @technoberto, apontou um artigo no blog Leptoniando criticando a subcultura Arduino e da "computação física". Resumindo o artigo, a "computação física" não passa da mesma tecnologia embarcada da década de 1960, utilizando um microcontrolador da família AVR, que existe desde 1996.

Para quem não conhece, o Arduino, sucessor do Wiring, é uma placa mãe que contém o microcontrolador, o circuito de clock, um botão de reset e uma interface USB (que na verdade é uma RS232C). Essa placa foi desenhada como controlador de baixo custo para a automação de pequenas "obras de arte" ou para permitir o sensoreamento do mundo físico com nossos computadores de uma forma simples.

Para quem não se lembra, houve uma época que um computador pessoal não era muito diferente de um microcontrolador atual. Veja bem: um ZX80, de 1981, tinha 4KB de ROM e 1KB de RAM; seu processador, o Z80A, era de uma arquitetura CISC, cujas instruções podiam ocupar até quatro bytes; seu clock de 3.25MHz era calculado para que a geração de uma linha vídeo coincidisse com um número certo de instruções. Um microcontrolador PIC16F ou AVR facilmente supera estas especificações: podem ter até 64KB de ROM em flash para instruções, cada instrução ocupa especificamente 2 bytes (nestas arquiteturas) e podem ter até 8KB de RAM, executando programas em clocks de até 20MHz. É bem verdade que podíamos colocar programas em linguagem de máquina diretamente na RAM de um ZX80, mas a memória flash compensa isto, permitindo que tudo seja reprogramado rapidamente. Outra vantagem é o tamanho: em um DIP de 28 pinos, temos tudo (e mais) que um computador que pesava quase um quilo! Além da RAM e ROM, um microcontrolador também inclui diversos periféricos, como geradores de sinal PWM, conversores A/D e interfaces de comuicação em série, além de I/O direto pino a pino!

Uma das atrações destes computadores de 8 bits da década de 1980 era a facilidade que podia-se construir uma placa de expansão, para, por exemplo, controlar um sistema de alarme doméstico. Os manuais traziam diagramas detalhados de todas as portas de I/O, incluindo, às vezes, diagramas de tempo das memórias e das portas.

O leitor deve então estar imaginando que eu sou daqueles que não sente saudades dos velhos micros de 8 bits, que tenho Java correndo nas veias, e que nem quero saber de sistemas de baixo nível. Não é nada disso. O que me incomoda é ver um bando de gente vendo o Arduino, e imaginando que é algo revolucionário; mais grave ainda é alguém imaginar que pode automatizar uma grande indústria com um sistema destes. Para um Arduino servir industrialmente, deve ser imune a ruído e intrinsecamente robusto (dois processadores em fail-over é o mínimo).

O Arduino é um "brinquedo", no máximo uma ferramenta educativa; e mesmo nestas funções, é apenas mediano. A base em que a plataforma se apoia é sua principal fraqueza. Primeiramente, o Arduino, para dispensar ferramentas de programação específicas, se vale de um bootloader que ocupa 2KB da memória. Hoje, com 32KB de flash, isto já não representa uma fraqueza tão grande, mas até a última versão o processador tinha apenas 8KB. Ou seja: um quarto da memória era apenas usada para carregar o programa na memória! O bootloader também afeta a latência da interrupção, pois, em controladores tão simples como os AVR, é necessário identificar qual programa estamos executando e fazer um jump para o tratamento correto. A segunda fraqueza diz respeito a linguagem Wiring usada. Levei um tempo para sacar, mas essa linguagem é essencialmente o C! O Arduino utiliza o GCC-AVR com uma libc simplificada e com rotinas especializadas para acessar os periféricos embutidos do microcontrolador. O problema: quando ligamos a rotina principal à biblioteca, o loader do GCC não separa o código não utilizado, e a memória efetivamente disponível para programas ainda é menor. A terceira, e última fraqueza também tem a ver com o Wiring: como não podemos editar o assembly diretamente, não podemos tratar as interrupções. O Arduino resolve isso com variáveis globais que são preenchidas em uma rotina de tratamento da interrupção na biblioteca do Wiring. O código então tem que fazer polling nessas variáveis para poder obter os valores dos sensores conectados aos seus pinos de I/O. Hard real-time se torna impossível.

Não posso encerrar só com críticas: o sucesso do Arduino é sua arquitetura de hardware. Os conectores posicionados de uma forma padronizada facilitaram a construção de inúmeras placas de expansão (os shields) que simplificam o acesso da plataforma a pessoas com apenas um mínimo de conhecimento de eletrônica. O uso do C também é um ponto alto, apesar das limitações que citei; ele permite que o usuário não sofra com uma programação em baixo nível, mesmo sacrificando algumas capacidades do processador.

Fiz este post, pois não aguento ouvir coisas do tipo "Cara, você fala isso por que nunca viu um!" toda vez que digo que não acho que o Arduino seja grande coisa. Explicar tudo isso em uma conversa rápida é impossível. De agora em diante, posso passá-lo para quem quiser saber meus motivos!

quinta-feira, 11 de fevereiro de 2010

Se não puder convencê-los, confunda-os!



Uma das melhores formas de esconder problemas é generalizar, e, neste ponto, a Light S.A. tem se mostrado especialista.

Ao declarar que as quedas constantes de luz em diversos bairros do Rio de Janeiro são devidas apenas ao excesso de consumo ela generaliza, e esconde problemas de planejamento de médio prazo e na manutenção de equipamentos.

O problema causado por falta de manutenção pode ser facilmente visto na rua Carlos Vasconcelos, na Tijuca, entre as esquinas das ruas dos Araújos e Moura Brito. Neste local, um reparo mal-feito (mostrado na foto) encontra-se prestes a causar um novo curto-circuito na rede.

Na noite do dia 18 para 19 de janeiro, uma forte chuva atingiu o Rio de Janeiro. Logo após a chuva, o suporte de um dos cabos do transformador que alimenta este quarteirão se rompeu, fazendo com que este cabo caísse sobre os outros provocando um curto-circuito. A equipe de emergência foi acionada e, por volta de 2:00 do dia 19, a Light começou o serviço de reparos, que terminou as 7:00.

O reparo, no entanto, não substituiu o suporte dos cabos, e, na madrugada do dia 4 de fevereiro, as emendas feitas cederam e o cabo caiu por sobre os outros, provocando novamente um forte curto-circuito.

A equipe de emergência foi novamente acionada, chegando ao local por volta de 3:00. Às 4:00, tendo considerado o reparo feito, o técnico religou o fusível, mas como o cabo ainda se encontrava em contato com os cabos abaixo, houve novamente um grande curto. O reparo reiniciou, terminando por volta de 6:00.

Ainda no dia 4 de fevereiro, por volta de 15:00, o reparo cedeu, e mais um curto-circuito pode ser ouvido nas ruas do bairro. Uma equipe de manutenção com dois carros e três técnicos chegou as 18:00, terminando o reparo por volta de 20:30.

Na noite do dia 5, ocorreu um novo curto-circuito. A emergência foi acionada as 23:50, mas só chegou ao local por volta de 8:15 da manhã do dia 6.

Enquanto aguardava a equipe, uma boa parte dos moradores da região (inclusive este que vos escreve) notou algo errado no conserto: o cabo estava sendo sustentado por uma corda, amarrada no transformador do poste.

Ao questionar sobre o motivo do cabo ser sustentado por uma corda e não por isoladores, fui informado, primeiramente, que "não era da minha conta", e depois, ao me identificar como engenheiro eletrônico, que se tratava de um reparo de emergência, e que seria colocado no relatório para que uma equipe de manutenção corrigisse o problema.

Hoje, 11 de fevereiro de 2010, o cabo continua lá, sustentado por um pedaço de corda de algodão que cede um pouco todo dia, em uma contagem regressiva para um novo curto-circuito.



UPDATE (11/2, 19:34): A corda cedeu totalmente, e agora o cabo encontra-se praticamente encostado no outro. Prevejo mais uma noite de calor, assando no forno que é o verão do Rio de Janeiro sem ar-condicionado! Amanhã tiro fotos e coloco aqui!

Postagens populares