Libreria TVout

.

 

.
Se trata de una librería para crear video compuesto con Arduino. Su utilización es muy sencilla y directa.


Tan sólo necesitas un par de diodos y un par de resistencias!!!!



Para un Diecimila (ATMega328P) los pines son:
  • Sync    = pin 9,  Arduino
  • Video  = pin 7,  Arduino
  • GND   = masa, Arduino

Veámos un ejemplo sencillo con dos simples pantallas. En la primera se muestra texto con la temperatura recogida con una NTC y adquirida por Arduino en su entrada 5. Después de un delay, se muestra un bitmap (ver el vídeo del resultado al final de esta entrada).

He utilizado la última versión beta disponible en el momento de escribir esta entrada. Existe una función para mostrar imagenes almacenadas en memoria flash. Para crear imagenes, puedes utilizar el software Image2Code (http://sourceforge.net/projects/image2code/files/).
El software permite abrir directamente una imagen y convertirla a un array en C:


Una vez hecho click sobre Convert, se te abrira el editor de textos con el código de la foto. Usa la función
reemplazar para eliminar "{" y "}".


Ahora ya tienes tu imagen preparada para grabarla en tu Arduino. Lo único que falta es crear un array de char donde guardarás dicha imagen. Para ello hay que crear dos archivos, uno *.h donde estará la declaración de la variable y uno *.cpp donde se guardará el array obtenido con Image2Code.
En mi ejemplo, guardaré la imagen creada en un array llamado ok[] .

Empecemos con el *.h, en mi caso le he llamado bitmap.h.


Para el *.cpp, en mi caso bitmap.cpp. (en la tercera línea, se pone el tamaño de la imagen (74x96).
#include "bitmap.h"
PROGMEM const unsigned char ok[] = {
74,96,
 //pegar aquí el código obtenido con Image2Code
};







Librerías y código:


Código del sketch:

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

TVout TV;
int final=8;
int mydelay=10;
double temperatura=0.0;

void setup()  

{
  TV.start_render(PAL);
  TV.clear_screen();

}

void loop()
{
  
  TV.select_font(font4x6);
  TV.print_str(2,0*8,"Rumbeando con Arduino By IgOrR");
  
  TV.select_font(font8x8);

  temperatura=analogRead(5)*5.0/1023.0;
  TV.set_cursor(2,5*8);
  //Muestro voltage
  TV.print("Analog 5= ");
  TV.print(temperatura,2);
  TV.print("V");
  //Muestro grados
  TV.set_cursor(2,6*8);
  TV.print("Temp    = ");
  temperatura=-27.025*temperatura + 112.95;
  TV.print(temperatura,2);
    
  for (int i=0;i<3;i++)

  {
    for (int i=0;i<final;i++)
    {
      TV.print_str(0,9*8,"                                        ");
      TV.print_str(i*6,9*8,"Toma ya!");
      TV.delay_frame(mydelay);
    }

    for (int i=final;i>0;i--)
    {
      TV.print_str(0,9*8,"                                        ");
      TV.print_str(i*6,9*8,"Toma ya!");
      TV.delay_frame(mydelay);
    }  
  }

  

  TV.clear_screen();
  TV.bitmap(30,0,ok,0,0,0);
  TV.delay_frame(300);
  TV.clear_screen();


}

 




 










Pongo unas fotos,para que se aprecie mejor la calidad:





Links:









.



.

15 comentarios:

  1. Con explicaciones asi, es como se aprende.. muchisimas gracias.

    ResponderEliminar
  2. Hola, muy genial tu explicación, pero aún no entiendo como instalar la librería en un mac, me puedes ayudar por favor???

    gracias
    Meow!

    ResponderEliminar
  3. Hola Meow,
    Tienes que guardar las dos carpetas de la libreria (TVout y TVoutfonts) en donde tienes todas las demas (dentro de la carpeta arduino\libraries\).
    Salu2

    ResponderEliminar
  4. http://www.arduino.cc/es/Reference/Libraries

    ResponderEliminar
  5. cuales serian los pines en caso de usar un arduino UNO o un Duemilanove ???

    los mismos pines??

    enhorabuena por la pagina, voy a tirarme muchas horas leyendo toda la información util. mucha información q he buscado en internet y nunca encontre.

    gracias

    ResponderEliminar
  6. Hola,

    Esos pines son para un UNO, Duemilanove, Diecimila....
    Solo son diferentes para las placas MEGA.

    Saludos

    Igor

    ResponderEliminar
  7. Hola Igor,
    Yo ya lo he probado y funciona perfectamente, es una pasada.
    Hay alguna libreria de fuentes con algo mas de resolución?.
    Un saludo..

    ResponderEliminar
  8. Que diodos usar? En la original no pone nada de diodos. (Por ejemplo: 1N4148 )

    ResponderEliminar
  9. Pudiste encontrar un RCA hembra para PCB (No se como se llama a la perfora o usaste un cable directamente? He leido algo de ponerle una resistencia de 75ohms).

    Podrías poner un imagen de como te quedo por delante y por detrás, gracias por publicar vuestro conocimientos, normalmente solo publicamos cuando no nos funciona y más documentado como lo hicisteis :)

    ResponderEliminar
  10. Use un cable RCA reciclado, del cual ya tienes los conectores. Por el otro extremo solde unos pines, y me hice una pequenya plaquita de prototipos con clemas. A ver si subo una foto...

    ResponderEliminar
  11. En que parte usaste los diodos? porque en el esquema solo aparecen 2 resistencias... o me equivoco?

    ResponderEliminar
  12. Igor,

    Fantastic work! could this be used to create a video overlay?

    Thanks in advance

    Mark

    ResponderEliminar
  13. hola sabes ise todo lo que aparece en las instrucciones pero me dice que hay errores porciacaso uso arduino uno

    ResponderEliminar
  14. Hola, se agradece el artículo!!!

    La libería TVout para arduino se puede descargar actualmente utilizando el Gestor de Librerías del IDE Arduino.

    Mas info de la librería se puede encontrar en el siguiente link:

    https://github.com/fredericplante/arduino-tvout

    Entre otras cosas, al final de la página se encuentra un link a la wiki con la explicación del uso de las funciones y de los cambios que hay que realizar en los programas o sketches entre la version vieja Pre-Beta 1.0 y la nueva Beta 1.0.

    ResponderEliminar