d.08.05+Propuesta+de+Prototipos

Luego de la previa valoración se seleccionaran circuitos que se consideren como viables y se dará una especificación detallada de los prototipos

Sistema Detector de Luz 180 Grados


 * Introducción: **

Con el fin de incursionar en el mundo de los microcontroladores PIC, y mas específicamente en el manejo de motores paso a paso, nos propusimos el desafío de desarrollar un sistema que reuniera las herramientas del control de giro por pasos mediante pulsos y las del manejo de señales analógicas. De manera que así fuimos definiendo lo que sería un seguidor de luz inteligente, es decir, un sistema compuesto básicamente por una LDR, un PIC y el motor paso a paso de una impresora, que llevara a cabo la función de censar la cantidad de luz en un arco de giro, sobre un solo eje, y luego “apuntar” o posicionarse hacia el punto de mayor luz censada. El sistema, así también, tiene la capacidad de establecer un lazo cerrado de control, ya que después de posicionarse hacia el punto de mayor iluminación estará chequeando que el valor de luz no cambie drásticamente, si lo hace, inicia un nuevo sensado y nuevo posicionamiento.


 * //Hardware: //**

La electrónica del circuito que gobierna el proceso está compuesto por:


 * En primer lugar por el micro controlador de Microchip, el PIC16F873A.
 * El 74LS245 que es un buffer octal del tipo tres estados de 8 bits, para aislar el PIC de la carga que pueda representar las interfaces del motor y de los LEDs de visualización.
 * El ULN2003, (Arreglo de 7 Darlington integrados con diodos de descarga) que es un driver para el manejo de motores paso a paso con tensiones TTL, y hasta 50V de tensión de salida y 500mA.





** LDR: ** El sensado se realiza a partir de un LDR típica. La variación de la tensión provocada por la variación de la resistencia (LDR) en la rama colocada a en la entrada analógica AN0 del PIC, es transformada a valores digitales y va siendo comparada con el valor anterior obtenido, quedándose así con el mayor valor, y relacionando éste con el número de pasos dados, colocará al motor nuevamente, en el paso en el cual, el PIC leyó mayor valor de LUX.






 * Motor paso a paso: **

El giro controlado se lleva a cabo a partir de un motor paso a paso unipolar (5 hilos) de impresora (PM35L048).

Cabe destacar la característica de que el motor utilizado es del tipo constructivo unipolar ya que la manera de excitar las bobinas es distinta al de los bipolares. Los dos motores son del tipo de imán permanente, pero veamos algunas diferencias importantes a la hora de diseñar al hardware y el software.


 * Motor Unipolar: tiene 2 bobinados con punto medio, Los puntos 1 y 2 generalmente van a tensión positiva y se activan cada uno de los cuatro bobinados que quedan conectándolos a masa.
 * Motor Bipolar: también 2 bobinados pero sin puntos medios, es más difícil de accionar ya que se necesitan puentes de transistores para manejar cada bobina.

** Software ** Para el diseño del Software se partió de la idea de utilizar la poderosa herramienta que nos brinda el CONVERSOR A/D del PIC16F873A y esto combinarlo con la posibilidad que nos brindan los motores de conocer y controlar paso por paso sus avances. Entonces, se determinó que lo que llevará a cabo el bloque del programa será: - luego de posicionarse en el punto de inicio, esto con ayuda del final de carrera. - sensar la luz paso por paso, utilizando el ADRESH de la conversión. - comparar el valor del sensado con el del paso anterior, guardando el mayor valor, y el número de paso en el que se provocó el mayor valor. - de manera que al finalizar el recorrido con todos los pasos y los censados recurra al numero de paso guardado (en el que adquirió el mayor valor de luz) para posicionarse allí. - luego, con el dato del mayor valor guardado realizará una comparación, chequeando continuamente que el valor actual no descienda de un umbral constante establecido a partir del mayor valor posible, y estableciendo así un control de lazo cerrado, con la posibilidad de definir la “sensibilidad” del sensor por software. - además, hubo que agregar bloques de programa que permitan disminuir el error en el posicionamiento, es decir un bloque que se encargue de administrar el energizado de las bobinas a partir del “reconocimiento de pasos” para que no haya errores en le precisión por “saltos” indeseados. A continuación se presenta el código fuente el cual fue escrito en lenguaje ensamblador con el editor y compilador del MPLAB y el pic “quemado” por puerto serie con el programador JDM y el software ICprog.

list p=16f873A
 * 1) include 

datoA equ 31h datoB equ 32h datoC equ 33h medpas equ 34h reg equ 0x35 paraposfi equ 36h OPTION_REG equ 81h posision equ 0x20 mayor equ 0x21 mayorm equ 0x22 conscan equ 0x23 adgo equ 02h CARRY equ 00h posisionm equ 0x24 actual equ 0x25 indec equ 0x26 cambio equ 0x27 ultiminiequ 0x28 reset org 00h goto start org 05h start movlw b'00000000' movwf mayor movlw b'00000000' movwf actual movlw b'00000000' movwf posision movlw b'00000000' movwf posisionm clrf reg

movlw b'00000000' movwf medpas movlw b'00000000' movwf cambio movlw b'00000000' movwf conscan movlw b'00000000' movwf indec call inpto call ptoinicio call retardo call escaneo call guardo call retardo call posfinal call test inpto bcf STATUS,RP1 bsf STATUS,RP0 clrf TRISA bsf TRISA,0 clrf TRISB clrf TRISC bsf TRISC,3 movlw b'00001110' movwf ADCON1 bcf STATUS,RP0 movlw b'01000001' movwf ADCON0 return
 * call ptoinicio

