Semáforo Arduino con Pulsador

Proyecto PAR2

Arduino Nivel Básico

Material Necesario

Componente Cantidad Descripción Comprar
Arduino UNO1 udPlaca Arduino Uno REV 3
Protoboard1 udPlaca de Prototipado
Led Rojo1 ud
Led Amarillo1 ud
Led Verde1 ud
Resistencia 220 Ω 3 uds
Resistencia 10 k Ω 1 ud
Pulsador1 ud
Cables Prototipado13 uds

En este Proyecto, vamos a realizar un Sencillo Semáforo con una placa Arduino, un un led rojo, un led amarillo y un led verde que irán encendiéndose de forma secuencial conforme presionemos un Pulsador.

Puedes encontrar información complementaria sobre los componentes que vamos a utilizar en este Proyecto de Nivel Básico en la Sección Formacion o haciendo click directamente en los siguientes enlaces.

Lo primero que debemos realizar es el montaje que se detalla en el siguiente esquema (recuerda que puedes pinchar sobre cualquier imagen para ampliarla).

Figura PAR2.1. Esquema Principal del Proyecto

Es un montaje sencillo y solo cabe destacar

  • Resistencias de los Led serán de 220 Ω .
  • Resistencia del Pulsador debe ser de 10k Ω .
  • La Resistencia del Pulsador la hemos montado tipo Pull-Down (de esta forma obtenemos HIGH cuando presionamos el Pulsador).
  • Las resistencias no tienen polaridad, luego da igual el sentido de su colocación pero en el caso de los Leds si es importante tener en cuenta la misma.
  • El pulsador debe tener en la parte de abajo / arriba las dos patillas que sobresalen por el mismo lado.

El Código Fuente del Proyecto, que debemos teclear en el IDE de Arduino es el siguiente

// -------------------------------------------------------------
//  Proyecto:   PB2 - Semáforo Arduino con Pulsador
//  Autor:      LabRob (Jose Delgado)
//  Fecha:      Octubre 2019
//  Explicacion:
//              Enceder secuencialmente un led rojo, led
//              amarillo y led verde conforme presionemos
//              un pulsador.              
// -------------------------------------------------------------

// ================================================
// Declaraciones, Constantes, Variables ...
// ================================================
const int led_rojo_PIN = 9;       // Asignamos a la constante led_rojo_PIN el valor 9
const int led_amarillo_PIN = 10;  // Asignamos a la constante led_amarillo_PIN el valor 10
const int led_verde_PIN = 11;     // Asignamos a la constante led_verde_PIN el valor 11

const int pulsador_PIN = 2;       // Asignamos a la constante pulsador_PIN el valor 4

int led_encendido = 0;            // 0 Led Encendido --> Ninguno
                                  // 1 Led Encendido --> Rojo
                                  // 2 Led Encendido --> Amarillo
                                  // 3 Led Encendido --> Verde

// ================================================
// Modulo Inicializacion y Configuracion
// ================================================
void setup()
{
  pinMode(led_rojo_PIN , OUTPUT);     // Definimos el PIN del Led Rojo como SALIDA
  pinMode(led_amarillo_PIN , OUTPUT); // Definimos el PIN del Led Amarillo como SALIDA
  pinMode(led_verde_PIN , OUTPUT);    // Definimos el PIN del Led Verde como SALIDA

  digitalWrite(led_rojo_PIN, LOW);    // Inicialmente apagamos todos los leds
  digitalWrite(led_amarillo_PIN, LOW);
  digitalWrite(led_verde_PIN, LOW);
  
  pinMode(pulsador_PIN, INPUT);       // Definimos el PIN del Pulsador como ENTRADA
}

// ================================================
// Bucle Programa
// ================================================                 
void loop()
{
  while (digitalRead(pulsador_PIN) == LOW);  // No hacemos nada mientras no se presiona el Pulsador
  
  // Hemos llegado aqui porque se ha presionado el Pulsador
  // Asignamos el Led que le toca encenderse de forma secuencial y cíclica
  // Si el Led encendido es el Verde (3) pasamos a encender el Rojo (1)
  if (led_encendido == 3){
    led_encendido = 1;
  }
  else{
    led_encendido = led_encendido + 1;
  }

  // Encendemos el Led Rojo y apagamos el Amarillo y el Verde
  if (led_encendido == 1) {
    digitalWrite(led_rojo_PIN, HIGH);  
    digitalWrite(led_amarillo_PIN, LOW);
    digitalWrite(led_verde_PIN, LOW);   
  }

  // Encendemos el Led Amarillo y apagamos el Rojo y el Verde
  if (led_encendido == 2) {
    digitalWrite(led_rojo_PIN, LOW);   
    digitalWrite(led_amarillo_PIN, HIGH);
    digitalWrite(led_verde_PIN, LOW);  
  }

  // Encendemos el Led Verde y apagamos el Rojo y el Amarillo
  if (led_encendido == 3) {
    digitalWrite(led_rojo_PIN, LOW);   
    digitalWrite(led_amarillo_PIN, LOW);
    digitalWrite(led_verde_PIN, HIGH);  
  }
  
  while (digitalRead(pulsador_PIN) == HIGH);   // Si el Pulsador sigue presionado no continuamos
                                               // Cuando el Pulsador no está presionado seguimos con el Bucle Pincipal
}

Sobre el código anterior y aunque todo su contenido está comentado en el propio programa, vamos a resaltar

  • En la Sección Declaraciones, Constantes y Variables definimos los Pines de la placa Arduino que vamos a utilizar para cada componente del Proyecto (los tres Leds y el Pulsador).
  • Además declaramos una variable led_encendido que va a ir tomando valores 0,1,2,3 dependiendo del Led que vamos a encender (ninguno, rojo, amarillo y verde).
  • En la Sección Inicialización y Configuración definimos los Pines de los Leds como pines de Salida (OUTPUT) y el Pin del Pulsador como Entrada (INPUT).
  • También, apagamos inicialmente todos los Leds escribiendo en sus pines el valor LOW. Aunque esta asignación no sería estrictamente necesaria, pues en condiciones normales estarán apagados inicialmente, desde el punto de vista de pureza en la programación si debemos realizar esta asignación para evitar posibles situaciones anómalas.
  • En la Sección Bucle Principal vamos a explicar el comportamiento de los While:
    • El While de la línea 46 se es un bucle que espera la presión del Pulsador para poder seguir con el Bucle Principal.
    • El While de la línea 79 tiene la misión de eliminar pulsaciones continuadas muy rápidas que no son esperadas del Pulsador. Lo que vendría a ser un eco no deseado de una pulsación. Cuando el Pulsador «realmente» no está presionado se continua con el Bucle Principal.

Después de introducir el código fuente en el IDE, recuerda que la placa Arduino debes tenerla conectada al ordenador, revisa la configuración correcta del puerto donde está conectada y pulsa el botón para subir el código a la misma

Ahora ya puedes probar el Proyecto y su funcionamiento presionando el Pulsador para ir encendiendo los Leds en forma de semáforo (rojo, amarillo y verde) …

Para finalizar algunas Imágenes del Proyecto

Figura PAR2.2 Imágenes del Montaje del Proyecto

Espero hayas aprendido y disfrutado con este Proyecto.

Si tienes dudas o quieres hacer cualquier aportación que consideres de interés, puedes realizar todos tus comentarios a continuación.

Compártelo en tus Redes Sociales

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies