Práctica 11 Encender varios LED a una secuencia específica (Semáforo)

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPin on PinterestPrint this page

11.1  Objetivo General:

Encender varios LED a una secuencia específica (tipo semáforo), se activará el inicio de la secuencia con un botón pulsador.


Un botón pulsador será empleado para iniciar la secuencia de encendido y apagado de 3 LEDs. Se simula con este circuito el comportamiento de un semáforo.

11.2 Materiales y Métodos:

  1. Tres LEDs (Colores: Amarillo, Verde y Rojo).
  2. Una tarjeta Arduino Uno-R3 o Arduino Mega 2560.
  3. Un cable USB impresora.
  4. Un computador.
  5. Cables para el montaje del circuito.
  6. Tarjeta Protoboard.
  7. Tres Resistencias Eléctrica de 220 ohm.
  8. Un Botón Pulsador.

10.3 Montaje de la práctica:

Antes de comenzar la realización del montaje del circuito electrónico, se debe realizar el circuito en el programa Fritzing.  Se debe tener en cuenta el conocimiento de cuál es el cátodo y ánodo de los LED. Se coloca el ánodo del LED verde en el pin 13, LED amarillo en el pin 12 y LED rojo en el pin 8. El cátodo de cada LED va a tierra (ground). Se va a usar el pin 5V para alimentar el botón pulsador tal como se muestra en la figura 2:

Figura 2. Montaje del circuito en el programa Fritzing

Se observa en la Figura 2 que se está utilizando el Arduino Uno, si se utiliza la tarjeta Arduino Uno-R3 el mismo procedimiento. Como se observa en la Figura 2, el Protoboard nos ayuda a instalar los  LEDs e instalar el circuito a través de cables, al igual que la resistencia eléctrica y el botón pulsador. La línea que esta de color rojo  emite los 5V al botón pulsador. El computador es capaz de proveerle Arduino 5V. Los 5V como se observa van hacia al botón y luego al cerrarse el circuito le deja pasar al pin 7. Para proteger el circuito y evitar que al pin 7 no le llegue más de 5V, se coloca una resistencia eléctrica, la cual lleva  gran parte de esa señal a tierra.

Luego que se tiene armado el circuito en el programa Fritzing, se comienza con el desarrollo del programa en el IDE de Arduino.

10.3 IDE de Arduino para la práctica:

Se selecciona la tarjeta Arduino que se esta utilizando sea Arduino Uno-R3 o Arduino Mega 2560.

– Se selecciona el Puerto Serial. Bajo que puerto USB se va a conectar el Arduino con el computador.

– Se empieza a realizar el código:

  • Inicialmente debemos darle un nombre de qué consiste el codigo, esto se hace a través del símbolo //, se puede colocar el título de la práctica o del programa en sí. También se puede utilizar como comentarios dentro del programa.
  • Se declaran las variables. En la práctica se declaran de tipo constante, una variable que no cambiara durante el desarrollo del programa, su comando es constademás se debe especificar qué tipo de datos se almacenará en la constante, en este caso será entero y su comando es int, luego se le da el nombre de la variable; en la tarjeta Arduino se van a usar los pines 8, 12 y 13 para alimentar los LEDs. También se declara la variable botón en el pin 7 y una variable entero val igual a cero (0), la diferencia de las demás variables es que la variable val  no será constante ya que puede variar entre 0 y 1.
  • Se define si la variable declarada son de tipo entrada o de salida, para eso se utiliza el comando void setup (), se abre corchete ({) para saber qué es lo que contiene ese comando y al finalizar el comando se cierra corchete (}). Internamente del corchete se declara que la variable LED es de salida, esto se realiza a través del comando pinMode, este a su vez necesita como argumento la variable y el tipo de señal de la misma, es decir pinMode(LED,OUTPUT); en la que OUTPUT indica que la señal saldrá del pin 13 permitiendo encender el LED. El mismo procedimiento se sigue para los LED conectados en los pines 12 y 8. Para definir el botón pulsador lo importante es definir el pin donde está conectado el boton (pin 7), este se define en la programación en vez de ser un OUTPUT es un INTPUT, cada vez que el reciba en ese INPUT él va a tomar una acción; la cual es decirle Arduino que tome una señal digital en el pin 13 y encienda el LED, su comando será pinMode(BONTON,INPUT).
  • Luego de definir las variables, se procede a realizar la estructura del código a través del comando void loop (), de igual manera se abre corchete({) y se cierra (}) luego de terminar su cumplimiento. Internamente del corchete se establecen las instrucciones que ejecutara Arduino continuamente. Se utilizara la variable val la cual leerá digitalmente lo que sucede en el pin 7 (botón), su comando seria digitalRead(BOTON). La práctica permite introducir otra estructura de programación la cual es if, la que significa si en español. La estructura if es un condicional que permite decidir en función del valor de la variable val, si este es alto (HIGH=1) o si es bajo (LOW=0). Se utiliza una variable estado (state) que registrará los cambios de HIGH y LOW cuando se pulsa el botón de esta manera se crea un suiche de encendido que luego al volver a presionar sirve para apagar lo que esté dentro del if que contenga la variable state. 
  • Para que el LED se encienda, si state==1 se utiliza se emplea una secuencia de código de encendido y apagado de cada LED simulando la secuencia de un semáforo (primero verde, luego brevemente el amarillo y finalmente el rojo), para encender cada led se emplea el comando digitalWrite con la opción HIGH. Para que los LEDs puedan apagarse se utiliza el mismo comando digitalWrite pero indicándole esta vez una señal baja LOW, esto cuando el state esté en 0.
  • Al terminar el desarrollo del programa se debe compilar para verificar si existen errores dentro del codificado. Luego si no existen errores se debe cargar el código en la tarjeta Arduino para que lo ejecute.

