sexta-feira, 7 de agosto de 2015

Gerar imagens na televisão usando o Arduino

Se você é geek (nerd) de verdade e adora videogames aposto que já ficou olhando para o aparelhinho e imaginando como seria criar seu próprio jogo ou até mesmo seu próprio vídeo game!




Pois é, eu já fiquei imaginando e planejamento até que descobri a biblioteca Arduino-tvout que pode ser baixada em http://code.google.com/p/arduino-tvout/downloads/detail?name=TVoutBeta1.zip&can=2&q= e também há uma cópia em http://www.seucurso.com.br/downloads/TVoutBeta1.zip

O hardware é muito simples e vamos nos preocupar primeiro com ele. Você precisará de:

01 cabo com pelo menos duas vias:


01 conector RCA:



01 resistor de 1k ohm (marro-preto-vermelho) e 01 de 470 ohm (amarelo-violeta-marrom):


Claro, também de um Arduino.

Em uma das vias do cabo solde os dois resistores que será depois conectado ao Arduino:



Solde a via onde foram soldados os resistores ao pino central do conector RCA e escolha outra via para ser soldada no pino externo:


Ligue o resistor de 470 ohm ao pino digital 7, o resistor de 1k ohm ao pino digital 9 e a via do cabo soldada ao pino externo do conector RCA ao GND do Arduino:


Agora vamos ao software. Criei um pequeno exemplo que usam praticamente todas as funções da biblioteca como linha, círculo e etc. você pode encontrar muito mais na página do projeto no mesmo link que foi colocado acima para fazer o download da biblioteca.

Para podermos importar a biblioteca descompacte o arquivo baixado e copie a pasta TVout para pasta libraries do seu ambiente de programação Arduino:



Abra seu ambiente de programação Arduino e antes de começarmos o exemplo importe a biblioteca TVout clicando no menu Sketch, selecione a opção Import Library... e clique sobre TVout:



Você terá as duas linhas abaixo adicionadas automaticamente:


#include
#include
TVout TV;
   
void setup()  {
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
TV.begin(NTSC,72,56); delay(1000);
TV.draw_line(0,0,10,10,WHITE);
TV.draw_rect(0,0,71,55,WHITE,BLACK); TV.draw_circle(36,28,10,WHITE);
TV.shift(1,UP);
TV.set_pixel(36,28,WHITE); delay(15000); } void loop() { delay(1000);
}



Como você pode ver, não espere grande resolução!

Com:


TV.begin(NTSC,72,56);

Inicializamos a função de vídeo no formato NTSC, também há o formato PAL. Os valores seguintes são a resolução horizontal e vertical.

Você pode ainda verificar o valor retornado pela função begin:

0 – inicialização normal
1 – resolução horizontal não é múltiplo de 8
2 – resolução vertical não é múltiplo de 8
4 – não há memória suficiente


TV.draw_rect(0,0,71,55,WHITE,BLACK);

Desenha um retângulo com início nas coordenadas 0,0 e final nas coordenadas 71,55

As cores também não são muito ricas, você tem a opção de:

BLACK = 0 = preto
WHITE = 1 = branco
INVERT = 2 = invertido


TV.draw_line(0,0,10,10,WHITE);
Desenha uma linha na cor branca com início nas coordenadas 0,0 e final nas coordenadas 10,10


TV.draw_circle(36,28,10,WHITE);
Desenha um círculo com centro nas coordenadas 36,28 e raio 10 na cor branca.


TV.set_pixel(36,28,WHITE);
Seta um pixel na tela nas coordenadas 36,28 na cor branca.


TV.shift(1,UP);

Movimenta toda a tela 1 pixel por vez na direção de subida, as direções podem ser:

UP = 0 = para cima
DOWN = 1 = para baixo
LEFT = 2 = para a esquerda
RIGHT = 3 = para a direita



Há também funções para escrever na tela, mas tive problemas de sincronismo com a TV ao usá-las, mas não é nada difícil desenhar as letras e números para escrever na tela, pixel-a-pixel.

Fazer animações também não é nada difícil, não apenas usando a função shift.

Bom, a partir disso é fácil usar a imaginação e um pouco de conhecimento em eletrônica e Arduino para criar seu próprio console. Uma sugestão é espelhar-se no PONG (http://pt.wikipedia.org/wiki/Pong).
← Postagem mais recente Postagem mais antiga → Página inicial

0 comentários:

Postar um comentário