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.
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.
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.
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);
}