ptoinicio clrf conscan clrf posision bsf PORTC,5 clrw movwf PORTB btfss PORTC,3

return clrw movwf PORTB

movlw b'00010000' movwf PORTB movlw b'00010000' movwf ultimini call retardo

clrw movwf PORTB btfss PORTC,3 return

movlw b'00100000' movwf PORTB movlw b'00100000' movwf ultimini call retardo

clrw movwf PORTB btfss PORTC,3

return

movlw b'01000000' movwf PORTB movlw b'01000000' movwf ultimini call retardo

clrw movwf PORTB btfss PORTC,3

return

movlw b'10000000' movwf PORTB movlw b'10000000' movwf ultimini call retardo

clrw movwf PORTB btfss PORTC,3 return

goto ptoinicio escaneo call CONVERCION bcf PORTC,5 bsf PORTC,6 movlw b'11111111';para que el siguiente paso sea desde 0 movwf posision loop clrw movwf PORTB clrc btfsc ultimini,4 goto jump

deljump rrf ultimini,1 movf ultimini,0 movwf paraposfi

movf ultimini,0 movwf PORTB call CONVERCION clrw movwf PORTB call Medpaso movf medpas,0 movwf PORTB

call CONVERCION

incf conscan,1 movf conscan,0 Sublw .32 btfsc STATUS,CARRY goto loop return

Medpaso btfsc ultimini,7 goto medpaso1

btfsc ultimini,6 goto medpaso2

btfsc ultimini,5 goto medpaso3

btfsc ultimini,4 goto medpaso4

medpaso1 movlw b'11000000' ;192 movwf medpas return

medpaso2 movlw b'01100000';96 movwf medpas return

medpaso3 movlw b'00110000';48 movwf medpas return

medpaso4 movlw b'10010000';144 movwf medpas return

jump clrc rrf ultimini,1 clrc rrf ultimini,1 clrc rrf ultimini,1 clrc rrf ultimini,1 clrc rrf ultimini,1 goto deljump guardo

movf posisionm,w movwf indec

return posfinal

movf ultimini,0 movwf paraposfi

movf indec,0 sublw 0x40; son 64 los pasos para el semiciclo completo movwf reg

movf paraposfi,0 ; lo unoc que le cambio para que no salte de scan a ;posfinalcomo del scan sale siempre con mediopaso movwf PORTB; repito el ultimo paso completo q se ejecuto en escaneo ;que es el que le sigue para volver call retardo decfsz reg,1

delmedio btfsc paraposfi,7 goto jump2

deljump2 rlf paraposfi,1

movf paraposfi,0 movwf PORTB call retardo decfsz reg,1 goto Medpaso2 return
 * incfsz indec,1

Medpaso2 btfsc paraposfi,7 goto medpaso42

btfsc paraposfi,6 goto medpaso12

btfsc paraposfi,5 goto medpaso22

btfsc paraposfi,4 goto medpaso32 goto delmedio

medpaso12 movlw b'11000000' ;192 movwf PORTB call retardo decfsz reg,1 goto delmedio
 * incfsz indec,1

return

medpaso22 movlw b'01100000';96 movwf PORTB

call retardo decfsz reg,1
 * incfsz indec,1

goto delmedio return

medpaso32 movlw b'00110000';48 movwf PORTB call retardo decfsz reg,1 goto delmedio return
 * incfsz indec,1

medpaso42 movlw b'10010000';144 movwf PORTB call retardo decfsz reg,1 goto delmedio return
 * incfsz indec,1

jump2 rlf paraposfi,1

rlf paraposfi,1

rlf paraposfi,1

rlf paraposfi,1

rlf paraposfi,1

goto deljump2 CONVERCION incf posision,1 call retardo call retardo

bsf ADCON0,adgo espera btfsc ADCON0,adgo goto espera movf ADRESH,W movwf actual subwf mayor,0 ; mayor-actual btfss STATUS,CARRY call gmyp0 clrc return gmyp0 movf posision,w movwf posisionm movf actual,0 movwf mayor return sinsalto

retardo movlw b'01000001' movwf datoB delay2 movlw b'11111111' movwf datoA delay1 decfsz datoA,1 goto delay1 decfsz datoB,1 goto delay2 return retardo2 movlw b'11111111' movwf datoB delay22 movlw b'11111111' movwf datoA delay12 decfsz datoA,1 goto delay12 decfsz datoB,1 goto delay22 return test bcf PORTC,6 bsf PORTC,7 movlw b'00000000' movwf indec movlw b'00000000' movwf cambio

movlw b'00000000' movwf PORTB

call retardo2 clrf posisionm bsf ADCON0,adgo espera1 btfsc ADCON0,adgo goto espera1 movf ADRESH,w

movwf cambio bcf PORTC,7 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1 incf cambio,1; incremento 30 unidades para una sensibilidad de 0.3V

movf mayor,w subwf cambio,0 ; cambio-mayor btfss STATUS,CARRY; goto reset goto test end ;si el valor nuevo de la conversión ; y escanea
 * es menor que el 10%-
 * del ultimo mayor valor reinicia

** Conclusión: ** Finalmente, el dispositivo fue ensayado probando seguir la luz de una luminaria tipo velador con una lámpara incandescente de 75W, pero estamos firmemente convencidos, de que puede seguir fielmente cualquier fuente de luz, incluso la solar. Y aunque no se trate de fuentes puntuales de luz, al ser un sistema inteligente, buscará la posición donde “capte” mayor iluminancia. También se puede notar el hecho de que al disponer de un sistema de control automático, el aparato sabrá sortear los errores por saltos y vibraciones, posicionándose correctamente aunque no fuera en el primer intento.