ARDUINO SIMULACIÓN 7 Semáforo con contador de cuenta regresiva

 



 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

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.

Montaje de la práctica:

Antes de comenzar el montaje del circuito, se proyecta su montaje en el programa Fritzing. 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:


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:

  • 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. Los pines 8, 12 y 13 se usaran para alimentar los LEDs. Por lo que se declaran 3 parámetros que serán constantes del tipo entero led_verde, led_rojo y led_amarillo.   También se declara que el botón estará en el pin 7. Se usará una variable del tipo entero val igual a para tener guardado el estado del botón.
    • En el lazo void setup () se inicializan las variables. La primera acción del código será ejecutar la subrutina pedestriaBoton(). Note que las subrutinas son pedazos de código aparte que se usan para desarrollar una parte del código. Las subrutinas permiten reducir el tamaño del código ya que si una misma acción se repite constantemente esta puede codificarse mediante subrutinas. Para mas información sobre subrutinas ver la definición en wikipedia.
    • La subrutina pedestriaBoton() tiene la función de verificar si el botón fue pulsado el código debe esperar 500 por cada lazo indicado en el comando for. Por ejemplo,  i=i=1;i<21; indica que el lazo se ejecuta 20 veces, si el boton está apagado seria 20 x 500 milisegundos = 10 segundos. Esto indica que si se oprime el botón, en 10 segundos saldrá de la subrutina. 
    • Si el botón se pulsa, en 10 segundos el código sigue y se encuentra con que debe apagar el LED verde, luego encender el amarillo por 1 segundo delay(1000).  Finalmente enciende el LED rojo para que el peaton pueda cruzar.
  • En el código, el LED rojo se enciende por 5 segundos y luego se apaga. Una vez que se apaga el LED rojo, nuevamente se vuelve a encender el LED verde para que los vehículos continuen su transito por la via.
  • Si el botón no se activa if (state==0) , la luz roja esperará 20 x 1000 milisegundos = 20 segundos en cambiar al verde. Se puede jugar con el delay de 1000 milisegundos para prolongar por mas tiempo la luz roja y que esta se active solo en el caso de que el peatón oprima el botón.
  • 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 (;).

    Codificación del contador regresivo COPIA ESTO DIRECTAMENTE EN EL CÓDIGO PARA QUE FUNCIONE

    // 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;

       

    }

    }


Comentarios

Entradas populares de este blog

SCRATCH PRÁCTICA 4

SCRATCH PRÁCTICA 3

ARDUINO SIMULACIÓN1