Diseño de "slider" para cámara reflex con PIC y LCD en PBP

Hola amigos:
¿Cómo les va? Espero que muy bien y quiero compartir con ustedes el proyecto que tengo ya que muchas veces me han ayudado.
Les cuento que en fotografía hay una técnica llamada time-lapse o lapso de tiempo. Les dejo un video para que vean en que consiste el cual hice yo.


Hay algunas variantes en que la cámara además de ir sacando fotos, se mueve hacia un costado sobre un carro o "slider" como así también gira. El proyecto que estoy terminando de armar consiste en un carro deslizante con un motor paso a paso de 1,8º (200 pasos y unipolar de seis cables o cinco, da lo mismo) con un display lcd. Como mi carro guía quiero que tenga un máximo de 92cm de recorrido, aproximadamente, los cálculos están hechos para ese valor.

https://skydrive.live.com/redir?resid=FD0576EE01028E93!639&authkey=!AFydivHV34_ud48

Les dejo todos los archivos en un comprimido.
Aclaro que la última parte "inicio:" tiene un problema de bucle infinito, quizás alguien me pueda ayudar en esta parte pero el resto anda muy bien. Tiene para seleccionar cantidad de fotos, cantidad de avance, tiempo para que siempre el motor tarde 1 segundo en moverse (automáticamente), muestra de error si se configura el carro para una distancia mayor a la posible por recorrer con un mínimo también, puesta a cero del carro al comenzar con un pulsador que censa si está en posición = 0 o no, etc.
Me faltaría ponerle un botón de "reset" general o si alguien tiene una crítica, bienvenida sea :)
Código:
'****************************************************************
'*  Name    : Guía para Canon                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2012 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 25/5/2013                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TRISB= %00000111   'puerto B como salida salvo 0, 1 y 2
 foto var word    'variable mayor a 256 valores
 k var byte 'variable para la cantidad de pasos
  j var byte  'veces que se repiten los pasos
 i VAR byte   'variable para los cuatro pasos del motor
 p var byte   'variable para almacenar el valor de i
 d var word     'variable para defasaje.
 L var word 'variable para calcular el tiempo hasta 1200 ms
 foto = 250  'variable por defecto para tomar fotos
 k=144        'variable por defecto para pasos
 n var word
 
 ok var portb.0      'puerto para confirmar
 ajuste var portb.1  'puerto para cuando rebobina el carro
 subir var portb.2    'puerto para incrementar variable 
 
 write 0,48 '3,9,12,6 (full step) si uso b.0 a b.3
 write 1,144  '48, 144, 192, 96 si uso b.4 a b.7 
 write 2,192
 write 3,96
  'puerto b como salida salvo 0, 1 y 2
 
 
LCDout $Fe, 1, "Deslizador para"   'mostrar mensaje
LCDout $Fe, $C0, "Time-lapse"      'mostrar mensaje
Pause 2000
LCDout $Fe, 1, "Nicolas"           'mostrar mensaje
LCDout $Fe, $C0, "Antoci"          'mostrar mensaje
PAUSE 2000

LCDout $Fe, 1, "Rebobinar carro"           'mostrar mensaje
LCDout $Fe, $C0, "Cuidado"          'mostrar mensaje
PAUSE 3000


Rebobinar:  'hace girar una vuelta (200 pasos) al motor para que arranque
            'desde la posición cero.
If ajuste = 0 then fotos0
for J=0 to 50
For i=3 to 0 step -1     
READ i,p 'leer el dato i y lo almacena en p
PORTB=p
PAUSE 2
next i
next j
goto rebobinar


Fotos0:
LCDout $Fe, 1, "Presione arriba"   'mostrar mensaje
LCDout $Fe, $C0, "para variar"    'mostrar mensaje
pause 3000
LCDout $Fe, 1, "Presione aceptar"   'mostrar mensaje
LCDout $Fe, $C0, "para continuar"    'mostrar mensaje
PAUSE 2000

fotos1:
LCDout $Fe, 1, "Cantidad de"   'mostrar mensaje
LCDout $Fe, $C0, "fotos = ", dec foto  'mostrar mensaje
pause 40
if ok = 0 then avance0 
if subir = 0 then incrementar 
goto fotos1

incrementar:
foto = foto + 1
pause 200
if foto > 350 then foto = 250 
goto fotos1

avance0
pause 750
avance:
         'si 200 pasos son 1 vuelta o 1,27mm y 920mm/250 fotos = 3,683 mm/foto. 
         'Necesito tantos pasos para avanzar 3,68mm

LCDout $Fe, 1, "Avance"    'mostrar mensaje
LCDout $Fe, $C0, dec (k+1)*127/5000 ,"," , dec2 (k+1) *127/50 ," mm"    'mostrar cantidad de pasos a dar
pause 40
if ok = 0 then giro0 
if subir = 0 then incrementar1 
goto avance

incrementar1:
k = k - 1
pause 200
if k < 101 then k = 144
goto avance

giro0:
if (k * foto)/100 > 360 then error
goto espera0

error:
LCDout $Fe, 1, "ERROR DE AVANCE"             'mostrar mensaje
LCDout $Fe, $C0, "SUPERADO"
pause 500
goto avance

espera0:
pause 700
n = 0

espera1:
LCDout $Fe, 1, "Intervalo de"             'mostrar mensaje
LCDout $Fe, $C0, "tiempo = ", dec 1+n/10 ,"s" 
pause 40
if subir = 0 then incrementar2
if ok = 0 then defase0
goto espera1

incrementar2:
n = n + 10
pause 200
if n > 600 then n = 0
goto espera1

defase0
pause 750
defase:
LCDout $Fe, 1, "Valor de"             'mostrar mensaje
LCDout $Fe, $C0, "defase = ", dec d/10 , "," , dec1 d ,"s" 
pause 40
if subir = 0 then incrementar3
if ok = 0 then comenzar
goto defase

incrementar3:
d = d + 1
pause 200
if d > 600 then d = 0
goto defase

comenzar:
L= 1000 - (( k + 1 )* 4 *16/10)
pause 700
LCDout $Fe, 1, "Para comenzar"    'mostrar mensaje
LCDout $Fe, $C0, "Aceptar = si"
if ok = 0 then giro
goto comenzar

giro:
pause d*100
LCDout $Fe, 1, "Trabajando"

INICIO:
 for J=0 to k
 For i=0 to 3     
 READ i,p 'leer el dato i y lo almacena en p
 PORTB=p
 PAUSEus 1600
 next i
 next j
 PAUSE L
 pause n * 100
 goto inicio 
 
 terminado:
 LCDout $Fe, 1, "Trabajo"    'mostrar mensaje
LCDout $Fe, $C0, "terminado"
high portb.4
high portb.5
high portb.6
high portb.7
 end
 

Adjuntos

  • Cámara Canon.zip
    105.3 KB · Visitas: 7
Última edición por un moderador:
Atrás
Arriba