terça-feira, 27 de março de 2012

Levitador Eletromagnético

Achei um novo projeto interessante para montar: um Levitador Magnético. Segue alguns links que devo usar como referência:

http://www.instructables.com/id/Electromagnetic-Floater/

http://uzzors2k.4hv.org/index.php?page=magneticlevitation

http://web.mit.edu/6.302/www/maglev.pdf

Ainda não decidi como vai ser o projeto. Comecei montando um eletroimã, para testar a potência:



Comprei um rolo de 75m de fio de cobre esmaltado 25 AWG na eletrodex. Perdi um tempão enrolando o fio em uma chave allen que eu tinha aqui e nunca usei na vida. Foram 1400 voltas no total!

O eletroimã funciona muito bem. Eu fiz o video abaixo ligando ele em uma fonte de 18V, que deu uma corrente de 2A. Porém, o eletroimã esquentou demais, então provavelmente vou acabar usando uma fonte menor.

http://www.youtube.com/watch?v=yhqQCggaYbE

E por acaso, enquanto eu estava guardando o ferro de solda, uma gota de estanho caiu na mesa e formou um pequeno dragão. Nada mais apropriado, já que estamos no ano do dragão. Guardei de lembrança. :-)


Dragão de Estanho

quinta-feira, 29 de dezembro de 2011

Led Cube 4x4x4 Bicolor


Esquema:


Montagem:

Eu me baseei no seguinte projeto para fazer o Led Cube:

http://www.instructables.com/id/LED-Cube-4x4x4

Como o projeto original é para um Led Cube monocromático, eu tive que fazer algumas adaptações para usar leds bicolores. Os leds usados neste projeto são bicolores com 2 terminais. Dependendo do sentido da corrente, ele acende verde ou vermelho.

Primeiro é preciso montar uma base para soldar os leds. Eu usei uma caixinha de isopor duro:


Todos os leds de cada camada do cubo são conectados entre si. Eu soldei as pernas mais curtas (catodos) dos leds para montar as camadas, e deixei as pernas mais compridas (anodos) para soldar as colunas. Como os leds são bicolores, isso não faz diferença.

Primeira camada de leds:


Testando as conexões com o ATmega328:


Os leds de cada coluna do cubo também são conectados entre si. É importante usar algum suporte para manter as camadas bem alinhadas na hora de soldar as colunas. Eu usei pilhas de 9V, que são um pouco menores do que os terminais dos leds.

Mesa de trabalho:


Montagem da placa:


Soldando os componentes:


Circuito final:



Led Cube pronto:





Charlieplexing:

Para controlar individualmente os leds de um Led Cube bicolor, temos que usar um tipo especial de Multiplexing chamado Charlieplexing, que utiliza os 3 estados das portas do microcontrolador: 0, 1 ou alta-impedância (ou hi-Z):


Para colocar uma porta em alta-impedância, basta definir ela como uma porta de entrada no microcontrolador. Quando a porta está nesse estado, ela se comporta como se não estivesse conectada ao circuito, e os leds ficam apagados.

O software acende uma camada do cubo por vez, alternando as cores. Para acender cada camada do cubo, os seguites passos são realizados:

  1. Todas as portas são colocadas em alta-impedância, apagando o cubo completamente.
  2. As colunas que serão acesas são colocadas em 0 ou 1, dependendo da cor que estamos desenhando.
  3. A camada que será acesa também é colocada em 0 ou 1, dependendo da cor.
  4. As portas da camada e das colunas que serão acesas são definidas como portas de saída, deixando de estar em alta-impedância.

Esse processo é executado muito rapidamente e não percebemos que os leds na verdade estão piscando. Esse efeito é chamado Persistence of Vision.

Resistores e Transistores:

Como a capacidade máxima de corrente do ATmega328 é de 200mA, e eu vou acenter até 16 leds ao mesmo tempo, eu procurei acender os leds com algo entre 10 e 11mA (11mA x 16 = 176mA). Com os leds que eu comprei, eu consegui isso com resistores de 220Ω, que foram conectados às colunas do cubo.

Cada camada do cubo possui 16 leds conectados. A corrente total que vai passar pela camada será de cerca de 170mA e, por isso, não pode ser conectada diretamente à porta do microcontrolador. As camadas devem ser conectadas a transistores para isolar a corrente do microcontrolador.

Eu comprei os transistores BC338-25 (NPN) e BC328-25 (PNP) que teoricamente deveriam suportar 170mA numa boa e, como são complementares, deveriam ter características semelhantes. Mas por algum motivo que eu ainda não entendi, o PNP é muito pior que o NPN. O ganho (hFE) do NPN é 300 e o do PNP é 40 (medindo no multímetro). Além disso, o PNP só consegue prover 180mA com uma corrente de base de ~20mA (que seria um hFE de 9). Se alguém souber explicar isso, eu agradeço.

No fim das contas, eu acabei usando um resistor de base de 120Ω nos transistores PNP e de 220Ω nos NPN. Dessa forma, a intensidade dos leds ficou mais ou menos equivalente ao acender em verde e vermelho. O vermelho acende com o NPN e o verde com o PNP.

