Encender y apagar una secuencia de LEDs

11.1  Objetivo General:

Aprender a encender y apagar una secuencia de LEDs específica con Arduino y TinkerCAD, similar a un semáforo y utilizando 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.

NUEVO

Nueva práctica sobre encender una serie de LEDs tipo estrella fugaz, ver Encender una secuencia de varios LEDs (Estrella fugaz)

Si quieres usar un botón peatonal para activar la luz roja del semáforo, te invitamos a ver el post Semáforo con botón peatonal

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.

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

La Figura 2 muestra el uso de Arduino Uno; el mismo procedimiento se aplica con la tarjeta Arduino Uno-R3. El Protoboard facilita la instalación de LEDs, conexiones de circuito con cables, una resistencia eléctrica y un botón pulsador. La línea roja lleva 5V al botón, suministrados por la computadora. Estos 5V llegan al botón y, al cerrarse el circuito, alcanzan el pin 7. Para proteger el circuito y evitar que lleguen más de 5V al pin 7, se agrega una resistencia eléctrica, desviando la mayor parte de la 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.

11.4 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 las variables que son entrada o salida utilizando 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 TinkerCAD:

https://www.tinkercad.com/things/0upf69XNKH2-practica-11-encender-varios-led-a-una-secuencia-especifica/editel?sharecode=ickajoepgWNs42tZuZk9sAcuDnA1LwlWBGl1508nFss=

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

Si nuestro contenido te fue de utilidad, por favor considera dar tu apoyo a lo que hacemos: