You are on page 1of 16

SEGUIDOR DE LUZ

INTELIGENTE

Ignacio Olmedo
SEGUIDOR DE LUZ INTELIGENTE

Luciano Mulki Aguilera

Introducción:
Con el fin de incursionar en el mundo de los microcontrladores 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
sensar la cantidad de luz en un arco de giro, sobre un solo eje, y luego
“apuntar” o posicionarse hacia el punto de mayor luz sensada.
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.

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

Configuración de
los pines del
ULN2003

- 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,

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

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)

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

Cabe destacar la característica de que el motor utilizado es del tipo


constructivo unipolar ya que la manera de excitar las bobinas es distinto 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.

Bobinados motor unipolar Bobinados motor


bipolar

*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.

- Final de carrera:
Se le incorporó a la estructura del dispositivo un interruptor construido a mano
que consta de dos contactos metálicos que cumplirán el rol de interruptor final
de carrera, es utilizado para dar límite al giro en un sentido en el
posicionamiento del sensor.

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

Imagen del PCB de la plaqueta terminada con los componentes montados

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

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

#include <p16f873A.inc>

datoA equ 31h


datoB equ 32h
datoC equ 33h
medpas equ 34h
reg equ 0x35
paraposfi equ 36h
OPTION_REGequ 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
ultimini equ 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

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

;call ptoinicio
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

;--------------------------------------------------------------------------------------------------------------
--------------
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'

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

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

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

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

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

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
decfszreg,1

delmedio
btfsc paraposfi,7
goto jump2

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

deljump2 rlf paraposfi,1

movf paraposfi,0
movwf PORTB
call retardo
decfszreg,1
;incfszindec,1
goto Medpaso2
return

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
decfszreg,1
;incfszindec,1
goto delmedio

return

medpaso22 movlw b'01100000';96


movwf PORTB

call retardo
decfszreg,1
;incfszindec,1

goto delmedio
return

medpaso32 movlw b'00110000';48


movwf PORTB

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

call retardo
decfszreg,1
; incfsz indec,1
goto delmedio
return

medpaso42 movlw b'10010000';144


movwf PORTB
call retardo
decfszreg,1
; incfsz indec,1
goto delmedio
return

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

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

return
;--------------------------------------------------------------------------------------------------------------
--------------------
sinsalto

;--------------------------------------------------------------------------------------------------------------
--------------------
retardo movlw b'01000001'
movwf datoB
delay2 movlw b'11111111'
movwf datoA
delay1 decfszdatoA,1
goto delay1
decfszdatoB,1
goto delay2
return
;--------------------------------------------------------------------------------------------------------------
--------------------
retardo2 movlw b'11111111'
movwf datoB
delay22 movlw b'11111111'
movwf datoA
delay12 decfszdatoA,1
goto delay12
decfszdatoB,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

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

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
; es menor que el 10%-
;del ultimo mayor valor
reinicia
; y escanea
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,

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)


SEGUIDOR DE LUZ INTELIGENTE

posicionándose correctamente aunque no fuera en el primer intento.

Ignacio Olmedo y Luciano Mulki Aguilera (Ingeniería Electrónica)

You might also like