Icono del sitio MECABOT

Práctica 20. Semáforo con contador de cuenta regresiva

20.1  Objetivo General:

Cambiar la luz de un semáforo de verde a rojo para permitir el paso peatonal. Se utiliza una subrutina para contar el tiempo que el semáforo debe estar en luz roja.
Mostrar un conteo regresivo utilizando un visualizador de 7 segmentos

20.2  Materiales y Métodos:

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

20.3 Montaje de la práctica:

Antes de comenzar el montaje del circuito, se proyecta su montaje en el programa Fritzing. Recuerde que para instalar los LED se debe conocer cuall es el cátodo y ánodo de los LED (práctica 1). 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 1. Montaje del circuito en el programa Fritzing

Se observa en la Figura 2 que se usa una placa Arduino Uno y un protoboard para instalar los LEDs, resistencia, botón y cables. 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  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.

Luego que proyectar el circuito en el programa Fritzing se procede desarrollarlo en el protoboard. Luego, se comienza con a programar en el IDE de Arduino.

Para el contador de siete segmentos se procede a proyectar su montaje en el programa Fritzing. Recuerde que para instalar los LED se debe conocer cual es el cátodo y ánodo de los LED (práctica 1). 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 para un visualizador de 7 LEDs. (práctica 19)

Note que en la práctica se emplea un visualizador que consiste en un circuito constituido por 7 LEDs. El número a visualizar se consigue encendiendo y apagando cada LEDs. Por ejemplo, el número 8 se muestra cuando los 7 LEDs están encendidos.

El circuito de la figura 2 corresponde con el circuito donde el cátodo es común. Un GND (-) común para los 4 LEDs superiores y un GND (-) común para los 3 LEDs inferiores. Aunque la señal enviada por la tarjeta arduino es baja y puede conectarse directamente a los LEDs, es recomendable incluir una resistencia eléctrica tal y como se muestra en la figura

Para encender los segmentos, lo que se debe hacer es enviar la señal digital desde la tarjeta arduino al pin ánodo del LED. La tabla 1 resume la secuencia de LEDs que debe encenderse, para el visualizador de cátodo común, para mostrar uno de los números de 0 a 9. La tabla indica la variable que hay que activar la cual toma el nombre de la usada en el código. Por ejemplo, led2 es la variable constante y entera usada para activar el LED horizontal superior.

Tabla 1 Secuencia de LEDs para visualizar número

Númeroled2led3led4led5led6led7led8
01111110
10110000
21101101
31111001
40110011
51011011
61011111
71110000
81111111
91111011

20.4 Codificación de la práctica

20.4.1 IDE de Arduino para la práctica:

– Se selecciona la tarjeta Arduino que se está utilizando.

– 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:

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

20.4.2 Codificación del contador regresivo

Primero vamos a crear la subrutina funcNum(int x) que dado el número requerido (x entero) enciende la  secuencia de LEDs indicada en la tabla 1.

A continuación se presenta el algoritmo y como queda plasmado en el IDE de Arduino de los procedimientos anteriormente explicados:

Codificación de semáforo con contador

//Semáforo
//declarando parametros
int led_verde= 13;
int led_amarillo= 12;
int led_rojo= 11;
const int BOTON=7; // pin de entrada botón
int state = 0; // estado del boton
void setup() {
// se indica que cada pin es de salidad OUTPUT.
pinMode(led_verde, OUTPUT);
pinMode(led_amarillo, OUTPUT);
pinMode(led_rojo, OUTPUT);
// se apagan todos los LEDs
digitalWrite(led_verde,LOW);
digitalWrite(led_amarillo,LOW);
digitalWrite(led_rojo,LOW);
// se indica que el pin 7 es de entrada INPUT
pinMode(BOTON,INPUT);
// pines 2-5 y 8-10 encienden leds del visualizador de segmentos
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
}
// lazo a ejecutar continuamente una vez cargado el código en el arduino
void loop(){
digitalWrite(led_verde,HIGH); // encender LED verde
//pedestriaBoton();  // se llama a una subrutina 
delay(5000);
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

,for(int i=9;i>-1; i--){
	funcNum(i);
	delay(1000);
} 
digitalWrite(led_rojo,LOW);
}



void funcNum(int x){
  switch (x){
    case 0://when count value is zero show”0” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(2, LOW);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
    break;
   case 1:// when count value is 1 show”1” on disp
      digitalWrite(8,HIGH);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
    break;
    case 2:// when count value is 2 show”2” on disp
      digitalWrite(8, LOW);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
    break;
    case 3:// when count value is 3 show”3” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
    break;
    case 4:// when count value is 4 show”4” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
     digitalWrite(5, HIGH);
    break;
    case 5:// when count value is 5 show”5” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH;
      digitalWrite(10, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
    break;
    case 6:// when count value is 5 show”5” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
    break;
  	case 7:// when count value is 5 show”5” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, LOW);
      digitalWrite(10, LOW);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
    break;
      case 8:// when count value is 8 show”8” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, HIGH);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
    break;
     break;
      case 9:// when count value is 8 show”8” on disp
      digitalWrite(8, HIGH);
      digitalWrite(9, HIGH);
      digitalWrite(10, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
    break;
 break;
   
}
}

Implementación del algoritmo en TinkerCAD:

https://www.tinkercad.com/things/kEmDMn6jujV

20.5 Conclusión:

En esta práctica hemos trabajado de forma integral las prácticas 18 y 19 respectivamente. Hemos utilizado las subrutinas para indicarle al circuito el momento que debe hacer el cambio de la luz verde a roja. El circuito junto con el código desarrollado permitió simular el comportamiento de un semáforo cuando es accionado por un botón peatonal. Hemos utilizado el lazo for para visualizar el conteo regresivo de 9 a 0. Se puede visualizar de manera más dinámica la realización de la práctica a través del enlace de TinkerCAD suministrado arriba.

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

Salir de la versión móvil