Pesquisar este blog

domingo, 21 de novembro de 2010

Intelligent Traffic Light

Olás pessoas, há uma 1 mês a trás o meu professor de mecatrônica passou alguns trabalhos bimestrais, e um deles é de um semáforo inteligente.

O que esse semáforo faz ?
Com o auxilio dos sensores infra-vermelho,  que eu fiz(uallll heim), é possível realizar a contagem, e calcular o tempo, para deixar o "sinal verde" para o lado que tem mais veículos, por mais tempo.

Nesse projeto tive que utilizar de interrupções externas. Mas para que isso ?
A todo instante o uC, deve ficar monitorando os sensores, para realizar a contagem dos veículos, porém ele deve ficar mudando as luzes do semáforo, isso tudo ao mesmo tempo. Com auxilio das interrupções é possível fazer isso de forma eficaz, de modo que habilitado as interrupções do uC, e a cada interrupção incrementamos a variável responsável por contar a quantidade de veículos de cada semáforo.


Sensores:

Como estou trabalhando com protótipo, a utilização de sensores infra vermelhos foi bastante viável por ser um sensor muito barato. No entanto em um ambiente real esse método seria inviável, mas se trocássemos por algum tipo de sensor de massa  combinado com sensores de metal (indutivo) o problema está resolvido.

Diagrama infra receptor:


Alteração do tempo:

Em primeira instância o tempo do vermelho e verde de ambos os semáforos são iguais. A cada ciclo do semáforo, verificado se esse tempo ira mudar ou não.


veja abaixo algumas fotos:







Apenas uma pequena demonstração:

3 comentários:

  1. olá Dene, estou tentando fazer um semáforo parecido com o seu, mas estou querenbdo reduzi o tempo de vermelho da via secundária utilizando um botão como sensor. caso o botão fique pressionado por mais de 3 seg o sinal da secundária abre. Estou tendo problemas para fazer as interrupções. vc tem alguma dica? Poderia disponibilizar seu código?

    ResponderExcluir
    Respostas
    1. Olá, obrigado pelo contato e desculpe pela demora...
      Abaixo o código fonte de como utilizar interrupções e mais abaixo um link do fonte do projeto...
      #######################################################

      int pin = 13;
      volatile int state = LOW;
      int cont = 0;

      void setup()
      {
      pinMode(pin, OUTPUT);
      attachInterrupt(0, blink,RISING); // dê uma olhadaa aqui caso tenha alguma dúvida http://arduino.cc/en/Reference/AttachInterrupt
      Serial.begin(9600);
      }

      void loop()
      {
      Serial.print(millis()/1000);
      Serial.print(" - ");
      Serial.println(cont);
      delay(1000);
      }

      void blink()
      {
      state = !state;
      cont++;
      unsigned long int x = 0;
      while(x<4294967295){
      x++;
      }

      }




      #######################################################

      http://www.4shared.com/zip/9SZ6-jy2/semaforo.html


      Caso ainda tenha alguma dúvida me fale

      abraços

      Excluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir