Está en la página 1de 8

Práctica 11 Encender varios LED a una

secuencia específica (Semáforo)


Posted on 27 Febrero, 2017 by Editor

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.

Nueva práctica sobre encender una serie de LEDs tipo estrella fugaz,
ver Práctica 13.

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

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 const, ademá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 voidloop (), 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ónHIGH. 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/

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:

Temporizador opcional

/* Encender varios led difentes tiempos


El primer led encendera entre 1 y 10 segundos despues de iniciado el programa
El segundo encendera a los 2 segundos y finalizara a los 5s
El tercer led encendera a los 10s y finalizara a los 21s
El cuarto encendera a los 0,5s de iniciado el Sketch y apagara a los 8s
El quinto y ultimo led iniciara a los 0,5s y se apagara a los 25 s
cuando el quito led se apague toda la rutina comienza a repetirse.
*/

unsigned long tiempo;

int leds[5]= {2,3,4,5,6};


int pin_boton= 7; // Pin para el boton
boolean activa = false; //Variable de control de encendido

void setup(){
for(int i =0; i<5;i++){ //Configura salida de leds en pines 2, 3,4,5 y 6
como salida
pinMode(leds[i],OUTPUT);
}
pinMode(pin_boton,INPUT);
tiempo= millis();
digitalWrite(pin_boton,HIGH);
}
void loop(){
if (digitalRead(pin_boton) == LOW){ //Revisa que has presioando el boton
delay(50);
if (digitalRead(pin_boton) == LOW) { // Espera 50 milisegundos para
evitar antirrebotes.
while(pin_boton == LOW){} //Espera que sueltes el boton
if(activa==true){Activa = false;} //Si esta activo se apaga
if(activa==false){Activa = true;} // Sie sta apagado se activa
}
}
if(activa == true){ //Si esta activo llama a la fucion encender_leds();
encender_leds();
}
}

void encender_leds(){
if(millis()-tiempo>1000 && millis()-tiempo < 10000){
digitalWrite(leds[0],HIGH);
}else
if (millis()-tiempo > 10000){
digitalWrite(leds[0],LOW);
} //primer
if(millis()-tiempo>2000 && millis()-tiempo < 50000){
digitalWrite(leds[1],HIGH);
}else
if (millis()-tiempo > 5000){
digitalWrite(leds[1],LOW);
} //Segundo
if(millis()-tiempo>10000 && millis()-tiempo < 21000){
digitalWrite(leds[2],HIGH);
}else
if (millis()-tiempo > 21000){
digitalWrite(leds[2],LOW);
} //tercer
if(millis()-tiempo>500 && millis()-tiempo < 8000){
digitalWrite(leds[3],HIGH);
}else
if (millis()-tiempo > 8000){
digitalWrite(leds[3],LOW);
} //cuarto
if(millis()-tiempo>500 && millis()-tiempo < 25000){
digitalWrite(leds[4],HIGH);
}else
if (millis()-tiempo > 25000){
digitalWrite(leds[4],LOW);
tiempo= millis();
} //quinto
}

También podría gustarte