Hola a todos… perdón el titulo en ingles… pero suena como mas importante… ya que para mi este es un invento muy útil… porque ultima-mente estuve tonteando con la reflex y quería hacer un poco de timelapse… y la cámara por si sola no lo hace… necesitando un ordenador conectado… entonces me puse a pensar «pero solo un poquito porque el medico me dijo que no hiciese esfuerzos… 🙂 «, y se me ocurrió reutilizar un par de cosillas que tenia en el cajon de los inventos viejos… y me hice este invento… bueno invento no es… porque ya existen… pero por lo menos me he ahorrado unas cuantas pelas.
El cacharro tiene cosas de todos los mundos y colores… puedo indicarle cantidad de cosas insalubres: 1º Cantidad de tomas (fotogramas) «ShotN» 2º Espacio de tiempo entre tomas «Pause» 3º Tiempo de exposición (por si acaso queremos hacerlo desde fuera de la cámara) «Time» 4º Cambia de modo entre TIMELAPSE y LONGEXPOSURE 5º Activar el modo LDR (con un detector LDR puede detectar si cae un rayo… y fotografiarlo) en cuanto tenga una tormenta os muestro el ejemplo 6º Activar o desactivar el BUZZER (tiene un pequeño buzzer que indica las tomas y diferencias 7º Activar o desactivar la iluminación del LCD 8º Un modo de lectura, en donde veo el nivel de luminosidad del LDR y el nivel de Bateria… 9º El modo de disparo que nos indica un resumen de todos los detalles… y en donde nos permite disparar en modo automatico. 10º Un botón de modo manual, para no perder esta características y poder incluir en el futuro un control remoto inalámbrico. (para el paso siguiente) Se ha medido un consumo de 70mA, así que con un pack de baterias AAx4 puede funcionar por 20hrs… pero si apagamos la iluminación del LCD el consumo cae a 40mA lo cual no s deja una duración de batería de unas 50hrs.Este es un prototipo, pero ya estoy construyendo para vender, si alguien esta interesado, solo tiene que contactarme.
El diseño electrónico es simple… por eso solo me decantaré por mostrar el programa.
[sourcecode language=»py»]
/*
* Reflex control timelapse & long exposure.
* By Walter López Pascual (Walii & walterleonardo)
* Pins, Schematics and more info:
* http://pinguino.walii.es
*/
// Comment line above if you using a pinguino with PIC18F2550.
#define PIC18F4550
#define BOTON1 4
#define BOTON2 5
#define BOTON3 6
#define BOTON4 7
#define BOTON5 10
#define SHOT 28
#define LDR 13
#define VREF 14
#define VMON 15
#define LED 23
#define BUZZ 22
#define LCD 21
//global vars
uchar counter = 0;
int tiempo=0;
int segundos=0;
int i;
int cantidad=1;
int contador=0;
float num;
int pausa;
int cuenta;
int encendida=0;
float oldr,ldr;
float intermedio[];
int ldractivado=0;
void lecturaoldr()
{
for (i=0;i<10;i++)
{
intermedio[i]=analogRead(LDR);
oldr=oldr+intermedio[i];
}
oldr=oldr/10;
}
void lecturaldr()
{
for (i=0;i<10;i++)
{
intermedio[i]=analogRead(LDR);
ldr=ldr+intermedio[i];
}
ldr=ldr/10;
}
void setup(){
//8 bits mode
//lcd(8, 9, 0, 1, 2, 3, 4, 5, 6, 7); // RS, E, D0 ~ D7
//4 bits mode, dont use last four pins …
lcd(8, 9, 0, 1, 2, 3, 0, 0, 0, 0); // RS, E, D4 ~ D8
//LCD format
lcd.begin(3, 0);
/* Debug */
pinMode(BOTON1, INPUT); // LED on pin 13
digitalWrite( BOTON1,LOW);
pinMode(BOTON2, INPUT); // LED on pin 13
digitalWrite( BOTON2,LOW);
pinMode(BOTON3, INPUT); // LED on pin 13
digitalWrite( BOTON3,LOW);
pinMode(BOTON4, INPUT); // LED on pin 13
digitalWrite( BOTON4,LOW);
pinMode(BOTON5, INPUT); // LED on pin 13
digitalWrite( BOTON5,LOW);
pinMode(SHOT, INPUT); // LED on pin 13
digitalWrite( SHOT,LOW);
pinMode(LED,OUTPUT); // LED on pin 13
digitalWrite( LED,LOW);
pinMode(BUZZ,OUTPUT); // LED on pin 13
digitalWrite( BUZZ,LOW);
pinMode(LCD,OUTPUT); // LED on pin 13
digitalWrite( LCD,LOW);
lecturaoldr();
}
void dispara(int pausa)
{
tono1();
digitalWrite(LED,HIGH);
delay(pausa);
digitalWrite(LED,LOW);
}
void longexpo()
{
_millis = 0;
while (millis()<=5000)
{
segundos=millis()/1000;
lcd.setCursor(0, 2);
lcd.print("Start-time in ");
lcd.printNumber(5-segundos,10);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
}
contador=1;
while (contador<=cantidad)
{
_millis = 0;
tono2();
while (millis()<=tiempo*1000)
{
digitalWrite(LED,HIGH);
lcd.setCursor(0, 2);
lcd.print("Time to End ");
segundos=millis()/1000;
lcd.printNumber(tiempo-segundos,10);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Shot to End ");
lcd.printNumber(cantidad-contador,10);
}
digitalWrite(LED,LOW);
lcd.setCursor(0, 2);
lcd.print("Time to End ");
lcd.printNumber(0,10);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Shot to End ");
lcd.printNumber(cantidad-contador,10);
delay(2000);
contador++;
}
}
void timelapse()
{
_millis = 0;
contador=1;
while (contador<=cantidad)
{
lcd.setCursor(0, 2);
lcd.print("ShotN ");
lcd.printNumber(cantidad-contador+1,10);
lcd.print(" Wtime ");
lcd.printNumber(tiempo,10);
lcd.setCursor(0, 3);
segundos=millis()/1000;
lcd.print(" Working … ");
while (segundos!=tiempo)
{
segundos=millis()/1000;
digitalWrite(LED,LOW);
}
dispara(1000);
_millis = 0;
contador++;
}
}
void tono1()
{
digitalWrite(BUZZ,HIGH);
delay(200);
digitalWrite(BUZZ,LOW);
}
void tono2()
{
digitalWrite(BUZZ,HIGH);
delay(50);
digitalWrite(BUZZ,LOW);
delay(50);
digitalWrite(BUZZ,HIGH);
delay(50);
digitalWrite(BUZZ,LOW);
}
void loop()
{
lecturaldr();
lcd.home();
lcd.print("ShotControl"); // Output char
lcd.print(" ldr "); // Output char
lcd.printNumber(ldr,10); // Output char
lcd.print(" "); // Output char
lcd.setCursor(0, 1);
if (digitalRead(BOTON4)) lcd.print("Long exposure ");
else lcd.print("Time Lapse ");
if(digitalRead(BOTON1) && digitalRead(BOTON4)) longexpo();
else if(digitalRead(BOTON1) && digitalRead(BOTON4)==0) timelapse();
if(digitalRead(BOTON5))
{
if (encendida) encendida=0;
else encendida=1;
delay(200);
}
if(digitalRead(BOTON2)) delay(200), tiempo++;
if(digitalRead(BOTON3)) delay(200), cantidad++;
if(digitalRead(SHOT)) dispara(200);
if(ldr<=oldr-10 && ldractivado==1) dispara(200); if (tiempo >= 1000) tiempo = 1000;
if (tiempo <= 1) tiempo = 1;
if (encendida) digitalWrite(LCD,HIGH);
if (!encendida) digitalWrite(LCD,LOW);
lcd.setCursor(0, 2);
lcd.print("ShotN ");
lcd.printNumber(cantidad,10);
lcd.print(" Wtime ");
lcd.printNumber(tiempo,10);
lcd.print(" ");
lcd.setCursor(0, 3);
segundos=millis()/1000;
lcd.print(" -Esperando comando-");
}
[/sourcecode]