Semáforo de Tráfico en Arduino

Crear un semáforo de tráfico en Arduino es muy sencillo, basta con tener la placa Arduino Uno, una protoboard, unos leds, algunos cables y un poco de programación.

Arduino es una plataforma de prototipos electrónica de código abierto (open-source) basada en hardware y software flexibles y fáciles de usar. Está pensado para artistas, diseñadores como hobby y para cualquiera interesado en crear objetos o entornos interactivos.

Simulación de un semáforo

El proyecto consiste en crear un semáforo de tráfico en arduino. El sistema esta compuesto por dos semáforos, uno para el tráfico (verde, amarillo y rojo) y otro para peatones (verde y rojo). El funcionamiento será el siguiente:

  • Pulsar botón del semáforo.
  • Esperar 3 segundos.
  • Pasar el control de vehículos del verde al amarillo en la calle principal.
  • Esperar 3 segundos.
  • Poner el semáforo de vehículos en rojo y el de peatones en verde.
  • Esperar 15 segundos.
  • Poner el semáforo de peatones en verde intermitente.
  • Esperar 3 segundos.
  • Poner el semáforo de peatones en rojo y el principal en verde.

Diseño creado

El diseño puede variar dependiendo los pines de la placa que escojamos. En este caso lo hemos diseñado de la siguiente forma:

diseño semaforo arduino

El diseño se ha creado con la herramienta Fritzing.

Código implementado

El código desarrollado en el IDE de Arduino es el siguiente:

  #define GREEN_TRAFFIC       0       /*State 0*/
  #define YELLOW_TRAFFIC      1       /*State 1*/
  #define RED_TRAFFIC         2       /*State 2*/
  #define GREEN_PEOPLE        3       /*State 3*/
  #define RED_PEOPLE          4       /*State 4*/

  #define BUTTON_PIN          2
  #define RED_PEOPLE_PIN      3
  #define GREEN_PEOPLE_PIN    4
  #define GREEN_TRAFFIC_PIN   5
  #define YELLOW_TRAFFIC_PIN  6
  #define RED_TRAFFIC_PIN     7
  
  #define DELAY               1000    /*MiliSeconds Delay*/
  
  int state=GREEN_TRAFFIC & RED_PEOPLE;
  int start=0;
void setup() {
  // put your setup code here, to run once:
  pinMode(GREEN_TRAFFIC_PIN,OUTPUT);
  pinMode(YELLOW_TRAFFIC_PIN,OUTPUT);
  pinMode(RED_TRAFFIC_PIN,OUTPUT);
  pinMode(GREEN_PEOPLE_PIN,OUTPUT);
  pinMode(RED_PEOPLE_PIN,OUTPUT);
  pinMode(BUTTON_PIN,INPUT);
  
  digitalWrite(GREEN_TRAFFIC_PIN,HIGH);
  digitalWrite(RED_PEOPLE_PIN,HIGH);
}

void intermitent(int pin){
  int i;
  for(i=0;i<3*2;i++){
    digitalWrite(pin,HIGH);
    delay(0.25*DELAY);
    digitalWrite(pin,LOW);
    delay(0.25*DELAY);
  }
  digitalWrite(pin,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(digitalRead(BUTTON_PIN)==HIGH){
    start=1;
    while(start==1){
      switch(state){
         case GREEN_TRAFFIC & RED_PEOPLE:
           delay(3*DELAY);
           digitalWrite(GREEN_TRAFFIC_PIN,LOW);
           state=YELLOW_TRAFFIC;
           break;
         case YELLOW_TRAFFIC:
           digitalWrite(YELLOW_TRAFFIC_PIN,HIGH);
           delay(3*DELAY);
           digitalWrite(YELLOW_TRAFFIC_PIN,LOW);
           digitalWrite(RED_PEOPLE_PIN,LOW);
           state = RED_TRAFFIC & GREEN_PEOPLE;
           break;
         case RED_TRAFFIC & GREEN_PEOPLE:
           digitalWrite(RED_TRAFFIC_PIN,HIGH);
           digitalWrite(GREEN_PEOPLE_PIN,HIGH);
           delay(15*DELAY);
           intermitent(GREEN_PEOPLE_PIN);
           digitalWrite(RED_TRAFFIC_PIN,LOW);
           digitalWrite(GREEN_PEOPLE_PIN,LOW);
           state=GREEN_TRAFFIC & RED_PEOPLE;
           digitalWrite(BUTTON_PIN,LOW);
           digitalWrite(GREEN_TRAFFIC_PIN,HIGH);
           digitalWrite(RED_PEOPLE_PIN,HIGH);
           start=0;
           break;
      }
    }
  }
}

Si te ha parecido muy complicada la implementación o estas empezando en este mundo de la programación puedes hacer mi curso GRATIS de Introducción a la Programación:

curso introducción a la programación

 

Deja un comentario