SOBRE

LightBlog
Responsive Ads Here

domingo, 19 de maio de 2013

#7 Simulando Semáforo no Arduino com Iteração do Pedestre

Neste post você irá aprender a simular um semáforo utilizando Arduino. O vídeo abaixo mostra como o experimento deve funcionar no final.

A imagem abaixo lista os componentes necessários para a realização deste experimento. 

O semáforo deverá funcionar da seguinte forma:  
Ficar em sinal verde para carro e sinal vermelho para pedestres. Ao pressionar o botão, como se houvesse um pedestre requisitando a passagem, o semáforo de carros muda para amarelo durante 4 segundos. Após o tempo, o sinal dos veículos fica vermelho e o de pedestres verde. Passados mais 7 segundos o sinal de pedestres volta ao vermelho e o de carros volta ao verde.
 A imagem abaixo mostra como os componentes devem ser ligados na protoboard. É importante que os componentes sejam ligados no Arduino quando ele estiver desligado para  não correr risco de danificar a placa.

Clique na imagem para ampliar!

Após ligado os componentes conforme a imagem acima é preciso programar. Ligue o Arduino no computador, abra a interface de desenvolvimento (IDE) e cole o código abaixo. As "//" no código significam comentário, ou seja, o que for escrito após as "//" na mesma linha a IDE do Arduino não considera como código. Após colocar o código, pressione  no menu superior e teste veja o semáforo funcionar.

 /*  
  SEMÁFORO COM ITERAÇÃO DO PEDESTRE  
 */  
 #define vermelhoCarro 1 //LED Vermelho Semáforo Carro  
 #define amareloCarro 2 //LED Amarelo Semáforo Carro  
 #define verdeCarro 3 //LED Verde Semáforo Carro  
 #define vermelhoPedestre 6 //LED Vermelho Semáforo Pedestre  
 #define verdePedestre 7 //LED Verde Semáforo Pedestre  
 #define bt 9 //Botao  
 int flag = 0;  
 void abreSinal();  
 void fechaSinal();  
 void abreSinalPedestre();  
 void setup(){  
  pinMode(vermelhoCarro, OUTPUT);  
  pinMode(amareloCarro, OUTPUT);  
  pinMode(verdeCarro, OUTPUT);  
  pinMode(vermelhoPedestre, OUTPUT);  
  pinMode(verdePedestre, OUTPUT);  
  digitalWrite(vermelhoPedestre, HIGH);  
  abreSinal();  
 }  
 void loop(){  
  flag = digitalRead(bt);  
  switch(flag){  
   case(0): //Botao solto  
    abreSinal();  
    break;  
   case(1): //Botão pressionado  
    fechaSinal();  
    abreSinalPedestre();  
    abreSinal();  
    break;  
  }  
 }  
 void abreSinal()  
 {  
  flag = 0;  
  digitalWrite(vermelhoCarro, LOW);  
  digitalWrite(verdeCarro, HIGH);  
  flag = digitalRead(bt);  
  while(flag = 0){  
   flag = digitalRead(bt); //Espera até que o botao seja pressionado  
  }   
 }  
 void fechaSinal()  
 {  
  digitalWrite(verdeCarro, LOW);  
  digitalWrite(amareloCarro, HIGH);  
  delay(4000);  
  digitalWrite(amareloCarro, LOW);  
  digitalWrite(vermelhoCarro, HIGH);  
 }  
 void abreSinalPedestre()  
 {  
  int i;  
  digitalWrite(vermelhoPedestre, LOW);  
  digitalWrite(verdePedestre, HIGH);  
  delay(7000);  
  digitalWrite(verdePedestre, LOW);  
  for(i = 0; i < 50;i++){  
   digitalWrite(vermelhoPedestre, HIGH);  
   delay(30);  
   digitalWrite(vermelhoPedestre, LOW);  
  }  
  digitalWrite(vermelhoPedestre, HIGH);  
 }