Simulación de Semáforo con Arduino y Display de 7 Segmentos

Simulación de Semáforo con Arduino y Display de 7 Segmentos

Este ejercicio práctico tiene como objetivo simular la secuencia de luces de un semáforo utilizando Arduino y un display de 7 segmentos para mostrar una cuenta regresiva. Permite practicar el uso de salidas digitales y retardos (delay).

Secuencia semáforo:

  • LED Verde debe encender durante 5 segundos y luego se apaga.
  • LEDamarillo enciende durante 2 segundos y luego se apaga.
  • LED Rojo enciende durante 5 segundos y luego se apaga.

Requisitos del Conteo:

  • El conteo debe reflejarse en el display de 7 segmentos, teniendo en cuenta los tiempos de activación de los LEDs.
  • Por ejemplo, cuando el LED rojo se encienda, el display debe mostrar una cuenta regresiva de 5 a 0 durante los 5 segundos que permanece encendido.
  • Esta misma metodología se aplicará para los LEDs verde y amarillo.

Objetivo:

Diseñar y simular la secuencia del semáforo utilizando Arduino, mostrando la cuenta regresiva correspondiente en el display de 7 segmentos.

Código de ejemplo 1:


const int led_rojo = 13;
const int led_amarillo = 12;
const int led_verde = 11;

const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;

void setup()
{
  pinMode(led_rojo, OUTPUT);
  pinMode(led_amarillo, OUTPUT);
  pinMode(led_verde, OUTPUT);
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
}

void loop()
{
  //código semaforo
  digitalWrite(led_rojo, HIGH);
  /*Número 5*/
  digitalWrite(A, 0);
  digitalWrite(B, 1);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 1);
  digitalWrite(F, 0);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin5*/
  /*Número 4*/
  digitalWrite(A, 1);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 1);
  digitalWrite(E, 1);
  digitalWrite(F, 0);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin4*/
  /*Número 3*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 1);
  digitalWrite(F, 1);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin3*/
  /*Número 2*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 1);
  digitalWrite(D, 0);
  digitalWrite(E, 0);
  digitalWrite(F, 1);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin2*/
  /*Número 1*/
  digitalWrite(A, 1);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 1);
  digitalWrite(E, 1);
  digitalWrite(F, 1);
  digitalWrite(G, 1);
  delay(1000);
  /*Fin1*/
  /*Número 0*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 0);
  digitalWrite(F, 0);
  digitalWrite(G, 1);
  delay(600);
  /*Fin 0*/
  digitalWrite(led_rojo, LOW);
  digitalWrite(led_amarillo, HIGH);
  /*Número 2*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 1);
  digitalWrite(D, 0);
  digitalWrite(E, 0);
  digitalWrite(F, 1);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin2*/
  /*Número 1*/
  digitalWrite(A, 1);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 1);
  digitalWrite(E, 1);
  digitalWrite(F, 1);
  digitalWrite(G, 1);
  delay(1000);
  /*Fin1*/
  /*Número 0*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 0);
  digitalWrite(F, 0);
  digitalWrite(G, 1);
  delay(600);
  /*Fin 0*/
  digitalWrite(led_amarillo, LOW);
  digitalWrite(led_verde, HIGH);
   /*Número 5*/
  digitalWrite(A, 0);
  digitalWrite(B, 1);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 1);
  digitalWrite(F, 0);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin5*/
  /*Número 4*/
  digitalWrite(A, 1);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 1);
  digitalWrite(E, 1);
  digitalWrite(F, 0);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin4*/
  /*Número 3*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 1);
  digitalWrite(F, 1);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin3*/
  /*Número 2*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 1);
  digitalWrite(D, 0);
  digitalWrite(E, 0);
  digitalWrite(F, 1);
  digitalWrite(G, 0);
  delay(1000);
  /*Fin2*/
  /*Número 1*/
  digitalWrite(A, 1);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 1);
  digitalWrite(E, 1);
  digitalWrite(F, 1);
  digitalWrite(G, 1);
  delay(1000);
  /*Fin1*/
  /*Número 0*/
  digitalWrite(A, 0);
  digitalWrite(B, 0);
  digitalWrite(C, 0);
  digitalWrite(D, 0);
  digitalWrite(E, 0);
  digitalWrite(F, 0);
  digitalWrite(G, 1);
  delay(600);
  /*Fin 0*/
  digitalWrite(led_verde,LOW);
}

El código anterior enciende simultáneamente el LED durante 5 segundos e inicia una cuenta regresiva de 5 a 0, que se muestra en el display de 7 segmentos. Esta secuencia se aplica de la misma manera para los LEDs amarillo y verde.

Código de ejemplo 2:

// Definir pines para los LEDs
const int ledVerde = 2;
const int ledAmarillo = 3;
const int ledRojo = 4;

// Definir pines para el display de 7 segmentos
const int a = 5;
const int b = 6;
const int c = 7;
const int d = 8;
const int e = 9;
const int f = 10;
const int g = 11;

// Array para los números del display de 7 segmentos
int numeros[10][7] = {
  {1, 1, 1, 1, 1, 1, 0}, // 0
  {0, 1, 1, 0, 0, 0, 0}, // 1
  {1, 1, 0, 1, 1, 0, 1}, // 2
  {1, 1, 1, 1, 0, 0, 1}, // 3
  {0, 1, 1, 0, 0, 1, 1}, // 4
  {1, 0, 1, 1, 0, 1, 1}, // 5
  {1, 0, 1, 1, 1, 1, 1}, // 6
  {1, 1, 1, 0, 0, 0, 0}, // 7
  {1, 1, 1, 1, 1, 1, 1}, // 8
  {1, 1, 1, 0, 0, 1, 1}  // 9
};

void setup() {
  // Configurar pines de los LEDs como salidas
  pinMode(ledVerde, OUTPUT);
  pinMode(ledAmarillo, OUTPUT);
  pinMode(ledRojo, OUTPUT);

  // Configurar pines del display de 7 segmentos como salidas
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);
}

void loop() {
  // Secuencia del semáforo
  encenderLED(ledVerde, 5);
  encenderLED(ledAmarillo, 2);
  encenderLED(ledRojo, 5);
}

void encenderLED(int led, int duracion) {
  for (int i = duracion; i >= 0; i--) {
    digitalWrite(led, HIGH);
    mostrarNumero(i);
    delay(1000);
  }
  digitalWrite(led, LOW);
}

void mostrarNumero(int num) {
  digitalWrite(a, numeros[num][0]);
  digitalWrite(b, numeros[num][1]);
  digitalWrite(c, numeros[num][2]);
  digitalWrite(d, numeros[num][3]);
  digitalWrite(e, numeros[num][4]);
  digitalWrite(f, numeros[num][5]);
  digitalWrite(g, numeros[num][6]);
}

(0) Comentarios

No registra comentarios, se el primero en comentar.
Publicar

Pública tu duda o comentario

Resuelve tus dudas con la comunidad.

*Obligatorio*