Laboratorio 4: Manejo de Temporizador
Capacidades Terminales:
Al finalizar el laboratorio el estudiante será capaz de:
Programar utilizando el recurso interno de Timer o Temporizador.
Programar rutinas de tiempo para Control de Procesos.
Desarrollar una rutina de control de acceso con seguridad de tiempos.
Seguridad:
USANDO SIMULADOR:
Registrarse en la web de simulación con el correo de Tecsup y no olvidarse de la clave.
Prestar atención a las indicaciones del docente.
USANDO COMPONENTES REALES:
Utilizar pulsera antiestática para evitar la descarga estática en los circuitos, sino se tiene evitar trabajar con chompa o abrigo de lana ya que dicho material genera carga eléctrica.
Realizar el armado del circuito propuesto sin tener conectado ninguna fuente de energía
Verificar el armado del circuito antes de energizar para evitar averías.
No realizar ningún cambio en el circuito si se tiene energizado.
Prestar atención a las indicaciones del docente.
Equipos y Materiales:
Una computadora con:
Windows 7 o superior
Conexión a Internet
Arduino y elementos adicionales.
Procedimiento:
EJERCICIO 1: Uso de Temporizador
Los temporizadores nos permiten optimizar nuestro código, nuestro trabajo es configurar el tiempo requerido, implementar la función de interrupción relacionada al temporizador y esperar que ocurra la interrupción, mientras podemos estar realizando otros procesos.
Instale la librería del TimerOne al Arduino IDE, ya que por defecto no viene instalado.
Utilice el mismo circuito que se armó en el Item 1, programe el código que se tiene propuesto para el Arduino y responda:
//PROGRAMA DE ARDUINO
#include <TimerOne.h>
#define pin_led 8
bool led_estado = LOW;
void setup(void){
pinMode(pin_led, OUTPUT);
Timer1.initialize(1000000);
Timer1.attachInterrupt(parpadeo);
}
void parpadeo(void){
led_estado = !led_estado;
digitalWrite(pin_led,led_estado);
}
void loop(void){
}
Responda:
Explique el funcionamiento del circuito armado y el programa:
Se observa en el armado del circuito que se necesito un led, una resistencia todo esto unido a al pin número 8 y con unos cables de positivo y negativo , que respectivamente van en 5v y a GND .
En la parte de código se usó la librería TimerOne.h , empezamos definiendo la librería así como el pin 8 , decimos que será de valor bool y estará apagado inicialmente , en void setup indicamos que es valor de salida el led , y que parpadeara gracias al timerl.initialize
Explique ¿Qué acción está realizando la instrucción Timer1.initialize(1000000);?
La instrucción Timer1.inizialize de Arduino inicializa el timer con el valor de period, este valor es el tiempo en el que queremos que se dispare el temporizador y debe ser escrito en microsegundos.
Entonces en conclusión Timer1.initialize(1000000) lo que hace es configurar el TIMER en 1 Segundo
Explique ¿Qué acción está realizando la instrucción Timer1.attachInterrupt(parpadeo);?
Timer1.attachInterrupt( parpadeo) ;
Activa la función específica que será ejecutada como interrupción, cada que el TIMER se dispare
Activa la interrupción y la asocia a “parpadeo”
EJERCICIO 2: Implementando un Control de Acceso
El control de Acceso en la industria nos sirve para diferentes procesos como Cajas Fuertes, Acceso a Domicilios, Alarmas de Seguridad, Acceso a Equipos industriales.
Realice un control de Acceso con el Teclado y el LCD, basado en el programa que se tiene del laboratorio 2:
Coloque la imagen de la MAQUINA DE ESTADOS, implementada para la actividad:
Coloque la imagen del CIRCUITO ELECTRONICO utilizado en la actividad:
Coloque el PROGRAMA EN ARDUINO utilizado en la actividad:
TAREA 1: Simule en Arduino
Complete el programa para lograr integrar las temporizaciones de seguridad del control de accesos:
Primer Temporización: Si no ingresa una tecla después de 3 segundos se reinicia el sistema (Reinicio de pantalla y variables).
Segunda Temporización: Si ingresa una clave, mostrar un mensaje en pantalla del LCD “Clave Correcta o Incorrecta” de una duración de 2 segundos, además debe enviar por el puerto serial “Conexion,1” si la clave es correcta.
Tercera Temporización: Con el ingreso de la clave correcta se llega al Proceso IoT, mientras estas en este proceso se tiene un temporizador de 20 segundos en cuenta regresiva, si presionas la tecla * se reinicia el sistema, pero si presionas alguna otra tecla se reinicia la cuenta regresiva a 20 segundos nuevamente, si termina la cuenta regresiva se reinicia el sistema. Cuando se reinicia el sistema en ambos casos, enviar por el puerto serial “Conexión,0”.
Describa el programa que realizo ¿Que funciones uso?
Se agregó una función llamada temporizador que se encarga de usar un temporizador según la ubicación o el valor de la variable access_status. Las funciones timer1.start() y timer1.stop() se usaron para iniciar y detener el proceso de parada mientras nuestro programa se estaba ejecutando. La función timer.initialize(time_in_microseconds) se utiliza para determinar el tiempo que tarda el temporizador. La función time1.attachInterrupt(function) se usó para ejecutar la interrupción y ejecutar la función especificada.
TAREA 2: Video de Demostración
Graben un video de 2 minutos (Máximo) puede usar voz en off o aparecer de cuerpo entero.
El video debe contener un “Inicio de video o Intro”, mostrando ¿A qué carrera pertenecen?, ¿Qué laboratorio presentas? y ¿Quiénes son los integrantes del grupo?
En el video debes explicar la Tarea 1.
Para presentarlo debes subirlo el video a la página de Facebook de la Carrera, colocando en la descripción en Facebook:
Curso:
Laboratorio Nro. y Titulo:
Integrantes:
#Tecsup #IoT #Arduino
Página de Facebook Administración de Redes y Comunicaciones
Copiar el link del video y pégalo aquí:
TAREA 3: INVESTIGACIÓN
Averigüe sobre ¿Qué tipo de interrupciones se tiene en el Arduino?
Interrupciones en Arduino
Internamente, Arduino (mejor dicho el microcontrolador AtMega) tiene ciertas interrupciones configuradas que lanza según la situación. Para la transmisión de datos a través del puerto serie, para resetear la placa antes de cargar un programa, comunicación I2C, etc…
El uso de interrupciones es casi obligatorio en un programa avanzado de un microcontrolador. Básicamente cuando un evento ocurre se levanta una bandera y la ejecución se traslada a una rama de código diferente. De esta forma no es necesario esperar un loop a comprobar que un evento ha ocurrido para ejecutar una acción.
Las interrupciones pueden ocurrir por un cambio en un puerto (solo en aquellos que soporten interrupciones HW), overflow en un timer, comunicación serie (USART), etc…
Normalmente no se ve, pero las interrupciones ocurren constantemente durante la operación normal de Arduino. Por ejemplo las interrupciones ayudan a las funciones delay() y millis() así como a la función Serial.read().
El procesador dentro de cualquier Arduino tiene dos tipos de interrupciones: “externas” y “cambio de pin”.
Las interrupciones son muy útiles para hacer que las cosas ocurran automáticamente en los programas del microcontrolador y pueden resolver problemas de temporización.
Las tareas más usuales en las que usar interrupciones son en la monitorización de entradas de usuario o entradas externas críticas en el tiempo, así como en lectura de periféricos con requisitos de temporización muy específicos donde queramos capturar un evento que tiene una duración muy corta inferior al tiempo de loop de nuestro programa.
Para definir una interrupción necesitamos tres cosas:
Un pin de Arduino que recibirá la señal de disparo
Una condición de disparo
Una función que se ejecutará, cuando se dispara la interrupción (Llamada call back function).
OBSERVACIONES
Observamos que gracias a la librería timerone nos permite usar timers y manipularlos de manera más sencilla , aunque se puede hacer sin librerías nos tomaría más tiempo y más espacio de código , esto debido al uso de las hojas de datos del microcontrolador que usa la placa arduino.
La parte del ejercicio con teclado matricial tuvimos que tener cuidado al momento de conectarla ya que por la configuración en matriz que presentan los pulsadores dentro de un teclado matricial, se puede establecer cual botón dentro del arreglo está siendo presionado, nosotros trabajamos con el teclado matricial 4x4
Para trabajar mejor con el teclado matricial, es necesario descargar e instalar la librería keypad.
Una de las desventajas de usar un teclado matricial es que pueden causar problemas cuando se pulsa más de una tecla simultáneamente. Este es uno de los motivos por el que los teclados de ordenador usan una disposición no rectangular, agrupando ciertas teclas en circuitos diferentes (Ctrl, Alt, Shift…)
CONCLUSIONES
Concluimos aprendiendo que un Timer es un módulo interno de un microcontrolador. Además el timer puede generar una señal periódica a una frecuencia que puede ser configurada. La función principal del timer es contar automáticamente a la velocidad de su frecuencia configurada. Por ejemplo, sus principales características son los bits que puede «contar».
Aprendimos el funcionamiento del teclado matricial que para detectar la pulsación de una tecla actuaremos de forma similar a la lectura simple de un pulsador. En resumen, ponemos a tierra un extremo del pulsador, y el otro lo conectamos a una entrada digital con una resistencia de pull-up.
Tomar de importancia el valor de la resistencia ya que se utilizan en los circuitos para variar los valores de intensidad y voltaje. A veces tenemos que alimentar un dispositivo y sólo disponemos de una fuente de voltaje que puede dañarlo si se conecta directamente, como ocurre por ejemplo con los ledes.
En la codificación del arduino lo que es el teclado matricial , definimos con ROW Y COLS , lo pines que serán de columnas y filas.
Concluimos diciendo de Arduino se basa en los microcontroladores ATMEGA de 8 bits de Atmel y sus microcontroladores SAM3X8E y SAMD21 de 32 bits. Se planea lanzar placas y módulos de desarrollo bajo la premisa de seguir el "Acuerdo de licencia de Creative Commons", para que los diseñadores de circuitos experimentados puedan crear sus propios módulos y llevar a cabo las expansiones y mejoras correspondientes. Incluso los usuarios que son relativamente inexpertos pueden hacer una versión de prueba de la placa de desarrollo básica Uno, que es fácil de entender el principio de su funcionamiento y ahorra costos.