Aprenda a conectar um Arduino na televisão 2

Nesse post veremos como conectar um Arduino para exibir informações em uma televisão através da entrada de vídeo RCA.

Projeto funcionando

Conectar o Arduino na televisão permite com que você exiba as informações do seu projeto em telas maiores de forma simples e barata. Você pode, por exemplo, utilizar o arduino em conjunto com uma televisão para criar um sistema de senhas de atendimento numa sala de espera ou exibir avisos de forma dinâmica.

Materiais Necessários

Os materiais utilizados para confecção desse projeto são:

Montagem do circuito

Esquemático do projeto

A montagem desse projeto é bem simples. Primeiro conectamos o GND do Arduino ao anel externo do conector RCA. Depois conectamos os pinos digitais 7 e 9 ao pino interno do conector através de resistores de 1kΩ. Podemos também utilizar um conector RCA macho conectado conforme a imagem abaixo.

Código

Utilizaremos a biblioteca TVout para gerar os sinais que formam a imagem na Televisão. Essa biblioteca pode ser instalada através do Gerenciador de Bibliotecas da IDE do Arduino. Para isso vá em Ferramentas → Gerenciar Bibliotecas, busque por TVout e clique em Instalar.

As principais funções dessa biblioteca, suas atribuições e parâmetros são: 

Função  Atribuição Parâmetros
begin Define o sistema  NTSC/PAL e a resolução sistema, resolução x, resolução y
select_font Define o tamanho da fonte fonte
print Escreve na tela posição x, posição y, texto
println Escreve na tela e pula uma linha posição x, posição y, texto
clear_screen Limpa a tela
draw_circle Desenha um círculo na tela posição x, posição y, raio, cor
draw_rect Desenha um retângulo na tela posição x, posição y, largura, altura, cor
draw_line Desenha uma linha na tela posição x do 1º ponto, posição y do 1º, posição x do 2º, posição y do 2º, cor
bitmap Exibe a imagem na tela posição x, posição y, array com a imagem

Para exibição de imagens, utilizaremos o programa Image2Code para transformar a imagem em um vetor com os códigos hexadecimais que descrevem a imagem. Para isso é necessário que a imagem seja um bitmap preto e branco, com tamanho máximo de 120×96. O programa pode ser baixado nesse link e a imagem pode ser editada com o Paint para atender as especificações de formato e tamanho.

Primeiro abrimos o programa e clicamos em Browse para selecionar o arquivo da imagem.

Depois selecionamos a terceira opção da esquerda para direita – que diz MSB LSB. Então clicamos em Convert e esperamos que o arquivo com o vetor seja aberto no Bloco de Notas.

Convertendo a imagem em código televisão para Arduino

Depois, utilizamos a ferramenta de substituição para retirar os colchetes { }.

Editando o código para conectar o arduino na tv

A definição do vetor no código deve ser feito da seguinte forma.
PROGMEM const unsigned char img[] = { tamanho horizontal, tamanho vertical, texto do bloco de notas};

O código abaixo é uma demonstração das funções da biblioteca e a forma como essas informações são exibidas na televisão.

#include <TVout.h>
#include <fontALL.h>

TVout TV;

//Vetor com a definição da Imagem---------------------------
PROGMEM const unsigned char img[] = 
{ 104, 31, 
 0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x01,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xE0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x00,0x03,0xC0,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ,
 0x0F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00 ,
 0x3F,0xFF,0xFF,0xFC,0xFC,0xC7,0x06,0x3E,0x3F,0x1F,0xB0,0x7C,0x7C ,
 0x3F,0xFF,0xFF,0xFC,0xFC,0xC7,0x06,0x3E,0x7F,0x1F,0xB0,0x7C,0x7E ,
 0x7F,0xFF,0xFF,0xF8,0xC0,0xC7,0x06,0x36,0x70,0x18,0x30,0x6C,0x6E ,
 0x7C,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x36,0x60,0x18,0x30,0x6C,0x66 ,
 0x78,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x36,0x60,0x18,0x30,0x6C,0x66 ,
 0x78,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x36,0x60,0x18,0x30,0x6C,0x66 ,
 0x78,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x36,0x60,0x18,0x30,0x6C,0x6E ,
 0x78,0x03,0xC0,0x00,0xF8,0xC7,0x06,0x3E,0x7C,0x1E,0x30,0x6C,0x7C ,
 0x78,0x03,0xC0,0x00,0xF8,0xC7,0x06,0x3C,0x7C,0x1E,0x30,0x6C,0x7C ,
 0x78,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x30,0x60,0x18,0x30,0x6C,0x60 ,
 0x78,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x30,0x60,0x18,0x30,0x6C,0x60 ,
 0x78,0x03,0xC0,0x00,0xC0,0xC7,0x06,0x30,0x60,0x18,0x30,0x6C,0x60 ,
 0x78,0x07,0xC0,0x00,0xC0,0xC7,0x06,0x30,0x60,0x18,0x30,0x6C,0x60 ,
 0x7F,0xFF,0xC0,0x00,0xC0,0xC7,0x06,0x30,0x60,0x18,0x30,0x6C,0x60 ,
 0x7F,0xFF,0xC0,0x00,0xC0,0xC7,0xE6,0x30,0x7F,0x18,0x3F,0x7C,0x60 ,
 0x7F,0xFF,0x80,0x00,0xC0,0xC3,0xE6,0x30,0x3F,0x18,0x3F,0x7C,0x60 ,
 0x7F,0xFE,0x00,0x00,0xC0,0xC1,0xE6,0x30,0x1F,0x18,0x0F,0x18,0x60
};

