sexta-feira, 15 de março de 2013

1º projeto: Semáforo interativo com display de 7 segmentos.


     O primeiro projeto que apresento é o velho mas também importante semáforo interativo, onde temos as luzes para o tráfego dos automóveis e as luzes para a travessia dos pedestres. Mas, nesse projeto adicionei algo á mais: um display de 7 segmentos, cujo faz a contagem regressiva de 5 até 0, cronometrando o tempo de travessia do pedestre.

     DICA: Para realizar esse projeto baseie no exemplo nº 4 do livro Arduino Básico, ed. NOVATEC (recomendo).

    Materiais:

                  - Arduino
                  - Protoboard
                  - Fios Jumpers
                  - 2 LED's vermelhos, 2 LED's verdes e 1 LED amarelo
                  - 5 resistores 220 ohms
                  - Push Button
                  - Display de 7 segmentos (Anôdo comum)

    Esquema:




    Código:

int redCar = 12;  //pino luz vermelho
int yellowCar = 11;  //pino luz amarelo
int greenCar = 10;
int redPed = 7;  //pino luz vermelho pedestre
int greenPed = 8;  //pino luz verde pedestre

int button = 2;  //push button

int displayA = 3;  //seguencia de leds do display e seus respecitvos pinos
int displayB = 4;
int displayC = 5;
int displayD = 1;
int displayE = 6;
int displayF = 9;
int displayG = 13;

void setup(){ 
pinMode(redCar, OUTPUT);  //pino saída
pinMode(yellowCar, OUTPUT);  //pino saída
pinMode(greenCar, OUTPUT);  //pino saída
pinMode(redPed, OUTPUT);  //pino saída
pinMode(greenPed, OUTPUT);  //pino saída

pinMode(button, INPUT);  //botão do pino 2  entrada

digitalWrite(greenCar, HIGH); //acende verde  para carros
digitalWrite(redPed, HIGH);
   
pinMode(3, OUTPUT);  //pinos dos display como saída
pinMode(4, OUTPUT); 
pinMode(5, OUTPUT); 
pinMode(1, OUTPUT); 
pinMode(6, OUTPUT); 
pinMode(9, OUTPUT); 
pinMode(13, OUTPUT);
}

void loop(){ 
int state = digitalRead(button);  /* verifica se o botão foi pressionado e se transcorreram 5 segundos desde a última vez que isso ocorreu*/
 
if(state == HIGH){    //Chama a funçao para alterar as luzes
trocaLed(); 
    }
}

void trocaLed(){ 
digitalWrite(greenCar, LOW);  //Apaga o verde 
digitalWrite(yellowCar, HIGH);  //acende o amarelo 
delay(2000);  //espera dois segundos 
 
digitalWrite(yellowCar, LOW);  //Apaga o amarelo 
digitalWrite(redCar, HIGH);  //Acende o vermelho 
delay(2000);  //Espera 2 segundos 
 
digitalWrite(redPed, LOW);  //Apaga o vermelho dos pedestres 
digitalWrite(greenPed, HIGH);  //cende o verde dos pedestres 
 
//espera por um intervalo de tempo predefinido 
 
digitalWrite(displayA, LOW);  //Seqüência do numero 5 
digitalWrite(displayB, LOW); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, HIGH); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG, LOW); 
delay(1000); 
 
digitalWrite(displayA, LOW);  //Seqüência do numero 4 
digitalWrite(displayB, LOW); 
digitalWrite(displayC, HIGH); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, HIGH); 
digitalWrite(displayG, LOW); 
delay(1000);
 
digitalWrite(displayA, LOW);  //Seqüência do numero 3 
digitalWrite(displayB, HIGH); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG,LOW); 
delay(1000);
   
digitalWrite(displayA, LOW);  //Seqüência do numero 2 
digitalWrite(displayB, HIGH); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, LOW); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG, HIGH); 
delay(1000);

digitalWrite(displayA, HIGH);  //Seqüência do numero 1 
digitalWrite(displayB, HIGH); 
digitalWrite(displayC, HIGH); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, HIGH); 
digitalWrite(displayF, HIGH); 
digitalWrite(displayG, LOW); 
delay(1000); 
 
digitalWrite(displayA, HIGH);  //Seqüência do numero 0 
digitalWrite(displayB, LOW); 
digitalWrite(displayC, LOW); 
digitalWrite(displayD, LOW); 
digitalWrite(displayE, LOW); 
digitalWrite(displayF, LOW); 
digitalWrite(displayG, LOW); 
delay(1000);

//pisca o verde para os pedetres 
for(int x=0; x<3; x++){   
digitalWrite(greenPed, HIGH);   
delay(250);   
digitalWrite(greenPed, LOW);   
delay(250); 


//Acende o vermelho dos pedretres 
digitalWrite(redPed, HIGH); 
delay(500); 
digitalWrite(yellowCar, HIGH); 
digitalWrite(redCar, LOW); 
delay(1000); 
digitalWrite(greenCar, HIGH); 
digitalWrite(yellowCar, LOW);
  //Registra o tempo desde a ultima alteração no semaforo
  }
 
    Vídeo:



    Ao fazer o upload do arquivo os led's verde para carros e vermelhos para pedestres deverão está aceso, ao pressionar  o botão o led vermelho para carro apaga e o amarelo se acenderá logo depois o verde de pedestre também se acenderá e o led vermelho se apagará começando a contagem do tempo no display, em seguido ao término da contagem o led verde de pedestre piscará 3 vezes e voltará ao estado inicial do programa.

    Comentário: Esse projeto é muito interessante pois já requer um certo nível de conhecimento de programação somado com eletrônica básica.

    Aperfeiçoamento: - Reduzir código;

Agradeço a atenção de todos e fico aberto a sugestões 

5 comentários:

  1. sera possivel juntar este projecto do display com um piezo na passagem dos peoes?

    ResponderExcluir
    Respostas
    1. Você está perguntando se ao passar os números do display de 7 segmentos acionar um piezo? Se for isso e possível sim!!!

      Excluir
    2. Então você me poderia ajudar no meu projet-o?

      Excluir
    3. Ok Zz Mikel, te ajudo sim. Vc ja recriou esse tutorial?

      Excluir
  2. como e feito a programação de um semáforo simples com a contagem de um display?

    ResponderExcluir