SEMFORO DE TRES COLORES
Felipe Garca Granados, 20131007129
Jos Cruz Reyes, 20132007074
Mauricio Rojas, 20132007049
Universidad Distrital Francisco Jos de Caldas
Bogot DC, Colombia
fgarciag@[Link]
jlcruzr@[Link]
mrojasg@[Link]
I.
INTRODUCCIN
En esta prctica proponemos en uso la funcin
timer, la cual nos permite establecer un
temporizador para activar una interrupcin en un
determinado momento en el futuro, cuando llegue
ese momento, puede utilizar la interrupcin como
una alerta, ejecutar cdigo diferente, o cambiar un
pin de salida.
Lo interesante de los temporizadores es que al
igual que las interrupciones externas, se ejecutan
de forma asncrona, o de forma independiente de
su programa principal. En lugar de ejecutar un
bucle o varias veces llamando millis (), puede
dejar que un temporizador haga el trabajo para
usted, mientras que su cdigo hace otras cosas.
II.
III.
OBJETIVOS
Comprender en funcionamiento y
propsito de los temporizadores.
MATERIALES
Arduino uno
Protoboard
LDR(fotoresistencia)
Cable.
IV.
MARCO TERICO
TIMER
Un temporizador no es ms que un
contador que se incrementa cada
intervalo
de
tiempo. Los temporizadores funcionan
como un reloj que se puede utilizar para
medir el tiempo, medir la duracin de
ciertos
eventos,
entre
otras
aplicaciones.
Arduino
est
equipado
con
un
microcontralodor
ATmega168
o
ATmega328 (que slo se diferencian en
la cantidad de memoria interna). Estos
microcontroladores tienen en esencia
tres tipos de contadores y : Timer0,
Timer1 y Timer2 , Timer0 y Timer2 son
contadores de 8 bits, es decir, tener 0255, y Timer1 es un contador de 16
bits, que cuenta desde 0 a 65535.
El Arduino Mega est equipado con
ATmega1280 o Atmega2560 (que slo
difieren
en
la
cantidad
de
memoria). Tienen
6 temporizadores:
Timer0,
Timer1,
Temporizador
2
Temporizador
3,
timer4,
temporizador5 Los temporizadores 0,
1 y 2 son idnticos a los ATmega168 /
328, y temporizadores 3, 4 y 5 son
ambos de 16 bits.
TIMER0
Timer0 es un temporizador de 8 bits, es decir, su
registro contador puede grabar un valor mximo
de 255 (el mismo que un byte de 8 bits sin
signo). Timer0 es utilizado por las funciones
nativas
de
temporizacin
tales
como
Arduino delay()y millis(), por lo que los usuarios
de Arduino no debera meterse con l a menos que
se sienta cmodo con las consecuencias.
TIMER1
Timer1 es un temporizador de 16 bits, con un
valor de contador mximo de 65.535 (un entero de
16 bits). La biblioteca Arduino Servo utiliza este
temporizador, as que ten cuidado si lo usa en sus
proyectos.
utiliza Timer1 la analogWrite () en los pines 9 y
10 de la Arduino dejar de funcionar.
SetPeriod (perodo)
Modifica el perodo de interrupcin.
AttachInterrupt (funcin, perodo)
Asigna una funcin a ser llamada cada
interrupcin generada por el temporizador. Si no
se especifica un perodo, se va a utilizar el perodo
definido en el arranque o setPeriod .
TIMER2
Timer2 es un temporizador de 8 bits que es muy
similar
a
Timer0. Se
utiliza
por
el
Arduino tone()funcin.
V.
CDIGO
Con siguiente cdigo se controla las tres luces led
de un semforo:
TEMPORIZADOR 3, TIMER4,
TEMPORIZADOR5
El AVR ATmega1280 y Atmega2560 (que se
encuentra en las variantes de Arduino Mega)
tienen otros tres temporizadores adicionales. Estos
son todos los temporizadores de 16 bits, y
funcionan de manera similar a Timer1.
VI.
SIMULACIONES
A continuacin se muestran las
simulaciones del semforo mediante
la funcin dealay.
CONFIGURACIN DE LOS TEMPORIZADORES
Ajustar en
"manual" los temporizadores es
bastante aburrido y laborioso ya que requiere la
manipulacin
de
diversos
registros
de
microcontrolador, pero afortunadamente hay
algunas libreras que le permiten hacer este
proceso de manera muy sencilla.
Las principales funciones de la biblioteca son:
Inicializar (perodo)
Este mtodo debe ser llamado antes que cualquier
otro mtodo, ya que es responsable de la
configuracin
inicial. Puede
informar
opcionalmente el intervalo (en microsegundos) en
el que se debe generar la interrupcin. El tiempo
aceptable ms bajo es de 1 microsegundo, y el
tiempo mximo es de 8, 388,480 microsegundos,
o aproximadamente 8,3 segundos. Cuando ningn
valor no es informado, se le asignar el valor
predeterminado de 1.000.000 microsegundos (1)
segudo. Cuando
se
Figura No 1. Led verde encendido con funcin
delay
Figura No 2. Led amarillo encendido con funcin
delay
Figura No 5. Led verde encendido con funcin
millis
Figura No 3. Led rojo encendido con funcin
delay
Figura No 6. Led rojo encendido con funcin
millis
Figura No 4. Led blanco encendido con funcin
delay
Figura No 7. Led amarillo encendido con funcin
millis
VII.
IMPLEMENTACIN
PRCTICA
DE
LA
El
primer
########################################
########################################
########################################
########################################
Figura No 9. Led amarillo encendido con funcin
millis
Figura No 8. Led rojo encendido con funcin
millis
Figura No 10. Led verde encendido con funcin
millis
Figura No 8. Leds amarilloy verde encendido con
funcin millis
Figura No 11. Led rojo encendido con funcin
delay
Figura No 12. Leds verde y amarillo encendido
con funcin delay
Figura No 15. Led verde encendido con funcin
delay
CONCLUSIONES
En lugar de ejecutar un bucle o
varias
veces
hacer
la
funcin millis y esperar a que
finalice sin que se pueda hacer
algo ms podemos dejar que un
temporizador haga el trabajo,
mientras que el cdigo hace
otras cosas.
Se puede ajustar el temporizador para
Figura No 13. Led rojo encendido con funcin
delay
utilizar
un pre-escalador,
lo
que
le
permite dividir su seal de reloj por
varias potencias de dos, lo que aumenta
el perodo del temporizador para as
seguir ejecutando instrucciones (CTC).
Figura No 14. Led amarillo encendido con
funcin delay
La medida del tiempo es muy precisa.
Cdigo limpio y elegante. No tenemos
que calcular en el loop si estaremos
perdindonos algo o no. Cuando el
dejaran de funcionar, entre estos estn,
tiempo
los pines PWM y analogWrite() y la
programado
interrupcin
salta
se
y
cumple
se
la
ejecuta
librera Servo.
limpiamente.
REFERENCIAS
Si utilizamos los timers, muchas de las
instrucciones que dependen de ellos
[Link]
ebookTraduccion/Variables
[Link]
[Link]