Os transistores precisam ser montados de forma que respeitem os 3 estados da porta, ou seja, se a porta estiver em alta-impedância, ambos os transistores têm que estar desligados, para não passar corrente para os leds da camada. Para isso, basta conectar resistores ligando a base do transistor PNP à força e ligando a base do transistor NPN ao terra, conforme o esquema abaixo:




Os transistores são ligados quando tensão entre a base e o emissor é maior do que 0,7V. Precisamos então escolher os resistores de forma que, quando a porta do microcontrolador estiver em 0 ou 1, a tensão na base do transistor seja maior do que 0,7V e, quando a porta estiver em alta-impedância, a tensão seja menor do que 0,7V. No meu caso, eu usei resistores de 33Ω nos transistores PNP e resistores de 47Ω nos transistores NPN.

Quando a porta do microcontrolador estiver em 1 (5V), o transistor PNP estará desligado, e a tensão na base do transistor NPN será: Ubase = Rbase . Utotal / Rtotal = 47Ω * 5V / (47Ω + 220Ω) = ~0,88V. O transistor NPN estará ligado, e a camada do cubo estará conectada ao terra (o inverso do sinal da porta).

Quando a porta do microcontrolador estiver em 0, o transistor NPN estará desligado, e a tensão na base do transistor PNP será: Ubase = Rbase . Utotal / Rtotal = 33Ω * 5V / (33Ω + 120Ω) = ~1,08V. O transistor PNP estará ligado, e a camada do cubo estará conectada à força.

Quando a porta do microcontrolador estiver em alta-impedância, a tensão na base do transistor PNP será: Ubase = Rbase . Utotal / Rtotal = 33Ω * 5V / (33Ω + 120Ω + 220Ω + 47Ω) = ~0,39V, e a tensão na base do transistor NPN será: 47Ω * 5V / (33Ω + 120Ω + 220Ω + 47Ω) = ~0,56V. Ambos os transistores estarão desligados, e a camada do cubo ficará em alta-impedância.

Software:

Eu implementei PWM tem todas as portas do ATmega328 para controlar a intensidade dos leds, utilizando a biblioteca Timer1 do arduino:

http://www.arduino.cc/playground/Code/Timer1

O PWM possui 32 níveis de intensidade, mas se utilizarmos duas cores na mesma camada do cubo ao mesmo tempo, cada cor pode usar somente 16 níveis. Isso é controlado automaticamente pelo software.

O timer dispara 10.000 vezes por segundo. Parece muito, mas se considerarmos que desenhamos 1 layer por vez, em 32 passos de PWM, os leds operam numa frequência de 10.000 / 4 / 32 = ~78Hz.

Para facilitar a programação dos efeitos, eu criei um segundo timer utilizando a biblioteca MsTimer2 do arduino:

http://www.arduino.cc/playground/Main/MsTimer2

O timer2 opera numa frequência de 16Hz e controla efeitos de fade-in e fade-out de cada led individualmente.

Para programar os efeitos, o código principal manda comandos de fade-in, fade-out, turn-on e turn-off para os leds nos momentos certos, e os timers cuidam do resto.

Código fonte: LedCube.zip (Dez/2011)

Eu conectei as portas do ATmega328 às colunas do cubo de forma aleatória (do jeito que ficou mais fácil na hora de soldar), e depois fiz um mapeamento das portas no software. Se alguém quiser reutilizar o código, precisa remapear as portas depois (variáveis PORTMAP e BITMASK no CubePWM.cpp). As camadas foram conectadas em ordem às portas digitais D4 até D7 (de baixo para cima). Essas portas não são parametrizáveis no código, então será mais fácil manter as conexões das camadas nessas mesmas portas.

Programação do ATmega328 na placa:

Eu estou utilizando um cabo FTDI (USB/TTL) para programar o ATmega328 diretamente no cubo. Como as portas RX e TX são compartilhadas com as colunas do cubo, quando o cabo FTDI está ligado, uma coluna do cubo fica sempre acesa. Mas isso não interfere na programação, que funciona normalmente.

Aliás, eu só não conectei as portas D0 e D1 às camadas do cubo para não correr o risco de acender duas camadas do cubo ao mesmo tempo com o cabo FTDI ligado. Isso poderia queimar o chip.

Materiais utilizados:

  • Placa de protótipo de fibra de vidro (10 x 15cm)
  • ATmega328 com bootloader
  • Soquete de 28 pinos para o microcontrolador (opcional)
  • 1 resistor de 10KΩ para o reset
  • 1 cristal oscilador de 16Mhz
  • 2 capacitores cerâmicos de 22pF para o cristal
  • 64 leds bicolores de 5mm com 2 terminais
  • 16 resistores de 220Ω para as colunas
  • 4 transistores BC328-25 PNP
  • 4 resistores de 120Ω para os transistores PNP
  • 4 resistores de 33Ω para os transistores PNP
  • 4 transistores BC338-25 NPN
  • 4 resistores de 220Ω para os transistores NPN
  • 4 resistores de 47Ω para os transistores NPN
  • 1 regulador de voltagem LM7805
  • 2 capacitores eletrolíticos de 10uF para o regulador de voltagem
  • 1 conector para fonte (e a fonte, se for o caso)
  • Cabo FTDI (USB/TTL) para programar o ATmega328
  • 1 capacitor de 100nF para o reset do cabo FTDI
  • Soquete em barra para conectar o cabo FTDI
  • Borrachas para montar os pézinhos da placa