void setup() 
{
  
  TV.begin(NTSC,120,96);
  
  TV.select_font(font6x8);
  TV.bitmap(0,60,img);
  TV.println(10,0,"Biblioteca TV Out\n");
  TV.delay(2500);
  TV.println(30,20,"AV Outout\n");
  TV.delay(2500);
  TV.println(40,40,"Italo");
  TV.delay(5000);
  TV.clear_screen(); 
}


void loop()
{  
  //Tipos de Fonte
  TV.clear_screen();
  TV.println( 0, 0, "Tipos de Fonte: \n\n");    // posição X, posição Y, texto
  TV.select_font(font4x6);
  TV.println("4x6 font FONT \n");
  TV.select_font(font6x8);
  TV.println("6x8 font FONT \n");
  TV.select_font(font8x8);
  TV.println("8x8 font FONT \n");
  TV.select_font(font6x8);
  TV.delay(2000);

  //Circulos
  TV.clear_screen();
  TV.println(0,0,"Circulos:");
  TV.draw_circle( TV.hres()/2, TV.vres()/2, TV.vres()/6, WHITE);  // posição X, posição Y, raio, cor
  TV.delay(2000);
  TV.clear_screen();
  TV.draw_circle( TV.hres()/2, TV.vres()/2, TV.vres()/2, WHITE, INVERT); // INVERT: circulo preenchido de branco
  TV.delay(2000);

  //Retangulos
  TV.clear_screen();
  TV.println( 0, 0, "Retangulos:");
  TV.draw_rect( 20, 20, 80, 56, WHITE);  // posição X, posição Y, largura, altura, cor
  TV.delay(2000);
  TV.clear_screen();
  TV.draw_rect( 10, 10, 100, 76, WHITE, INVERT);
  TV.delay(2000);
  
  //Linhas
  TV.clear_screen();
  TV.println( 0, 0, "Linhas:");
  TV.draw_line( 60, 20, 60, 76, WHITE);  // Coordenadas X ponto 1, Y ponto 1, X ponto 2, Y ponto 2, cor
  TV.draw_line( 20, 48, 100, 48, WHITE);
  TV.delay(2000);
  TV.clear_screen();
  TV.draw_line( 10, 10, 110, 86, WHITE);
  TV.draw_line( 10, 86, 110, 10, WHITE);
  TV.delay(2000);
   
  //BitMap
  TV.clear_screen();
  TV.println(0,0,"Bitmap:");
  TV.bitmap(0,10,img);
  TV.delay(2000);
  
}

Conclusão

Você pode utilizar o que aprendeu nesse post para para substituir um display no seu projeto com Arduino. Um bom exemplo de projeto onde essa técnica pode ser aplicada é “Controlando temperatura e pressão com o BMP180” e “Monitorando Temperatura e Umidade com o sensor DHT11”.

Como conectar um Arduino na televisão montado na protoboard

Gostou de aprender a conectar um Arduino na televisão? Não se esqueça de deixar um comentário nos contando o que achou. 

Faça seu comentário

Acesse sua conta e participe

2 Comentários

  1. Excelente conteúdo!
    Parabéns!

    1. Juvenaldo,

      Que bom que curtiu!!

      Abraços!
      Diogo – Equipe MakerHero