martes, 1 de abril de 2014

Disparador para Réflex - Parte 2

Fuente: digital trends
Este es un post de continuación al post Disparador para Réflex - Parte 1:

Ya conocemos un componente que sirve de interruptor y que podemos controlar electrónicamente, el relé. En este caso vamos a utilizar otro elemento, un optoacoplador, con el mismo objetivo: sustituir al botón que pulsábamos en el ejemplo anterior.

El optoacoplador se compone de un fotodiodo y un fototransistor; al pasar corriente por el diodo, le llega luz a la base del transistor y éste conduce. Desde fuera, veremos un encapsulado con cuatro terminales. Si hacemos que pase corriente entre las patillas del fotodiodo, los otros dos terminales estarán cortocircuitos.



Podemos conectar la patilla 2 a masa y la patilla 1 a un pin del Arduino que configuremos como salida. Comprueba en el datasheet de tu optoacoplador que la corriente máxima que soporta el diodo sea lo suficientemente elevada para no quemarse y si no lo es, añádele una resistencia entre el pin y la patilla 1. La patilla 4 irá unida al terminal que queramos llevar a masa, que estará en el terminal 3.




Por lo tanto, ya tenemos una forma de provocar que la cámara enfoque/dispare con sólo poner un pin a nivel alto. Si además disponemos de un mando de infrarrojos, ya tenemos una forma de disparar de forma inalámbrica.

Con todo esto, pasamos a la descripción del circuito completo:
Componentes:
- 1 cable Jack 2.5 mm macho a 3.5 mm macho
- 1 conector Jack 3.5 mm hembra
- 2 optoacopladores (uno para enfoque y otro para disparo)
- Sensor de infrarrojos + mando







El sketch de nuestro ejemplo es el siguiente:

#include <Arduino.h>
#include <NECIRrcv.h>

//pines
#define IRPIN 11   // pin al que conectamos el receptor de IR
#define focus 9
#define shutter 7

//botones
#define boton1 4010852096
#define boton2 3994140416
#define boton3 3977428736

NECIRrcv ir(IRPIN) ;

int i;

//parámetros Time-lapse
int msTimeLapse=3000;
int NumFotos=3;


// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  Serial.begin(9600) ;
  pinMode(shutter, OUTPUT);
  pinMode(focus, OUTPUT);
  Serial.println("Modos:");Serial.println("1: Enfocar");Serial.println("2: Hacer foto");Serial.println("3: Time-lapse");
  ir.begin() ;
}


// the loop routine runs over and over again forever:
void loop() {
  unsigned long ircode ;
  while (ir.available()) { 
    ircode = ir.read() ;  
    switch(ircode)
    {    
      case boton1:   Serial.println("Enfocando"); //Focus con UP
                     digitalWrite(focus, HIGH);
                     delay(500);
                     digitalWrite(focus, LOW);
                     break;
                     
      case boton2:   Serial.println("Foto"); 
                     digitalWrite(shutter, HIGH);
                     delay(400);
                     digitalWrite(shutter, LOW);
                     break;
         
      case boton3:   Serial.println("Time-lapse");
                     for(i=1;i<=NumFotos;i++){
                       digitalWrite(shutter, HIGH);
                       delay(100);
                       digitalWrite(shutter, LOW);
                       delay(msTimeLapse-100);}
                     break;
     }//end switch    
  }//end while
}


Nota: si tienes problemas con las librerías de NECIRrcv, en concreto, con WConstants.h, haz lo siguiente.
-Abre NECIRrcv.cpp y borra la línea #include "WProgram.h"
-Abre NECIRrcv.h y sustituye la línea #include "WConstants.h" por #include "Arduino.h”

Probablemente tengas que revisar los #define de los botones para ponerles el valor que envíe tu mando. Para saber estos valores simplemente carga el sketch de aquí (http://elcajondeardu.blogspot.com.es/2014/02/utilizacion-mando-infrarrojos-i-lectura.html#more) y mira el monitor Serial al pulsar los botones que te interesen.

Funcionamiento:
Botón 1: enfocar
Botón 2: hacer foto
Botón 3: modo time-lapse, configurable con los parámetros NumFotos (número de fotos del time-lapse) y msTimeLapse (intervalo de tiempo entre fotos en ms).




Recuerda que el Arduino guarda el último sketch que hayas cargado desde el ordenador y que puedes alimentarlo con pilas, por lo tanto, tu intervalómetro puede ser totalmente portátil.
Con esto hemos realizado lo básico, como hemos comentado al principio, puedes hacer que tu disparador se ajuste a lo que necesites para tu cámara con sólo cambiar o añadir unas pocas líneas de código o algún componente más.

Por ejemplo, estas son algunas de nuestras ideas para añadir funcionalidades:

-Un modo que dispare un par de segundos después de pulsar un botón, para poder esconder el mando y no salir con él en la mano.

-Hacer que el número de fotos del time lapse y el intervalo de tiempo entre fotos sea ajustable; se podría hacer mediante un LCD para mostrar los parámetros y pulsadores para incrementar y decrementar valores.

-Barreras de luz: la cámara disparará cuando se interrumpa el haz de luz entre dos puntos.

-Conectar dispositivos inalámbricamente al Arduino para controlar la cámara, por ejemplo desde el móvil vía Bluetooth.

En resumen, con unos pocos componentes simples y económicos y nuestro Arduino podemos conseguir muchas nuevas funciones que nos ayuden a aprovechar nuestra cámara.

Recuerda que algo tan sencillo como programar tu intervalómetro y dejar un rato la cámara mirando hacia arriba puede acabar dando resultados como este:



Anímate a construir tu intervalómetro inalámbrico y no dudes en dejarnos tus dudas o tus ideas en los comentarios.

Un saludo,


J.