NOTA: Para quel IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción se coloque punto y coma (;).

En la siguiente imagen se mostrara como quedo plasmado en el IDE de Arduino, los procedimientos anteriormente señalados:

// Semáforo
// declarando parametros
int led_verde = 13;
int led_amarillo = 12;
int led_rojo = 8;
const int BOTON = 7; // pin de entrada botón
int val = 0; //val se emplea para almacenar el estado
// del botón
int state = 0; // 0 LED apagado, mientras que 1 encendido
int old_val = 0; // almacena el antiguo valor de val// setup de parámetros
void setup() {
// se indica que cada pin es de salidad OUTPUT.
pinMode(led_verde, OUTPUT);
pinMode(led_amarillo, OUTPUT);
pinMode(led_rojo, OUTPUT);
}
// lazo a ejecutar continuamente una vez cargado el código en el arduino
void loop(){
val= digitalRead(BOTON); // lee el estado del Boton
// chequear si el boton esta presionado o no
if ((val == HIGH) && (old_val == LOW)){
state=1-state;
delay(10);
}
old_val = val; // val is now old, let's store it
if (state==1){
digitalWrite(led_verde,HIGH); // encender LED verde
delay(5000); // mantener por 5 segundos
digitalWrite(led_verde,LOW); // apagar LED verde
digitalWrite(led_amarillo,HIGH); // encender LED amarillo
delay(1000); // mantener por 1 segundos
digitalWrite(led_amarillo,LOW); // apagar LED verde
digitalWrite(led_rojo,HIGH); // encender LED rojo
delay(4000);
digitalWrite(led_rojo,LOW); // encender LED rojo
}
}

Algoritmo  1 Código para encender y apagar un LED utilizando un botón pulsador. 

Implementación del algoritmo 1 en el simulador https//123d.circuits.io:

https://circuits.io/circuits/4125384-practica-11-encender-varios-led-a-una-secuencia-especifica-semaforo/

2.5 Conclusión:

En esta práctica se ha introducido un suiche mediante botón pulsador que sirve para activar o desactivar parte del código en Arduino o comportamiento del circuito También se ha desarrollado un código que permite encender y apagar una secuencia de LEDS lo que permitió simular el funcionamiento del semáforo. Uno de los inconvenientes encontrados es que para apagar el circuito es necesario presionar el botón pulsador luego de que el LED rojo se apague. Esto debido a que la opción delay no permite simultáneamente registrar el estado del botón. Esto se solucionará en una nueva práctica donde  el encendido y apagado del LED se realice sin la opción delay.

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInPin on PinterestPrint this page