viernes, 29 de junio de 2012

Imágenes en movimiento. Programa para Arduino

Imágenes en movimiento.

Categoría: 1. Programación y electrónica.

El ojo humano capta el movimiento de imágenes sucesivas y puede procesar hasta 18 imágenes por segundo. En este ejercicio se utilizó la placa Arduino UNO conectada al puerto USB de la computadora para proporcionarle una fuente de alimentación y para cargar el programa desde el ambiente de desarrollo de Arduino (Basado en C/C++).

El programa es muy sencillo y utiliza el LED que viene embebido con Arduino UNO y está conectado al puerto digital (I/O) 13. La salida (OUTPUT) digital envía pulsos de 30ms (milisegundos) durante tres etapas. En la primera etapa el LED resplandece menos de 18 veces por segundo (7.7s-1); en la segunda etapa el LED resplandece 18 veces por segundo (18.2s-1); y en la tercera etapa el LED resplandece más de 18 veces por segundo (25s-1).

Con este experimento se comprueba que cuando el LED pulsa más de 18 veces por segundo, el ojo (y el cerebro) humano ya no es capaz de percibir a simple vista la frecuencia con que el LED enciende y apaga.

El código es el siguiente:

 /*
 Primero. El LED parpadea menos de 18 veces por segundo
 Segundo. El LED parpadea 18 veces por segudo
 Tercero. El LED parpadea mas de 18 veces por segundo
 El ojo humano puede percibir hasta 18 imagenes por segundo
 */

// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);    
}
// the loop routine runs over and over again forever:
void loop() {
  int i;
  for (i=0; i<=50; i++)
  {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(30);               // wait for 30 miliseconds
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(100);               // wait for 100 miliseconds, 7.7 destellos por segundo
  }                // durante 50x130=6500 milisegundos
  for (i=0; i<=118; i++)
  {
  digitalWrite(led, HIGH);
  delay(30);
  digitalWrite(led, LOW);
  delay(25);        // 18.2 destellos por segundo
  }                // durante 55x118=6490 milisegundos
  for (i=0; i<=162; i++)
  {
  digitalWrite(led, HIGH);
  delay(30);
  digitalWrite(led, LOW);
  delay(10);        // 25 destellos por segundo
  }                  // durante 162x40=6480 milisegundos
}



Para este ejemplo no se necesita más hardware que la placa Arduino con cable USB y la computadora.

Una variante interesante es el mismo ejercicio, pero utilizando un potenciómetro a una entrada digital para variar la frecuencia de encendido/apagado del LED, al tiempo que el monitor serial despliega la frecuencia con que parpadea el LED.

Este ejemplo está basado en el ejercicio Blink que está disponible ne el sitio web: http://www.arduino.cc/

Por el momento es todo. Saludos.